summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-11-21 17:30:12 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-11-21 17:30:12 +0000
commit80af05718e2b770bc801ad57e00779aedcd3a530 (patch)
tree7c45d767f7836a14d807599346f336a00abf3cf5
parent9a660c0256530947c1948f956da48613db51cd39 (diff)
parent1efb2265382de61595fa85da3a0c79d11b8ba474 (diff)
Merge "Set location provider state on group level"
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupLiveData.kt22
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt18
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/data/PermStateLiveData.kt16
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightAppPermGroup.kt12
4 files changed, 45 insertions, 23 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupLiveData.kt
index 3433bb19f..441298665 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupLiveData.kt
@@ -22,6 +22,7 @@ import android.os.Build
import android.os.UserHandle
import com.android.permissioncontroller.permission.model.livedatatypes.LightAppPermGroup
import com.android.permissioncontroller.permission.model.livedatatypes.LightPermission
+import com.android.permissioncontroller.permission.utils.LocationUtils
import com.android.permissioncontroller.permission.utils.SoftRestrictedPermissionPolicy
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.Utils.OS_PKG
@@ -37,8 +38,8 @@ import com.android.permissioncontroller.permission.utils.Utils.OS_PKG
class AppPermGroupLiveData(
private val app: Application,
private val packageName: String,
- permGroupName: String,
- user: UserHandle
+ private val permGroupName: String,
+ private val user: UserHandle
) : SmartUpdateMediatorLiveData<LightAppPermGroup>() {
private val permStateLiveData = PermStateRepository.getPermStateLiveData(app, packageName,
@@ -101,6 +102,21 @@ class AppPermGroupLiveData(
permissionMap[permName] = LightPermission(permInfo, permState)
}
}
- value = LightAppPermGroup(packageInfo, permGroup.groupInfo, permissionMap)
+
+ // Determine if this app permission group is a special location package or provider
+ var specialLocationGrant: Boolean? = null
+ val userContext = Utils.getUserContext(app, user)
+ if (LocationUtils.isLocationGroupAndProvider(userContext, permGroupName, packageName)) {
+ specialLocationGrant = LocationUtils.isLocationEnabled(app)
+ }
+ // The permission of the extra location controller package is determined by the status of
+ // the controller package itself.
+ if (LocationUtils.isLocationGroupAndControllerExtraPackage(app, permGroupName,
+ packageName)) {
+ specialLocationGrant = LocationUtils.isExtraLocationControllerPackageEnabled(
+ userContext)
+ }
+ value = LightAppPermGroup(packageInfo, permGroup.groupInfo, permissionMap,
+ specialLocationGrant)
}
} \ No newline at end of file
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
index df6fe8ce1..63e293c85 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt
@@ -27,6 +27,7 @@ import com.android.permissioncontroller.permission.model.livedatatypes.LightPack
import com.android.permissioncontroller.permission.model.livedatatypes.LightPermGroupInfo
import com.android.permissioncontroller.permission.model.livedatatypes.LightPermInfo
import com.android.permissioncontroller.permission.model.livedatatypes.PermState
+import com.android.permissioncontroller.permission.utils.LocationUtils
import com.android.permissioncontroller.permission.utils.Utils
/**
@@ -216,7 +217,7 @@ class AppPermGroupUiInfoLiveData(
}
}
- val anyAllowed = permissionState.any { it.value.granted }
+ val anyAllowed = getIsSpecialLocationState() ?: permissionState.any { it.value.granted }
if (anyAllowed && hasPermWithBackground) {
return PermGrantState.PERMS_ALLOWED_FOREGROUND_ONLY
} else if (anyAllowed) {
@@ -224,6 +225,21 @@ class AppPermGroupUiInfoLiveData(
}
return PermGrantState.PERMS_DENIED
}
+
+ private fun getIsSpecialLocationState(): Boolean? {
+ val userContext = Utils.getUserContext(app, user)
+ if (LocationUtils.isLocationGroupAndProvider(userContext, permissionGroupName,
+ packageName)) {
+ return LocationUtils.isLocationEnabled(userContext)
+ }
+ // The permission of the extra location controller package is determined by the
+ // status of the controller package itself.
+ if (LocationUtils.isLocationGroupAndControllerExtraPackage(userContext,
+ permissionGroupName, packageName)) {
+ return LocationUtils.isExtraLocationControllerPackageEnabled(userContext)
+ }
+ return null
+ }
}
/**
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/PermStateLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/PermStateLiveData.kt
index 3ecfcdc6c..559f55c24 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/PermStateLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/PermStateLiveData.kt
@@ -16,14 +16,12 @@
package com.android.permissioncontroller.permission.data
-import android.Manifest
import android.app.Application
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.UserHandle
import com.android.permissioncontroller.permission.model.livedatatypes.LightPackageInfo
import com.android.permissioncontroller.permission.model.livedatatypes.PermState
-import com.android.permissioncontroller.permission.utils.LocationUtils
import com.android.permissioncontroller.permission.utils.Utils
import kotlinx.coroutines.Job
@@ -90,20 +88,6 @@ class PermStateLiveData(
var granted = packageFlags and PackageInfo.REQUESTED_PERMISSION_GRANTED != 0 &&
permFlags and PackageManager.FLAG_PERMISSION_REVOKED_COMPAT == 0
- // Check if this package is a location provider
- if (permissionGroupName == Manifest.permission_group.LOCATION) {
- val userContext = Utils.getUserContext(app, user)
- if (LocationUtils.isLocationGroupAndProvider(userContext, permissionGroupName,
- packageName)) {
- granted = LocationUtils.isLocationEnabled(userContext)
- }
- // The permission of the extra location controller package is determined by the
- // status of the controller package itself.
- if (LocationUtils.isLocationGroupAndControllerExtraPackage(userContext,
- permissionGroupName, packageName)) {
- granted = LocationUtils.isExtraLocationControllerPackageEnabled(userContext)
- }
- }
if (job.isCancelled) {
return
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightAppPermGroup.kt b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightAppPermGroup.kt
index 057f59991..db0a9e503 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightAppPermGroup.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/model/livedatatypes/LightAppPermGroup.kt
@@ -25,12 +25,18 @@ import android.os.UserHandle
* @param packageInfo: Information about the package
* @param permGroupInfo: Information about the permission group
* @param permissions: The permissions in the permission group that the package requests
+ * @param specialLocationGrant: If this package is the location provider, or the extra location
+ * package, then the grant state of the group is not determined by the grant state of individual
+ * permissions, but by other system properties
*/
data class LightAppPermGroup(
val packageInfo: LightPackageInfo,
val permGroupInfo: LightPermGroupInfo,
- val permissions: Map<String, LightPermission>
+ val permissions: Map<String, LightPermission>,
+ val specialLocationGrant: Boolean?
) {
+ constructor(pI: LightPackageInfo, pGI: LightPermGroupInfo, perms: Map<String, LightPermission>):
+ this(pI, pGI, perms, null)
/**
* The current userHandle of this AppPermGroup.
*/
@@ -82,14 +88,14 @@ data class LightAppPermGroup(
/**
* Whether any of this App Permission Group's foreground permissions are granted
*/
- val isForegroundGranted = permissions.any {
+ val isForegroundGranted = specialLocationGrant ?: permissions.any {
!backgroundPermNames.contains(it.key) && it.value.grantedIncludingAppOp
}
/**
* Whether any of this App Permission Group's background permissions are granted
*/
- val isBackgroundGranted = permissions.any {
+ val isBackgroundGranted = specialLocationGrant ?: permissions.any {
backgroundPermNames.contains(it.key) && it.value.grantedIncludingAppOp
}