From 3a05659d05ab6ce8601a2fe26291a09d2ef19b81 Mon Sep 17 00:00:00 2001 From: Lyn Date: Fri, 17 Feb 2023 02:37:59 +0000 Subject: [PATCH] Update USER_SET flag when user toggles FSI permission Grant test apk GRANT_RUNTIME_PERMISSIONS so that tests can call PackageManager#updatePermissionFlags Fixes: 269689524 Test: AppOpsControllerTest, AppOpPermissionAppListTest Test: make SettingsGoogle -j40 adb install -r out/target/product/$TARGET_PRODUCT/system_ext/priv-app/SettingsGoogle/SettingsGoogle.apk Go to Settings > Apps > Special app access > Manage full screen intents > Notify Toggle permission, then run: adb shell dumpsys package [test_app_package] See that USER_SET flag is set: android.permission.USE_FULL_SCREEN_INTENT: granted=true, flags=[ USER_SET] Change-Id: Iab258eaa05c9bf82b9ff4b7167016aa44ac26868 --- .../SettingsLib/SpaPrivileged/AndroidManifest.xml | 3 ++- .../spaprivileged/model/app/AppOpsController.kt | 11 +++++++++++ .../spaprivileged/model/app/AppOpsControllerTest.kt | 9 +++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml b/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml index d1dceb309b996..5396de0ed70b2 100644 --- a/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml +++ b/packages/SettingsLib/SpaPrivileged/AndroidManifest.xml @@ -17,6 +17,7 @@ - + + diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppOpsController.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppOpsController.kt index 171903f5c648c..c6090042895eb 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppOpsController.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppOpsController.kt @@ -16,11 +16,14 @@ package com.android.settingslib.spaprivileged.model.app +import android.app.AppOpsManager; import android.app.AppOpsManager.MODE_ALLOWED import android.app.AppOpsManager.MODE_ERRORED import android.app.AppOpsManager.Mode import android.content.Context import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager +import android.os.UserHandle import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.map @@ -44,17 +47,25 @@ class AppOpsController( private val setModeByUid: Boolean = false, ) : IAppOpsController { private val appOpsManager = context.appOpsManager + private val packageManager = context.packageManager override val mode: LiveData get() = _mode override fun setAllowed(allowed: Boolean) { val mode = if (allowed) MODE_ALLOWED else modeForNotAllowed + if (setModeByUid) { appOpsManager.setUidMode(op, app.uid, mode) } else { appOpsManager.setMode(op, app.uid, app.packageName, mode) } + + val permission = AppOpsManager.opToPermission(op) + packageManager.updatePermissionFlags(permission, app.packageName, + PackageManager.FLAG_PERMISSION_USER_SET, PackageManager.FLAG_PERMISSION_USER_SET, + UserHandle.getUserHandleForUid(app.uid)) + _mode.postValue(mode) } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt index fd2ceb7e34f23..23270c147d85a 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppOpsControllerTest.kt @@ -22,6 +22,7 @@ import android.app.AppOpsManager.MODE_ERRORED import android.app.AppOpsManager.MODE_IGNORED import android.content.Context import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.spaprivileged.framework.common.appOpsManager @@ -31,6 +32,10 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock +import org.mockito.Mockito.any +import org.mockito.Mockito.anyInt +import org.mockito.Mockito.anyString +import org.mockito.Mockito.doNothing import org.mockito.Mockito.verify import org.mockito.Mockito.`when` as whenever import org.mockito.Spy @@ -45,9 +50,13 @@ class AppOpsControllerTest { @Mock private lateinit var appOpsManager: AppOpsManager + @Mock private lateinit var packageManager: PackageManager + @Before fun setUp() { whenever(context.appOpsManager).thenReturn(appOpsManager) + doNothing().`when`(packageManager) + .updatePermissionFlags(anyString(), anyString(), anyInt(), anyInt(), any()) } @Test