Loading app/src/e/res/values/strings.xml +1 −1 Original line number Diff line number Diff line <resources> <string name="app_name">e - PrivacyModulesDemo</string> <string name="app_name">PrivacyCentral</string> </resources> app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt +4 −4 Original line number Diff line number Diff line Loading @@ -86,19 +86,19 @@ class DependencyContainer constructor(val app: Application) { IpScramblingStateUseCase(ipScramblerModule, localStateRepository, GlobalScope) } private val appListUseCase by lazy { AppListUseCase(permissionsModule) AppListUseCase(permissionsModule, GlobalScope) } private val trackersStatisticsUseCase by lazy { TrackersStatisticsUseCase(trackersPrivacyMock) TrackersStatisticsUseCase(trackTrackersPrivacyModule) } private val trackersStateUseCase by lazy { TrackersStateUseCase(trackersPrivacyMock, trackersPrivacyMock, permissionsModule) TrackersStateUseCase(blockTrackersPrivacyModule, trackTrackersPrivacyModule, permissionsModule, localStateRepository, GlobalScope) } // ViewModelFactories val dashBoardViewModelFactory by lazy { DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase) DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase, trackersStateUseCase) } val fakeLocationViewModelFactory by lazy { Loading app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt +21 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,31 @@ package foundation.e.privacycentralapp.domain.usecases import android.Manifest import foundation.e.privacymodules.permissions.PermissionsPrivacyModule import foundation.e.privacymodules.permissions.data.ApplicationDescription import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch class AppListUseCase( private val permissionsModule: PermissionsPrivacyModule private val permissionsModule: PermissionsPrivacyModule, private val corouteineScope: CoroutineScope ) { fun getAppsUsingInternet(): List<ApplicationDescription> { private val _appsUsingInternet = MutableStateFlow<List<ApplicationDescription>>(emptyList()) init { corouteineScope.launch { _appsUsingInternet.value = getAppsUsingInternetList() } } fun getAppsUsingInternet(): Flow<List<ApplicationDescription>> { corouteineScope.launch { _appsUsingInternet.value = getAppsUsingInternetList() } return _appsUsingInternet } private fun getAppsUsingInternetList(): List<ApplicationDescription> { return permissionsModule.getInstalledApplications() .filter { permissionsModule.getPermissions(it.packageName) Loading app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt +1 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import kotlinx.coroutines.launch class IpScramblingStateUseCase( private val ipScramblerModule: IIpScramblerModule, private val localStateRepository: LocalStateRepository, private val coroutineScope: CoroutineScope coroutineScope: CoroutineScope ) { // private val internetPrivacyModeMutableFlow = MutableStateFlow(InternetPrivacyMode.REAL_IP) Loading app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt +36 −1 Original line number Diff line number Diff line Loading @@ -17,17 +17,50 @@ package foundation.e.privacycentralapp.domain.usecases import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacymodules.permissions.PermissionsPrivacyModule 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.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class TrackersStateUseCase( private val blockTrackersPrivacyModule: IBlockTrackersPrivacyModule, private val trackersPrivacyModule: ITrackTrackersPrivacyModule, private val permissionsPrivacyModule: PermissionsPrivacyModule private val permissionsPrivacyModule: PermissionsPrivacyModule, private val localStateRepository: LocalStateRepository, coroutineScope: CoroutineScope ) { private val _areAllTrackersBlocked = MutableStateFlow( blockTrackersPrivacyModule.isBlockingEnabled() && blockTrackersPrivacyModule.isWhiteListEmpty() ) val areAllTrackersBlocked: StateFlow<Boolean> = _areAllTrackersBlocked init { coroutineScope.launch { localStateRepository.quickPrivacyEnabledFlow.collect { enabled -> if (enabled) { blockTrackersPrivacyModule.enableBlocking() } else { blockTrackersPrivacyModule.disableBlocking() } updateAllTrackersBlockedState() } } } private fun updateAllTrackersBlockedState() { _areAllTrackersBlocked.value = blockTrackersPrivacyModule.isBlockingEnabled() && blockTrackersPrivacyModule.isWhiteListEmpty() } fun getApplicationPermission(packageName: String): ApplicationDescription { return permissionsPrivacyModule.getApplicationDescription(packageName) } Loading @@ -46,9 +79,11 @@ class TrackersStateUseCase( fun toggleAppWhitelist(appUid: Int, isWhitelisted: Boolean) { blockTrackersPrivacyModule.setWhiteListed(appUid, isWhitelisted) updateAllTrackersBlockedState() } fun blockTracker(appUid: Int, tracker: Tracker, isBlocked: Boolean) { blockTrackersPrivacyModule.setWhiteListed(tracker, appUid, !isBlocked) updateAllTrackersBlockedState() } } Loading
app/src/e/res/values/strings.xml +1 −1 Original line number Diff line number Diff line <resources> <string name="app_name">e - PrivacyModulesDemo</string> <string name="app_name">PrivacyCentral</string> </resources>
app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt +4 −4 Original line number Diff line number Diff line Loading @@ -86,19 +86,19 @@ class DependencyContainer constructor(val app: Application) { IpScramblingStateUseCase(ipScramblerModule, localStateRepository, GlobalScope) } private val appListUseCase by lazy { AppListUseCase(permissionsModule) AppListUseCase(permissionsModule, GlobalScope) } private val trackersStatisticsUseCase by lazy { TrackersStatisticsUseCase(trackersPrivacyMock) TrackersStatisticsUseCase(trackTrackersPrivacyModule) } private val trackersStateUseCase by lazy { TrackersStateUseCase(trackersPrivacyMock, trackersPrivacyMock, permissionsModule) TrackersStateUseCase(blockTrackersPrivacyModule, trackTrackersPrivacyModule, permissionsModule, localStateRepository, GlobalScope) } // ViewModelFactories val dashBoardViewModelFactory by lazy { DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase) DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase, trackersStateUseCase) } val fakeLocationViewModelFactory by lazy { Loading
app/src/main/java/foundation/e/privacycentralapp/domain/usecases/AppListUseCase.kt +21 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,31 @@ package foundation.e.privacycentralapp.domain.usecases import android.Manifest import foundation.e.privacymodules.permissions.PermissionsPrivacyModule import foundation.e.privacymodules.permissions.data.ApplicationDescription import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch class AppListUseCase( private val permissionsModule: PermissionsPrivacyModule private val permissionsModule: PermissionsPrivacyModule, private val corouteineScope: CoroutineScope ) { fun getAppsUsingInternet(): List<ApplicationDescription> { private val _appsUsingInternet = MutableStateFlow<List<ApplicationDescription>>(emptyList()) init { corouteineScope.launch { _appsUsingInternet.value = getAppsUsingInternetList() } } fun getAppsUsingInternet(): Flow<List<ApplicationDescription>> { corouteineScope.launch { _appsUsingInternet.value = getAppsUsingInternetList() } return _appsUsingInternet } private fun getAppsUsingInternetList(): List<ApplicationDescription> { return permissionsModule.getInstalledApplications() .filter { permissionsModule.getPermissions(it.packageName) Loading
app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt +1 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import kotlinx.coroutines.launch class IpScramblingStateUseCase( private val ipScramblerModule: IIpScramblerModule, private val localStateRepository: LocalStateRepository, private val coroutineScope: CoroutineScope coroutineScope: CoroutineScope ) { // private val internetPrivacyModeMutableFlow = MutableStateFlow(InternetPrivacyMode.REAL_IP) Loading
app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt +36 −1 Original line number Diff line number Diff line Loading @@ -17,17 +17,50 @@ package foundation.e.privacycentralapp.domain.usecases import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacymodules.permissions.PermissionsPrivacyModule 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.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class TrackersStateUseCase( private val blockTrackersPrivacyModule: IBlockTrackersPrivacyModule, private val trackersPrivacyModule: ITrackTrackersPrivacyModule, private val permissionsPrivacyModule: PermissionsPrivacyModule private val permissionsPrivacyModule: PermissionsPrivacyModule, private val localStateRepository: LocalStateRepository, coroutineScope: CoroutineScope ) { private val _areAllTrackersBlocked = MutableStateFlow( blockTrackersPrivacyModule.isBlockingEnabled() && blockTrackersPrivacyModule.isWhiteListEmpty() ) val areAllTrackersBlocked: StateFlow<Boolean> = _areAllTrackersBlocked init { coroutineScope.launch { localStateRepository.quickPrivacyEnabledFlow.collect { enabled -> if (enabled) { blockTrackersPrivacyModule.enableBlocking() } else { blockTrackersPrivacyModule.disableBlocking() } updateAllTrackersBlockedState() } } } private fun updateAllTrackersBlockedState() { _areAllTrackersBlocked.value = blockTrackersPrivacyModule.isBlockingEnabled() && blockTrackersPrivacyModule.isWhiteListEmpty() } fun getApplicationPermission(packageName: String): ApplicationDescription { return permissionsPrivacyModule.getApplicationDescription(packageName) } Loading @@ -46,9 +79,11 @@ class TrackersStateUseCase( fun toggleAppWhitelist(appUid: Int, isWhitelisted: Boolean) { blockTrackersPrivacyModule.setWhiteListed(appUid, isWhitelisted) updateAllTrackersBlockedState() } fun blockTracker(appUid: Int, tracker: Tracker, isBlocked: Boolean) { blockTrackersPrivacyModule.setWhiteListed(tracker, appUid, !isBlocked) updateAllTrackersBlockedState() } }