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

Commit 732d83fe authored by Marcelo Arteiro's avatar Marcelo Arteiro
Browse files

Fixes boot issues on Headless (HSUM) related to ag/25382994

Previous change was blocking boot in HSUM. This fix adds a check to skip  Home launch delay in this systems.

Flag: ACONFIG enable_home_delay TRUNKFOOD
Bug: 326619801
Bug: 326841974
Test: v2/aaos-engprod/device_boot_test_aae_toolbox
Change-Id: I3d869541587b12d94c688c888a407f6e463914c8
parent f26fe171
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -1253,10 +1253,14 @@ public abstract class ActivityManagerInternal {
    public abstract boolean clearApplicationUserData(String packageName, boolean keepState,
    public abstract boolean clearApplicationUserData(String packageName, boolean keepState,
            boolean isRestore, IPackageDataObserver observer, int userId);
            boolean isRestore, IPackageDataObserver observer, int userId);



    /**
    /**
     * Returns current state of {@link com.android.systemui.theme.ThemeOverlayController} color
     * Method that checks if system is Headless (don't delay launch) case in which it
     * palette readiness.
     * should also check if ThemeOverlayController is ready (don't delay) or not (delay).
     *
     * @param userId
     * @return Boolean indicating if Home launch should wait for ThemeOverlayController signal
     * @hide
     * @hide
     */
     */
    public abstract boolean isThemeOverlayReady(int userId);
    public abstract boolean shouldDelayHomeLaunch(int userId);
}
}
+1 −2
Original line number Original line Diff line number Diff line
@@ -15,7 +15,6 @@
 */
 */
package com.android.systemui.theme;
package com.android.systemui.theme;


import static com.android.systemui.shared.Flags.enableHomeDelay;


import android.annotation.AnyThread;
import android.annotation.AnyThread;
import android.content.om.FabricatedOverlay;
import android.content.om.FabricatedOverlay;
@@ -251,7 +250,7 @@ public class ThemeOverlayApplier implements Dumpable {


            try {
            try {
                mOverlayManager.commit(transaction.build());
                mOverlayManager.commit(transaction.build());
                if (enableHomeDelay() && onComplete != null) {
                if (onComplete != null) {
                    Log.d(TAG, "Executing onComplete runnable");
                    Log.d(TAG, "Executing onComplete runnable");
                    mMainExecutor.execute(onComplete);
                    mMainExecutor.execute(onComplete);
                }
                }
+5 −7
Original line number Original line Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.util.TypedValue.TYPE_INT_COLOR_ARGB8;


import static com.android.systemui.Flags.themeOverlayControllerWakefulnessDeprecation;
import static com.android.systemui.Flags.themeOverlayControllerWakefulnessDeprecation;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.shared.Flags.enableHomeDelay;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_HOME;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_HOME;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_LOCK;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_LOCK;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_PRESET;
import static com.android.systemui.theme.ThemeOverlayApplier.COLOR_SOURCE_PRESET;
@@ -813,10 +812,9 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
            }
            }
        }
        }


        final Runnable onCompleteCallback = !enableHomeDelay()
        final Runnable onCompleteCallback = () -> {
                ? () -> {}
            Log.d(TAG, "ThemeHomeDelay: ThemeOverlayController ready with user "
                : () -> {
                    + currentUser);
                    Log.d(TAG, "ThemeHomeDelay: ThemeOverlayController ready");
            mActivityManager.setThemeOverlayReady(currentUser);
            mActivityManager.setThemeOverlayReady(currentUser);
        };
        };


+48 −20
Original line number Original line Diff line number Diff line
@@ -5280,18 +5280,24 @@ public class ActivityManagerService extends IActivityManager.Stub
     * Starts Home if there is no completion signal from ThemeOverlayController
     * Starts Home if there is no completion signal from ThemeOverlayController
     */
     */
    private void scheduleHomeTimeout() {
    private void scheduleHomeTimeout() {
        if (enableHomeDelay() && mHasHomeDelay.compareAndSet(false, true)) {
        if (!isHomeLaunchDelayable()) {
            int userId = mUserController.getCurrentUserId();
            Slog.d(TAG, "ThemeHomeDelay: Home launch is not delayable, skipping timeout creation");
            return;
        }
        if (!mHasHomeDelay.compareAndSet(false, true)) return;
        mHandler.postDelayed(() -> {
        mHandler.postDelayed(() -> {
            int userId = mUserController.getCurrentUserId();
            if (!isThemeOverlayReady(userId)) {
            if (!isThemeOverlayReady(userId)) {
                Slog.d(TAG,
                Slog.d(TAG,
                        "ThemeHomeDelay: ThemeOverlayController not responding, launching "
                        "ThemeHomeDelay: ThemeOverlayController not responding, launching "
                                    + "Home after "
                                + "Home after " + HOME_LAUNCH_TIMEOUT_MS + "ms"
                                    + HOME_LAUNCH_TIMEOUT_MS + "ms");
                                + " with user " + userId);
                setThemeOverlayReady(userId);
                setThemeOverlayReady(userId);
            }
            }
        }, HOME_LAUNCH_TIMEOUT_MS);
        }, HOME_LAUNCH_TIMEOUT_MS);
        }
    }
    }
    /**
    /**
@@ -5299,22 +5305,28 @@ public class ActivityManagerService extends IActivityManager.Stub
     * palette is ready.
     * palette is ready.
     *
     *
     * @param userId The ID of the user where ThemeOverlayController is ready.
     * @param userId The ID of the user where ThemeOverlayController is ready.
     *
     * @throws RemoteException
     *
     * @hide
     * @hide
     */
     */
    @Override
    @Override
    public void setThemeOverlayReady(@UserIdInt int userId) {
    public void setThemeOverlayReady(@UserIdInt int userId) {
        if (!isHomeLaunchDelayable()) {
            Slog.d(TAG, "ThemeHomeDelay: Home launch is not delayable, "
                    + "ignoring setThemeOverlayReady() call");
            return;
        }
        enforceCallingPermission(Manifest.permission.SET_THEME_OVERLAY_CONTROLLER_READY,
        enforceCallingPermission(Manifest.permission.SET_THEME_OVERLAY_CONTROLLER_READY,
                "setThemeOverlayReady");
                "setThemeOverlayReady");
        Slog.d(TAG, "ThemeHomeDelay: userId " + userId
                + " notified ThemeOverlayController completeness");
        boolean updateUser;
        boolean updateUser;
        synchronized (mThemeOverlayReadyUsers) {
        synchronized (mThemeOverlayReadyUsers) {
            updateUser = mThemeOverlayReadyUsers.add(userId);
            updateUser = mThemeOverlayReadyUsers.add(userId);
            Slog.d(TAG, "ThemeHomeDelay: updateUser " + userId + " isUpdatable: " + updateUser);
        }
        }
        if (updateUser && enableHomeDelay()) {
        if (updateUser) {
            Slog.d(TAG, "ThemeHomeDelay: updating user " + userId);
            mAtmInternal.startHomeOnAllDisplays(userId, "setThemeOverlayReady");
            mAtmInternal.startHomeOnAllDisplays(userId, "setThemeOverlayReady");
        }
        }
    }
    }
@@ -5331,6 +5343,16 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        }
    }
    }
    /**
     * Checks if feature flag is enabled and if system is Headless (HSUM), case in which 
     * home delay should be skipped.
     *
     * @hide
     */
    public boolean isHomeLaunchDelayable() {
        return !UserManager.isHeadlessSystemUserMode() && enableHomeDelay();
    }
    final void ensureBootCompleted() {
    final void ensureBootCompleted() {
        boolean booting;
        boolean booting;
        boolean enableScreen;
        boolean enableScreen;
@@ -18130,10 +18152,12 @@ public class ActivityManagerService extends IActivityManager.Stub
            // Clean up various services by removing the user
            // Clean up various services by removing the user
            mBatteryStatsService.onUserRemoved(userId);
            mBatteryStatsService.onUserRemoved(userId);
            if (isHomeLaunchDelayable()) {
                synchronized (mThemeOverlayReadyUsers) {
                synchronized (mThemeOverlayReadyUsers) {
                    mThemeOverlayReadyUsers.remove(userId);
                    mThemeOverlayReadyUsers.remove(userId);
                }
                }
            }
            }
        }
        @Override
        @Override
        public void killForegroundAppsForUser(@UserIdInt int userId) {
        public void killForegroundAppsForUser(@UserIdInt int userId) {
@@ -19484,8 +19508,12 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        }
        @Override
        @Override
        public boolean isThemeOverlayReady(int userId) {
        public boolean shouldDelayHomeLaunch(int userId) {
            return ActivityManagerService.this.isThemeOverlayReady(userId);
            if (!isHomeLaunchDelayable()) return false;
            synchronized (mThemeOverlayReadyUsers) {
                return !ActivityManagerService.this.mThemeOverlayReadyUsers.contains(userId);
            }
        }
        }
    }
    }
+2 −3
Original line number Original line Diff line number Diff line
@@ -83,7 +83,6 @@ import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE
import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_NONE;
import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_NONE;
import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING;
import static com.android.systemui.shared.Flags.enableHomeDelay;


import static java.lang.Integer.MAX_VALUE;
import static java.lang.Integer.MAX_VALUE;


@@ -1452,8 +1451,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
            return false;
            return false;
        }
        }


        if (enableHomeDelay() && !mService.mAmInternal.isThemeOverlayReady(userId)) {
        if (mService.mAmInternal.shouldDelayHomeLaunch(userId)) {
            Slog.d(TAG, "ThemeHomeDelay: Home launch was deferred.");
            Slog.d(TAG, "ThemeHomeDelay: Home launch was deferred with user " + userId);
            return false;
            return false;
        }
        }


Loading