aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/domain
diff options
context:
space:
mode:
authorGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-05-04 17:49:54 +0000
committerGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-05-04 17:49:54 +0000
commit9cdbb2a5f84eb38e922b9fa21126295161323f75 (patch)
treee0d30b1c502b96390fad542215e506f71ed5fd76 /app/src/main/java/foundation/e/privacycentralapp/domain
parentfa5d60f99a07911a13c579074affd646973655b6 (diff)
parentb9b0f890b95ff1674d4e8e9396a16a68d82829e7 (diff)
downloadadvanced-privacy-9cdbb2a5f84eb38e922b9fa21126295161323f75.tar.gz
Merge branch '219_highlight_trackers' into 'main'
219 highlight active trackers See merge request e/privacy-central/privacycentralapp!51
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..1fddb74 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,26 +145,51 @@ 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(mostLeakedAppsComparator)
}
}
+ private val mostLeakedAppsComparator: Comparator<AppWithCounts> = 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
+ }
+ }
+ }
+
fun getNonBlockedTrackersCount(): Flow<Int> {
return if (blockTrackersPrivacyModule.isBlockingEnabled())
appListsRepository.getVisibleAndHiddenApps().map { apps ->