diff options
| author | 2018-05-09 09:01:12 -0700 | |
|---|---|---|
| committer | 2018-05-10 16:46:06 +0000 | |
| commit | d41d0db01baef0fb410908eafbc99a110d140df9 (patch) | |
| tree | a04296cf6ed6fb720583fefa447c0c98c6813084 | |
| parent | 1822926cfbf55cc68a85cdfd588802f4a106cdb5 (diff) | |
RRO: Fix black screen flashes for splits
Downloading splits of an app while the app is open lead to black screen
flashes because apps would relaunch unnecessarily. This
change allows OMS to have correct state about targets while no longer
sending OVERLAY_CHANGED events or relaunching activities when packages
are changed or upgraded.
Bug: 79376331
Test: App provided in b/79376331 and regression testing of previous
black screen flash problems
Change-Id: I6e725dbe44b910959bc14304801b314024d9e831
| -rw-r--r-- | services/core/java/com/android/server/om/OverlayManagerService.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/om/OverlayManagerServiceImpl.java | 21 |
2 files changed, 17 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index 8562572c3c39..a0da1526ac0f 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -389,16 +389,11 @@ public final class OverlayManagerService extends SystemService { final PackageInfo pi = mPackageManager.getPackageInfo(packageName, userId, false); if (pi != null) { - /* - * Only update overlay settings when an overlay becomes enabled or disabled. - * Enabling or disabling components of a target should not change the - * target's overlays. Since, overlays do not have components, this will only - * update overlay settings if an overlay package becomes enabled or - * disabled. - */ mPackageManager.cachePackageInfo(packageName, userId, pi); if (pi.isOverlayPackage()) { mImpl.onOverlayPackageChanged(packageName, userId); + } else { + mImpl.onTargetPackageChanged(packageName, userId); } } } diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index bb36ab189765..36390823bd40 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -212,15 +212,21 @@ final class OverlayManagerServiceImpl { } } + void onTargetPackageChanged(@NonNull final String packageName, final int userId) { + if (DEBUG) { + Slog.d(TAG, "onTargetPackageChanged packageName=" + packageName + " userId=" + userId); + } + + updateAllOverlaysForTarget(packageName, userId, 0); + } + void onTargetPackageUpgrading(@NonNull final String packageName, final int userId) { if (DEBUG) { Slog.d(TAG, "onTargetPackageUpgrading packageName=" + packageName + " userId=" + userId); } - if (updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING)) { - mListener.onOverlaysChanged(packageName, userId); - } + updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING); } void onTargetPackageUpgraded(@NonNull final String packageName, final int userId) { @@ -228,9 +234,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageUpgraded packageName=" + packageName + " userId=" + userId); } - if (updateAllOverlaysForTarget(packageName, userId, 0)) { - mListener.onOverlaysChanged(packageName, userId); - } + updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageRemoved(@NonNull final String packageName, final int userId) { @@ -688,6 +692,11 @@ final class OverlayManagerServiceImpl { } interface OverlayChangeListener { + + /** + * An event triggered by changes made to overlay state or settings as well as changes that + * add or remove target packages of overlays. + **/ void onOverlaysChanged(@NonNull String targetPackage, int userId); } |