Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 27455541 authored by Eugene Susla's avatar Eugene Susla
Browse files

updateUserSensitive asynchronously

This is known to take 500ms and affects only UI,
so can be done async

Test: Ensure nothing looks badly broken; presubmit
Fixes: 139485700
Change-Id: I2b83b51ec5b002e08986019b4b6be3d681741544
parent a73d55d2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5707,6 +5707,7 @@ package android.permission {
    method @BinderThread public abstract void onRevokeRuntimePermission(@NonNull String, @NonNull String, @NonNull Runnable);
    method @BinderThread public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull String, @NonNull java.util.function.Consumer<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>);
    method @BinderThread public abstract void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Consumer<java.lang.Boolean>);
    method @BinderThread public void onUpdateUserSensitive();
    field public static final String SERVICE_INTERFACE = "android.permission.PermissionControllerService";
  }
+1 −0
Original line number Diff line number Diff line
@@ -42,4 +42,5 @@ oneway interface IPermissionController {
    void setRuntimePermissionGrantStateByDeviceAdmin(String callerPackageName, String packageName,
                String permission, int grantState, in AndroidFuture callback);
    void grantOrUpgradeDefaultRuntimePermissions(in AndroidFuture callback);
    void updateUserSensitive(in AndroidFuture callback);
}
+12 −0
Original line number Diff line number Diff line
@@ -599,4 +599,16 @@ public final class PermissionControllerManager {
            }
        }, executor);
    }

    /**
     * @see PermissionControllerService#onUpdateUserSensitive()
     * @hide
     */
    public void updateUserSensitive() {
        mRemoteService.postAsync(service -> {
            AndroidFuture<Void> future = new AndroidFuture<>();
            service.updateUserSensitive(future);
            return future;
        });
    }
}
+20 −0
Original line number Diff line number Diff line
@@ -189,6 +189,18 @@ public abstract class PermissionControllerService extends Service {
    @BinderThread
    public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable callback);

    /**
     * Called by system to update the
     * {@link PackageManager}{@code .FLAG_PERMISSION_USER_SENSITIVE_WHEN_*} flags for permissions.
     * <p>
     * This is typically when creating a new user or upgrading either system or
     * permission controller package.
     */
    @BinderThread
    public void onUpdateUserSensitive() {
        throw new AbstractMethodError("Must be overridden in implementing class");
    }

    /**
     * Set the runtime permission state from a device admin.
     *
@@ -380,6 +392,14 @@ public abstract class PermissionControllerService extends Service {

                onGrantOrUpgradeDefaultRuntimePermissions(() -> callback.complete(true));
            }

            @Override
            public void updateUserSensitive(AndroidFuture callback) {
                Preconditions.checkNotNull(callback, "callback cannot be null");

                onUpdateUserSensitive();
                callback.complete(null);
            }
        };
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.pm.permission.PermissionManagerServiceInternal;

import com.android.server.policy.PermissionPolicyInternal.OnInitializedCallback;

import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;

@@ -309,6 +309,8 @@ public final class PermissionPolicyService extends SystemService {
                /* ignore */
            }

            permissionControllerManager.updateUserSensitive();

            packageManagerInternal.setRuntimePermissionsFingerPrint(Build.FINGERPRINT, userId);
        }
    }