aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/domain
diff options
context:
space:
mode:
authorjacquarg <guillaume.jacquart@hoodbrains.com>2022-04-25 08:56:18 +0200
committerjacquarg <guillaume.jacquart@hoodbrains.com>2022-05-04 19:03:10 +0200
commit730c2bc7566c03a9774509ab35bbbbca578ecf72 (patch)
tree690e7e57530892fe5a31e12eb8f671d65d3139d2 /app/src/main/java/foundation/e/privacycentralapp/domain
parentfa5d60f99a07911a13c579074affd646973655b6 (diff)
downloadadvanced-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.kt12
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt50
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
+ }
+ }
+ }
+ )
}
}