diff options
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
5 files changed, 30 insertions, 13 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt index 5446d3b..aa4276d 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt @@ -35,7 +35,6 @@ import foundation.e.privacymodules.permissions.data.ApplicationDescription import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlin.random.Random @@ -144,11 +143,12 @@ class FakeLocationStateUseCase( // Deprecated since API 29, never called. override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {} - override fun onProviderEnabled(provider: String?) { + // TODO migration to minSdk31 , check still working. + override fun onProviderEnabled(provider: String) { reset(provider) } - override fun onProviderDisabled(provider: String?) { + override fun onProviderDisabled(provider: String) { reset(provider) } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt index 36599cb..7377568 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt @@ -17,11 +17,13 @@ package foundation.e.privacycentralapp.domain.usecases +import android.util.Log import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode import foundation.e.privacycentralapp.domain.entities.LocationMode import foundation.e.privacycentralapp.domain.entities.QuickPrivacyState import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine @@ -29,7 +31,7 @@ import kotlinx.coroutines.launch class GetQuickPrivacyStateUseCase( private val localStateRepository: LocalStateRepository, - private val coroutineScope: CoroutineScope + coroutineScope: CoroutineScope ) { init { @@ -40,9 +42,11 @@ class GetQuickPrivacyStateUseCase( } } - val quickPrivacyEnabledFlow = localStateRepository.quickPrivacyEnabledFlow + val quickPrivacyEnabledFlow: Flow<Boolean> = localStateRepository.quickPrivacyEnabledFlow - val quickPrivacyState = combine( + val isQuickPrivacyEnabled: Boolean get() = localStateRepository.isQuickPrivacyEnabled + + val quickPrivacyState: Flow<QuickPrivacyState> = combine( localStateRepository.quickPrivacyEnabledFlow, localStateRepository.areAllTrackersBlocked, localStateRepository.locationMode, @@ -60,14 +64,14 @@ class GetQuickPrivacyStateUseCase( } } - val isTrackersDenied = combine( + val isTrackersDenied: Flow<Boolean> = combine( localStateRepository.quickPrivacyEnabledFlow, localStateRepository.areAllTrackersBlocked ) { isQuickPrivacyEnabled, isAllTrackersBlocked -> isQuickPrivacyEnabled && isAllTrackersBlocked } - val isLocationHidden = combine( + val isLocationHidden: Flow<Boolean> = combine( localStateRepository.quickPrivacyEnabledFlow, localStateRepository.locationMode ) { isQuickPrivacyEnabled, locationMode -> @@ -76,7 +80,7 @@ class GetQuickPrivacyStateUseCase( val locationMode: StateFlow<LocationMode> = localStateRepository.locationMode - val isIpHidden = combine( + val isIpHidden: Flow<Boolean?> = combine( localStateRepository.quickPrivacyEnabledFlow, localStateRepository.internetPrivacyMode ) { isQuickPrivacyEnabled, internetPrivacyMode -> 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 0d25d16..c7c434c 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 @@ -29,7 +29,6 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch @@ -48,7 +47,7 @@ class IpScramblingStateUseCase( val internetPrivacyMode: StateFlow<InternetPrivacyMode> = callbackFlow { val listener = object : IIpScramblerModule.Listener { override fun onStatusChanged(newStatus: IIpScramblerModule.Status) { - offer(map(newStatus)) + trySend(map(newStatus)) } override fun log(message: String) {} 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 3319eb0..6417fce 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 @@ -61,6 +61,10 @@ class TrackersStateUseCase( return appListsRepository.getApplicationDescription(packageName) } + fun getApplicationDescription(appUid: Int): ApplicationDescription? { + return appListsRepository.getApplicationDescription(appUid) + } + fun isWhitelisted(appUid: Int): Boolean { return if (appUid == appListsRepository.dummySystemApp.uid) { appListsRepository.getHiddenSystemApps().any { 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 1fddb74..5abe0b8 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.common.throttleFirst import foundation.e.privacycentralapp.data.repositories.AppListsRepository import foundation.e.privacycentralapp.domain.entities.AppWithCounts import foundation.e.privacycentralapp.domain.entities.TrackersPeriodicStatistics @@ -26,14 +27,18 @@ 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 +import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import java.time.ZonedDateTime import java.time.format.DateTimeFormatter import java.time.temporal.ChronoUnit +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds class TrackersStatisticsUseCase( private val trackTrackersPrivacyModule: ITrackTrackersPrivacyModule, @@ -45,16 +50,21 @@ class TrackersStatisticsUseCase( appListsRepository.getVisibleApps() } - fun listenUpdates(): Flow<Unit> = callbackFlow { + private fun rawUpdates(): Flow<Unit> = callbackFlow { val listener = object : ITrackTrackersPrivacyModule.Listener { override fun onNewData() { - offer(Unit) + trySend(Unit) } } trackTrackersPrivacyModule.addListener(listener) awaitClose { trackTrackersPrivacyModule.removeListener(listener) } } + @OptIn(FlowPreview::class) + fun listenUpdates(debounce: Duration = 1.seconds) = rawUpdates() + .throttleFirst(windowDuration = debounce) + .onStart { emit(Unit) } + fun getDayStatistics(): Pair<TrackersPeriodicStatistics, Int> { return TrackersPeriodicStatistics( callsBlockedNLeaked = trackTrackersPrivacyModule.getPastDayTrackersCalls(), |
