Loading app/build.gradle +4 −4 Original line number Diff line number Diff line Loading @@ -95,14 +95,14 @@ dependencies { compileOnly files('libs/e-ui-sdk-1.0.1-q.jar') implementation files('libs/lineage-sdk.jar') implementation files('libs/trackerfilter.aar') //implementation project(":privacymodulesapi") // include the google specific version of the modules, just for the google flavor // TODO: google version is broken for now. googleImplementation project(":privacymodulesgoogle") googleImplementation project(":privacymodulesgoogle") // include the e specific version of the modules, just for the e flavor eImplementation 'foundation.e:privacymodule.e-29:0.3.2' eImplementation project(":privacymodulese") implementation 'foundation.e:privacymodule.api:0.3.2' implementation 'foundation.e:privacymodule.api:0.4.1' implementation 'foundation.e:privacymodule.tor:0.1.1' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' Loading app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt +15 −12 Original line number Diff line number Diff line Loading @@ -22,21 +22,22 @@ import android.content.Context import android.os.Process import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.domain.usecases.AppListUseCase import foundation.e.privacycentralapp.domain.usecases.FakeLocationStateUseCase import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase import foundation.e.privacycentralapp.domain.usecases.IpScramblingStateUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStateUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStatisticsUseCase import foundation.e.privacycentralapp.dummy.CityDataSource import foundation.e.privacycentralapp.dummy.TrackTrackersPrivacyMock import foundation.e.privacycentralapp.features.dashboard.DashBoardViewModelFactory import foundation.e.privacycentralapp.features.internetprivacy.InternetPrivacyViewModelFactory import foundation.e.privacycentralapp.features.location.FakeLocationViewModelFactory import foundation.e.privacycentralapp.features.location.LocationApiDelegate import foundation.e.privacycentralapp.features.trackers.TrackersViewModelFactory import foundation.e.privacycentralapp.features.trackers.apptrackers.AppTrackersViewModelFactory import foundation.e.privacymodules.ipscrambler.IpScramblerModule import foundation.e.privacymodules.ipscramblermodule.IIpScramblerModule import foundation.e.privacymodules.location.FakeLocation import foundation.e.privacymodules.location.IFakeLocation import foundation.e.privacymodules.location.FakeLocationModule import foundation.e.privacymodules.location.IFakeLocationModule import foundation.e.privacymodules.permissions.PermissionsPrivacyModule import foundation.e.privacymodules.permissions.data.ApplicationDescription import foundation.e.trackerfilter.api.BlockTrackersPrivacyModule Loading @@ -54,7 +55,7 @@ class DependencyContainer constructor(val app: Application) { val context: Context by lazy { app.applicationContext } // Drivers private val fakeLocationModule: IFakeLocation by lazy { FakeLocation(app.applicationContext) } private val fakeLocationModule: IFakeLocationModule by lazy { FakeLocationModule(app.applicationContext) } private val permissionsModule by lazy { PermissionsPrivacyModule(app.applicationContext) } private val ipScramblerModule: IIpScramblerModule by lazy { IpScramblerModule(app.applicationContext) } Loading @@ -67,10 +68,6 @@ class DependencyContainer constructor(val app: Application) { ) } private val locationApi by lazy { LocationApiDelegate(fakeLocationModule, permissionsModule, appDesc) } private val blockTrackersPrivacyModule by lazy { BlockTrackersPrivacyModule.getInstance(context) } // Repositories Loading @@ -85,9 +82,8 @@ class DependencyContainer constructor(val app: Application) { private val ipScramblingStateUseCase by lazy { IpScramblingStateUseCase(ipScramblerModule, localStateRepository, GlobalScope) } private val appListUseCase by lazy { AppListUseCase(permissionsModule, GlobalScope) } private val appListUseCase = AppListUseCase(permissionsModule, GlobalScope) private val trackersStatisticsUseCase by lazy { TrackersStatisticsUseCase(trackTrackersPrivacyModule) } Loading @@ -96,13 +92,20 @@ class DependencyContainer constructor(val app: Application) { TrackersStateUseCase(blockTrackersPrivacyModule, trackTrackersPrivacyModule, permissionsModule, localStateRepository, GlobalScope) } private val fakeLocationStateUseCase by lazy { FakeLocationStateUseCase( fakeLocationModule, permissionsModule, localStateRepository, CityDataSource, appDesc, GlobalScope) } // ViewModelFactories val dashBoardViewModelFactory by lazy { DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase, trackersStateUseCase) } val fakeLocationViewModelFactory by lazy { FakeLocationViewModelFactory(locationApi) FakeLocationViewModelFactory( getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase, fakeLocationStateUseCase = fakeLocationStateUseCase) } val blockerService = BlockerInterface.getInstance(context) Loading app/src/main/java/foundation/e/privacycentralapp/dummy/CityDataSource.kt→app/src/main/java/foundation/e/privacycentralapp/data/repositories/CityDataSource.kt +46 −0 Original line number Diff line number Diff line Loading @@ -17,31 +17,20 @@ package foundation.e.privacycentralapp.dummy import foundation.e.privacycentralapp.domain.entities.LocationMode import kotlin.random.Random data class City(val name: String, val latitude: Double, val longitude: Double) { fun toRandomLocation(): Location { return Location(LocationMode.RANDOM_LOCATION, this.latitude, this.longitude) } } object CityDataSource { private val BARCELONA = Pair(41.3851, 2.1734) private val BUDAPEST = Pair(47.4979, 19.0402) private val ABU_DHABI = Pair(24.4539, 54.3773) private val HYDERABAD = Pair(17.3850, 78.4867) private val QUEZON_CITY = Pair(14.6760, 121.0437) private val PARIS = Pair(48.8566, 2.3522) private val LONDON = Pair(51.5074, 0.1278) private val SHANGHAI = Pair(31.2304, 121.4737) private val MADRID = Pair(40.4168, 3.7038) private val LAHORE = Pair(31.5204, 74.3587) private val CHICAGO = Pair(41.8781, 87.6298) private val BARCELONA = Pair(41.3851f, 2.1734f) private val BUDAPEST = Pair(47.4979f, 19.0402f) private val ABU_DHABI = Pair(24.4539f, 54.3773f) private val HYDERABAD = Pair(17.3850f, 78.4867f) private val QUEZON_CITY = Pair(14.6760f, 121.0437f) private val PARIS = Pair(48.8566f, 2.3522f) private val LONDON = Pair(51.5074f, 0.1278f) private val SHANGHAI = Pair(31.2304f, 121.4737f) private val MADRID = Pair(40.4168f, 3.7038f) private val LAHORE = Pair(31.5204f, 74.3587f) private val CHICAGO = Pair(41.8781f, 87.6298f) // LatLong Array, the order should be the same as that of R.array.cities private val latLongArray = arrayOf( val citiesLocationsList = listOf( BARCELONA, BUDAPEST, ABU_DHABI, Loading @@ -54,13 +43,4 @@ object CityDataSource { LAHORE, CHICAGO ) fun getRandomCity(cities: Array<String>): City { if (cities.size != latLongArray.size) { throw IllegalStateException("LatLong array must have the same number of element as in cities array.") } val randomIndex = Random.nextInt(cities.size) val latLong = latLongArray[randomIndex] return City(cities[randomIndex], latLong.first, latLong.second) } } app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt +23 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ class LocalStateRepository(context: Context) { private const val SHARED_PREFS_FILE = "localState" private const val KEY_QUICK_PRIVACY = "quickPrivacy" private const val KEY_IP_SCRAMBLING = "ipScrambling" private const val KEY_FAKE_LATITUDE = "fakeLatitude" private const val KEY_FAKE_LONGITUDE = "fakeLongitude" } private val sharedPref = context.getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE) Loading @@ -40,6 +42,27 @@ class LocalStateRepository(context: Context) { var quickPrivacyEnabledFlow: Flow<Boolean> = quickPrivacyEnabledMutableFlow var fakeLocation: Pair<Float, Float>? get() = if (sharedPref.contains(KEY_FAKE_LATITUDE) && sharedPref.contains( KEY_FAKE_LONGITUDE)) Pair( sharedPref.getFloat(KEY_FAKE_LATITUDE, 0f), sharedPref.getFloat(KEY_FAKE_LONGITUDE, 0f)) else null set(value) { if (value == null) { sharedPref.edit() .remove(KEY_FAKE_LATITUDE) .remove(KEY_FAKE_LONGITUDE) .commit() } else { sharedPref.edit() .putFloat(KEY_FAKE_LATITUDE, value.first) .putFloat(KEY_FAKE_LONGITUDE, value.second) .commit() } } var isIpScramblingEnabled: Boolean get() = sharedPref.getBoolean(KEY_IP_SCRAMBLING, false) set(value) = set(KEY_IP_SCRAMBLING, value) Loading app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt +1 −1 Original line number Diff line number Diff line Loading @@ -18,5 +18,5 @@ package foundation.e.privacycentralapp.domain.entities enum class LocationMode { REAL_LOCATION, RANDOM_LOCATION, CUSTOM_LOCATION REAL_LOCATION, RANDOM_LOCATION, SPECIFIC_LOCATION } Loading
app/build.gradle +4 −4 Original line number Diff line number Diff line Loading @@ -95,14 +95,14 @@ dependencies { compileOnly files('libs/e-ui-sdk-1.0.1-q.jar') implementation files('libs/lineage-sdk.jar') implementation files('libs/trackerfilter.aar') //implementation project(":privacymodulesapi") // include the google specific version of the modules, just for the google flavor // TODO: google version is broken for now. googleImplementation project(":privacymodulesgoogle") googleImplementation project(":privacymodulesgoogle") // include the e specific version of the modules, just for the e flavor eImplementation 'foundation.e:privacymodule.e-29:0.3.2' eImplementation project(":privacymodulese") implementation 'foundation.e:privacymodule.api:0.3.2' implementation 'foundation.e:privacymodule.api:0.4.1' implementation 'foundation.e:privacymodule.tor:0.1.1' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' Loading
app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt +15 −12 Original line number Diff line number Diff line Loading @@ -22,21 +22,22 @@ import android.content.Context import android.os.Process import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.domain.usecases.AppListUseCase import foundation.e.privacycentralapp.domain.usecases.FakeLocationStateUseCase import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase import foundation.e.privacycentralapp.domain.usecases.IpScramblingStateUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStateUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStatisticsUseCase import foundation.e.privacycentralapp.dummy.CityDataSource import foundation.e.privacycentralapp.dummy.TrackTrackersPrivacyMock import foundation.e.privacycentralapp.features.dashboard.DashBoardViewModelFactory import foundation.e.privacycentralapp.features.internetprivacy.InternetPrivacyViewModelFactory import foundation.e.privacycentralapp.features.location.FakeLocationViewModelFactory import foundation.e.privacycentralapp.features.location.LocationApiDelegate import foundation.e.privacycentralapp.features.trackers.TrackersViewModelFactory import foundation.e.privacycentralapp.features.trackers.apptrackers.AppTrackersViewModelFactory import foundation.e.privacymodules.ipscrambler.IpScramblerModule import foundation.e.privacymodules.ipscramblermodule.IIpScramblerModule import foundation.e.privacymodules.location.FakeLocation import foundation.e.privacymodules.location.IFakeLocation import foundation.e.privacymodules.location.FakeLocationModule import foundation.e.privacymodules.location.IFakeLocationModule import foundation.e.privacymodules.permissions.PermissionsPrivacyModule import foundation.e.privacymodules.permissions.data.ApplicationDescription import foundation.e.trackerfilter.api.BlockTrackersPrivacyModule Loading @@ -54,7 +55,7 @@ class DependencyContainer constructor(val app: Application) { val context: Context by lazy { app.applicationContext } // Drivers private val fakeLocationModule: IFakeLocation by lazy { FakeLocation(app.applicationContext) } private val fakeLocationModule: IFakeLocationModule by lazy { FakeLocationModule(app.applicationContext) } private val permissionsModule by lazy { PermissionsPrivacyModule(app.applicationContext) } private val ipScramblerModule: IIpScramblerModule by lazy { IpScramblerModule(app.applicationContext) } Loading @@ -67,10 +68,6 @@ class DependencyContainer constructor(val app: Application) { ) } private val locationApi by lazy { LocationApiDelegate(fakeLocationModule, permissionsModule, appDesc) } private val blockTrackersPrivacyModule by lazy { BlockTrackersPrivacyModule.getInstance(context) } // Repositories Loading @@ -85,9 +82,8 @@ class DependencyContainer constructor(val app: Application) { private val ipScramblingStateUseCase by lazy { IpScramblingStateUseCase(ipScramblerModule, localStateRepository, GlobalScope) } private val appListUseCase by lazy { AppListUseCase(permissionsModule, GlobalScope) } private val appListUseCase = AppListUseCase(permissionsModule, GlobalScope) private val trackersStatisticsUseCase by lazy { TrackersStatisticsUseCase(trackTrackersPrivacyModule) } Loading @@ -96,13 +92,20 @@ class DependencyContainer constructor(val app: Application) { TrackersStateUseCase(blockTrackersPrivacyModule, trackTrackersPrivacyModule, permissionsModule, localStateRepository, GlobalScope) } private val fakeLocationStateUseCase by lazy { FakeLocationStateUseCase( fakeLocationModule, permissionsModule, localStateRepository, CityDataSource, appDesc, GlobalScope) } // ViewModelFactories val dashBoardViewModelFactory by lazy { DashBoardViewModelFactory(getQuickPrivacyStateUseCase, ipScramblingStateUseCase, trackersStatisticsUseCase, trackersStateUseCase) } val fakeLocationViewModelFactory by lazy { FakeLocationViewModelFactory(locationApi) FakeLocationViewModelFactory( getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase, fakeLocationStateUseCase = fakeLocationStateUseCase) } val blockerService = BlockerInterface.getInstance(context) Loading
app/src/main/java/foundation/e/privacycentralapp/dummy/CityDataSource.kt→app/src/main/java/foundation/e/privacycentralapp/data/repositories/CityDataSource.kt +46 −0 Original line number Diff line number Diff line Loading @@ -17,31 +17,20 @@ package foundation.e.privacycentralapp.dummy import foundation.e.privacycentralapp.domain.entities.LocationMode import kotlin.random.Random data class City(val name: String, val latitude: Double, val longitude: Double) { fun toRandomLocation(): Location { return Location(LocationMode.RANDOM_LOCATION, this.latitude, this.longitude) } } object CityDataSource { private val BARCELONA = Pair(41.3851, 2.1734) private val BUDAPEST = Pair(47.4979, 19.0402) private val ABU_DHABI = Pair(24.4539, 54.3773) private val HYDERABAD = Pair(17.3850, 78.4867) private val QUEZON_CITY = Pair(14.6760, 121.0437) private val PARIS = Pair(48.8566, 2.3522) private val LONDON = Pair(51.5074, 0.1278) private val SHANGHAI = Pair(31.2304, 121.4737) private val MADRID = Pair(40.4168, 3.7038) private val LAHORE = Pair(31.5204, 74.3587) private val CHICAGO = Pair(41.8781, 87.6298) private val BARCELONA = Pair(41.3851f, 2.1734f) private val BUDAPEST = Pair(47.4979f, 19.0402f) private val ABU_DHABI = Pair(24.4539f, 54.3773f) private val HYDERABAD = Pair(17.3850f, 78.4867f) private val QUEZON_CITY = Pair(14.6760f, 121.0437f) private val PARIS = Pair(48.8566f, 2.3522f) private val LONDON = Pair(51.5074f, 0.1278f) private val SHANGHAI = Pair(31.2304f, 121.4737f) private val MADRID = Pair(40.4168f, 3.7038f) private val LAHORE = Pair(31.5204f, 74.3587f) private val CHICAGO = Pair(41.8781f, 87.6298f) // LatLong Array, the order should be the same as that of R.array.cities private val latLongArray = arrayOf( val citiesLocationsList = listOf( BARCELONA, BUDAPEST, ABU_DHABI, Loading @@ -54,13 +43,4 @@ object CityDataSource { LAHORE, CHICAGO ) fun getRandomCity(cities: Array<String>): City { if (cities.size != latLongArray.size) { throw IllegalStateException("LatLong array must have the same number of element as in cities array.") } val randomIndex = Random.nextInt(cities.size) val latLong = latLongArray[randomIndex] return City(cities[randomIndex], latLong.first, latLong.second) } }
app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt +23 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ class LocalStateRepository(context: Context) { private const val SHARED_PREFS_FILE = "localState" private const val KEY_QUICK_PRIVACY = "quickPrivacy" private const val KEY_IP_SCRAMBLING = "ipScrambling" private const val KEY_FAKE_LATITUDE = "fakeLatitude" private const val KEY_FAKE_LONGITUDE = "fakeLongitude" } private val sharedPref = context.getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE) Loading @@ -40,6 +42,27 @@ class LocalStateRepository(context: Context) { var quickPrivacyEnabledFlow: Flow<Boolean> = quickPrivacyEnabledMutableFlow var fakeLocation: Pair<Float, Float>? get() = if (sharedPref.contains(KEY_FAKE_LATITUDE) && sharedPref.contains( KEY_FAKE_LONGITUDE)) Pair( sharedPref.getFloat(KEY_FAKE_LATITUDE, 0f), sharedPref.getFloat(KEY_FAKE_LONGITUDE, 0f)) else null set(value) { if (value == null) { sharedPref.edit() .remove(KEY_FAKE_LATITUDE) .remove(KEY_FAKE_LONGITUDE) .commit() } else { sharedPref.edit() .putFloat(KEY_FAKE_LATITUDE, value.first) .putFloat(KEY_FAKE_LONGITUDE, value.second) .commit() } } var isIpScramblingEnabled: Boolean get() = sharedPref.getBoolean(KEY_IP_SCRAMBLING, false) set(value) = set(KEY_IP_SCRAMBLING, value) Loading
app/src/main/java/foundation/e/privacycentralapp/domain/entities/LocationMode.kt +1 −1 Original line number Diff line number Diff line Loading @@ -18,5 +18,5 @@ package foundation.e.privacycentralapp.domain.entities enum class LocationMode { REAL_LOCATION, RANDOM_LOCATION, CUSTOM_LOCATION REAL_LOCATION, RANDOM_LOCATION, SPECIFIC_LOCATION }