prem / lib /services /telemetry_service.dart
Nitishkumar-ai's picture
Deploy source code to Hugging Face without binaries
c25dcd7
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 [];
}
}
}