Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d41d0db0 authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

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
parent 1822926c
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -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);
                        }
                    }
                }
+15 −6
Original line number Diff line number Diff line
@@ -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);
    }