Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8864bd8a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "SplitPermissionControllerTests" into rvc-dev

* changes:
  Test onUpgradeLockedDataLoaded
  Keep record of restricted permissions in LightAppPermGroup
  Speed up tests mocking PermissionControllerApplication
  Add tests for whitelisting of preinstalled packages on OTA.
  Allow to call .application on an Application object
  Split permission controller unit tests
parents 5372a9b7 e3b0dd75
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -30,6 +30,16 @@ java_library {
    ],
}

// File to be included by permission controller app an mocking tests
filegroup {
    name: "permissioncontroller-sources",
    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
        "src/**/*.proto",
    ],
}

android_app {
    name: "PermissionController",
    sdk_version: "system_current",
@@ -38,11 +48,7 @@ android_app {
    privileged: true,
    certificate: "platform",

    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
        "src/**/*.proto",
    ],
    srcs: [":permissioncontroller-sources"],

    libs: ["android.car-stubs"],

@@ -64,6 +70,7 @@ android_app {
        "androidx.leanback_leanback-preference",
        "androidx.lifecycle_lifecycle-extensions",
        "androidx.lifecycle_lifecycle-common-java8",
        "kotlin-stdlib",
        "kotlinx-coroutines-android",
        "androidx.navigation_navigation-common-ktx",
        "androidx.navigation_navigation-fragment-ktx",
@@ -79,7 +86,8 @@ android_app {
        "SettingsLibProgressBar",
        "androidx.annotation_annotation",
        "permissioncontroller-statsd",
        "car-ui-lib"
        "car-ui-lib",
        "libprotobuf-java-lite",
    ],

    proto: {
+3 −0
Original line number Diff line number Diff line
{
    "presubmit": [
        {
            "name": "PermissionControllerMockingTests"
        },
        {
            "name": "CtsRoleTestCases",
            "options": [
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import com.android.permissioncontroller.role.model.Role;
import com.android.permissioncontroller.role.model.Roles;
import com.android.permissioncontroller.role.ui.SpecialAppAccessListActivity;

public class PermissionControllerApplication extends Application {
public final class PermissionControllerApplication extends Application {

    private static PermissionControllerApplication sInstance;

+4 −16
Original line number Diff line number Diff line
@@ -103,23 +103,11 @@ class LightAppPermGroupLiveData private constructor(
        }

        val permissionMap = mutableMapOf<String, LightPermission>()
        val whitelistedRestricted = app.packageManager.getWhitelistedRestrictedPermissions(
                packageName, Utils.FLAGS_PERMISSION_WHITELIST_ALL)
        val unrestrictedPermStates = permStates.filter { (permName, permState) ->
            val permInfo = permGroup.permissionInfos[permName] ?: return@filter false
            val isHardRestricted = permInfo.flags and PermissionInfo.FLAG_HARD_RESTRICTED != 0
            val isWhitelisted = whitelistedRestricted.contains(permName)
            val isSoftRestricted = permInfo.flags and PermissionInfo.FLAG_SOFT_RESTRICTED != 0 &&
                !SoftRestrictedPermissionPolicy.shouldShow(packageInfo, permName,
                    permState.permFlags)
            return@filter (!isHardRestricted || isWhitelisted) && (!isSoftRestricted)
        }

        for ((permName, permState) in unrestrictedPermStates) {
        for ((permName, permState) in permStates) {
            val permInfo = permGroup.permissionInfos[permName] ?: continue
            val foregroundPerms = allForegroundPerms[permName]?.filter {
                unrestrictedPermStates.containsKey(it) }
            permissionMap[permName] = LightPermission(permInfo, permState, foregroundPerms)
            val foregroundPerms = allForegroundPerms[permName]
            permissionMap[permName] = LightPermission(packageInfo, permInfo, permState,
                    foregroundPerms)
        }

        // Determine if this app permission group is a special location package or provider
+9 −2
Original line number Diff line number Diff line
@@ -25,7 +25,8 @@ 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 allPermissions The permissions in the permission group that the package requests
 * (including restricted ones).
 * @param hasInstallToRuntimeSplit If this group contains a permission that was previously an
 * install permission, but is currently a runtime permission
 * @param specialLocationGrant If this package is the location provider, or the extra location
@@ -35,13 +36,19 @@ import android.os.UserHandle
data class LightAppPermGroup(
    val packageInfo: LightPackageInfo,
    val permGroupInfo: LightPermGroupInfo,
    val permissions: Map<String, LightPermission>,
    val allPermissions: Map<String, LightPermission>,
    val hasInstallToRuntimeSplit: Boolean,
    val specialLocationGrant: Boolean?
) {
    constructor(pI: LightPackageInfo, pGI: LightPermGroupInfo, perms: Map<String, LightPermission>):
        this(pI, pGI, perms, false, null)

    /**
     * All unrestricted permissions. Usually restricted permissions are ignored
     */
    val permissions: Map<String, LightPermission> =
            allPermissions.filter { (_, permission) -> !permission.isRestricted }

    /**
     * The package name of this group
     */
Loading