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

Commit 757475a8 authored by Lyn Han's avatar Lyn Han Committed by Automerger Merge Worker
Browse files

Merge "Update USER_SET flag when user toggles FSI permission" into udc-dev am: c2a7bf8b

parents c16c18b3 c2a7bf8b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@
<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.GRANT_RUNTIME_PERMISSIONS" />
</manifest>
+11 −0
Original line number Diff line number Diff line
@@ -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)
    }

+9 −0
Original line number Diff line number Diff line
@@ -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