aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/domain
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/domain')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt6
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt16
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt3
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt4
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt14
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(),