From d41d0db01baef0fb410908eafbc99a110d140df9 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 9 May 2018 09:01:12 -0700 Subject: [PATCH] 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 --- .../server/om/OverlayManagerService.java | 9 ++------ .../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 8562572c3c397..a0da1526ac0f0 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 bb36ab1897656..36390823bd404 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); }