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

Commit e87368e1 authored by Richard Uhler's avatar Richard Uhler
Browse files

Commit rollbacks by ID, not by RollbackInfo.

To make it clear that the system only pays attention to the provided
rollback ID when committing a rollback.

Also, rename executeRollback to commitRollback in IRollbackManager.aidl,
now that we are touching the code anyway.

Bug: 112431924
Test: atest RollbackTest
Change-Id: I315e75c39019536fb2f090a0c84ed4cf7c03ce8c
parent e4e38d66
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1707,7 +1707,7 @@ package android.content.rollback {
  }
  public final class RollbackManager {
    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void commitRollback(@NonNull android.content.rollback.RollbackInfo, @NonNull android.content.IntentSender);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void commitRollback(int, @NonNull android.content.IntentSender);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) public java.util.List<android.content.rollback.RollbackInfo> getAvailableRollbacks();
    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS) @NonNull public java.util.List<android.content.rollback.RollbackInfo> getRecentlyCommittedRollbacks();
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ interface IRollbackManager {
    ParceledListSlice getAvailableRollbacks();
    ParceledListSlice getRecentlyExecutedRollbacks();

    void executeRollback(in RollbackInfo rollback, String callerPackageName,
    void commitRollback(int rollbackId, String callerPackageName,
            in IntentSender statusReceiver);

    // Exposed for use from the system server only. Callback from the package
+3 −4
Original line number Diff line number Diff line
@@ -102,16 +102,15 @@ public final class RollbackManager {
     * <p>
     * TODO: Specify the returns status codes.
     *
     * @param rollback to commit
     * @param rollbackId ID of the rollback to commit
     * @param statusReceiver where to deliver the results
     * @throws SecurityException if the caller does not have the
     *            MANAGE_ROLLBACKS permission.
     */
    @RequiresPermission(android.Manifest.permission.MANAGE_ROLLBACKS)
    public void commitRollback(@NonNull RollbackInfo rollback,
            @NonNull IntentSender statusReceiver) {
    public void commitRollback(int rollbackId, @NonNull IntentSender statusReceiver) {
        try {
            mBinder.executeRollback(rollback, mCallerPackageName, statusReceiver);
            mBinder.commitRollback(rollbackId, mCallerPackageName, statusReceiver);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+7 −6
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
    }

    @Override
    public void executeRollback(RollbackInfo rollback, String callerPackageName,
    public void commitRollback(int rollbackId, String callerPackageName,
            IntentSender statusReceiver) {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.MANAGE_ROLLBACKS,
@@ -238,19 +238,19 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
        appOps.checkPackage(callingUid, callerPackageName);

        getHandler().post(() ->
                executeRollbackInternal(rollback, callerPackageName, statusReceiver));
                commitRollbackInternal(rollbackId, callerPackageName, statusReceiver));
    }

    /**
     * Performs the actual work to execute a rollback.
     * Performs the actual work to commit a rollback.
     * The work is done on the current thread. This may be a long running
     * operation.
     */
    private void executeRollbackInternal(RollbackInfo rollback,
    private void commitRollbackInternal(int rollbackId,
            String callerPackageName, IntentSender statusReceiver) {
        Log.i(TAG, "Initiating rollback");

        RollbackData data = getRollbackForId(rollback.getRollbackId());
        RollbackData data = getRollbackForId(rollbackId);
        if (data == null) {
            sendFailure(statusReceiver, "Rollback unavailable");
            return;
@@ -350,7 +350,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
                                return;
                            }

                            addRecentlyExecutedRollback(rollback);
                            addRecentlyExecutedRollback(
                                    new RollbackInfo(data.rollbackId, data.packages));
                            sendSuccess(statusReceiver);

                            Intent broadcast = new Intent(Intent.ACTION_ROLLBACK_COMMITTED);
+2 −1
Original line number Diff line number Diff line
@@ -86,7 +86,8 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve

        // TODO(zezeozue): Log initiated metrics
        mHandler.post(() ->
                mRollbackManager.commitRollback(rollback, rollbackReceiver.getIntentSender()));
                mRollbackManager.commitRollback(rollback.getRollbackId(),
                    rollbackReceiver.getIntentSender()));
        // Assume rollback executed successfully
        return true;
    }
Loading