import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'keyboard/keyboard_layout.dart'; import 'onboarding/permission_flow.dart'; import 'services/scam_service.dart'; import 'theme/finanjo_theme.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); AccessibilityBridge.initialize(); runApp(const PremithiusApp()); } /// A specific entrypoint for the Android IME Service. /// The IME Service will call DartExecutor.DartEntrypoint(..., "keyboardMain") @pragma('vm:entry-point') void keyboardMain() { runApp(const MaterialApp( debugShowCheckedModeBanner: false, home: PremithiusKeyboard(), )); } @pragma('vm:entry-point') void scamMain() { // Headless execution for handling SMS analysis requests WidgetsFlutterBinding.ensureInitialized(); const channel = MethodChannel('in.inmodel.premithus/scam'); // Need to initialize ScamService without UI final scamService = ScamService(); scamService.init(); channel.setMethodCallHandler((call) async { if (call.method == 'analyze') { final String sender = call.arguments['sender'] ?? ''; final String messageBody = call.arguments['messageBody'] ?? ''; final result = await scamService.analyzeSms(sender, messageBody); return { 'isScam': result.isScam, 'category': result.category, 'confidence': result.confidence, 'threatLevel': result.threatLevel, 'triggeredLayer': result.triggeredLayer, 'layerLabel': result.layerLabel, }; } else if (call.method == 'feedback') { final String sender = call.arguments['sender'] ?? ''; final String messageBody = call.arguments['messageBody'] ?? ''; final bool isScam = call.arguments['isScam'] ?? false; await scamService.processFeedback(sender, messageBody, isScam); return null; } return null; }); } class PremithiusApp extends StatelessWidget { const PremithiusApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'Premithius', theme: FinanjoTheme.themeData, // Default to Permission Flow on first launch home: const PermissionFlow(), ); } }