Loading src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +5 −4 Original line number Diff line number Diff line Loading @@ -352,6 +352,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER | PackageManager.GET_SIGNATURES | PackageManager.GET_PERMISSIONS); mPackageName = mAppEntry.info.packageName; Loading Loading @@ -393,7 +394,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp // We don't allow uninstalling DO/PO on *any* users if it's a system app, because // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isSystemPackage(mActivity.getResources(), mPm, mPackageInfo.applicationInfo)) { if (isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -562,7 +563,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp // by not allowing disabling of apps signed with the // system cert and any launcher app in the system. if (mHomePackages.contains(mAppEntry.info.packageName) || isSystemPackage(mActivity.getResources(), mPm, mPackageInfo.applicationInfo)) { || isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) { // Disable button for core system applications. mButtonsPref.setButton2Text(R.string.disable_text) .setButton2Icon(R.drawable.ic_settings_disable); Loading @@ -581,8 +582,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } @VisibleForTesting boolean isSystemPackage(Resources resources, PackageManager pm, ApplicationInfo app) { return Utils.isSystemPackage(resources, pm, app); boolean isSystemPackage(Resources resources, PackageManager pm, PackageInfo packageInfo) { return Utils.isSystemPackage(resources, pm, packageInfo); } private boolean isDisabledUntilUsed() { Loading src/com/android/settings/spa/app/appinfo/AppButtons.kt +9 −9 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.spa.app.appinfo import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember Loading Loading @@ -58,17 +58,17 @@ private class AppButtonsPresenter(private val packageInfoPresenter: PackageInfoP @Composable fun rememberActionsButtons() = remember { packageInfoPresenter.flow.map { packageInfo -> if (packageInfo != null) getActionButtons(packageInfo.applicationInfo) else emptyList() if (packageInfo != null) getActionButtons(packageInfo) else emptyList() } }.collectAsState(initial = emptyList()) private fun getActionButtons(app: ApplicationInfo): List<ActionButton> = listOfNotNull( appLaunchButton.getActionButton(app), appInstallButton.getActionButton(app), appDisableButton.getActionButton(app), appUninstallButton.getActionButton(app), appClearButton.getActionButton(app), appForceStopButton.getActionButton(app), private fun getActionButtons(packageInfo: PackageInfo): List<ActionButton> = listOfNotNull( appLaunchButton.getActionButton(packageInfo), appInstallButton.getActionButton(packageInfo), appDisableButton.getActionButton(packageInfo), appUninstallButton.getActionButton(packageInfo), appClearButton.getActionButton(packageInfo), appForceStopButton.getActionButton(packageInfo), ) @Composable Loading src/com/android/settings/spa/app/appinfo/AppClearButton.kt +3 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.spa.app.appinfo import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.AlertDialog Loading @@ -37,7 +37,8 @@ class AppClearButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton? { fun getActionButton(packageInfo: PackageInfo): ActionButton? { val app = packageInfo.applicationInfo if (!app.isInstantApp) return null return clearButton() Loading src/com/android/settings/spa/app/appinfo/AppDisableButton.kt +7 −5 Original line number Diff line number Diff line Loading @@ -52,12 +52,13 @@ class AppDisableButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton? { fun getActionButton(packageInfo: PackageInfo): ActionButton? { val app = packageInfo.applicationInfo if (!app.isSystemApp) return null return when { app.enabled && !app.isDisabledUntilUsed -> { disableButton(app = app, enabled = isDisableButtonEnabled(app)) disableButton(app = app, enabled = isDisableButtonEnabled(packageInfo)) } else -> enableButton() Loading @@ -67,8 +68,9 @@ class AppDisableButton( /** * Gets whether a package can be disabled. */ private fun isDisableButtonEnabled(app: ApplicationInfo): Boolean { val packageName = app.packageName private fun isDisableButtonEnabled(packageInfo: PackageInfo): Boolean { val packageName = packageInfo.packageName val app = packageInfo.applicationInfo return when { packageName in applicationFeatureProvider.keepEnabledPackages -> false Loading @@ -78,7 +80,7 @@ class AppDisableButton( // Try to prevent the user from bricking their phone by not allowing disabling of apps // signed with the system certificate. SettingsLibUtils.isSystemPackage(resources, packageManager, app) -> false SettingsLibUtils.isSystemPackage(resources, packageManager, packageInfo) -> false // We don't allow disabling DO/PO on *any* users if it's a system app, because // "disabling" is actually "downgrade to the system version + disable", and "downgrade" Loading src/com/android/settings/spa/app/appinfo/AppForceStopButton.kt +2 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ class AppForceStopButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton { fun getActionButton(packageInfo: PackageInfo): ActionButton { val app = packageInfo.applicationInfo return ActionButton( text = context.getString(R.string.force_stop), imageVector = Icons.Outlined.WarningAmber, Loading Loading
src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +5 −4 Original line number Diff line number Diff line Loading @@ -352,6 +352,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER | PackageManager.GET_SIGNATURES | PackageManager.GET_PERMISSIONS); mPackageName = mAppEntry.info.packageName; Loading Loading @@ -393,7 +394,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp // We don't allow uninstalling DO/PO on *any* users if it's a system app, because // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" // will clear data on all users. if (isSystemPackage(mActivity.getResources(), mPm, mPackageInfo.applicationInfo)) { if (isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) { if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { enabled = false; } Loading Loading @@ -562,7 +563,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp // by not allowing disabling of apps signed with the // system cert and any launcher app in the system. if (mHomePackages.contains(mAppEntry.info.packageName) || isSystemPackage(mActivity.getResources(), mPm, mPackageInfo.applicationInfo)) { || isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) { // Disable button for core system applications. mButtonsPref.setButton2Text(R.string.disable_text) .setButton2Icon(R.drawable.ic_settings_disable); Loading @@ -581,8 +582,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } @VisibleForTesting boolean isSystemPackage(Resources resources, PackageManager pm, ApplicationInfo app) { return Utils.isSystemPackage(resources, pm, app); boolean isSystemPackage(Resources resources, PackageManager pm, PackageInfo packageInfo) { return Utils.isSystemPackage(resources, pm, packageInfo); } private boolean isDisabledUntilUsed() { Loading
src/com/android/settings/spa/app/appinfo/AppButtons.kt +9 −9 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.spa.app.appinfo import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember Loading Loading @@ -58,17 +58,17 @@ private class AppButtonsPresenter(private val packageInfoPresenter: PackageInfoP @Composable fun rememberActionsButtons() = remember { packageInfoPresenter.flow.map { packageInfo -> if (packageInfo != null) getActionButtons(packageInfo.applicationInfo) else emptyList() if (packageInfo != null) getActionButtons(packageInfo) else emptyList() } }.collectAsState(initial = emptyList()) private fun getActionButtons(app: ApplicationInfo): List<ActionButton> = listOfNotNull( appLaunchButton.getActionButton(app), appInstallButton.getActionButton(app), appDisableButton.getActionButton(app), appUninstallButton.getActionButton(app), appClearButton.getActionButton(app), appForceStopButton.getActionButton(app), private fun getActionButtons(packageInfo: PackageInfo): List<ActionButton> = listOfNotNull( appLaunchButton.getActionButton(packageInfo), appInstallButton.getActionButton(packageInfo), appDisableButton.getActionButton(packageInfo), appUninstallButton.getActionButton(packageInfo), appClearButton.getActionButton(packageInfo), appForceStopButton.getActionButton(packageInfo), ) @Composable Loading
src/com/android/settings/spa/app/appinfo/AppClearButton.kt +3 −2 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.spa.app.appinfo import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.AlertDialog Loading @@ -37,7 +37,8 @@ class AppClearButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton? { fun getActionButton(packageInfo: PackageInfo): ActionButton? { val app = packageInfo.applicationInfo if (!app.isInstantApp) return null return clearButton() Loading
src/com/android/settings/spa/app/appinfo/AppDisableButton.kt +7 −5 Original line number Diff line number Diff line Loading @@ -52,12 +52,13 @@ class AppDisableButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton? { fun getActionButton(packageInfo: PackageInfo): ActionButton? { val app = packageInfo.applicationInfo if (!app.isSystemApp) return null return when { app.enabled && !app.isDisabledUntilUsed -> { disableButton(app = app, enabled = isDisableButtonEnabled(app)) disableButton(app = app, enabled = isDisableButtonEnabled(packageInfo)) } else -> enableButton() Loading @@ -67,8 +68,9 @@ class AppDisableButton( /** * Gets whether a package can be disabled. */ private fun isDisableButtonEnabled(app: ApplicationInfo): Boolean { val packageName = app.packageName private fun isDisableButtonEnabled(packageInfo: PackageInfo): Boolean { val packageName = packageInfo.packageName val app = packageInfo.applicationInfo return when { packageName in applicationFeatureProvider.keepEnabledPackages -> false Loading @@ -78,7 +80,7 @@ class AppDisableButton( // Try to prevent the user from bricking their phone by not allowing disabling of apps // signed with the system certificate. SettingsLibUtils.isSystemPackage(resources, packageManager, app) -> false SettingsLibUtils.isSystemPackage(resources, packageManager, packageInfo) -> false // We don't allow disabling DO/PO on *any* users if it's a system app, because // "disabling" is actually "downgrade to the system version + disable", and "downgrade" Loading
src/com/android/settings/spa/app/appinfo/AppForceStopButton.kt +2 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ class AppForceStopButton( private var openConfirmDialog by mutableStateOf(false) fun getActionButton(app: ApplicationInfo): ActionButton { fun getActionButton(packageInfo: PackageInfo): ActionButton { val app = packageInfo.applicationInfo return ActionButton( text = context.getString(R.string.force_stop), imageVector = Icons.Outlined.WarningAmber, Loading