/* * 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 }