Spaces:
Running
Running
| import 'dart:convert'; | |
| import 'package:flutter/services.dart'; | |
| class SensorAccess { | |
| final String packageName; | |
| final String appName; | |
| final String sensor; | |
| final bool isActive; | |
| SensorAccess({required this.packageName, required this.appName, required this.sensor, required this.isActive}); | |
| factory SensorAccess.fromMap(Map<String, dynamic> map) { | |
| return SensorAccess( | |
| packageName: map['packageName'] ?? '', | |
| appName: map['appName'] ?? '', | |
| sensor: map['sensor'] ?? '', | |
| isActive: map['isActive'] ?? false, | |
| ); | |
| } | |
| } | |
| class AppPermissionStat { | |
| final String packageName; | |
| final String appName; | |
| final Map<String, int> accessCounts; | |
| final bool isSystemApp; | |
| AppPermissionStat({required this.packageName, required this.appName, required this.accessCounts, required this.isSystemApp}); | |
| factory AppPermissionStat.fromMap(Map<String, dynamic> map) { | |
| return AppPermissionStat( | |
| packageName: map['packageName'] ?? '', | |
| appName: map['appName'] ?? '', | |
| accessCounts: Map<String, int>.from(map['accessCounts'] ?? {}), | |
| isSystemApp: map['isSystemApp'] ?? false, | |
| ); | |
| } | |
| } | |
| class AppDataUsage { | |
| final String packageName; | |
| final String appName; | |
| final int bytesSent; | |
| final double mbSent; | |
| AppDataUsage({required this.packageName, required this.appName, required this.bytesSent, required this.mbSent}); | |
| factory AppDataUsage.fromMap(Map<String, dynamic> map) { | |
| return AppDataUsage( | |
| packageName: map['packageName'] ?? '', | |
| appName: map['appName'] ?? '', | |
| bytesSent: map['bytesSent'] is int ? map['bytesSent'] : (map['bytesSent'] as num?)?.toInt() ?? 0, | |
| mbSent: map['mbSent'] as double? ?? 0.0, | |
| ); | |
| } | |
| } | |
| class PrivacyStory { | |
| final String severity; | |
| final String emoji; | |
| final String english; | |
| final String hindi; | |
| final String packageName; | |
| PrivacyStory({ | |
| required this.severity, | |
| required this.emoji, | |
| required this.english, | |
| required this.hindi, | |
| required this.packageName, | |
| }); | |
| factory PrivacyStory.fromMap(Map<String, dynamic> map) { | |
| return PrivacyStory( | |
| severity: map['severity'] ?? 'SAFE', | |
| emoji: map['emoji'] ?? '', | |
| english: map['english'] ?? '', | |
| hindi: map['hindi'] ?? '', | |
| packageName: map['packageName'] ?? '', | |
| ); | |
| } | |
| } | |
| class TelemetryService { | |
| static const _channel = MethodChannel('in.inmodel.premithius/telemetry'); | |
| static Future<List<PrivacyStory>> getPrivacyStories() async { | |
| try { | |
| final jsonStr = await _channel.invokeMethod('getPrivacyStories'); | |
| final list = jsonDecode(jsonStr as String) as List; | |
| return list.map((e) => PrivacyStory.fromMap(e as Map<String, dynamic>)).toList(); | |
| } catch (e) { | |
| return [ | |
| PrivacyStory( | |
| severity: 'SAFE', | |
| emoji: '✅', | |
| english: 'Grant Usage Access to enable full privacy stories', | |
| hindi: 'पूरी जानकारी के लिए Usage Access दें', | |
| packageName: '', | |
| ) | |
| ]; | |
| } | |
| } | |
| static Future<bool> hasUsagePermission() async { | |
| try { | |
| return await _channel.invokeMethod('hasUsagePermission') as bool? ?? false; | |
| } catch (e) { | |
| return false; | |
| } | |
| } | |
| static Future<List<AppDataUsage>> getDataUsage() async { | |
| try { | |
| final jsonStr = await _channel.invokeMethod('getDataUsage'); | |
| final list = jsonDecode(jsonStr as String) as List; | |
| return list.map((e) => AppDataUsage.fromMap(e as Map<String, dynamic>)).toList(); | |
| } catch (e) { | |
| return []; | |
| } | |
| } | |
| static Future<List<SensorAccess>> getActiveSensors() async { | |
| try { | |
| final jsonStr = await _channel.invokeMethod('getActiveSensors'); | |
| final list = jsonDecode(jsonStr as String) as List; | |
| return list.map((e) => SensorAccess.fromMap(e as Map<String, dynamic>)).toList(); | |
| } catch (e) { | |
| return []; | |
| } | |
| } | |
| } | |