aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/features
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/features')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt1
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt16
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt49
4 files changed, 48 insertions, 20 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt
index ead01a5..f3a9774 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt
@@ -1,4 +1,5 @@
/*
+* Copyright (C) 2023 MURENA SAS
* Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt
index f15119e..888c140 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2023 MURENA SAS
* Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
@@ -85,6 +86,9 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
binding.blockAllToggle.setOnClickListener {
viewModel.submitAction(AppTrackersViewModel.Action.BlockAllToggleAction(binding.blockAllToggle.isChecked))
}
+ binding.btnReset.setOnClickListener {
+ viewModel.submitAction(AppTrackersViewModel.Action.ResetAllTrackers)
+ }
binding.trackers.apply {
layoutManager = LinearLayoutManager(requireContext())
@@ -94,7 +98,7 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
onToggleSwitch = { tracker, isBlocked ->
viewModel.submitAction(AppTrackersViewModel.Action.ToggleTrackerAction(tracker, isBlocked))
},
- onClickTitle = { viewModel.submitAction(AppTrackersViewModel.Action.ClickTracker(it)) }
+ onClickTitle = { viewModel.submitAction(AppTrackersViewModel.Action.ClickTracker(it)) },
)
}
@@ -162,15 +166,19 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
)
}
binding.noTrackersYet.isVisible = false
+ binding.btnReset.isVisible = true
} else {
binding.trackersListTitle.isVisible = false
binding.trackers.isVisible = false
binding.noTrackersYet.isVisible = true
binding.noTrackersYet.text = getString(
- if (state.isBlockingActivated)
- R.string.apptrackers_no_trackers_yet_block_on
- else R.string.apptrackers_no_trackers_yet_block_off
+ when {
+ !state.isBlockingActivated -> R.string.apptrackers_no_trackers_yet_block_off
+ state.isWhitelistEmpty -> R.string.apptrackers_no_trackers_yet_block_on
+ else -> R.string.app_trackers_no_trackers_yet_remaining_whitelist
+ }
)
+ binding.btnReset.isVisible = state.isBlockingActivated && !state.isWhitelistEmpty
}
}
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt
index 8088443..a190a74 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2023 MURENA SAS
* Copyright (C) 2022 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
@@ -27,6 +28,7 @@ data class AppTrackersState(
val leaked: Int = 0,
val blocked: Int = 0,
val isTrackersBlockingEnabled: Boolean = false,
+ val isWhitelistEmpty: Boolean = true,
val showQuickPrivacyDisabledMessage: Boolean = false,
) {
fun getTrackersStatus(): List<Pair<Tracker, Boolean>>? {
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt
index 1a33844..e5a94f9 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2023 MURENA SAS
* Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
@@ -25,6 +26,7 @@ import foundation.e.privacycentralapp.domain.entities.TrackerMode
import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase
import foundation.e.privacycentralapp.domain.usecases.TrackersStateUseCase
import foundation.e.privacycentralapp.domain.usecases.TrackersStatisticsUseCase
+import foundation.e.privacymodules.permissions.data.ApplicationDescription
import foundation.e.privacymodules.trackers.api.Tracker
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -38,7 +40,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class AppTrackersViewModel(
- private val appUid: Int,
+ private val app: ApplicationDescription,
private val trackersStateUseCase: TrackersStateUseCase,
private val trackersStatisticsUseCase: TrackersStatisticsUseCase,
private val getQuickPrivacyStateUseCase: GetQuickPrivacyStateUseCase
@@ -57,9 +59,12 @@ class AppTrackersViewModel(
viewModelScope.launch(Dispatchers.IO) {
_state.update {
it.copy(
- appDesc = trackersStateUseCase.getApplicationDescription(appUid),
- isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid),
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
+ appDesc = app,
+ isBlockingActivated = !trackersStateUseCase.isWhitelisted(app),
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(
+ app
+ ),
+ isWhitelistEmpty = trackersStatisticsUseCase.isWhiteListEmpty(app)
)
}
}
@@ -79,6 +84,7 @@ class AppTrackersViewModel(
is Action.BlockAllToggleAction -> blockAllToggleAction(action)
is Action.ToggleTrackerAction -> toggleTrackerAction(action)
is Action.ClickTracker -> actionClickTracker(action)
+ is Action.ResetAllTrackers -> resetAllTrackers()
}
}
@@ -87,10 +93,10 @@ class AppTrackersViewModel(
if (!state.value.isTrackersBlockingEnabled) {
_singleEvents.emit(SingleEvent.ToastTrackersControlDisabled)
}
- trackersStateUseCase.toggleAppWhitelist(appUid, !action.isBlocked)
+ trackersStateUseCase.toggleAppWhitelist(app, !action.isBlocked)
_state.update {
it.copy(
- isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid)
+ isBlockingActivated = !trackersStateUseCase.isWhitelisted(app)
)
}
}
@@ -103,14 +109,8 @@ class AppTrackersViewModel(
}
if (state.value.isBlockingActivated) {
- trackersStateUseCase.blockTracker(appUid, action.tracker, action.isBlocked)
- _state.update {
- it.copy(
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(
- appUid
- )
- )
- }
+ trackersStateUseCase.blockTracker(app, action.tracker, action.isBlocked)
+ updateWhitelist()
}
}
}
@@ -130,13 +130,29 @@ class AppTrackersViewModel(
}
}
+ private suspend fun resetAllTrackers() {
+ withContext(Dispatchers.IO) {
+ trackersStateUseCase.clearWhitelist(app)
+ updateWhitelist()
+ }
+ }
private fun fetchStatistics() {
- val (blocked, leaked) = trackersStatisticsUseCase.getCalls(appUid)
+ val (blocked, leaked) = trackersStatisticsUseCase.getCalls(app)
return _state.update { s ->
s.copy(
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(app),
leaked = leaked,
blocked = blocked,
+ isWhitelistEmpty = trackersStatisticsUseCase.isWhiteListEmpty(app)
+ )
+ }
+ }
+
+ private fun updateWhitelist() {
+ _state.update { s ->
+ s.copy(
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(app),
+ isWhitelistEmpty = trackersStatisticsUseCase.isWhiteListEmpty(app)
)
}
}
@@ -151,5 +167,6 @@ class AppTrackersViewModel(
data class BlockAllToggleAction(val isBlocked: Boolean) : Action()
data class ToggleTrackerAction(val tracker: Tracker, val isBlocked: Boolean) : Action()
data class ClickTracker(val tracker: Tracker) : Action()
+ object ResetAllTrackers : Action()
}
}