collectAppUsageAudit static method

Future<void> collectAppUsageAudit(
  1. ACLDatabase db
)

Implementation

static Future<void> collectAppUsageAudit(ACLDatabase db) async {
  try {
    final allowGetAppUsages =
        await PermissionHelper.isPackageUsageStatsEnable();
    if (allowGetAppUsages == false) {
      return;
    }

    final yesterday = DateTime.now().subtract(const Duration(days: 1));
    final recordYesterday =
        await db.appUsageAuditDao.findFirstInDate(yesterday);
    if (recordYesterday != null) {
      return;
    }

    final from = DateTime(yesterday.year, yesterday.month, yesterday.day);
    final to =
        DateTime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59);
    final appUsages =
        await AclSdkPlatform.instance.getUsageStatsDailyByPackage(
      fromMillisecondsSinceEpoch: from.millisecondsSinceEpoch,
      toMillisecondsSinceEpoch: to.millisecondsSinceEpoch,
    );
    if (appUsages == null || appUsages.isEmpty == true) {
      return;
    }

    for (final appUsage in appUsages) {
      await db.appUsageAuditDao.create(AppUsageAuditCompanion(
        createdAt: Value(DateTime.now()),
        date: Value(yesterday.toDateString()),
        packageName: Value(appUsage['packageName']),
        totalTimeForegroundServiceUsed:
            Value(appUsage['totalTimeForegroundServiceUsed']),
        totalTimeInForeground: Value(appUsage['totalTimeInForeground']),
        totalTimeVisible: Value(appUsage['totalTimeVisible']),
      ));
    }
  } catch (e) {
    print('Error: AppUsageAuditHelper.collectAppUsageAudit');
    print(e);
  }
}