Loading services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +19 −45 Original line number Diff line number Diff line Loading @@ -205,14 +205,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_INSTALL_FLAGS, 0); int user = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_USER, 0); int sessionId = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, -1); File newPackageCodePath = new File(intent.getData().getPath()); queueSleepIfNeeded(); getHandler().post(() -> { boolean success = enableRollback(installFlags, newPackageCodePath, user, token); boolean success = enableRollback( sessionId, installFlags, newPackageCodePath, user, token); int ret = PackageManagerInternal.ENABLE_ROLLBACK_SUCCEEDED; if (!success) { ret = PackageManagerInternal.ENABLE_ROLLBACK_FAILED; Loading Loading @@ -240,17 +242,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { if (Intent.ACTION_CANCEL_ENABLE_ROLLBACK.equals(intent.getAction())) { int token = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_TOKEN, -1); int sessionId = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, -1); if (LOCAL_LOGV) { Slog.v(TAG, "broadcast=ACTION_CANCEL_ENABLE_ROLLBACK token=" + token); } synchronized (mLock) { for (int i = 0; i < mRollbacks.size(); ++i) { Rollback rollback = mRollbacks.get(i); if (rollback.hasToken(token) && rollback.isEnabling()) { mRollbacks.remove(i); Rollback rollback = getRollbackForSessionLocked(sessionId); if (rollback != null && rollback.isEnabling()) { mRollbacks.remove(rollback); rollback.delete(mAppDataRollbackHelper); break; } } } } Loading Loading @@ -723,51 +724,24 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { * @return true if enabling the rollback succeeds, false otherwise. */ @WorkerThread private boolean enableRollback( private boolean enableRollback(int sessionId, int installFlags, File newPackageCodePath, @UserIdInt int user, int token) { if (LOCAL_LOGV) { Slog.v(TAG, "enableRollback user=" + user + " token=" + token + " path=" + newPackageCodePath.getAbsolutePath()); } // Find the session id associated with this install. // TODO: It would be nice if package manager or package installer told // us the session directly, rather than have to search for it // ourselves. // getAllSessions only returns sessions for the associated user. // Create a context with the right user so we can find the matching // session. final Context context = getContextAsUser(UserHandle.of(user)); if (context == null) { Slog.e(TAG, "Unable to create context for install session user."); PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); PackageInstaller.SessionInfo packageSession = installer.getSessionInfo(sessionId); if (packageSession == null) { Slog.e(TAG, "Unable to find session for enabled rollback."); return false; } PackageInstaller.SessionInfo parentSession = null; PackageInstaller.SessionInfo packageSession = null; PackageInstaller installer = context.getPackageManager().getPackageInstaller(); for (PackageInstaller.SessionInfo info : installer.getAllSessions()) { if (info.isMultiPackage()) { for (int childId : info.getChildSessionIds()) { PackageInstaller.SessionInfo child = installer.getSessionInfo(childId); if (sessionMatchesForEnableRollback(child, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? parentSession = info; packageSession = child; break; } } } else if (sessionMatchesForEnableRollback(info, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? parentSession = info; packageSession = info; break; } } if (parentSession == null || packageSession == null) { Slog.e(TAG, "Unable to find session for enabled rollback."); PackageInstaller.SessionInfo parentSession = packageSession.hasParentSessionId() ? installer.getSessionInfo(packageSession.getParentSessionId()) : packageSession; if (parentSession == null) { Slog.e(TAG, "Unable to find parent session for enabled rollback."); return false; } Loading Loading
services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +19 −45 Original line number Diff line number Diff line Loading @@ -205,14 +205,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_INSTALL_FLAGS, 0); int user = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_USER, 0); int sessionId = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, -1); File newPackageCodePath = new File(intent.getData().getPath()); queueSleepIfNeeded(); getHandler().post(() -> { boolean success = enableRollback(installFlags, newPackageCodePath, user, token); boolean success = enableRollback( sessionId, installFlags, newPackageCodePath, user, token); int ret = PackageManagerInternal.ENABLE_ROLLBACK_SUCCEEDED; if (!success) { ret = PackageManagerInternal.ENABLE_ROLLBACK_FAILED; Loading Loading @@ -240,17 +242,16 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { if (Intent.ACTION_CANCEL_ENABLE_ROLLBACK.equals(intent.getAction())) { int token = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_TOKEN, -1); int sessionId = intent.getIntExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, -1); if (LOCAL_LOGV) { Slog.v(TAG, "broadcast=ACTION_CANCEL_ENABLE_ROLLBACK token=" + token); } synchronized (mLock) { for (int i = 0; i < mRollbacks.size(); ++i) { Rollback rollback = mRollbacks.get(i); if (rollback.hasToken(token) && rollback.isEnabling()) { mRollbacks.remove(i); Rollback rollback = getRollbackForSessionLocked(sessionId); if (rollback != null && rollback.isEnabling()) { mRollbacks.remove(rollback); rollback.delete(mAppDataRollbackHelper); break; } } } } Loading Loading @@ -723,51 +724,24 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { * @return true if enabling the rollback succeeds, false otherwise. */ @WorkerThread private boolean enableRollback( private boolean enableRollback(int sessionId, int installFlags, File newPackageCodePath, @UserIdInt int user, int token) { if (LOCAL_LOGV) { Slog.v(TAG, "enableRollback user=" + user + " token=" + token + " path=" + newPackageCodePath.getAbsolutePath()); } // Find the session id associated with this install. // TODO: It would be nice if package manager or package installer told // us the session directly, rather than have to search for it // ourselves. // getAllSessions only returns sessions for the associated user. // Create a context with the right user so we can find the matching // session. final Context context = getContextAsUser(UserHandle.of(user)); if (context == null) { Slog.e(TAG, "Unable to create context for install session user."); PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); PackageInstaller.SessionInfo packageSession = installer.getSessionInfo(sessionId); if (packageSession == null) { Slog.e(TAG, "Unable to find session for enabled rollback."); return false; } PackageInstaller.SessionInfo parentSession = null; PackageInstaller.SessionInfo packageSession = null; PackageInstaller installer = context.getPackageManager().getPackageInstaller(); for (PackageInstaller.SessionInfo info : installer.getAllSessions()) { if (info.isMultiPackage()) { for (int childId : info.getChildSessionIds()) { PackageInstaller.SessionInfo child = installer.getSessionInfo(childId); if (sessionMatchesForEnableRollback(child, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? parentSession = info; packageSession = child; break; } } } else if (sessionMatchesForEnableRollback(info, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? parentSession = info; packageSession = info; break; } } if (parentSession == null || packageSession == null) { Slog.e(TAG, "Unable to find session for enabled rollback."); PackageInstaller.SessionInfo parentSession = packageSession.hasParentSessionId() ? installer.getSessionInfo(packageSession.getParentSessionId()) : packageSession; if (parentSession == null) { Slog.e(TAG, "Unable to find parent session for enabled rollback."); return false; } Loading