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 8276e18..6e9bde4 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
@@ -29,46 +29,36 @@
 import kotlinx.coroutines.flow.map
 
 interface IAppOpsController {
-    val modeFlow: Flow<Int>
+    val mode: Flow<Int>
     val isAllowed: Flow<Boolean>
-        get() = modeFlow.map { it == MODE_ALLOWED }
+        get() = mode.map { it == MODE_ALLOWED }
 
     fun setAllowed(allowed: Boolean)
 
     @Mode fun getMode(): Int
 }
 
-data class AppOps(
-    val op: Int,
-    val modeForNotAllowed: Int = MODE_ERRORED,
-
-    /**
-     * Use AppOpsManager#setUidMode() instead of AppOpsManager#setMode() when set allowed.
-     *
-     * Security or privacy related app-ops should be set with setUidMode() instead of setMode().
-     */
-    val setModeByUid: Boolean = false,
-)
-
 class AppOpsController(
     context: Context,
     private val app: ApplicationInfo,
-    private val appOps: AppOps,
+    private val op: Int,
+    private val modeForNotAllowed: Int = MODE_ERRORED,
+    private val setModeByUid: Boolean = false,
 ) : IAppOpsController {
     private val appOpsManager = context.appOpsManager
     private val packageManager = context.packageManager
-    override val modeFlow = appOpsManager.opModeFlow(appOps.op, app)
+    override val mode = appOpsManager.opModeFlow(op, app)
 
     override fun setAllowed(allowed: Boolean) {
-        val mode = if (allowed) MODE_ALLOWED else appOps.modeForNotAllowed
+        val mode = if (allowed) MODE_ALLOWED else modeForNotAllowed
 
-        if (appOps.setModeByUid) {
-            appOpsManager.setUidMode(appOps.op, app.uid, mode)
+        if (setModeByUid) {
+            appOpsManager.setUidMode(op, app.uid, mode)
         } else {
-            appOpsManager.setMode(appOps.op, app.uid, app.packageName, mode)
+            appOpsManager.setMode(op, app.uid, app.packageName, mode)
         }
 
-        val permission = AppOpsManager.opToPermission(appOps.op)
+        val permission = AppOpsManager.opToPermission(op)
         if (permission != null) {
             packageManager.updatePermissionFlags(permission, app.packageName,
                     PackageManager.FLAG_PERMISSION_USER_SET,
@@ -77,6 +67,5 @@
         }
     }
 
-    @Mode
-    override fun getMode(): Int = appOpsManager.getOpMode(appOps.op, app)
+    @Mode override fun getMode(): Int = appOpsManager.getOpMode(op, app)
 }
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
index 37b1d73..5db5eae 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt
@@ -23,7 +23,6 @@
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import com.android.settingslib.spa.framework.util.asyncMapItem
 import com.android.settingslib.spa.framework.util.filterItem
-import com.android.settingslib.spaprivileged.model.app.AppOps
 import com.android.settingslib.spaprivileged.model.app.AppOpsController
 import com.android.settingslib.spaprivileged.model.app.AppRecord
 import com.android.settingslib.spaprivileged.model.app.IAppOpsController
@@ -45,11 +44,11 @@
     private val packageManagers: IPackageManagers = PackageManagers,
 ) : TogglePermissionAppListModel<AppOpPermissionRecord> {
 
-    abstract val appOps: AppOps
+    abstract val appOp: Int
     abstract val permission: String
 
     override val enhancedConfirmationKey: String?
-        get() = AppOpsManager.opToPublicName(appOps.op)
+        get() = AppOpsManager.opToPublicName(appOp)
 
     /**
      * When set, specifies the broader permission who trumps the [permission].
@@ -66,12 +65,27 @@
      */
     open val permissionHasAppOpFlag: Boolean = true
 
+    open val modeForNotAllowed: Int = AppOpsManager.MODE_ERRORED
+
+    /**
+     * Use AppOpsManager#setUidMode() instead of AppOpsManager#setMode() when set allowed.
+     *
+     * Security or privacy related app-ops should be set with setUidMode() instead of setMode().
+     */
+    open val setModeByUid = false
+
     /** These not changeable packages will also be hidden from app list. */
     private val notChangeablePackages =
         setOf("android", "com.android.systemui", context.packageName)
 
     private fun createAppOpsController(app: ApplicationInfo) =
-        AppOpsController(context, app, appOps)
+        AppOpsController(
+            context = context,
+            app = app,
+            op = appOp,
+            setModeByUid = setModeByUid,
+            modeForNotAllowed = modeForNotAllowed,
+        )
 
     private fun createRecord(
         app: ApplicationInfo,
@@ -152,7 +166,7 @@
         return { true }
     }
 
-    val mode = appOpsController.modeFlow.collectAsStateWithLifecycle(initialValue = null)
+    val mode = appOpsController.mode.collectAsStateWithLifecycle(initialValue = null)
     return {
         when (mode.value) {
             null -> null
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 74a7c14..91bbd9f 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
@@ -27,14 +27,16 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import com.android.settingslib.spaprivileged.framework.common.appOpsManager
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Spy
 import org.mockito.junit.MockitoJUnit
 import org.mockito.junit.MockitoRule
-import org.mockito.kotlin.doReturn
-import org.mockito.kotlin.mock
-import org.mockito.kotlin.spy
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doNothing
 import org.mockito.kotlin.verify
 import org.mockito.kotlin.whenever
 
@@ -42,18 +44,28 @@
 class AppOpsControllerTest {
     @get:Rule val mockito: MockitoRule = MockitoJUnit.rule()
 
-    private val appOpsManager = mock<AppOpsManager>()
+    @Spy private val context: Context = ApplicationProvider.getApplicationContext()
 
-    private val packageManager = mock<PackageManager>()
+    @Mock private lateinit var appOpsManager: AppOpsManager
 
-    private val context: Context = spy(ApplicationProvider.getApplicationContext()) {
-        on { appOpsManager } doReturn appOpsManager
-        on { packageManager } doReturn packageManager
+    @Mock private lateinit var packageManager: PackageManager
+
+    @Before
+    fun setUp() {
+        whenever(context.appOpsManager).thenReturn(appOpsManager)
+        whenever(context.packageManager).thenReturn(packageManager)
+        doNothing().whenever(packageManager)
+                .updatePermissionFlags(any(), any(), any(), any(), any())
     }
 
     @Test
     fun setAllowed_setToTrue() {
-        val controller = AppOpsController(context = context, app = APP, appOps = AppOps(OP))
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+            )
 
         controller.setAllowed(true)
 
@@ -62,7 +74,12 @@
 
     @Test
     fun setAllowed_setToFalse() {
-        val controller = AppOpsController(context = context, app = APP, appOps = AppOps(OP))
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+            )
 
         controller.setAllowed(false)
 
@@ -71,11 +88,13 @@
 
     @Test
     fun setAllowed_setToFalseWithModeForNotAllowed() {
-        val controller = AppOpsController(
-            context = context,
-            app = APP,
-            appOps = AppOps(op = OP, modeForNotAllowed = MODE_IGNORED),
-        )
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+                modeForNotAllowed = MODE_IGNORED,
+            )
 
         controller.setAllowed(false)
 
@@ -84,11 +103,13 @@
 
     @Test
     fun setAllowed_setToTrueByUid() {
-        val controller = AppOpsController(
-            context = context,
-            app = APP,
-            appOps = AppOps(op = OP, setModeByUid = true),
-        )
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+                setModeByUid = true,
+            )
 
         controller.setAllowed(true)
 
@@ -97,11 +118,13 @@
 
     @Test
     fun setAllowed_setToFalseByUid() {
-        val controller = AppOpsController(
-            context = context,
-            app = APP,
-            appOps = AppOps(op = OP, setModeByUid = true),
-        )
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+                setModeByUid = true,
+            )
 
         controller.setAllowed(false)
 
@@ -112,7 +135,12 @@
     fun getMode() {
         whenever(appOpsManager.checkOpNoThrow(OP, APP.uid, APP.packageName))
             .thenReturn(MODE_ALLOWED)
-        val controller = AppOpsController(context = context, app = APP, appOps = AppOps(OP))
+        val controller =
+            AppOpsController(
+                context = context,
+                app = APP,
+                op = OP,
+            )
 
         val mode = controller.getMode()
 
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
index 07ccdd5..bb25cf3 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt
@@ -25,7 +25,6 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull
 import com.android.settingslib.spaprivileged.framework.common.appOpsManager
-import com.android.settingslib.spaprivileged.model.app.AppOps
 import com.android.settingslib.spaprivileged.model.app.IAppOpsController
 import com.android.settingslib.spaprivileged.model.app.IPackageManagers
 import com.android.settingslib.spaprivileged.test.R
@@ -40,6 +39,7 @@
 import org.mockito.kotlin.doReturn
 import org.mockito.kotlin.mock
 import org.mockito.kotlin.spy
+import org.mockito.kotlin.verify
 import org.mockito.kotlin.whenever
 
 @RunWith(AndroidJUnit4::class)
@@ -287,6 +287,16 @@
         assertThat(appOpsController.setAllowedCalledWith).isTrue()
     }
 
+    @Test
+    fun setAllowed_setModeByUid() {
+        listModel.setModeByUid = true
+        val record = listModel.transformItem(APP)
+
+        listModel.setAllowed(record = record, newAllowed = true)
+
+        verify(appOpsManager).setUidMode(listModel.appOp, APP.uid, AppOpsManager.MODE_ALLOWED)
+    }
+
     private fun getIsAllowed(record: AppOpPermissionRecord): Boolean? {
         lateinit var isAllowedState: () -> Boolean?
         composeTestRule.setContent { isAllowedState = listModel.isAllowed(record) }
@@ -299,9 +309,11 @@
         override val switchTitleResId = R.string.test_app_op_permission_switch_title
         override val footerResId = R.string.test_app_op_permission_footer
 
-        override val appOps = AppOps(AppOpsManager.OP_MANAGE_MEDIA)
+        override val appOp = AppOpsManager.OP_MANAGE_MEDIA
         override val permission = PERMISSION
         override var broaderPermission: String? = null
+
+        override var setModeByUid = false
     }
 
     private companion object {
@@ -317,7 +329,7 @@
 private class FakeAppOpsController(private val fakeMode: Int) : IAppOpsController {
     var setAllowedCalledWith: Boolean? = null
 
-    override val modeFlow = flowOf(fakeMode)
+    override val mode = flowOf(fakeMode)
 
     override fun setAllowed(allowed: Boolean) {
         setAllowedCalledWith = allowed
