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