diff options
6 files changed, 26 insertions, 7 deletions
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 120b75ecb666..050527e52f0f 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 @@ -68,8 +68,7 @@ abstract class AppOpPermissionListModel( open val permissionHasAppOpFlag: Boolean = true /** These not changeable packages will also be hidden from app list. */ - private val notChangeablePackages = - setOf("android", "com.android.systemui", context.packageName) + private val notChangeablePackages = setOf("com.android.systemui") private fun createAppOpsPermissionController(app: ApplicationInfo) = AppOpsPermissionController(context, app, appOps, permission) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt index 27e00c05c33f..ea6a2720c512 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt @@ -110,7 +110,7 @@ internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionApp app: ApplicationInfo, ) { val record = remember { transformItem(app) } - if (!remember { isChangeable(record) }) return + if (!remember { isChangeableWithSystemUidCheck(record) }) return val context = LocalContext.current val internalListModel = remember { TogglePermissionInternalAppListModel( @@ -178,6 +178,6 @@ private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberRecord(app: private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberIsChangeable(record: T) = remember(record) { flow { - emit(isChangeable(record)) + emit(isChangeableWithSystemUidCheck(record)) }.flowOn(Dispatchers.Default) }.collectAsStateWithLifecycle(initialValue = false) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt index 3f7a8526839f..2a04424d70bf 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt @@ -18,6 +18,7 @@ package com.android.settingslib.spaprivileged.template.app import android.content.Context import android.content.pm.ApplicationInfo +import android.os.Process import androidx.compose.runtime.Composable import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsPageProvider @@ -79,9 +80,26 @@ interface TogglePermissionAppListModel<T : AppRecord> { fun setAllowed(record: T, newAllowed: Boolean) @Composable - fun InfoPageAdditionalContent(record: T, isAllowed: () -> Boolean?){} + fun InfoPageAdditionalContent(record: T, isAllowed: () -> Boolean?) {} } +/** + * And if the given app has system or root UID. + * + * If true, the app gets all permissions, so the permission toggle always not changeable. + */ +fun AppRecord.isSystemOrRootUid(): Boolean = app.uid in listOf(Process.SYSTEM_UID, Process.ROOT_UID) + +/** + * Gets whether the permission on / off is changeable for the given app. + * + * And if the given app has system or root UID, it gets all permissions, so always not changeable. + */ +fun <T : AppRecord> TogglePermissionAppListModel<T>.isChangeableWithSystemUidCheck( + record: T, +): Boolean = !record.isSystemOrRootUid() && isChangeable(record) + + interface TogglePermissionAppListProvider { val permissionType: String diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt index 2e8b76a03722..57102ba9ea46 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt @@ -33,6 +33,7 @@ import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.rememberContext +import com.android.settingslib.spa.framework.util.filterItem import com.android.settingslib.spa.framework.util.getStringArg import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel @@ -143,7 +144,7 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( listModel.transform(userIdFlow, appListFlow) override fun filter(userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<T>>) = - listModel.filter(userIdFlow, recordListFlow) + listModel.filter(userIdFlow, recordListFlow.filterItem { !it.isSystemOrRootUid() }) @Composable override fun getSummary(option: Int, record: T) = getSummary(record) 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 9d12fc7611cb..60eccd987724 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 @@ -278,7 +278,7 @@ class AppOpPermissionAppListTest { const val PERMISSION = "PERMISSION" const val BROADER_PERMISSION = "BROADER_PERMISSION" val APP = ApplicationInfo().apply { packageName = PACKAGE_NAME } - val NOT_CHANGEABLE_APP = ApplicationInfo().apply { packageName = "android" } + val NOT_CHANGEABLE_APP = ApplicationInfo().apply { packageName = "com.android.systemui" } } } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt index 270b3faa7ec6..d7147b5f7fe7 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt @@ -228,6 +228,7 @@ class TogglePermissionAppInfoPageTest { const val PACKAGE_NAME = "package.name" val APP = ApplicationInfo().apply { packageName = PACKAGE_NAME + uid = 11000 } val PACKAGE_INFO = PackageInfo().apply { packageName = PACKAGE_NAME |