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

Commit 44622764 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Add Spinner & AppListSwitchItem to App List"

parents 20c05fda c7f35f82
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -46,8 +46,7 @@ class AppsRepository(context: Context) {
                    .toSet()
            }
            val flags = PackageManager.ApplicationInfoFlags.of(
                ((if (userInfo.isAdmin) PackageManager.MATCH_ANY_USER else 0) or
                    PackageManager.MATCH_DISABLED_COMPONENTS or
                (PackageManager.MATCH_DISABLED_COMPONENTS or
                    PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS).toLong()
            )
            val installedApplicationsAsUser =
+17 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.settingslib.spaprivileged.model.app
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.util.Log

private const val TAG = "PackageManagers"

object PackageManagers {
    fun getPackageInfoAsUser(packageName: String, userId: Int): PackageInfo =
@@ -26,4 +29,18 @@ object PackageManagers {

    fun getApplicationInfoAsUser(packageName: String, userId: Int): ApplicationInfo =
        PackageManager.getApplicationInfoAsUserCached(packageName, 0, userId)

    fun hasRequestPermission(app: ApplicationInfo, permission: String): Boolean {
        val packageInfo = try {
            PackageManager.getPackageInfoAsUserCached(
                app.packageName, PackageManager.GET_PERMISSIONS.toLong(), app.userId
            )
        } catch (e: PackageManager.NameNotFoundException) {
            Log.w(TAG, "getPackageInfoAsUserCached() failed", e)
            return false
        }
        return packageInfo?.requestedPermissions?.let {
            permission in it
        } ?: false
    }
}
+16 −9
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@

package com.android.settingslib.spaprivileged.template.app

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
@@ -32,6 +34,7 @@ import androidx.compose.ui.res.stringResource
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.widget.scaffold.MoreOptionsAction
import com.android.settingslib.spa.widget.scaffold.SettingsScaffold
import com.android.settingslib.spa.widget.ui.Spinner
import com.android.settingslib.spaprivileged.R
import com.android.settingslib.spaprivileged.model.app.AppListModel
import com.android.settingslib.spaprivileged.model.app.AppRecord
@@ -53,18 +56,22 @@ fun <T : AppRecord> AppListPage(
    ) { paddingValues ->
        Spacer(Modifier.padding(paddingValues))
        WorkProfilePager { userInfo ->
            // TODO: Add a Spinner here.
            Column(Modifier.fillMaxSize()) {
                val options = remember { listModel.getSpinnerOptions() }
                val selectedOption = rememberSaveable { mutableStateOf(0) }
                Spinner(options, selectedOption.value) { selectedOption.value = it }
                AppList(
                    userInfo = userInfo,
                    listModel = listModel,
                    showSystem = showSystem,
                option = stateOf(0),
                    option = selectedOption,
                    searchQuery = stateOf(""),
                    appItem = appItem,
                )
            }
        }
    }
}

@Composable
private fun ShowSystemAction(showSystem: Boolean, setShowSystem: (showSystem: Boolean) -> Unit) {
+32 −0
Original line number Diff line number Diff line
package com.android.settingslib.spaprivileged.template.app

import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
import com.android.settingslib.spaprivileged.model.app.AppRecord

@Composable
fun <T : AppRecord> AppListSwitchItem(
    itemModel: AppListItemModel<T>,
    onClick: () -> Unit,
    checked: State<Boolean?>,
    changeable: State<Boolean>,
    onCheckedChange: ((newChecked: Boolean) -> Unit)?,
) {
    TwoTargetSwitchPreference(
        model = remember {
            object : SwitchPreferenceModel {
                override val title = itemModel.label
                override val summary = itemModel.summary
                override val checked = checked
                override val changeable = changeable
                override val onCheckedChange = onCheckedChange
            }
        },
        icon = { AppIcon(itemModel.record.app, SettingsDimension.appIconItemSize) },
        onClick = onClick,
    )
}