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

Commit a63246d6 authored by Christopher Tate's avatar Christopher Tate
Browse files

Tighten restore-at-install behavior

Harden the guarantee that if we're asked about a possible restore,
we always ALWAYS report back to the package manager.  This involved
closing "should never happen" edge cases around provisioning/auto-restore
setting that nevertheless were happening.

Also, on the auto-restore setting front, make sure to plumb that
system API through appropriately, since going behind its back and
manipulating the secure setting directly would cause things to get
out of step.

Bug 17060654

Change-Id: I52ca9c1ffbfc0bd6b57196157500d0868bfc2989
parent 9fde9a25
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -228,6 +228,28 @@ public class BackupManager {
        return false;
    }

    /**
     * Enable/disable data restore at application install time.  When enabled, app
     * installation will include an attempt to fetch the app's historical data from
     * the archival restore dataset (if any).  When disabled, no such attempt will
     * be made.
     *
     * <p>Callers must hold the android.permission.BACKUP permission to use this method.
     *
     * @hide
     */
    @SystemApi
    public void setAutoRestore(boolean isEnabled) {
        checkServiceBinder();
        if (sService != null) {
            try {
                sService.setAutoRestore(isEnabled);
            } catch (RemoteException e) {
                Log.e(TAG, "setAutoRestore() couldn't connect");
            }
        }
    }

    /**
     * Identify the currently selected transport.  Callers must hold the
     * android.permission.BACKUP permission to use this method.
+10 −2
Original line number Diff line number Diff line
@@ -8599,7 +8599,15 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
            skip = true;
        }

        if (!skip && mAutoRestore && mProvisioned) {
        if (!mAutoRestore || !mProvisioned) {
            if (DEBUG) {
                Slog.w(TAG, "Non-restorable state: auto=" + mAutoRestore
                        + " prov=" + mProvisioned);
            }
            skip = true;
        }

        if (!skip) {
            try {
                // okay, we're going to attempt a restore of this package from this restore set.
                // The eventual message back into the Package Manager to run the post-install
@@ -8632,7 +8640,7 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
        if (skip) {
            // Auto-restore disabled or no way to attempt a restore; just tell the Package
            // Manager to proceed with the post-install handling for this package.
            if (DEBUG) Slog.v(TAG, "Skipping");
            if (DEBUG) Slog.v(TAG, "Finishing install immediately");
            try {
                mPackageManagerBinder.finishPackageInstall(token);
            } catch (RemoteException e) { /* can't happen */ }