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

Commit 10ab095a authored by Christopher Tate's avatar Christopher Tate Committed by Di Wu
Browse files

Minor restore fixes

1. We were missing a 'break' in the session-timeout case of
   message dispatch, so were falling through into a different
   case.  Oops.  Fortunately it was benign; the other case's
   logic was merely logging "hey it doesn't look like there's
   anything to do here" and cleanly exiting.

2. After a restore operation finishes we were previously
   always leaving the session timeout clock running.  However,
   this was not appropriate in the case of restore-at-install,
   when the restore was a one-shot kicked off by the package
   manager rather than an operation on an ongoing RestoreSession.
   That logic now properly tidies up the session timeout when
   winding up the restore in either situation.

Bug 17080648

Change-Id: I51d4a50db4feefc4c355230a3bfb926ea2fb5944
parent 71809ee7
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -871,6 +871,7 @@ public class BackupManagerService extends IBackupManager.Stub {
                                BackupManagerService.this, mActiveRestoreSession));
                    }
                }
                break;
            }

            case MSG_FULL_CONFIRMATION_TIMEOUT:
@@ -7538,6 +7539,9 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
                }
            }

            // Clear any ongoing session timeout.
            mBackupHandler.removeMessages(MSG_RESTORE_TIMEOUT);

            // If we have a PM token, we must under all circumstances be sure to
            // handshake when we've finished.
            if (mPmToken > 0) {
@@ -7545,6 +7549,11 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
                try {
                    mPackageManagerBinder.finishPackageInstall(mPmToken);
                } catch (RemoteException e) { /* can't happen */ }
            } else {
                // We were invoked via an active restore session, not by the Package
                // Manager, so start up the session timeout again.
                mBackupHandler.sendEmptyMessageDelayed(MSG_RESTORE_TIMEOUT,
                        TIMEOUT_RESTORE_INTERVAL);
            }

            // Kick off any work that may be needed regarding app widget restores
@@ -7558,11 +7567,6 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF
                writeRestoreTokens();
            }

            // Furthermore we need to reset the session timeout clock
            mBackupHandler.removeMessages(MSG_RESTORE_TIMEOUT);
            mBackupHandler.sendEmptyMessageDelayed(MSG_RESTORE_TIMEOUT,
                    TIMEOUT_RESTORE_INTERVAL);

            // done; we can finally release the wakelock and be legitimately done.
            Slog.i(TAG, "Restore complete.");
            mWakelock.release();