diff options
| author | Amit Kumar <amitkma@e.email> | 2021-05-04 01:26:13 +0530 |
|---|---|---|
| committer | Amit Kumar <amitkma@e.email> | 2021-05-04 01:26:13 +0530 |
| commit | 076144023e449d83b64363dc0da0fa00a0ea2c00 (patch) | |
| tree | 05fee3ff7ac178d4277ff8da7b4a2e78962b33eb /app/src/main/java/foundation/e/privacycentralapp/dummy | |
| parent | 6f9180d527cecf5c65d0aac5f75ecfefe1ff5a9e (diff) | |
| download | advanced-privacy-076144023e449d83b64363dc0da0fa00a0ea2c00.tar.gz | |
Add permission feature and improve code quality
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/dummy')
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/dummy/DummyDataSource.kt | 72 | ||||
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/dummy/Extensions.kt | 17 |
2 files changed, 63 insertions, 26 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/dummy/DummyDataSource.kt b/app/src/main/java/foundation/e/privacycentralapp/dummy/DummyDataSource.kt index 3f2dc1e..aef994b 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/dummy/DummyDataSource.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/dummy/DummyDataSource.kt @@ -45,10 +45,11 @@ import kotlin.random.Random * Dummmy permission data class. */ data class Permission( + val id: Int, val name: String, val iconId: Int, - val packagesRequested: List<String> = emptyList(), - val packagesAllowed: List<String> = emptyList() + val packagesRequested: Set<String> = emptySet(), + val packagesAllowed: Set<String> = emptySet() ) enum class LocationMode { @@ -62,8 +63,6 @@ enum class InternetPrivacyMode { data class Location(val mode: LocationMode, val latitude: Double, val longitude: Double) object DummyDataSource { - private val _appsUsingLocationPerm = MutableStateFlow<List<String>>(emptyList()) - val appsUsingLocationPerm = _appsUsingLocationPerm.asStateFlow() const val trackersCount = 77 private val _activeTrackersCount = MutableStateFlow(10) @@ -75,8 +74,17 @@ object DummyDataSource { private val _internetActivityMode = MutableStateFlow(InternetPrivacyMode.REAL_IP) val internetActivityMode = _internetActivityMode.asStateFlow() + /** + * Declare dummy permissions with following ids + * + * [0] -> Body sensor + * [1] -> Calendar + * [2] -> Call Logs + * [3] -> Location + */ val permissions = arrayOf("Body Sensor", "Calendar", "Call Logs", "Location") - val icons = arrayOf( + + private val permissionIcons = arrayOf( R.drawable.ic_body_monitor, R.drawable.ic_calendar, R.drawable.ic_call, @@ -98,22 +106,26 @@ object DummyDataSource { "privacycentral" ) - val populatedPermission: List<Permission> by lazy { - fetchPermissions() - } + val _populatedPermissions = MutableStateFlow(fetchPermissions()) + val populatedPermission = _populatedPermissions.asStateFlow() + + private val _appsUsingLocationPerm = + MutableStateFlow(_populatedPermissions.value[3].packagesAllowed) + val appsUsingLocationPerm = _appsUsingLocationPerm.asStateFlow() private fun fetchPermissions(): List<Permission> { val result = mutableListOf<Permission>() permissions.forEachIndexed { index, permission -> when (index) { - 0 -> result.add(Permission(permission, icons[index])) + 0 -> result.add(Permission(index, permission, permissionIcons[index])) 1 -> { val randomPackages = getRandomItems(packages, 8) val grantedPackages = getRandomItems(randomPackages, 3) result.add( Permission( + index, permission, - icons[index], + permissionIcons[index], randomPackages, grantedPackages ) @@ -124,8 +136,9 @@ object DummyDataSource { val grantedPackages = getRandomItems(randomPackages, 9) result.add( Permission( + index, permission, - icons[index], + permissionIcons[index], randomPackages, grantedPackages ) @@ -136,8 +149,9 @@ object DummyDataSource { val grantedPackages = getRandomItems(randomPackages, 3) result.add( Permission( + index, permission, - icons[index], + permissionIcons[index], randomPackages, grantedPackages ) @@ -148,10 +162,10 @@ object DummyDataSource { return result } - private fun <T> getRandomItems(data: Array<T>, limit: Int): List<T> = - getRandomItems(data.asList(), limit) + private fun <T> getRandomItems(data: Array<T>, limit: Int): Set<T> = + getRandomItems(data.toSet(), limit) - private fun <T> getRandomItems(data: List<T>, limit: Int): List<T> { + private fun <T> getRandomItems(data: Set<T>, limit: Int): Set<T> { val randomItems = mutableSetOf<T>() val localData = data.toMutableList() repeat(limit) { @@ -159,12 +173,12 @@ object DummyDataSource { randomItems.add(generated) localData.remove(generated) } - return randomItems.toList() + return randomItems } - fun getPermission(permissionId: Int): Permission { - return populatedPermission.get(permissionId) - } + fun getPermission(permissionId: Int): Permission = populatedPermission.value[permissionId] + + fun getLocationPermissionApps(): Permission = getPermission(3) fun setLocationMode(locationMode: LocationMode, location: Location? = null): Boolean { when (locationMode) { @@ -190,4 +204,24 @@ object DummyDataSource { _internetActivityMode.value = mode return true } + + fun togglePermission(permissionId: Int, packageName: String, grant: Boolean) { + val allPermissions = _populatedPermissions.value.toMutableList() + val permission: Permission = allPermissions[permissionId].let { permission -> + + val packagesAllowed = permission.packagesAllowed.toMutableSet() + + if (grant) packagesAllowed.add(packageName) + else packagesAllowed.remove(packageName) + + permission.copy(packagesAllowed = packagesAllowed) + } + allPermissions[permissionId] = permission + _populatedPermissions.value = allPermissions + + // Update when permission is toggled for Location + if (permissionId == 3) { + _appsUsingLocationPerm.value = _populatedPermissions.value[permissionId].packagesAllowed + } + } } diff --git a/app/src/main/java/foundation/e/privacycentralapp/dummy/Extensions.kt b/app/src/main/java/foundation/e/privacycentralapp/dummy/Extensions.kt index c872012..133ad84 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/dummy/Extensions.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/dummy/Extensions.kt @@ -17,13 +17,16 @@ package foundation.e.privacycentralapp.dummy -fun LocationMode.mapToString(): String = when (this) { - LocationMode.REAL_LOCATION -> "Real location mode" - LocationMode.RANDOM_LOCATION -> "Random location mode" - LocationMode.CUSTOM_LOCATION -> "Fake location mode" +import android.content.Context +import foundation.e.privacycentralapp.R + +fun LocationMode.mapToString(context: Context): String = when (this) { + LocationMode.REAL_LOCATION -> context.getString(R.string.real_location_mode) + LocationMode.RANDOM_LOCATION -> context.getString(R.string.random_location_mode) + LocationMode.CUSTOM_LOCATION -> context.getString(R.string.fake_location_mode) } -fun InternetPrivacyMode.mapToString(): String = when (this) { - InternetPrivacyMode.REAL_IP -> "I'm exposing my real IP address" - InternetPrivacyMode.HIDE_IP -> "I'm anonymous on the internet" +fun InternetPrivacyMode.mapToString(context: Context): String = when (this) { + InternetPrivacyMode.REAL_IP -> context.getString(R.string.i_am_exposing) + InternetPrivacyMode.HIDE_IP -> context.getString(R.string.i_am_anonymous) } |
