Loading app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt +5 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import foundation.e.advancedprivacy.data.repositories.AppListsRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.entities.ProfileType import foundation.e.advancedprivacy.domain.entities.ToggleableApp import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository import foundation.e.advancedprivacy.ipscrambler.OrbotSupervisor import kotlinx.coroutines.CoroutineScope Loading Loading @@ -59,7 +60,7 @@ class IpScramblingStateUseCase( localStateRepository.setIpScramblingSetting(enabled = hideIp) } suspend fun getAppsWithUseTor(): Flow<List<Pair<DisplayableApp, Boolean>>> { suspend fun getAppsUsingTor(): Flow<List<ToggleableApp>> { return combine( appListsRepository.displayableApp.map { apps -> apps.filter { app -> Loading @@ -69,7 +70,7 @@ class IpScramblingStateUseCase( whitelistedPackages ) { apps, pNames -> apps.map { app -> app to !app.isWhitelisted(pNames) ToggleableApp(app = app, isOn = !app.isWhitelisted(pNames)) } } } Loading Loading @@ -97,7 +98,7 @@ class IpScramblingStateUseCase( } } private fun DisplayableApp.isWhitelisted(whitelistedPNames: Set<String> = whitelistedPackages.value): Boolean = apps.any { it.packageName in whitelistedPNames private fun DisplayableApp.isWhitelisted(whitelistedPackageNames: Set<String> = whitelistedPackages.value): Boolean = apps.any { it.packageName in whitelistedPackageNames } } app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackerDetailsUseCase.kt +7 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.advancedprivacy.domain.usecases import foundation.e.advancedprivacy.data.repositories.AppListsRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.ToggleableApp import foundation.e.advancedprivacy.trackers.data.StatsDatabase import foundation.e.advancedprivacy.trackers.data.WhitelistRepository import foundation.e.advancedprivacy.trackers.domain.entities.Tracker Loading @@ -41,7 +42,7 @@ class TrackerDetailsUseCase( trackersStateUseCase.updateAllTrackersBlockedState() } suspend fun getAppsWithBlockedState(tracker: Tracker): List<Pair<DisplayableApp, Boolean>> { suspend fun getAppsWithBlockedState(tracker: Tracker): List<ToggleableApp> { return enrichWithBlockedState( statsDatabase.getApIds(tracker.id).mapNotNull { appListsRepository.getInternetAppByApId(it) Loading @@ -50,9 +51,12 @@ class TrackerDetailsUseCase( ) } suspend fun enrichWithBlockedState(apps: List<DisplayableApp>, tracker: Tracker): List<Pair<DisplayableApp, Boolean>> { suspend fun enrichWithBlockedState(apps: List<DisplayableApp>, tracker: Tracker): List<ToggleableApp> { return apps.map { app -> app to app.apps.any { !filterHostnameUseCase.isWhitelisted(it.uid, tracker.id) } ToggleableApp( app = app, isOn = app.apps.any { !filterHostnameUseCase.isWhitelisted(it.uid, tracker.id) } ) } } Loading app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt +2 −2 Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac // TODO: this should not be mandatory. binding.apps.post { (binding.apps.adapter as ToggleAppsAdapter?)?.setData( list = state.appsWithUseTor, list = state.appsUsingTor, isEnabled = state.mode == FeatureState.ON ) } Loading @@ -156,7 +156,7 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac when { state.mode.isLoading || state.appsWithUseTor.isEmpty() -> { state.appsUsingTor.isEmpty() -> { binding.loader.visibility = View.VISIBLE viewIdsToHide.forEach { it.visibility = View.GONE } } Loading app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyState.kt +2 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ package foundation.e.advancedprivacy.features.internetprivacy import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.entities.ToggleableApp data class InternetPrivacyState( val mode: FeatureState = FeatureState.OFF, val appsWithUseTor: List<Pair<DisplayableApp, Boolean>> = emptyList(), val appsUsingTor: List<ToggleableApp> = emptyList(), val selectedLocation: String = "", val availableLocationIds: List<String> = emptyList(), val forceRedraw: Boolean = false Loading app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -71,8 +71,8 @@ class InternetPrivacyViewModel( suspend fun doOnStartedState() = withContext(Dispatchers.IO) { launch { merge( ipScramblingStateUseCase.getAppsWithUseTor().map { apps -> _state.update { it.copy(appsWithUseTor = apps) } ipScramblingStateUseCase.getAppsUsingTor().map { apps -> _state.update { it.copy(appsUsingTor = apps) } }, ipScramblingStateUseCase.internetPrivacyMode.map { _state.update { s -> s.copy(mode = it) } Loading Loading
app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt +5 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import foundation.e.advancedprivacy.data.repositories.AppListsRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.entities.ProfileType import foundation.e.advancedprivacy.domain.entities.ToggleableApp import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository import foundation.e.advancedprivacy.ipscrambler.OrbotSupervisor import kotlinx.coroutines.CoroutineScope Loading Loading @@ -59,7 +60,7 @@ class IpScramblingStateUseCase( localStateRepository.setIpScramblingSetting(enabled = hideIp) } suspend fun getAppsWithUseTor(): Flow<List<Pair<DisplayableApp, Boolean>>> { suspend fun getAppsUsingTor(): Flow<List<ToggleableApp>> { return combine( appListsRepository.displayableApp.map { apps -> apps.filter { app -> Loading @@ -69,7 +70,7 @@ class IpScramblingStateUseCase( whitelistedPackages ) { apps, pNames -> apps.map { app -> app to !app.isWhitelisted(pNames) ToggleableApp(app = app, isOn = !app.isWhitelisted(pNames)) } } } Loading Loading @@ -97,7 +98,7 @@ class IpScramblingStateUseCase( } } private fun DisplayableApp.isWhitelisted(whitelistedPNames: Set<String> = whitelistedPackages.value): Boolean = apps.any { it.packageName in whitelistedPNames private fun DisplayableApp.isWhitelisted(whitelistedPackageNames: Set<String> = whitelistedPackages.value): Boolean = apps.any { it.packageName in whitelistedPackageNames } }
app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackerDetailsUseCase.kt +7 −3 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.advancedprivacy.domain.usecases import foundation.e.advancedprivacy.data.repositories.AppListsRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.ToggleableApp import foundation.e.advancedprivacy.trackers.data.StatsDatabase import foundation.e.advancedprivacy.trackers.data.WhitelistRepository import foundation.e.advancedprivacy.trackers.domain.entities.Tracker Loading @@ -41,7 +42,7 @@ class TrackerDetailsUseCase( trackersStateUseCase.updateAllTrackersBlockedState() } suspend fun getAppsWithBlockedState(tracker: Tracker): List<Pair<DisplayableApp, Boolean>> { suspend fun getAppsWithBlockedState(tracker: Tracker): List<ToggleableApp> { return enrichWithBlockedState( statsDatabase.getApIds(tracker.id).mapNotNull { appListsRepository.getInternetAppByApId(it) Loading @@ -50,9 +51,12 @@ class TrackerDetailsUseCase( ) } suspend fun enrichWithBlockedState(apps: List<DisplayableApp>, tracker: Tracker): List<Pair<DisplayableApp, Boolean>> { suspend fun enrichWithBlockedState(apps: List<DisplayableApp>, tracker: Tracker): List<ToggleableApp> { return apps.map { app -> app to app.apps.any { !filterHostnameUseCase.isWhitelisted(it.uid, tracker.id) } ToggleableApp( app = app, isOn = app.apps.any { !filterHostnameUseCase.isWhitelisted(it.uid, tracker.id) } ) } } Loading
app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt +2 −2 Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac // TODO: this should not be mandatory. binding.apps.post { (binding.apps.adapter as ToggleAppsAdapter?)?.setData( list = state.appsWithUseTor, list = state.appsUsingTor, isEnabled = state.mode == FeatureState.ON ) } Loading @@ -156,7 +156,7 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac when { state.mode.isLoading || state.appsWithUseTor.isEmpty() -> { state.appsUsingTor.isEmpty() -> { binding.loader.visibility = View.VISIBLE viewIdsToHide.forEach { it.visibility = View.GONE } } Loading
app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyState.kt +2 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ package foundation.e.advancedprivacy.features.internetprivacy import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.entities.ToggleableApp data class InternetPrivacyState( val mode: FeatureState = FeatureState.OFF, val appsWithUseTor: List<Pair<DisplayableApp, Boolean>> = emptyList(), val appsUsingTor: List<ToggleableApp> = emptyList(), val selectedLocation: String = "", val availableLocationIds: List<String> = emptyList(), val forceRedraw: Boolean = false Loading
app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyViewModel.kt +2 −2 Original line number Diff line number Diff line Loading @@ -71,8 +71,8 @@ class InternetPrivacyViewModel( suspend fun doOnStartedState() = withContext(Dispatchers.IO) { launch { merge( ipScramblingStateUseCase.getAppsWithUseTor().map { apps -> _state.update { it.copy(appsWithUseTor = apps) } ipScramblingStateUseCase.getAppsUsingTor().map { apps -> _state.update { it.copy(appsUsingTor = apps) } }, ipScramblingStateUseCase.internetPrivacyMode.map { _state.update { s -> s.copy(mode = it) } Loading