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

Commit 54c269fc authored by Reema Bajwa's avatar Reema Bajwa
Browse files

Start dedicated thread for package monitoring

Test: Deployed to device & tested
Bug: 409239294
FLAG: EXEMPT bug fix

Change-Id: I3bb8bbb699a1a96420f6e0524e92b5c3124f7726
parent af966e53
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