aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/features
diff options
context:
space:
mode:
authorGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-11-06 18:19:17 +0000
committerGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2022-11-06 18:19:17 +0000
commit99b27efb59ba642bfca0c6fbabfaa2c6631e15b9 (patch)
treec55aed6119dff29a84d7120bedf88e2df1775597 /app/src/main/java/foundation/e/privacycentralapp/features
parent9701ef06a47560ca429f1e7fffd0958b376ec628 (diff)
parentfdeecefd34c00b225bd58f6cc7135a95e21728f1 (diff)
downloadadvanced-privacy-99b27efb59ba642bfca0c6fbabfaa2c6631e15b9.tar.gz
Merge branch '5561-name_the_vpn_already_running' into 'main'
5561: display name of other VPNrunning always on. See merge request e/os/advanced-privacy!96
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/features')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt19
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardState.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardViewModel.kt23
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt3
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyState.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyViewModel.kt51
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt14
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationState.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationViewModel.kt28
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersState.kt2
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersViewModel.kt8
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersFragment.kt7
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersState.kt9
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/features/trackers/apptrackers/AppTrackersViewModel.kt96
14 files changed, 157 insertions, 109 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt
index 4d38ec8..6cd259e 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt
@@ -163,8 +163,11 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) {
}
}
is SingleEvent.ToastMessageSingleEvent ->
- Toast.makeText(requireContext(), event.message, Toast.LENGTH_LONG)
- .show()
+ Toast.makeText(
+ requireContext(),
+ getString(event.message, *event.args.toTypedArray()),
+ Toast.LENGTH_LONG
+ ).show()
}
}
}
@@ -200,11 +203,13 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) {
binding.togglePrivacyCentral.isChecked = state.quickPrivacyState.isEnabled()
- binding.stateTrackers.text = getString(when(state.trackerMode) {
- TrackerMode.DENIED -> R.string.dashboard_state_trackers_on
- TrackerMode.VULNERABLE -> R.string.dashboard_state_trackers_off
- TrackerMode.CUSTOM -> R.string.dashboard_state_trackers_custom
- })
+ binding.stateTrackers.text = getString(
+ when (state.trackerMode) {
+ TrackerMode.DENIED -> R.string.dashboard_state_trackers_on
+ TrackerMode.VULNERABLE -> R.string.dashboard_state_trackers_off
+ TrackerMode.CUSTOM -> R.string.dashboard_state_trackers_custom
+ }
+ )
binding.stateTrackers.setTextColor(
getColor(
requireContext(),
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardState.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardState.kt
index fb00f07..04b7ae8 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardState.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardState.kt
@@ -33,4 +33,4 @@ data class DashboardState(
val dayStatistics: List<Pair<Int, Int>>? = null,
val dayLabels: List<String>? = null,
val showQuickPrivacyDisabledMessage: Boolean = false
-) \ No newline at end of file
+)
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 cd7e414..d7d74c6 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
@@ -17,6 +17,7 @@
package foundation.e.privacycentralapp.features.dashboard
+import androidx.annotation.StringRes
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import foundation.e.privacycentralapp.R
@@ -76,9 +77,12 @@ class DashboardViewModel(
_state.update { s -> s.copy(showQuickPrivacyDisabledMessage = it) }
},
getPrivacyStateUseCase.otherVpnRunning.map {
- _singleEvents.emit(SingleEvent.ToastMessageSingleEvent(
- R.string.ipscrambling_error_always_on_vpn_already_running
- ))
+ _singleEvents.emit(
+ SingleEvent.ToastMessageSingleEvent(
+ R.string.ipscrambling_error_always_on_vpn_already_running,
+ listOf(it.label ?: "")
+ )
+ )
}
).collect {}
}
@@ -120,9 +124,11 @@ class DashboardViewModel(
val isFirstActivation = getPrivacyStateUseCase.toggleReturnIsFirstActivation()
fetchStatistics().first()
- if (isFirstActivation) _singleEvents.emit(SingleEvent.ToastMessageSingleEvent(
- message = R.string.dashboard_first_ipscrambling_activation
- ))
+ if (isFirstActivation) _singleEvents.emit(
+ SingleEvent.ToastMessageSingleEvent(
+ message = R.string.dashboard_first_ipscrambling_activation
+ )
+ )
}
private suspend fun actionShowMostLeakedApp() = withContext(Dispatchers.IO) {
@@ -139,7 +145,10 @@ class DashboardViewModel(
object NavigateToLocationSingleEvent : SingleEvent()
object NavigateToPermissionsSingleEvent : SingleEvent()
data class NavigateToAppDetailsEvent(val appDesc: ApplicationDescription) : SingleEvent()
- data class ToastMessageSingleEvent(val message: Int) : SingleEvent()
+ data class ToastMessageSingleEvent(
+ @StringRes val message: Int,
+ val args: List<Any> = emptyList()
+ ) : SingleEvent()
}
sealed class Action {
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt
index 749fae4..99aa217 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt
@@ -33,7 +33,6 @@ import foundation.e.privacycentralapp.PrivacyCentralApplication
import foundation.e.privacycentralapp.R
import foundation.e.privacycentralapp.common.NavToolbarFragment
import foundation.e.privacycentralapp.common.ToggleAppsAdapter
-import foundation.e.privacycentralapp.common.extensions.toText
import foundation.e.privacycentralapp.common.initQuickPrivacySnackbar
import foundation.e.privacycentralapp.common.setToolTipForAsterisk
import foundation.e.privacycentralapp.databinding.FragmentInternetActivityPolicyBinding
@@ -137,7 +136,7 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac
viewModel.singleEvents.collect { event ->
when (event) {
is InternetPrivacyViewModel.SingleEvent.ErrorEvent -> {
- displayToast(event.error.toText(requireContext()))
+ displayToast(getString(event.errorResId, *event.args.toTypedArray()))
}
}
}
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyState.kt b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyState.kt
index 25e911f..6991196 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyState.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyState.kt
@@ -34,4 +34,4 @@ data class InternetPrivacyState(
}
val selectedLocationPosition get() = availableLocationIds.indexOf(selectedLocation)
-} \ No newline at end of file
+}
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyViewModel.kt b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyViewModel.kt
index ab5e24d..be6cd4d 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyViewModel.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyViewModel.kt
@@ -17,6 +17,7 @@
package foundation.e.privacycentralapp.features.internetprivacy
+import androidx.annotation.StringRes
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import foundation.e.privacycentralapp.R
@@ -54,20 +55,20 @@ class InternetPrivacyViewModel(
private val _singleEvents = MutableSharedFlow<SingleEvent>()
val singleEvents = _singleEvents.asSharedFlow()
-
-
val availablesLocationsIds = listOf("", *ipScramblerModule.getAvailablesLocations().sorted().toTypedArray())
init {
viewModelScope.launch(Dispatchers.IO) {
- _state.update { it.copy(
- mode = ipScramblingStateUseCase.internetPrivacyMode.value,
- availableLocationIds = availablesLocationsIds,
- selectedLocation = ipScramblerModule.exitCountry) }
+ _state.update {
+ it.copy(
+ mode = ipScramblingStateUseCase.internetPrivacyMode.value,
+ availableLocationIds = availablesLocationsIds,
+ selectedLocation = ipScramblerModule.exitCountry
+ )
+ }
}
}
-
@OptIn(FlowPreview::class)
suspend fun doOnStartedState() = withContext(Dispatchers.IO) {
launch {
@@ -76,23 +77,26 @@ class InternetPrivacyViewModel(
_state.update { s -> s.copy(showQuickPrivacyDisabledMessage = it) }
},
appListUseCase.getAppsUsingInternet().map { apps ->
- _state.update { s -> s.copy(
- availableApps = apps,
- bypassTorApps = ipScramblingStateUseCase.bypassTorApps
- ) }
+ _state.update { s ->
+ s.copy(
+ availableApps = apps,
+ bypassTorApps = ipScramblingStateUseCase.bypassTorApps
+ )
+ }
},
if (getQuickPrivacyStateUseCase.isQuickPrivacyEnabled)
ipScramblingStateUseCase.internetPrivacyMode.map {
_state.update { s -> s.copy(mode = it) }
}
else ipScramblingStateUseCase.configuredMode.map {
- _state.update { s -> s.copy(
- mode = if (it) InternetPrivacyMode.HIDE_IP
- else InternetPrivacyMode.REAL_IP
- ) }
+ _state.update { s ->
+ s.copy(
+ mode = if (it) InternetPrivacyMode.HIDE_IP
+ else InternetPrivacyMode.REAL_IP
+ )
+ }
}
).collect {}
-
}
launch {
@@ -108,9 +112,13 @@ class InternetPrivacyViewModel(
launch {
getQuickPrivacyStateUseCase.otherVpnRunning.collect {
- _singleEvents.emit(SingleEvent.ErrorEvent(R.string.ipscrambling_error_always_on_vpn_already_running))
- _state.update { it.copy(forceRedraw = !it.forceRedraw)}
-
+ _singleEvents.emit(
+ SingleEvent.ErrorEvent(
+ R.string.ipscrambling_error_always_on_vpn_already_running,
+ listOf(it.label ?: "")
+ )
+ )
+ _state.update { it.copy(forceRedraw = !it.forceRedraw) }
}
}
}
@@ -148,7 +156,10 @@ class InternetPrivacyViewModel(
}
sealed class SingleEvent {
- data class ErrorEvent(val error: Any) : SingleEvent()
+ data class ErrorEvent(
+ @StringRes val errorResId: Int,
+ val args: List<Any> = emptyList()
+ ) : SingleEvent()
}
sealed class Action {
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt
index 2e014e2..537d0b6 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt
@@ -86,8 +86,8 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
private val locationPermissionRequest = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
- if (permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false)
- || permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false)
+ if (permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) ||
+ permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false)
) {
viewModel.submitAction(Action.StartListeningLocation)
} // TODO: else.
@@ -167,10 +167,12 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
}
is FakeLocationViewModel.SingleEvent.RequestLocationPermission -> {
// TODO for standalone: rationale dialog
- locationPermissionRequest.launch(arrayOf(
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION
- ))
+ locationPermissionRequest.launch(
+ arrayOf(
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.ACCESS_COARSE_LOCATION
+ )
+ )
}
is FakeLocationViewModel.SingleEvent.LocationUpdatedEvent -> {
// Nothing here, another collect linked to mapbox view.
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationState.kt b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationState.kt
index c7bcd98..9513f77 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationState.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationState.kt
@@ -27,4 +27,4 @@ data class FakeLocationState(
val specificLongitude: Float? = null,
val forceRefresh: Boolean = false,
val showQuickPrivacyDisabledMessage: Boolean = false
-) \ No newline at end of file
+)
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationViewModel.kt b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationViewModel.kt
index afba3d0..8db3537 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationViewModel.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationViewModel.kt
@@ -58,28 +58,32 @@ class FakeLocationViewModel(
launch {
merge(
fakeLocationStateUseCase.configuredLocationMode.map { (mode, lat, lon) ->
- _state.update { s -> s.copy(
- mode = mode,
- specificLatitude = lat,
- specificLongitude = lon
- ) }
+ _state.update { s ->
+ s.copy(
+ mode = mode,
+ specificLatitude = lat,
+ specificLongitude = lon
+ )
+ }
},
getQuickPrivacyStateUseCase.showQuickPrivacyDisabledMessage.map {
_state.update { s -> s.copy(showQuickPrivacyDisabledMessage = it) }
},
specificLocationInputFlow
.debounce(SET_SPECIFIC_LOCATION_DELAY).map { action ->
- fakeLocationStateUseCase.setSpecificLocation(action.latitude, action.longitude)
- }
+ fakeLocationStateUseCase.setSpecificLocation(action.latitude, action.longitude)
+ }
).collect {}
}
launch {
fakeLocationStateUseCase.currentLocation.collect { location ->
- _singleEvents.emit(SingleEvent.LocationUpdatedEvent(
- mode = _state.value.mode,
- location = location
- ))
+ _singleEvents.emit(
+ SingleEvent.LocationUpdatedEvent(
+ mode = _state.value.mode,
+ location = location
+ )
+ )
}
}
}
@@ -110,7 +114,7 @@ class FakeLocationViewModel(
sealed class SingleEvent {
data class LocationUpdatedEvent(val mode: LocationMode, val location: Location?) : SingleEvent()
- object RequestLocationPermission: SingleEvent()
+ object RequestLocationPermission : SingleEvent()
data class ErrorEvent(val error: String) : SingleEvent()
}
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersState.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersState.kt
index f51ff18..2437366 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersState.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersState.kt
@@ -26,4 +26,4 @@ data class TrackersState(
val yearStatistics: TrackersPeriodicStatistics? = null,
val apps: List<AppWithCounts>? = null,
val showQuickPrivacyDisabledMessage: Boolean = false
-) \ No newline at end of file
+)
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersViewModel.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersViewModel.kt
index f49152e..3869c39 100644
--- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersViewModel.kt
+++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersViewModel.kt
@@ -52,11 +52,13 @@ class TrackersViewModel(
trackersStatisticsUseCase.listenUpdates().map {
trackersStatisticsUseCase.getDayMonthYearStatistics()
.let { (day, month, year) ->
- _state.update { s -> s.copy(
+ _state.update { s ->
+ s.copy(
dayStatistics = day,
monthStatistics = month,
yearStatistics = year
- ) }
+ )
+ }
}
},
trackersStatisticsUseCase.getAppsWithCounts().map {
@@ -74,7 +76,7 @@ class TrackersViewModel(
}
}
- suspend private fun actionClickApp(action: Action.ClickAppAction) {
+ private suspend fun actionClickApp(action: Action.ClickAppAction) {
state.value.apps?.find { it.packageName == action.packageName }?.let {
_singleEvents.emit(SingleEvent.OpenAppDetailsEvent(it))
}
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 ae169b4..cd4f6b2 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
@@ -36,7 +36,6 @@ import foundation.e.privacycentralapp.R
import foundation.e.privacycentralapp.common.NavToolbarFragment
import foundation.e.privacycentralapp.common.initQuickPrivacySnackbar
import foundation.e.privacycentralapp.databinding.ApptrackersFragmentBinding
-import foundation.e.privacycentralapp.common.extensions.toText
import kotlinx.coroutines.launch
class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
@@ -69,7 +68,8 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (arguments == null ||
- requireArguments().getInt(PARAM_APP_UID, Int.MIN_VALUE) == Int.MIN_VALUE) {
+ requireArguments().getInt(PARAM_APP_UID, Int.MIN_VALUE) == Int.MIN_VALUE
+ ) {
activity?.supportFragmentManager?.popBackStack()
}
}
@@ -110,7 +110,7 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
viewModel.singleEvents.collect { event ->
when (event) {
is AppTrackersViewModel.SingleEvent.ErrorEvent ->
- displayToast(event.error.toText(requireContext()))
+ displayToast(getString(event.errorResId))
is AppTrackersViewModel.SingleEvent.OpenUrl ->
try {
startActivity(Intent(Intent.ACTION_VIEW, event.url))
@@ -151,7 +151,6 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) {
binding.blockAllToggle.isChecked = state.isBlockingActivated
-
val trackersStatus = state.getTrackersStatus()
if (!trackersStatus.isNullOrEmpty()) {
binding.trackersListTitle.isVisible = state.isBlockingActivated
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 ffa1f36..d6d0858 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
@@ -29,11 +29,12 @@ data class AppTrackersState(
val isQuickPrivacyEnabled: Boolean = false,
val showQuickPrivacyDisabledMessage: Boolean = false,
) {
- fun getTrackersStatus(): List<Pair<Tracker, Boolean>>?
- = trackersWithWhiteList?.map { it.first to !it.second }
+ fun getTrackersStatus(): List<Pair<Tracker, Boolean>>? {
+ return trackersWithWhiteList?.map { it.first to !it.second }
+ }
fun getTrackersCount() = trackersWithWhiteList?.size ?: 0
fun getBlockedTrackersCount(): Int = if (isQuickPrivacyEnabled && isBlockingActivated)
- trackersWithWhiteList?.count { !it.second }?: 0
+ trackersWithWhiteList?.count { !it.second } ?: 0
else 0
-} \ No newline at end of file
+}
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 faa4e6b..52ef2c4 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
@@ -18,6 +18,7 @@
package foundation.e.privacycentralapp.features.trackers.apptrackers
import android.net.Uri
+import androidx.annotation.StringRes
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase
@@ -53,11 +54,13 @@ class AppTrackersViewModel(
init {
viewModelScope.launch(Dispatchers.IO) {
- _state.update { it.copy(
- appDesc = trackersStateUseCase.getApplicationDescription(appUid),
- isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid),
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
- ) }
+ _state.update {
+ it.copy(
+ appDesc = trackersStateUseCase.getApplicationDescription(appUid),
+ isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid),
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
+ )
+ }
}
}
@@ -74,56 +77,69 @@ class AppTrackersViewModel(
}
fun submitAction(action: Action) = viewModelScope.launch {
- when (action) {
- is Action.BlockAllToggleAction -> blockAllToggleAction(action)
- is Action.ToggleTrackerAction -> toggleTrackerAction(action)
- is Action.ClickTracker ->actionClickTracker(action)
- is Action.CloseQuickPrivacyDisabledMessage ->
- getQuickPrivacyStateUseCase.resetQuickPrivacyDisabledMessage()
- }
+ when (action) {
+ is Action.BlockAllToggleAction -> blockAllToggleAction(action)
+ is Action.ToggleTrackerAction -> toggleTrackerAction(action)
+ is Action.ClickTracker -> actionClickTracker(action)
+ is Action.CloseQuickPrivacyDisabledMessage ->
+ getQuickPrivacyStateUseCase.resetQuickPrivacyDisabledMessage()
+ }
}
- private suspend fun blockAllToggleAction(action: Action.BlockAllToggleAction)
- = withContext(Dispatchers.IO) {
- trackersStateUseCase.toggleAppWhitelist(appUid, !action.isBlocked)
- _state.update { it.copy(
- isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid)
- ) }
+ private suspend fun blockAllToggleAction(action: Action.BlockAllToggleAction) {
+ withContext(Dispatchers.IO) {
+ trackersStateUseCase.toggleAppWhitelist(appUid, !action.isBlocked)
+ _state.update {
+ it.copy(
+ isBlockingActivated = !trackersStateUseCase.isWhitelisted(appUid)
+ )
+ }
+ }
}
- private suspend fun toggleTrackerAction(action: Action.ToggleTrackerAction)
- = withContext(Dispatchers.IO) {
- if (state.value.isBlockingActivated) {
- trackersStateUseCase.blockTracker(appUid, action.tracker, action.isBlocked)
- _state.update { it.copy(
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid)
- ) }
+ private suspend fun toggleTrackerAction(action: Action.ToggleTrackerAction) {
+ withContext(Dispatchers.IO) {
+ if (state.value.isBlockingActivated) {
+ trackersStateUseCase.blockTracker(appUid, action.tracker, action.isBlocked)
+ _state.update {
+ it.copy(
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(
+ appUid
+ )
+ )
+ }
+ }
}
}
- private suspend fun actionClickTracker(action: Action.ClickTracker)
- = withContext(Dispatchers.IO) {
- action.tracker.exodusId?.let {
- try {
- _singleEvents.emit(SingleEvent.OpenUrl(
- Uri.parse(exodusBaseUrl + it)
- ))
- } catch (e: Exception) {}
+ private suspend fun actionClickTracker(action: Action.ClickTracker) {
+ withContext(Dispatchers.IO) {
+ action.tracker.exodusId?.let {
+ try {
+ _singleEvents.emit(
+ SingleEvent.OpenUrl(
+ Uri.parse(exodusBaseUrl + it)
+ )
+ )
+ } catch (e: Exception) {
+ }
+ }
}
}
private fun fetchStatistics() {
val (blocked, leaked) = trackersStatisticsUseCase.getCalls(appUid)
- return _state.update { s -> s.copy(
- trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
- leaked = leaked,
- blocked = blocked,
- ) }
+ return _state.update { s ->
+ s.copy(
+ trackersWithWhiteList = trackersStatisticsUseCase.getTrackersWithWhiteList(appUid),
+ leaked = leaked,
+ blocked = blocked,
+ )
+ }
}
-
sealed class SingleEvent {
- data class ErrorEvent(val error: Any) : SingleEvent()
+ data class ErrorEvent(@StringRes val errorResId: Int) : SingleEvent()
data class OpenUrl(val url: Uri) : SingleEvent()
}