Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 250afa29 authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

tech:148: revices fixes, add ToggleableApp type for readability

parent 3a6e419a
Loading
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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
@@ -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 ->
@@ -69,7 +70,7 @@ class IpScramblingStateUseCase(
            whitelistedPackages
        ) { apps, pNames ->
            apps.map { app ->
                app to !app.isWhitelisted(pNames)
                ToggleableApp(app = app, isOn = !app.isWhitelisted(pNames))
            }
        }
    }
@@ -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
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -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
@@ -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)
@@ -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) }
            )
        }
    }

+2 −2
Original line number Diff line number Diff line
@@ -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
            )
        }
@@ -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 }
            }
+2 −2
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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