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
diff --git a/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt b/src/com/android/settings/spa/app/appinfo/AppUninstallButton.kt
index 01c60f8..c1a308f 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 @@
     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 @@
     ) { 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()
     }