aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/domain
diff options
context:
space:
mode:
authorGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-03-01 08:06:11 +0000
committerGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-03-01 08:06:11 +0000
commited659e60de259fe51b811af96a589c6bb9fd7d35 (patch)
tree11a6458d30450420b7397560170579cfc857cded /app/src/main/java/foundation/e/privacycentralapp/domain
parent13b6d0463fe7fa5cc5586b677e17d38a0fd5d0dd (diff)
parent41480b04ee31e8e694d370184c15de8c4dce03d0 (diff)
downloadadvanced-privacy-ed659e60de259fe51b811af96a589c6bb9fd7d35.tar.gz
Merge branch 'hidden_system_app' into 'main'
Hide systems app behind parameter app in lists. See merge request e/privacy-central/privacycentralapp!19
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt103
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt40
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt31
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt10
4 files changed, 71 insertions, 113 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt
index acb8a36..4821349 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt
@@ -17,112 +17,15 @@
package foundation.e.privacycentralapp.domain.usecases
-import android.Manifest
-import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
+import foundation.e.privacycentralapp.data.repositories.AppListsRepository
import foundation.e.privacymodules.permissions.data.ApplicationDescription
-import foundation.e.privacymodules.trackers.api.BlockTrackersPrivacyModule
-import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.launch
class AppListUseCase(
- private val permissionsModule: PermissionsPrivacyModule,
- private val blockTrackersPrivacyModule: BlockTrackersPrivacyModule,
- private val corouteineScope: CoroutineScope
+ private val appListsRepository: AppListsRepository
) {
- private val _appsUsingInternet = MutableStateFlow<List<ApplicationDescription>>(emptyList())
- private val _appsBlockableTrackers = MutableStateFlow<List<ApplicationDescription>>(emptyList())
- init {
- corouteineScope.launch {
- _appsUsingInternet.value = getAppsUsingInternetList()
- }
- }
-
- fun getBlockableApps(): Flow<List<ApplicationDescription>> {
- corouteineScope.launch {
- _appsBlockableTrackers.value = getBlockableAppsList()
- }
- return _appsBlockableTrackers
- }
-
- private fun getBlockableAppsList(): List<ApplicationDescription> {
- return blockTrackersPrivacyModule.getBlockableApps()
- .filter {
- permissionsModule.getPermissions(it.packageName)
- .contains(Manifest.permission.INTERNET)
- }.map {
- it.icon = permissionsModule.getApplicationIcon(it.packageName)
- it
- }.sortedWith(object : Comparator<ApplicationDescription> {
- override fun compare(
- p0: ApplicationDescription?,
- p1: ApplicationDescription?
- ): Int {
- return if (p0?.icon != null && p1?.icon != null) {
- p0.label.toString().compareTo(p1.label.toString())
- } else if (p0?.icon == null) {
- 1
- } else {
- -1
- }
- }
- })
- }
-
- private fun getInstalledAppsUsingInternetList(): List<ApplicationDescription> {
- return permissionsModule.getInstalledApplications()
- .filter {
- permissionsModule.getPermissions(it.packageName)
- .contains(Manifest.permission.INTERNET)
- }.map {
- it.icon = permissionsModule.getApplicationIcon(it.packageName)
- it
- }.sortedWith(object : Comparator<ApplicationDescription> {
- override fun compare(
- p0: ApplicationDescription?,
- p1: ApplicationDescription?
- ): Int {
- return if (p0?.icon != null && p1?.icon != null) {
- p0.label.toString().compareTo(p1.label.toString())
- } else if (p0?.icon == null) {
- 1
- } else {
- -1
- }
- }
- })
- }
-
fun getAppsUsingInternet(): Flow<List<ApplicationDescription>> {
- corouteineScope.launch {
- _appsUsingInternet.value = getAppsUsingInternetList()
- }
- return _appsUsingInternet
- }
-
- private fun getAppsUsingInternetList(): List<ApplicationDescription> {
- return permissionsModule.getAllApplications()
- .filter {
- permissionsModule.getPermissions(it.packageName)
- .contains(Manifest.permission.INTERNET)
- }.map {
- it.icon = permissionsModule.getApplicationIcon(it.packageName)
- it
- }.sortedWith(object : Comparator<ApplicationDescription> {
- override fun compare(
- p0: ApplicationDescription?,
- p1: ApplicationDescription?
- ): Int {
- return if (p0?.icon != null && p1?.icon != null) {
- p0.label.toString().compareTo(p1.label.toString())
- } else if (p0?.icon == null) {
- 1
- } else {
- -1
- }
- }
- })
+ return appListsRepository.getVisibleApps()
}
}
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt
index 237e5b2..6cc8e4a 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt
@@ -17,6 +17,7 @@
package foundation.e.privacycentralapp.domain.usecases
+import foundation.e.privacycentralapp.data.repositories.AppListsRepository
import foundation.e.privacycentralapp.data.repositories.LocalStateRepository
import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode
import foundation.e.privacymodules.ipscramblermodule.IIpScramblerModule
@@ -36,10 +37,10 @@ class IpScramblingStateUseCase(
private val permissionsPrivacyModule: IPermissionsPrivacyModule,
private val appDesc: ApplicationDescription,
private val localStateRepository: LocalStateRepository,
+ private val appListsRepository: AppListsRepository,
coroutineScope: CoroutineScope
) {
- // private val internetPrivacyModeMutableFlow = MutableStateFlow(InternetPrivacyMode.REAL_IP)
val internetPrivacyMode: StateFlow<InternetPrivacyMode> = callbackFlow {
val listener = object : IIpScramblerModule.Listener {
override fun onStatusChanged(newStatus: IIpScramblerModule.Status) {
@@ -79,16 +80,41 @@ class IpScramblingStateUseCase(
applySettings(true, hideIp)
}
- val bypassTorApps: Set<String> get() = ipScramblerModule.appList
+ private fun getHiddenPackageNames(): List<String> {
+ return appListsRepository.getHiddenSystemApps().map { it.packageName }
+ }
+
+ val bypassTorApps: Set<String> get() {
+ var whitelist = ipScramblerModule.appList
+
+ if (getHiddenPackageNames().any { it in whitelist }) {
+ val mutable = whitelist.toMutableSet()
+ mutable.removeAll(getHiddenPackageNames())
+ mutable.add(appListsRepository.dummySystemApp.packageName)
+ whitelist = mutable
+ }
+
+ return whitelist
+ }
fun toggleBypassTor(packageName: String) {
- val currentList = bypassTorApps.toMutableSet()
- if (currentList.contains(packageName)) {
- currentList.remove(packageName)
+ val visibleList = bypassTorApps.toMutableSet()
+ val rawList = ipScramblerModule.appList.toMutableSet()
+
+ if (visibleList.contains(packageName)) {
+ if (packageName == appListsRepository.dummySystemApp.packageName) {
+ rawList.removeAll(getHiddenPackageNames())
+ } else {
+ rawList.remove(packageName)
+ }
} else {
- currentList.add(packageName)
+ if (packageName == appListsRepository.dummySystemApp.packageName) {
+ rawList.addAll(getHiddenPackageNames())
+ } else {
+ rawList.add(packageName)
+ }
}
- ipScramblerModule.appList = currentList
+ ipScramblerModule.appList = rawList
}
private fun applySettings(isQuickPrivacyEnabled: Boolean, isIpScramblingEnabled: Boolean) {
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 e8759cb..16a1a82 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
@@ -17,6 +17,7 @@
package foundation.e.privacycentralapp.domain.usecases
+import foundation.e.privacycentralapp.data.repositories.AppListsRepository
import foundation.e.privacycentralapp.data.repositories.LocalStateRepository
import foundation.e.privacycentralapp.data.repositories.TrackersRepository
import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
@@ -36,6 +37,7 @@ class TrackersStateUseCase(
private val permissionsPrivacyModule: PermissionsPrivacyModule,
private val localStateRepository: LocalStateRepository,
private val trackersRepository: TrackersRepository,
+ private val appListsRepository: AppListsRepository,
coroutineScope: CoroutineScope
) {
@@ -64,25 +66,44 @@ class TrackersStateUseCase(
blockTrackersPrivacyModule.isWhiteListEmpty()
}
- fun getApplicationPermission(packageName: String): ApplicationDescription {
+ fun getApplicationDescription(packageName: String): ApplicationDescription {
return permissionsPrivacyModule.getApplicationDescription(packageName)
}
fun isWhitelisted(appUid: Int): Boolean {
- return blockTrackersPrivacyModule.isWhitelisted(appUid)
+ return if (appUid == appListsRepository.dummySystemApp.uid) {
+ appListsRepository.getHiddenSystemApps().any {
+ blockTrackersPrivacyModule.isWhitelisted(it.uid)
+ }
+ } else blockTrackersPrivacyModule.isWhitelisted(appUid)
}
fun getTrackersWhitelistIds(appUid: Int): List<String> {
- return blockTrackersPrivacyModule.getWhiteList(appUid).map { it.id }
+ return if (appUid == appListsRepository.dummySystemApp.uid) {
+ appListsRepository.getHiddenSystemApps().fold(mutableSetOf<String>()) { acc, app ->
+ acc.addAll(blockTrackersPrivacyModule.getWhiteList(app.uid).map { it.id })
+ acc
+ }.toList()
+ } else blockTrackersPrivacyModule.getWhiteList(appUid).map { it.id }
}
fun toggleAppWhitelist(appUid: Int, isWhitelisted: Boolean) {
- blockTrackersPrivacyModule.setWhiteListed(appUid, isWhitelisted)
+ if (appUid == appListsRepository.dummySystemApp.uid) {
+ appListsRepository.getHiddenSystemApps().forEach {
+ blockTrackersPrivacyModule.setWhiteListed(it.uid, isWhitelisted)
+ }
+ } else blockTrackersPrivacyModule.setWhiteListed(appUid, isWhitelisted)
+
updateAllTrackersBlockedState()
}
fun blockTracker(appUid: Int, tracker: Tracker, isBlocked: Boolean) {
- blockTrackersPrivacyModule.setWhiteListed(tracker, appUid, !isBlocked)
+ if (appUid == appListsRepository.dummySystemApp.uid) {
+ appListsRepository.getHiddenSystemApps().forEach {
+ blockTrackersPrivacyModule.setWhiteListed(tracker, it.uid, !isBlocked)
+ }
+ } else blockTrackersPrivacyModule.setWhiteListed(tracker, appUid, !isBlocked)
+
updateAllTrackersBlockedState()
}
}
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 ad5c86c..9a8b12a 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
@@ -19,6 +19,7 @@ package foundation.e.privacycentralapp.domain.usecases
import android.content.res.Resources
import foundation.e.privacycentralapp.R
+import foundation.e.privacycentralapp.data.repositories.AppListsRepository
import foundation.e.privacycentralapp.domain.entities.TrackersPeriodicStatistics
import foundation.e.privacymodules.trackers.ITrackTrackersPrivacyModule
import foundation.e.privacymodules.trackers.Tracker
@@ -31,6 +32,7 @@ import java.time.temporal.ChronoUnit
class TrackersStatisticsUseCase(
private val trackTrackersPrivacyModule: ITrackTrackersPrivacyModule,
+ private val appListsRepository: AppListsRepository,
private val resources: Resources
) {
@@ -114,6 +116,12 @@ class TrackersStatisticsUseCase(
}
fun getTrackers(appUid: Int): List<Tracker> {
- return trackTrackersPrivacyModule.getTrackersForApp(appUid)
+ val trackers = if (appUid == appListsRepository.dummySystemApp.uid) {
+ appListsRepository.getHiddenSystemApps().map {
+ trackTrackersPrivacyModule.getTrackersForApp(it.uid)
+ }.flatten().distinctBy { it.id }
+ } else trackTrackersPrivacyModule.getTrackersForApp(appUid)
+
+ return trackers.sortedBy { it.label.lowercase() }
}
}