/*
* Copyright (C) 2024 Leonard Kugis
* Copyright (C) 2023 MURENA SAS
* Copyright (C) 2021 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package foundation.e.advancedprivacy.domain.usecases
import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
import foundation.e.advancedprivacy.domain.entities.FeatureState
import foundation.e.advancedprivacy.domain.entities.LocationMode
import foundation.e.advancedprivacy.domain.entities.QuickPrivacyState
import foundation.e.advancedprivacy.domain.entities.TrackerMode
import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
class GetQuickPrivacyStateUseCase(
private val localStateRepository: LocalStateRepository,
) {
val quickPrivacyState: Flow = combine(
localStateRepository.blockTrackers,
localStateRepository.areAllTrackersBlocked,
localStateRepository.locationMode,
localStateRepository.internetPrivacyMode
) { isBlockTrackers, isAllTrackersBlocked, locationMode, internetPrivacyMode ->
when {
!isBlockTrackers &&
locationMode == LocationMode.REAL_LOCATION &&
internetPrivacyMode == FeatureState.OFF -> QuickPrivacyState.DISABLED
isAllTrackersBlocked &&
locationMode != LocationMode.REAL_LOCATION &&
internetPrivacyMode in listOf(
FeatureState.ON,
FeatureState.STARTING
) -> QuickPrivacyState.FULL_ENABLED
else -> QuickPrivacyState.ENABLED
}
}
val trackerMode: Flow = combine(
localStateRepository.blockTrackers,
localStateRepository.areAllTrackersBlocked
) { isBlockTrackers, isAllTrackersBlocked ->
when {
isBlockTrackers && isAllTrackersBlocked -> TrackerMode.DENIED
isBlockTrackers && !isAllTrackersBlocked -> TrackerMode.CUSTOM
else -> TrackerMode.VULNERABLE
}
}
val isLocationHidden: Flow = localStateRepository.locationMode.map { locationMode ->
locationMode != LocationMode.REAL_LOCATION
}
val locationMode: StateFlow = localStateRepository.locationMode
val ipScramblingMode: Flow =
localStateRepository.internetPrivacyMode
fun toggleTrackers(enabled: Boolean?) {
val value = enabled ?: !localStateRepository.blockTrackers.value
if (value != localStateRepository.blockTrackers.value) {
localStateRepository.setBlockTrackers(value)
}
}
@Suppress("UNUSED_PARAMETER")
fun toggleLocation(enabled: Boolean?) {
// val value = enabled ?: !localStateRepository.fakeLocationEnabled.value
// if (value != localStateRepository.fakeLocationEnabled.value) {
// localStateRepository.setFakeLocationEnabled(value)
// }
}
fun toggleIpScrambling(enabled: Boolean?) {
val value = enabled ?: !localStateRepository.ipScramblingSetting.value
if (value != localStateRepository.ipScramblingSetting.value) {
localStateRepository.setIpScramblingSetting(value)
}
}
val otherVpnRunning: SharedFlow = localStateRepository.otherVpnRunning
}