diff options
| author | jacquarg <guillaume.jacquart@hoodbrains.com> | 2022-04-25 08:56:18 +0200 |
|---|---|---|
| committer | jacquarg <guillaume.jacquart@hoodbrains.com> | 2022-05-04 19:03:10 +0200 |
| commit | 730c2bc7566c03a9774509ab35bbbbca578ecf72 (patch) | |
| tree | 690e7e57530892fe5a31e12eb8f671d65d3139d2 /app/src/main/java/foundation/e/privacycentralapp/domain | |
| parent | fa5d60f99a07911a13c579074affd646973655b6 (diff) | |
| download | advanced-privacy-730c2bc7566c03a9774509ab35bbbbca578ecf72.tar.gz | |
219 highlight active trackers
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/domain/entities/AppWithCounts.kt | 12 | ||||
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt | 50 |
2 files changed, 51 insertions, 11 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/AppWithCounts.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/AppWithCounts.kt index 682dfc8..0b76c7b 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/AppWithCounts.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/AppWithCounts.kt @@ -27,13 +27,17 @@ data class AppWithCounts( var icon: Drawable?, val isWhitelisted: Boolean = false, val trackersCount: Int = 0, - val whiteListedTrackersCount: Int = 0 + val whiteListedTrackersCount: Int = 0, + val blockedLeaks: Int = 0, + val leaks: Int = 0, ) { constructor( app: ApplicationDescription, isWhitelisted: Boolean, trackersCount: Int, - whiteListedTrackersCount: Int + whiteListedTrackersCount: Int, + blockedLeaks: Int, + leaks: Int, ) : this( packageName = app.packageName, @@ -42,7 +46,9 @@ data class AppWithCounts( icon = app.icon, isWhitelisted = isWhitelisted, trackersCount = trackersCount, - whiteListedTrackersCount = whiteListedTrackersCount + whiteListedTrackersCount = whiteListedTrackersCount, + blockedLeaks = blockedLeaks, + leaks = leaks ) val blockedTrackersCount get() = if (isWhitelisted) 0 diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt index 6b4e098..d8eed5c 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt @@ -22,6 +22,7 @@ import foundation.e.privacycentralapp.R import foundation.e.privacycentralapp.data.repositories.AppListsRepository import foundation.e.privacycentralapp.domain.entities.AppWithCounts import foundation.e.privacycentralapp.domain.entities.TrackersPeriodicStatistics +import foundation.e.privacymodules.permissions.data.ApplicationDescription import foundation.e.privacymodules.trackers.IBlockTrackersPrivacyModule import foundation.e.privacymodules.trackers.ITrackTrackersPrivacyModule import foundation.e.privacymodules.trackers.Tracker @@ -35,12 +36,14 @@ import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit class TrackersStatisticsUseCase( - // TODO private - val trackTrackersPrivacyModule: ITrackTrackersPrivacyModule, + private val trackTrackersPrivacyModule: ITrackTrackersPrivacyModule, private val blockTrackersPrivacyModule: IBlockTrackersPrivacyModule, private val appListsRepository: AppListsRepository, private val resources: Resources ) { + fun initAppList() { + appListsRepository.getVisibleApps() + } fun listenUpdates(): Flow<Unit> = callbackFlow { val listener = object : ITrackTrackersPrivacyModule.Listener { @@ -60,6 +63,12 @@ class TrackersStatisticsUseCase( ) to trackTrackersPrivacyModule.getTrackersCount() } + fun getMostLeakedApp(): ApplicationDescription? { + return appListsRepository.getApplicationDescription( + trackTrackersPrivacyModule.getPastDayMostLeakedApp() + ) + } + fun getDayTrackersCalls() = trackTrackersPrivacyModule.getPastDayTrackersCalls() fun getDayTrackersCount() = trackTrackersPrivacyModule.getPastDayTrackersCount() @@ -136,23 +145,48 @@ class TrackersStatisticsUseCase( return trackers.sortedBy { it.label.lowercase() } } + fun getCalls(appUid: Int): Pair<Int, Int> { + return if (appUid == appListsRepository.dummySystemApp.uid) { + appListsRepository.getHiddenSystemApps().map { + trackTrackersPrivacyModule.getPastDayTrackersCallsForApp(it.uid) + }.reduce { (accBlocked, accLeaked), (blocked, leaked) -> + accBlocked + blocked to accLeaked + leaked + } + } else trackTrackersPrivacyModule.getPastDayTrackersCallsForApp(appUid) + } + fun getAppsWithCounts(): Flow<List<AppWithCounts>> { val trackersCounts = trackTrackersPrivacyModule.getTrackersCountByApp() + return appListsRepository.getVisibleApps() .map { apps -> + val callsByApp = trackTrackersPrivacyModule.getPastDayTrackersCallsByApps() apps.map { app -> + val (blockedLeaks, leaks) = callsByApp.getOrDefault(app.uid, 0 to 0) AppWithCounts( - app, - !blockTrackersPrivacyModule.isBlockingEnabled() || + app = app, + isWhitelisted = !blockTrackersPrivacyModule.isBlockingEnabled() || blockTrackersPrivacyModule.isWhitelisted(app.uid), - appListsRepository.foldForHiddenSystemApp(app.uid) { + trackersCount = appListsRepository.foldForHiddenSystemApp(app.uid) { trackersCounts.getOrDefault(it, 0) }, - appListsRepository.foldForHiddenSystemApp(app.uid) { + whiteListedTrackersCount = appListsRepository.foldForHiddenSystemApp(app.uid) { blockTrackersPrivacyModule.getWhiteList(it).size - } + }, + blockedLeaks = blockedLeaks, + leaks = leaks ) - } + }.sortedWith( + Comparator { o1, o2 -> + val leaks = o2.leaks - o1.leaks + if (leaks != 0) leaks else { + val whitelisted = o2.whiteListedTrackersCount - o1.whiteListedTrackersCount + if (whitelisted != 0) whitelisted else { + o2.trackersCount - o1.trackersCount + } + } + } + ) } } |
