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

Commit aad8d39a authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Hide system / root UID apps from toggle permission page

Since system or root UID has granted all permissions.

Fix: 340413642
Test: manual - on toggle permission pages
Change-Id: Ibb46878a16da91a64385b74a4ae8dd404b5b7b73
parent 4c0faa6b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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)
+19 −1
Original line number Diff line number Diff line
@@ -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
@@ -82,6 +83,23 @@ interface TogglePermissionAppListModel<T : AppRecord> {
    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

+2 −1
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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" }
    }
}

Loading