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

Commit a673709e authored by Reema Bajwa's avatar Reema Bajwa Committed by Android (Google) Code Review
Browse files

Merge "Start dedicated thread for package monitoring" into main

parents 48e22c5e 54c269fc
Loading
Loading
Loading
Loading
+29 −5
Original line number Diff line number Diff line
@@ -29,6 +29,9 @@ import android.database.ContentObserver;
import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -194,6 +197,10 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem

    private final MyPackageMonitor mPackageMonitor;

    private static HandlerThread sPackageMonitorHandlerThread;

    private static final Object sPackageMonitorLock = new Object();

    /**
     * Default constructor.
     *
@@ -290,10 +297,27 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem
                }
            });
        }

        mPackageMonitor = new MyPackageMonitor(/* supportsPackageRestartQuery */ true);
        startTrackingPackageChanges();
    }

    private void startTrackingPackageChanges() {
        synchronized (sPackageMonitorLock) {
            if (sPackageMonitorHandlerThread == null) {
                sPackageMonitorHandlerThread = new HandlerThread(mTag + "PkgMonitorThread",
                        Process.THREAD_PRIORITY_BACKGROUND);
                // Start a new dedicated background thread for listening to package changes
                try {
                    sPackageMonitorHandlerThread.start();
                } catch (IllegalThreadStateException e) {
                    Slog.w(mTag, "Thread is already started: " + e.getMessage());
                }
            }
        }
        mPackageMonitor.startTrackingPackageChanges(sPackageMonitorHandlerThread.getLooper());
    }

    @Override // from SystemService
    public void onBootPhase(int phase) {
        if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
@@ -993,6 +1017,11 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem
            super(supportsPackageRestartQuery);
        }

        public void startTrackingPackageChanges(Looper looper) {
            // package changes
            this.register(getContext(), looper, UserHandle.ALL, true);
        }

        @Override
        public void onPackageUpdateStarted(@NonNull String packageName, int uid) {
            if (verbose) Slog.v(mTag, "onPackageUpdateStarted(): " + packageName);
@@ -1242,11 +1271,6 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem
        }
    }

    private void startTrackingPackageChanges() {
        // package changes
        mPackageMonitor.register(getContext(), null, UserHandle.ALL, true);
    }

    @GuardedBy("mLock")
    @SuppressWarnings("GuardedBy") // ErrorProne requires this.mLock for
    // handleServiceRemovedMultiModeLocked which is the same