From f1f4097f20f2d87b715519694b35cac19451d2b4 Mon Sep 17 00:00:00 2001 From: ot904699 Date: Sat, 8 Apr 2023 15:15:05 +0800 Subject: [PATCH] Fix uninstall button can't click problem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Install CtsVerifier.apk and CtsEmptyDeviceAdmin.apk. When CtsEmptyDeviceAdmin is active device administrator, “Uninstall” button can’t click, we can’t uninstall the apk. Compared with Android T, the ability to uninstall Active admin's apk is disabled by default on Android U. Make this cts test pass after modifying the setup code Bug: 277545241 Test: manually 1. Enter the CtsVerifier apk 2. Click “Device Admin Uninstall Test” 3. Click “ENABLE ADMIN”, then click “Activate this device admin app” 4. Click “LAUNCH SETTINGS” (cherry picked from https://partner-android-review.googlesource.com/q/commit:67ecb5aef52d18332402d88a418aa4b87d047b87) Merged-In: I200cfe56a3529e9c6ee5eebf4b2606237608a4b2 Change-Id: I200cfe56a3529e9c6ee5eebf4b2606237608a4b2 --- .../spa/app/appinfo/AppUninstallButton.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt b/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt index 01c60f85e60..c1a308f2dce 100644 --- a/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt +++ b/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt @@ -16,14 +16,21 @@ package com.android.settings.spa.app.appinfo +import android.app.settings.SettingsEnums +import android.content.Intent; import android.content.om.OverlayManager import android.content.pm.ApplicationInfo import android.os.UserHandle import android.os.UserManager import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete + +import com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminAdd import com.android.settings.R +import com.android.settings.spa.SpaActivity +import com.android.settings.Utils import com.android.settingslib.spa.widget.button.ActionButton +import com.android.settingslib.spaprivileged.framework.common.devicePolicyManager import com.android.settingslib.spaprivileged.model.app.hasFlag import com.android.settingslib.spaprivileged.model.app.isActiveAdmin import com.android.settingslib.spaprivileged.model.app.userHandle @@ -43,8 +50,8 @@ class AppUninstallButton(private val packageInfoPresenter: PackageInfoPresenter) private fun isUninstallButtonEnabled(app: ApplicationInfo): Boolean = when { !app.hasFlag(ApplicationInfo.FLAG_INSTALLED) -> false - // Not allow to uninstall DO/PO. - app.isActiveAdmin(context) -> false + Utils.isProfileOrDeviceOwner( + context.devicePolicyManager, app.packageName, packageInfoPresenter.userId) -> false appButtonRepository.isDisallowControl(app) -> false @@ -90,7 +97,17 @@ class AppUninstallButton(private val packageInfoPresenter: PackageInfoPresenter) ) { onUninstallClicked(app) } private fun onUninstallClicked(app: ApplicationInfo) { - if (appButtonRepository.isUninstallBlockedByAdmin(app)) return + if (appButtonRepository.isUninstallBlockedByAdmin(app)) { + return + } else if (app.isActiveAdmin(context)) { + var uninstallDaIntent = Intent(context, DeviceAdminAdd::class.java) + uninstallDaIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME, + app.packageName) + packageInfoPresenter.logAction( + SettingsEnums.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN) + context.startActivityAsUser(uninstallDaIntent, app.userHandle) + return + } packageInfoPresenter.startUninstallActivity() }