Fix uninstall button can't click problem

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
This commit is contained in:
ot904699
2023-04-08 15:15:05 +08:00
committed by Chaohui Wang
parent 5c8d1332c7
commit f1f4097f20

View File

@@ -16,14 +16,21 @@
package com.android.settings.spa.app.appinfo package com.android.settings.spa.app.appinfo
import android.app.settings.SettingsEnums
import android.content.Intent;
import android.content.om.OverlayManager import android.content.om.OverlayManager
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import android.os.UserHandle import android.os.UserHandle
import android.os.UserManager import android.os.UserManager
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminAdd
import com.android.settings.R 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.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.hasFlag
import com.android.settingslib.spaprivileged.model.app.isActiveAdmin import com.android.settingslib.spaprivileged.model.app.isActiveAdmin
import com.android.settingslib.spaprivileged.model.app.userHandle 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 { private fun isUninstallButtonEnabled(app: ApplicationInfo): Boolean = when {
!app.hasFlag(ApplicationInfo.FLAG_INSTALLED) -> false !app.hasFlag(ApplicationInfo.FLAG_INSTALLED) -> false
// Not allow to uninstall DO/PO. Utils.isProfileOrDeviceOwner(
app.isActiveAdmin(context) -> false context.devicePolicyManager, app.packageName, packageInfoPresenter.userId) -> false
appButtonRepository.isDisallowControl(app) -> false appButtonRepository.isDisallowControl(app) -> false
@@ -90,7 +97,17 @@ class AppUninstallButton(private val packageInfoPresenter: PackageInfoPresenter)
) { onUninstallClicked(app) } ) { onUninstallClicked(app) }
private fun onUninstallClicked(app: ApplicationInfo) { 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() packageInfoPresenter.startUninstallActivity()
} }