Allow ManagedProvisioning to silently uninstall apps

1. During device owner provisioning, ManagedProvisioning uninstalls
non-required apps. Apps to remove are all system apps in the reference
device. On the other hand, OEM devices have several non system apps,
so ManagedProvisioning can not uninstall them and can not complete
device owner provisioning permarnently.

2. This commit allows ManagedProvisioning having
MANAGE_PROFILE_AND_DEVICE_OWNERS permission to uninstall non-required
apps silently.

Bug: 37681141
Test: manual
Signed-off-by : Sungmin Lee <insight.lee@lge.com>
Merged-In: I201b070f4bcf453a2ffb391600853c7e595aec5d
Change-Id: I201b070f4bcf453a2ffb391600853c7e595aec5d
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 2391abd..3c2d6eb 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -16,6 +16,7 @@
 
 package com.android.server.pm;
 
+import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS;
 import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
 import static android.Manifest.permission.WRITE_MEDIA_STORAGE;
@@ -15627,6 +15628,14 @@
                 callingUid == getPackageUid(mStorageManagerPackage, 0, callingUserId)) {
             return true;
         }
+
+        // Allow caller having MANAGE_PROFILE_AND_DEVICE_OWNERS permission to silently
+        // uninstall for device owner provisioning.
+        if (checkUidPermission(MANAGE_PROFILE_AND_DEVICE_OWNERS, callingUid)
+                == PERMISSION_GRANTED) {
+            return true;
+        }
+
         return false;
     }