diff options
| author | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-03-01 08:06:11 +0000 |
|---|---|---|
| committer | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-03-01 08:06:11 +0000 |
| commit | ed659e60de259fe51b811af96a589c6bb9fd7d35 (patch) | |
| tree | 11a6458d30450420b7397560170579cfc857cded /app/src/main/java/foundation/e/privacycentralapp/domain | |
| parent | 13b6d0463fe7fa5cc5586b677e17d38a0fd5d0dd (diff) | |
| parent | 41480b04ee31e8e694d370184c15de8c4dce03d0 (diff) | |
| download | advanced-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')
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() } } } |
