diff options
| author | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-09-07 12:30:29 +0000 |
|---|---|---|
| committer | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-09-07 12:30:29 +0000 |
| commit | df7f3d969e0338acbb7efff6a3361f9aed927cf7 (patch) | |
| tree | 37c1359cdf5573bfd90e23c138aa8aedfd341238 /app/src/main/java/foundation/e/privacycentralapp/domain | |
| parent | 54fcb13a713993687e8385dd2ff6d70563b5a1c2 (diff) | |
| download | advanced-privacy-df7f3d969e0338acbb7efff6a3361f9aed927cf7.tar.gz | |
2 - Convert trackers to kotlin, fix trackers count for system app
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
3 files changed, 52 insertions, 24 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt index 6417fce..10c1ad0 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt @@ -22,17 +22,15 @@ import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.data.repositories.TrackersRepository import foundation.e.privacymodules.permissions.PermissionsPrivacyModule 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 +import foundation.e.privacymodules.trackers.api.IBlockTrackersPrivacyModule +import foundation.e.privacymodules.trackers.api.ITrackTrackersPrivacyModule +import foundation.e.privacymodules.trackers.api.Tracker import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class TrackersStateUseCase( private val blockTrackersPrivacyModule: IBlockTrackersPrivacyModule, private val trackersPrivacyModule: ITrackTrackersPrivacyModule, - private val permissionsPrivacyModule: PermissionsPrivacyModule, private val localStateRepository: LocalStateRepository, private val trackersRepository: TrackersRepository, private val appListsRepository: AppListsRepository, @@ -65,13 +63,8 @@ class TrackersStateUseCase( return appListsRepository.getApplicationDescription(appUid) } - fun isWhitelisted(appUid: Int): Boolean { - return if (appUid == appListsRepository.dummySystemApp.uid) { - appListsRepository.getHiddenSystemApps().any { - blockTrackersPrivacyModule.isWhitelisted(it.uid) - } - } else blockTrackersPrivacyModule.isWhitelisted(appUid) - } + fun isWhitelisted(appUid: Int) + = isWhitelisted(appUid, appListsRepository, blockTrackersPrivacyModule) fun getTrackersWhitelistIds(appUid: Int): List<String> { return if (appUid == appListsRepository.dummySystemApp.uid) { @@ -114,3 +107,16 @@ class TrackersStateUseCase( trackersPrivacyModule.start(trackersRepository.trackers, enableNotification = false) } } + + +fun isWhitelisted( + appUid: Int, + appListsRepository: AppListsRepository, + blockTrackersPrivacyModule: IBlockTrackersPrivacyModule +): Boolean { + return if (appUid == appListsRepository.dummySystemApp.uid) { + appListsRepository.getHiddenSystemApps().any { + blockTrackersPrivacyModule.isWhitelisted(it.uid) + } + } else blockTrackersPrivacyModule.isWhitelisted(appUid) +} 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 5abe0b8..52e0bad 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 @@ -18,15 +18,16 @@ package foundation.e.privacycentralapp.domain.usecases import android.content.res.Resources +import android.util.Log import foundation.e.privacycentralapp.R import foundation.e.privacycentralapp.common.throttleFirst 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 +import foundation.e.privacymodules.trackers.api.IBlockTrackersPrivacyModule +import foundation.e.privacymodules.trackers.api.ITrackTrackersPrivacyModule +import foundation.e.privacymodules.trackers.api.Tracker import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow @@ -172,24 +173,45 @@ class TrackersStatisticsUseCase( .map { apps -> val callsByApp = trackTrackersPrivacyModule.getPastDayTrackersCallsByApps() apps.map { app -> - val (blockedLeaks, leaks) = callsByApp.getOrDefault(app.uid, 0 to 0) AppWithCounts( app = app, isWhitelisted = !blockTrackersPrivacyModule.isBlockingEnabled() || - blockTrackersPrivacyModule.isWhitelisted(app.uid), - trackersCount = appListsRepository.foldForHiddenSystemApp(app.uid) { - trackersCounts.getOrDefault(it, 0) + isWhitelisted(app.uid, appListsRepository, blockTrackersPrivacyModule), + trackersCount = if (app.uid == appListsRepository.dummySystemApp.uid) { + getHiddenSystemAppsTrackersCount() + } else { + trackersCounts.getOrDefault(app.uid, 0) }, - whiteListedTrackersCount = appListsRepository.foldForHiddenSystemApp(app.uid) { - blockTrackersPrivacyModule.getWhiteList(it).size + whiteListedTrackersCount = if (app.uid == appListsRepository.dummySystemApp.uid) { + getHiddenSystemAppWhitelistedTrackersCount() + } else { + blockTrackersPrivacyModule.getWhiteList(app.uid).size }, - blockedLeaks = blockedLeaks, - leaks = leaks + blockedLeaks = appListsRepository.foldForHiddenSystemApp(app.uid) { + appUid -> callsByApp.getOrDefault(appUid, 0 to 0).first + }, + leaks = appListsRepository.foldForHiddenSystemApp(app.uid) { + appUid -> callsByApp.getOrDefault(appUid, 0 to 0).second + } ) }.sortedWith(mostLeakedAppsComparator) } } + private fun getHiddenSystemAppsTrackersCount(): Int { + return trackTrackersPrivacyModule.getTrackersCount( + appListsRepository.getHiddenSystemApps().map { it.uid } + ) + } + + private fun getHiddenSystemAppWhitelistedTrackersCount(): Int { + return appListsRepository.getHiddenSystemApps().fold(HashSet<String>()) { acc, app -> + acc.addAll(blockTrackersPrivacyModule.getWhiteList(app.uid).map { it.id }) + acc + }.size + } + + private val mostLeakedAppsComparator: Comparator<AppWithCounts> = Comparator { o1, o2 -> val leaks = o2.leaks - o1.leaks if (leaks != 0) leaks else { diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/UpdateWidgetUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/UpdateWidgetUseCase.kt index dab0b18..f70065c 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/UpdateWidgetUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/UpdateWidgetUseCase.kt @@ -18,7 +18,7 @@ package foundation.e.privacycentralapp.domain.usecases import foundation.e.privacycentralapp.data.repositories.LocalStateRepository -import foundation.e.privacymodules.trackers.ITrackTrackersPrivacyModule +import foundation.e.privacymodules.trackers.api.ITrackTrackersPrivacyModule class UpdateWidgetUseCase( private val localStateRepository: LocalStateRepository, |
