Snap for 5764972 from 8465ba736713fcc3f43ab8eede21bae5f207ded5 to qt-c2f2-release

Change-Id: Iea1ce114b9d958dabc76c4f20f0f2eb1c85e423b
diff --git a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
index 6427ba3..d846ce0 100644
--- a/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
+++ b/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
@@ -67,9 +67,8 @@
 /**
  * Calls from the system into the permission controller.
  *
- * All methods are called async beside the backup related method. For these we force to use the
- * async-task single thread executor so that multiple parallel backups don't override the delayed
- * the backup state racily.
+ * All reading methods are called async, and all writing method are called on the AsyncTask single
+ * thread executor so that multiple writes won't override each other concurrently.
  */
 public final class PermissionControllerServiceImpl extends PermissionControllerService {
     private static final String LOG_TAG = PermissionControllerServiceImpl.class.getSimpleName();
@@ -210,8 +209,8 @@
     public void onRevokeRuntimePermissions(@NonNull Map<String, List<String>> request,
             boolean doDryRun, int reason, @NonNull String callerPackageName,
             @NonNull Consumer<Map<String, List<String>>> callback) {
-        AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> callback.accept(
-                onRevokeRuntimePermissions(request, doDryRun, reason, callerPackageName)));
+        AsyncTask.execute(() -> callback.accept(onRevokeRuntimePermissions(request, doDryRun,
+                reason, callerPackageName)));
     }
 
     private @NonNull Map<String, List<String>> onRevokeRuntimePermissions(
@@ -403,7 +402,7 @@
     @Override
     public void onRevokeRuntimePermission(@NonNull String packageName,
             @NonNull String permissionName, @NonNull Runnable callback) {
-        AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
+        AsyncTask.execute(() -> {
             onRevokeRuntimePermission(packageName, permissionName);
             callback.run();
         });
@@ -503,9 +502,8 @@
     public void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
             @NonNull String packageName, @NonNull String unexpandedPermission, int grantState,
             @NonNull Consumer<Boolean> callback) {
-        AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> callback.accept(
-                onSetRuntimePermissionGrantStateByDeviceAdmin(callerPackageName, packageName,
-                        unexpandedPermission, grantState)));
+        AsyncTask.execute(() -> callback.accept(onSetRuntimePermissionGrantStateByDeviceAdmin(
+                callerPackageName, packageName, unexpandedPermission, grantState)));
     }
 
     private boolean onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
@@ -568,7 +566,7 @@
 
     @Override
     public void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable callback) {
-        AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
+        AsyncTask.execute(() -> {
             onGrantOrUpgradeDefaultRuntimePermissions();
             callback.run();
         });
diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ReviewPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/handheld/ReviewPermissionsFragment.java
index 85ec2d3..6c3e224 100644
--- a/src/com/android/packageinstaller/permission/ui/handheld/ReviewPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/handheld/ReviewPermissionsFragment.java
@@ -121,6 +121,7 @@
             // If the system called for a review but no groups are found, this means that all groups
             // are restricted. Hence there is nothing to review and instantly continue.
             confirmPermissionsReview();
+            executeCallback(true);
             activity.finish();
         }
     }
@@ -188,7 +189,10 @@
             preferenceGroups.add(mNewPermissionsCategory);
             preferenceGroups.add(mCurrentPermissionsCategory);
         } else {
-            preferenceGroups.add(getPreferenceScreen());
+            PreferenceScreen preferenceScreen = getPreferenceScreen();
+            if (preferenceScreen != null) {
+                preferenceGroups.add(preferenceScreen);
+            }
         }
 
         final int preferenceGroupCount = preferenceGroups.size();