Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt +1 −2 Original line number Original line Diff line number Diff line Loading @@ -68,8 +68,7 @@ abstract class AppOpPermissionListModel( open val permissionHasAppOpFlag: Boolean = true open val permissionHasAppOpFlag: Boolean = true /** These not changeable packages will also be hidden from app list. */ /** These not changeable packages will also be hidden from app list. */ private val notChangeablePackages = private val notChangeablePackages = setOf("com.android.systemui") setOf("android", "com.android.systemui", context.packageName) private fun createAppOpsPermissionController(app: ApplicationInfo) = private fun createAppOpsPermissionController(app: ApplicationInfo) = AppOpsPermissionController(context, app, appOps, permission) AppOpsPermissionController(context, app, appOps, permission) Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -110,7 +110,7 @@ internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionApp app: ApplicationInfo, app: ApplicationInfo, ) { ) { val record = remember { transformItem(app) } val record = remember { transformItem(app) } if (!remember { isChangeable(record) }) return if (!remember { isChangeableWithSystemUidCheck(record) }) return val context = LocalContext.current val context = LocalContext.current val internalListModel = remember { val internalListModel = remember { TogglePermissionInternalAppListModel( TogglePermissionInternalAppListModel( Loading Loading @@ -178,6 +178,6 @@ private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberRecord(app: private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberIsChangeable(record: T) = private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberIsChangeable(record: T) = remember(record) { remember(record) { flow { flow { emit(isChangeable(record)) emit(isChangeableWithSystemUidCheck(record)) }.flowOn(Dispatchers.Default) }.flowOn(Dispatchers.Default) }.collectAsStateWithLifecycle(initialValue = false) }.collectAsStateWithLifecycle(initialValue = false) packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +19 −1 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settingslib.spaprivileged.template.app import android.content.Context import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo import android.os.Process import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.common.SettingsPageProvider Loading Loading @@ -82,6 +83,23 @@ interface TogglePermissionAppListModel<T : AppRecord> { 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 { interface TogglePermissionAppListProvider { val permissionType: String val permissionType: String Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.rememberContext 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.framework.util.getStringArg import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.PreferenceModel Loading Loading @@ -143,7 +144,7 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( listModel.transform(userIdFlow, appListFlow) listModel.transform(userIdFlow, appListFlow) override fun filter(userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<T>>) = override fun filter(userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<T>>) = listModel.filter(userIdFlow, recordListFlow) listModel.filter(userIdFlow, recordListFlow.filterItem { !it.isSystemOrRootUid() }) @Composable @Composable override fun getSummary(option: Int, record: T) = getSummary(record) override fun getSummary(option: Int, record: T) = getSummary(record) Loading packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -278,7 +278,7 @@ class AppOpPermissionAppListTest { const val PERMISSION = "PERMISSION" const val PERMISSION = "PERMISSION" const val BROADER_PERMISSION = "BROADER_PERMISSION" const val BROADER_PERMISSION = "BROADER_PERMISSION" val APP = ApplicationInfo().apply { packageName = PACKAGE_NAME } 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" } } } } } Loading Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppList.kt +1 −2 Original line number Original line Diff line number Diff line Loading @@ -68,8 +68,7 @@ abstract class AppOpPermissionListModel( open val permissionHasAppOpFlag: Boolean = true open val permissionHasAppOpFlag: Boolean = true /** These not changeable packages will also be hidden from app list. */ /** These not changeable packages will also be hidden from app list. */ private val notChangeablePackages = private val notChangeablePackages = setOf("com.android.systemui") setOf("android", "com.android.systemui", context.packageName) private fun createAppOpsPermissionController(app: ApplicationInfo) = private fun createAppOpsPermissionController(app: ApplicationInfo) = AppOpsPermissionController(context, app, appOps, permission) AppOpsPermissionController(context, app, appOps, permission) Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -110,7 +110,7 @@ internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionApp app: ApplicationInfo, app: ApplicationInfo, ) { ) { val record = remember { transformItem(app) } val record = remember { transformItem(app) } if (!remember { isChangeable(record) }) return if (!remember { isChangeableWithSystemUidCheck(record) }) return val context = LocalContext.current val context = LocalContext.current val internalListModel = remember { val internalListModel = remember { TogglePermissionInternalAppListModel( TogglePermissionInternalAppListModel( Loading Loading @@ -178,6 +178,6 @@ private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberRecord(app: private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberIsChangeable(record: T) = private fun <T : AppRecord> TogglePermissionAppListModel<T>.rememberIsChangeable(record: T) = remember(record) { remember(record) { flow { flow { emit(isChangeable(record)) emit(isChangeableWithSystemUidCheck(record)) }.flowOn(Dispatchers.Default) }.flowOn(Dispatchers.Default) }.collectAsStateWithLifecycle(initialValue = false) }.collectAsStateWithLifecycle(initialValue = false)
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +19 −1 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settingslib.spaprivileged.template.app import android.content.Context import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo import android.os.Process import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsEntryBuilder import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.common.SettingsPageProvider Loading Loading @@ -82,6 +83,23 @@ interface TogglePermissionAppListModel<T : AppRecord> { 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 { interface TogglePermissionAppListProvider { val permissionType: String val permissionType: String Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.rememberContext 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.framework.util.getStringArg import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.PreferenceModel Loading Loading @@ -143,7 +144,7 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( listModel.transform(userIdFlow, appListFlow) listModel.transform(userIdFlow, appListFlow) override fun filter(userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<T>>) = override fun filter(userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<T>>) = listModel.filter(userIdFlow, recordListFlow) listModel.filter(userIdFlow, recordListFlow.filterItem { !it.isSystemOrRootUid() }) @Composable @Composable override fun getSummary(option: Int, record: T) = getSummary(record) override fun getSummary(option: Int, record: T) = getSummary(record) Loading
packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppOpPermissionAppListTest.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -278,7 +278,7 @@ class AppOpPermissionAppListTest { const val PERMISSION = "PERMISSION" const val PERMISSION = "PERMISSION" const val BROADER_PERMISSION = "BROADER_PERMISSION" const val BROADER_PERMISSION = "BROADER_PERMISSION" val APP = ApplicationInfo().apply { packageName = PACKAGE_NAME } 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" } } } } } Loading