diff options
| author | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-11-06 18:19:17 +0000 | 
|---|---|---|
| committer | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-11-06 18:19:17 +0000 | 
| commit | 99b27efb59ba642bfca0c6fbabfaa2c6631e15b9 (patch) | |
| tree | c55aed6119dff29a84d7120bedf88e2df1775597 /app/src/main/java/foundation/e/privacycentralapp/domain | |
| parent | 9701ef06a47560ca429f1e7fffd0958b376ec628 (diff) | |
| parent | fdeecefd34c00b225bd58f6cc7135a95e21728f1 (diff) | |
| download | advanced-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/domain')
6 files changed, 50 insertions, 43 deletions
| diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/TrackerMode.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/TrackerMode.kt index ae70ba3..9f057be 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/TrackerMode.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/TrackerMode.kt @@ -19,4 +19,4 @@ package foundation.e.privacycentralapp.domain.entities  enum class TrackerMode {      DENIED, CUSTOM, VULNERABLE -}
\ No newline at end of file +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt index 1426891..e9da855 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/FakeLocationStateUseCase.kt @@ -67,8 +67,8 @@ class FakeLocationStateUseCase(          get() = appContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager      private fun hasAcquireLocationPermission(): Boolean { -        return (appContext.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) -            || permissionsModule.toggleDangerousPermission(appDesc, android.Manifest.permission.ACCESS_FINE_LOCATION, true) +        return (appContext.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) || +            permissionsModule.toggleDangerousPermission(appDesc, android.Manifest.permission.ACCESS_FINE_LOCATION, true)      }      private fun applySettings(isQuickPrivacyEnabled: Boolean, fakeLocation: Pair<Float, Float>?, isSpecificLocation: Boolean = false) { @@ -85,8 +85,8 @@ class FakeLocationStateUseCase(      }      private fun hasAcquireMockLocationPermission(): Boolean { -        return (permissionsModule.getAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION) == AppOpModes.ALLOWED) -            || permissionsModule.setAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION, AppOpModes.ALLOWED) +        return (permissionsModule.getAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION) == AppOpModes.ALLOWED) || +            permissionsModule.setAppOpMode(appDesc, AppOpsManager.OPSTR_MOCK_LOCATION, AppOpModes.ALLOWED)      }      fun setSpecificLocation(latitude: Float, longitude: Float) { @@ -140,7 +140,8 @@ class FakeLocationStateUseCase(          override fun onLocationChanged(location: Location) {              currentLocation.update { previous ->                  if ((previous?.time ?: 0) + 1800 < location.time || -                    (previous?.accuracy ?: Float.MAX_VALUE) > location.accuracy) { +                    (previous?.accuracy ?: Float.MAX_VALUE) > location.accuracy +                ) {                      location                  } else {                      previous @@ -193,10 +194,10 @@ class FakeLocationStateUseCase(              ) -            locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)?: -            locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)?.let { -                localListener.onLocationChanged(it) -            } +            locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) +                ?: locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)?.let { +                    localListener.onLocationChanged(it) +                }          } catch (se: SecurityException) {              Log.e(TAG, "Missing permission", se)          } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt index e1f773f..46e054e 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/GetQuickPrivacyStateUseCase.kt @@ -22,6 +22,7 @@ import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode  import foundation.e.privacycentralapp.domain.entities.LocationMode  import foundation.e.privacycentralapp.domain.entities.QuickPrivacyState  import foundation.e.privacycentralapp.domain.entities.TrackerMode +import foundation.e.privacymodules.permissions.data.ApplicationDescription  import kotlinx.coroutines.CoroutineScope  import kotlinx.coroutines.flow.Flow  import kotlinx.coroutines.flow.SharedFlow @@ -106,6 +107,5 @@ class GetQuickPrivacyStateUseCase(          localStateRepository.setShowQuickPrivacyDisabledMessage(false)      } -    val otherVpnRunning: SharedFlow<Boolean> = localStateRepository.otherVpnRunning - +    val otherVpnRunning: SharedFlow<ApplicationDescription> = localStateRepository.otherVpnRunning  } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt index 3320721..cb9fcd5 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/IpScramblingStateUseCase.kt @@ -20,6 +20,10 @@ package foundation.e.privacycentralapp.domain.usecases  import foundation.e.privacycentralapp.data.repositories.AppListsRepository  import foundation.e.privacycentralapp.data.repositories.LocalStateRepository  import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode +import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode.HIDE_IP +import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode.HIDE_IP_LOADING +import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode.REAL_IP +import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode.REAL_IP_LOADING  import foundation.e.privacymodules.ipscramblermodule.IIpScramblerModule  import foundation.e.privacymodules.permissions.IPermissionsPrivacyModule  import foundation.e.privacymodules.permissions.data.ApplicationDescription @@ -126,30 +130,33 @@ class IpScramblingStateUseCase(      }      private fun applySettings(isQuickPrivacyEnabled: Boolean, isIpScramblingEnabled: Boolean) { +        val settingEnabled = isQuickPrivacyEnabled && isIpScramblingEnabled +        val currentMode = localStateRepository.internetPrivacyMode.value +          when { -            isQuickPrivacyEnabled && isIpScramblingEnabled -> when (localStateRepository.internetPrivacyMode.value) { -                InternetPrivacyMode.REAL_IP, InternetPrivacyMode.REAL_IP_LOADING -> { -                    var intent = ipScramblerModule.prepareAndroidVpn() -                    if (intent != null) { -                        permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName) -                        intent = ipScramblerModule.prepareAndroidVpn() -                    } - -                    if (intent != null) { -                        coroutineScope.launch { -                            localStateRepository.emitOtherVpnRunning() -                        } -                        localStateRepository.setIpScramblingSetting(enabled = false) -                    } else { -                        ipScramblerModule.start(enableNotification = false) -                    } -                } -                else -> {} -            } -            else -> when (localStateRepository.internetPrivacyMode.value) { -                InternetPrivacyMode.HIDE_IP, InternetPrivacyMode.HIDE_IP_LOADING -> ipScramblerModule.stop() -                else -> {} +            settingEnabled && currentMode in setOf(REAL_IP, REAL_IP_LOADING) -> +                applyStartIpScrambling() + +            !settingEnabled && currentMode in setOf(HIDE_IP, HIDE_IP_LOADING) -> +                ipScramblerModule.stop() + +            else -> {} +        } +    } + +    private fun applyStartIpScrambling() { +        ipScramblerModule.prepareAndroidVpn()?.let { +            permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName) +            permissionsPrivacyModule.getAlwaysOnVpnPackage() +        }?.let { +            coroutineScope.launch { +                localStateRepository.emitOtherVpnRunning( +                    permissionsPrivacyModule.getApplicationDescription(packageName = it, withIcon = false) +                )              } +            localStateRepository.setIpScramblingSetting(enabled = false) +        } ?: run { +            ipScramblerModule.start(enableNotification = false)          }      } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt index 10c1ad0..17e5096 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStateUseCase.kt @@ -20,7 +20,6 @@ package foundation.e.privacycentralapp.domain.usecases  import foundation.e.privacycentralapp.data.repositories.AppListsRepository  import foundation.e.privacycentralapp.data.repositories.LocalStateRepository  import foundation.e.privacycentralapp.data.repositories.TrackersRepository -import foundation.e.privacymodules.permissions.PermissionsPrivacyModule  import foundation.e.privacymodules.permissions.data.ApplicationDescription  import foundation.e.privacymodules.trackers.api.IBlockTrackersPrivacyModule  import foundation.e.privacymodules.trackers.api.ITrackTrackersPrivacyModule @@ -63,8 +62,9 @@ class TrackersStateUseCase(          return appListsRepository.getApplicationDescription(appUid)      } -    fun isWhitelisted(appUid: Int) -        = isWhitelisted(appUid, appListsRepository, blockTrackersPrivacyModule) +    fun isWhitelisted(appUid: Int): Boolean { +        return isWhitelisted(appUid, appListsRepository, blockTrackersPrivacyModule) +    }      fun getTrackersWhitelistIds(appUid: Int): List<String> {          return if (appUid == appListsRepository.dummySystemApp.uid) { @@ -108,7 +108,6 @@ class TrackersStateUseCase(      }  } -  fun isWhitelisted(      appUid: Int,      appListsRepository: AppListsRepository, diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt index 0a47bc5..57ab1a4 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/TrackersStatisticsUseCase.kt @@ -166,17 +166,15 @@ class TrackersStatisticsUseCase(                  acc.addAll(blockTrackersPrivacyModule.getWhiteList(app.uid).map { it.id })                  acc              } -          } else {              trackers = trackTrackersPrivacyModule.getTrackersForApp(appUid)              whiteListedTrackersIds = blockTrackersPrivacyModule.getWhiteList(appUid)                  .map { it.id }.toSet()          } -        return trackers.sortedBy { it.label.lowercase() }.map { tracker -> tracker to whiteListedTrackersIds.any { tracker.id == it }} +        return trackers.sortedBy { it.label.lowercase() }.map { tracker -> tracker to whiteListedTrackersIds.any { tracker.id == it } }      } -      fun getCalls(appUid: Int): Pair<Int, Int> {          return if (appUid == appListsRepository.dummySystemApp.uid) {              appListsRepository.getHiddenSystemApps().map { @@ -211,10 +209,12 @@ class TrackersStatisticsUseCase(                              blockTrackersPrivacyModule.getWhiteList(app.uid).size                          },                          blockedLeaks = appListsRepository.foldForHiddenSystemApp(app.uid) { -                            appUid -> callsByApp.getOrDefault(appUid, 0 to 0).first +                            appUid -> +                            callsByApp.getOrDefault(appUid, 0 to 0).first                          },                          leaks = appListsRepository.foldForHiddenSystemApp(app.uid) { -                            appUid -> callsByApp.getOrDefault(appUid, 0 to 0).second +                            appUid -> +                            callsByApp.getOrDefault(appUid, 0 to 0).second                          }                      )                  }.sortedWith(mostLeakedAppsComparator) | 
