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

Commit 4eb921fc authored by Chun-Wei Wang's avatar Chun-Wei Wang Committed by Android (Google) Code Review
Browse files

Merge "Code cleanup (13/n)"

parents ad2a6117 88ada468
Loading
Loading
Loading
Loading
+13 −72
Original line number Original line Diff line number Diff line
@@ -16,16 +16,11 @@


package com.android.server.rollback;
package com.android.server.rollback;


import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN;

import android.annotation.AnyThread;
import android.annotation.AnyThread;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.WorkerThread;
import android.annotation.WorkerThread;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.PackageRollbackInfo;
@@ -240,64 +235,6 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver {
        return null;
        return null;
    }
    }


    @WorkerThread
    private BroadcastReceiver listenForStagedSessionReady(RollbackManager rollbackManager,
            int rollbackId, @Nullable VersionedPackage logPackage) {
        assertInWorkerThread();
        BroadcastReceiver sessionUpdatedReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                handleStagedSessionChange(rollbackManager,
                        rollbackId, this /* BroadcastReceiver */, logPackage);
            }
        };
        IntentFilter sessionUpdatedFilter =
                new IntentFilter(PackageInstaller.ACTION_SESSION_UPDATED);
        mContext.registerReceiver(sessionUpdatedReceiver, sessionUpdatedFilter, null, mHandler);
        return sessionUpdatedReceiver;
    }

    @WorkerThread
    private void handleStagedSessionChange(RollbackManager rollbackManager, int rollbackId,
            BroadcastReceiver listener, @Nullable VersionedPackage logPackage) {
        assertInWorkerThread();
        PackageInstaller packageInstaller =
                mContext.getPackageManager().getPackageInstaller();
        List<RollbackInfo> recentRollbacks =
                rollbackManager.getRecentlyCommittedRollbacks();
        for (int i = 0; i < recentRollbacks.size(); i++) {
            RollbackInfo recentRollback = recentRollbacks.get(i);
            int sessionId = recentRollback.getCommittedSessionId();
            if ((rollbackId == recentRollback.getRollbackId())
                    && (sessionId != PackageInstaller.SessionInfo.INVALID_ID)) {
                PackageInstaller.SessionInfo sessionInfo =
                        packageInstaller.getSessionInfo(sessionId);
                if (sessionInfo.isStagedSessionReady() && markStagedSessionHandled(rollbackId)) {
                    mContext.unregisterReceiver(listener);
                    saveStagedRollbackId(rollbackId, logPackage);
                    WatchdogRollbackLogger.logEvent(logPackage,
                            FrameworkStatsLog
                            .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED,
                            WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN,
                            "");
                } else if (sessionInfo.isStagedSessionFailed()
                        && markStagedSessionHandled(rollbackId)) {
                    WatchdogRollbackLogger.logEvent(logPackage,
                            FrameworkStatsLog
                                    .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE,
                            WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN,
                            "");
                    mContext.unregisterReceiver(listener);
                }
            }
        }

        // Wait for all pending staged sessions to get handled before rebooting.
        if (isPendingStagedSessionsEmpty()) {
            mContext.getSystemService(PowerManager.class).reboot("Rollback staged install");
        }
    }

    /**
    /**
     * Returns {@code true} if staged session associated with {@code rollbackId} was marked
     * Returns {@code true} if staged session associated with {@code rollbackId} was marked
     * as handled, {@code false} if already handled.
     * as handled, {@code false} if already handled.
@@ -447,12 +384,12 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver {
            if (status == RollbackManager.STATUS_SUCCESS) {
            if (status == RollbackManager.STATUS_SUCCESS) {
                if (rollback.isStaged()) {
                if (rollback.isStaged()) {
                    int rollbackId = rollback.getRollbackId();
                    int rollbackId = rollback.getRollbackId();
                    mPendingStagedRollbackIds.add(rollbackId);
                    saveStagedRollbackId(rollbackId, logPackage);
                    BroadcastReceiver listener =
                    WatchdogRollbackLogger.logEvent(logPackage,
                            listenForStagedSessionReady(rollbackManager, rollbackId,
                            FrameworkStatsLog
                                    logPackage);
                            .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED,
                    handleStagedSessionChange(rollbackManager, rollbackId, listener,
                            reasonToLog, failedPackageToLog);
                            logPackage);

                } else {
                } else {
                    WatchdogRollbackLogger.logEvent(logPackage,
                    WatchdogRollbackLogger.logEvent(logPackage,
                            FrameworkStatsLog
                            FrameworkStatsLog
@@ -460,14 +397,18 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver {
                            reasonToLog, failedPackageToLog);
                            reasonToLog, failedPackageToLog);
                }
                }
            } else {
            } else {
                if (rollback.isStaged()) {
                    markStagedSessionHandled(rollback.getRollbackId());
                }
                WatchdogRollbackLogger.logEvent(logPackage,
                WatchdogRollbackLogger.logEvent(logPackage,
                        FrameworkStatsLog
                        FrameworkStatsLog
                                .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE,
                                .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE,
                        reasonToLog, failedPackageToLog);
                        reasonToLog, failedPackageToLog);
            }
            }
            if (rollback.isStaged()) {
                markStagedSessionHandled(rollback.getRollbackId());
                // Wait for all pending staged sessions to get handled before rebooting.
                if (isPendingStagedSessionsEmpty()) {
                    mContext.getSystemService(PowerManager.class).reboot("Rollback staged install");
                }
            }
        };
        };


        final LocalIntentReceiver rollbackReceiver = new LocalIntentReceiver(result -> {
        final LocalIntentReceiver rollbackReceiver = new LocalIntentReceiver(result -> {