summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nate Myren <ntmyren@google.com> 2019-11-19 09:30:20 -0800
committer Nate Myren <ntmyren@google.com> 2019-11-19 09:49:12 -0800
commit1efb2265382de61595fa85da3a0c79d11b8ba474 (patch)
treecb64ce8d0acf7d2258c08b3c712ff04bc4baac2a
parent7f6620987562ba3dfee93d507261d2947c7442ef (diff)
Set location provider state on group level
Change the location provider and extra location package's location grant state on the package level, not the individual permission level. This prevents packages being incorrectly marked as user sensitive. Test: Go to the location permissions screen, on a device with google play services as its location provider. Google play services should not be shown unless you select "show system" Change-Id: I50cd37237365c020b086c710c577b5c49bdadb3d
-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 9c3bb8a23..eee67e474 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
}
} \ No newline at end of file