Loading core/java/com/android/internal/content/PackageMonitor.java +20 −9 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.BackgroundThread; import java.lang.ref.WeakReference; import java.util.Objects; import java.util.concurrent.Executor; Loading @@ -63,6 +64,8 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { PackageMonitorCallback mPackageMonitorCallback; private Executor mExecutor; @UnsupportedAppUsage public PackageMonitor() { final boolean isCore = UserHandle.isCore(android.os.Process.myUid()); Loading Loading @@ -106,8 +109,8 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { if (mPackageMonitorCallback == null) { PackageManager pm = mRegisteredContext.getPackageManager(); if (pm != null) { mPackageMonitorCallback = new PackageMonitorCallback(this, new HandlerExecutor(mRegisteredHandler)); mExecutor = new HandlerExecutor(mRegisteredHandler); mPackageMonitorCallback = new PackageMonitorCallback(this); int userId = user != null ? user.getIdentifier() : mRegisteredContext.getUserId(); pm.registerPackageMonitorCallback(mPackageMonitorCallback, userId); } Loading @@ -131,6 +134,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } mPackageMonitorCallback = null; mRegisteredContext = null; mExecutor = null; } public void onBeginPackageChanges() { Loading Loading @@ -362,6 +366,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { doHandlePackageEvent(intent); } private void postHandlePackageEvent(Intent intent) { if (mExecutor != null) { mExecutor.execute(() -> doHandlePackageEvent(intent)); } } /** * Handle the package related event * @param intent the intent that contains package related event information Loading Loading @@ -516,13 +527,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } private static final class PackageMonitorCallback extends IRemoteCallback.Stub { private final WeakReference<PackageMonitor> mMonitorWeakReference; private final PackageMonitor mPackageMonitor; private final Executor mExecutor; PackageMonitorCallback(PackageMonitor monitor, Executor executor) { mPackageMonitor = monitor; mExecutor = executor; PackageMonitorCallback(PackageMonitor monitor) { mMonitorWeakReference = new WeakReference<>(monitor); } @Override Loading @@ -537,7 +545,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { Log.w(TAG, "No intent is set for PackageMonitorCallback"); return; } mExecutor.execute(() -> mPackageMonitor.doHandlePackageEvent(intent)); PackageMonitor monitor = mMonitorWeakReference.get(); if (monitor != null) { monitor.postHandlePackageEvent(intent); } } } } Loading
core/java/com/android/internal/content/PackageMonitor.java +20 −9 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.BackgroundThread; import java.lang.ref.WeakReference; import java.util.Objects; import java.util.concurrent.Executor; Loading @@ -63,6 +64,8 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { PackageMonitorCallback mPackageMonitorCallback; private Executor mExecutor; @UnsupportedAppUsage public PackageMonitor() { final boolean isCore = UserHandle.isCore(android.os.Process.myUid()); Loading Loading @@ -106,8 +109,8 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { if (mPackageMonitorCallback == null) { PackageManager pm = mRegisteredContext.getPackageManager(); if (pm != null) { mPackageMonitorCallback = new PackageMonitorCallback(this, new HandlerExecutor(mRegisteredHandler)); mExecutor = new HandlerExecutor(mRegisteredHandler); mPackageMonitorCallback = new PackageMonitorCallback(this); int userId = user != null ? user.getIdentifier() : mRegisteredContext.getUserId(); pm.registerPackageMonitorCallback(mPackageMonitorCallback, userId); } Loading @@ -131,6 +134,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } mPackageMonitorCallback = null; mRegisteredContext = null; mExecutor = null; } public void onBeginPackageChanges() { Loading Loading @@ -362,6 +366,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { doHandlePackageEvent(intent); } private void postHandlePackageEvent(Intent intent) { if (mExecutor != null) { mExecutor.execute(() -> doHandlePackageEvent(intent)); } } /** * Handle the package related event * @param intent the intent that contains package related event information Loading Loading @@ -516,13 +527,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } private static final class PackageMonitorCallback extends IRemoteCallback.Stub { private final WeakReference<PackageMonitor> mMonitorWeakReference; private final PackageMonitor mPackageMonitor; private final Executor mExecutor; PackageMonitorCallback(PackageMonitor monitor, Executor executor) { mPackageMonitor = monitor; mExecutor = executor; PackageMonitorCallback(PackageMonitor monitor) { mMonitorWeakReference = new WeakReference<>(monitor); } @Override Loading @@ -537,7 +545,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { Log.w(TAG, "No intent is set for PackageMonitorCallback"); return; } mExecutor.execute(() -> mPackageMonitor.doHandlePackageEvent(intent)); PackageMonitor monitor = mMonitorWeakReference.get(); if (monitor != null) { monitor.postHandlePackageEvent(intent); } } } }