diff options
author | 2024-04-22 11:37:03 +0800 | |
---|---|---|
committer | 2024-05-02 00:39:47 +0000 | |
commit | 70aac12203dba7a37a3254ed79b29f2c4ac8ba40 (patch) | |
tree | 1e44c746aed947068b4627fd833b39a5576af148 | |
parent | 1232dc2bd8980192ffb9d40b03c1a71fb0531d02 (diff) |
Explicitly request to support package restart query
Explicitly request to support package restart query for services
that need to handle onHandleForceStop(). That makes PackageMonitor
MUST register the broadcast receiver for ACTION_QUERY_PACKAGE_RESTART.
Currently, the default constructor is the same as the default
constructor with true. All PackageMonitor will register a receiver.
Behavior is not a change in this CL. There will be a follow up CL to
change default behavior to false, then PackageMonitor only registers
a receiver for service that explicitly requests to support package
restart query.
Bug: 300309050
Test: atest FrameworksCorePackageMonitorTests
Change-Id: Iefe04a0ae594722f793422b23db09d12dc4b05f1
8 files changed, 27 insertions, 8 deletions
diff --git a/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java index 03cb17e9087f..1d91af57ca56 100644 --- a/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java +++ b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java @@ -71,7 +71,7 @@ public class PackageMonitorTest { spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler); assertThat(spyPackageMonitor.getRegisteredHandler()).isEqualTo(mMockHandler); - verify(mMockContext, times(1)).registerReceiverAsUser(any(), eq(UserHandle.ALL), any(), + verify(mMockContext, never()).registerReceiverAsUser(any(), eq(UserHandle.ALL), any(), eq(null), eq(mMockHandler)); assertThrows(IllegalStateException.class, @@ -97,7 +97,7 @@ public class PackageMonitorTest { @Test public void testPackageMonitorNotRegisterWithoutSupportPackageRestartQuery() throws Exception { - PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor(false)); + PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor()); spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler); @@ -106,6 +106,16 @@ public class PackageMonitorTest { } @Test + public void testPackageMonitorRegisterWithSupportPackageRestartQuery() throws Exception { + PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor(true)); + + spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler); + + verify(mMockContext, times(1)).registerReceiverAsUser(any(), eq(UserHandle.ALL), any(), + eq(null), eq(mMockHandler)); + } + + @Test public void testPackageMonitorDoHandlePackageEventUidRemoved() throws Exception { PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor()); @@ -487,7 +497,7 @@ public class PackageMonitorTest { } public TestPackageMonitor() { - super(); + super(false); } } } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 0811c872d2eb..56d2eebd72b1 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -840,7 +840,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } private void registerBroadcastReceivers() { - mPackageMonitor = new PackageMonitor() { + mPackageMonitor = new PackageMonitor(true) { @Override public void onSomePackagesChanged() { if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_PACKAGE_BROADCAST_RECEIVER)) { diff --git a/services/core/java/com/android/server/infra/AbstractMasterSystemService.java b/services/core/java/com/android/server/infra/AbstractMasterSystemService.java index ef52d2a85959..e28939bc1fbd 100644 --- a/services/core/java/com/android/server/infra/AbstractMasterSystemService.java +++ b/services/core/java/com/android/server/infra/AbstractMasterSystemService.java @@ -986,7 +986,7 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem } private void startTrackingPackageChanges() { - final PackageMonitor monitor = new PackageMonitor() { + final PackageMonitor monitor = new PackageMonitor(true) { @Override public void onPackageUpdateStarted(@NonNull String packageName, int uid) { diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index c6a48ec9018e..16f4795e052a 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -920,6 +920,10 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub */ private ArrayList<String> mDataClearedPackages = new ArrayList<>(); + private MyPackageMonitor() { + super(true); + } + @GuardedBy("ImfLock.class") void clearKnownImePackageNamesLocked() { mKnownImePackageNames.clear(); diff --git a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java index 7126cb51b57f..7c2ce6467122 100644 --- a/services/core/java/com/android/server/vr/EnabledComponentsObserver.java +++ b/services/core/java/com/android/server/vr/EnabledComponentsObserver.java @@ -110,7 +110,7 @@ public class EnabledComponentsObserver implements SettingChangeListener { final EnabledComponentsObserver o = new EnabledComponentsObserver(context, settingName, servicePermission, serviceName, lock, listeners); - PackageMonitor packageMonitor = new PackageMonitor() { + PackageMonitor packageMonitor = new PackageMonitor(true) { @Override public void onSomePackagesChanged() { o.onPackagesChanged(); diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 885baf65013f..5d7a0cfc6d60 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -1317,6 +1317,10 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } class MyPackageMonitor extends PackageMonitor { + private MyPackageMonitor() { + super(true); + } + @Override public void onPackageUpdateFinished(String packageName, int uid) { synchronized (mLock) { diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java index 4a8d73d23904..07cda375e1d3 100644 --- a/services/print/java/com/android/server/print/PrintManagerService.java +++ b/services/print/java/com/android/server/print/PrintManagerService.java @@ -875,7 +875,7 @@ public final class PrintManagerService extends SystemService { } private void registerBroadcastReceivers() { - PackageMonitor monitor = new PackageMonitor() { + PackageMonitor monitor = new PackageMonitor(true) { /** * Checks if the package contains a print service. * diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index ae4faa84421e..2e8c4f3fa233 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -2536,7 +2536,8 @@ public class VoiceInteractionManagerService extends SystemService { } } - PackageMonitor mPackageMonitor = new PackageMonitor() { + PackageMonitor mPackageMonitor = new PackageMonitor( + /* supportsPackageRestartQuery= */ true) { @Override public boolean onHandleForceStop(Intent intent, String[] packages, int uid, |