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
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.settingslib.spaprivileged">
|
||||
<uses-permission android:name="android.permission.MANAGE_USERS" />
|
||||
<uses-permission android:name="android.permission.MANAGE_USERS" />
|
||||
<uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
|
||||
</manifest>
|
||||
|
||||
|
||||
@@ -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<Int>
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user