summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2018-05-09 09:01:12 -0700
committer Ryan Mitchell <rtmitchell@google.com> 2018-05-10 16:46:06 +0000
commitd41d0db01baef0fb410908eafbc99a110d140df9 (patch)
treea04296cf6ed6fb720583fefa447c0c98c6813084
parent1822926cfbf55cc68a85cdfd588802f4a106cdb5 (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.java9
-rw-r--r--services/core/java/com/android/server/om/OverlayManagerServiceImpl.java21
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);
}