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

Commit 4dfad486 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/30551408'] into 25Q1-release.

Change-Id: Id314ca49bf9bb7786a5319a70f1154cec865c252
parents fff7d450 e68e3a30
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -116,7 +116,6 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.data.repository.LightBarControllerStore;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.LightBarController;
@@ -209,7 +208,7 @@ public class NavigationBarTest extends SysuiTestCase {
    @Mock
    private LightBarController mLightBarController;
    @Mock
    private LightBarControllerStore mLightBarControllerStore;
    private LightBarController.Factory mLightBarcontrollerFactory;
    @Mock
    private AutoHideController mAutoHideController;
    @Mock
@@ -258,7 +257,7 @@ public class NavigationBarTest extends SysuiTestCase {
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);

        when(mLightBarControllerStore.forDisplay(anyInt())).thenReturn(mLightBarController);
        when(mLightBarcontrollerFactory.create(any(Context.class))).thenReturn(mLightBarController);
        when(mAutoHideControllerFactory.create(any(Context.class))).thenReturn(mAutoHideController);
        when(mNavigationBarView.getHomeButton()).thenReturn(mHomeButton);
        when(mNavigationBarView.getRecentsButton()).thenReturn(mRecentsButton);
@@ -650,7 +649,8 @@ public class NavigationBarTest extends SysuiTestCase {
                mFakeExecutor,
                mUiEventLogger,
                mNavBarHelper,
                mLightBarControllerStore,
                mLightBarController,
                mLightBarcontrollerFactory,
                mAutoHideController,
                mAutoHideControllerFactory,
                Optional.of(mTelecomManager),
+8 −5
Original line number Diff line number Diff line
@@ -149,7 +149,6 @@ import com.android.systemui.statusbar.CommandQueue.Callbacks;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.data.repository.LightBarControllerStore;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -259,7 +258,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
    private boolean mTransientShownFromGestureOnSystemBar;
    private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
    private LightBarController mLightBarController;
    private final LightBarControllerStore mLightBarControllerStore;
    private final LightBarController mMainLightBarController;
    private final LightBarController.Factory mLightBarControllerFactory;
    private AutoHideController mAutoHideController;
    private final AutoHideController mMainAutoHideController;
    private final AutoHideController.Factory mAutoHideControllerFactory;
@@ -580,7 +580,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
            @Background Executor bgExecutor,
            UiEventLogger uiEventLogger,
            NavBarHelper navBarHelper,
            LightBarControllerStore lightBarControllerStore,
            LightBarController mainLightBarController,
            LightBarController.Factory lightBarControllerFactory,
            AutoHideController mainAutoHideController,
            AutoHideController.Factory autoHideControllerFactory,
            Optional<TelecomManager> telecomManagerOptional,
@@ -627,7 +628,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        mUiEventLogger = uiEventLogger;
        mNavBarHelper = navBarHelper;
        mNotificationShadeDepthController = notificationShadeDepthController;
        mLightBarControllerStore = lightBarControllerStore;
        mMainLightBarController = mainLightBarController;
        mLightBarControllerFactory = lightBarControllerFactory;
        mMainAutoHideController = mainAutoHideController;
        mAutoHideControllerFactory = autoHideControllerFactory;
        mTelecomManagerOptional = telecomManagerOptional;
@@ -840,7 +842,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
        // Unfortunately, we still need it because status bar needs LightBarController
        // before notifications creation. We cannot directly use getLightBarController()
        // from NavigationBarFragment directly.
        LightBarController lightBarController = mLightBarControllerStore.forDisplay(mDisplayId);
        LightBarController lightBarController = mIsOnDefaultDisplay
                ? mMainLightBarController : mLightBarControllerFactory.create(mContext);
        setLightBarController(lightBarController);

        // TODO(b/118592525): to support multi-display, we start to add something which is
+6 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.statusbar.data.repository.LightBarControllerStore
import com.android.systemui.statusbar.phone.AutoHideController
import com.android.systemui.statusbar.phone.AutoHideControllerImpl
import com.android.systemui.statusbar.phone.LightBarController
import com.android.systemui.statusbar.phone.LightBarControllerImpl
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProviderImpl
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy
@@ -83,6 +84,11 @@ interface StatusBarModule {

    @Binds @SysUISingleton fun autoHideController(impl: AutoHideControllerImpl): AutoHideController

    @Binds
    fun lightBarControllerFactory(
        legacyFactory: LightBarControllerImpl.LegacyFactory
    ): LightBarController.Factory

    companion object {

        @Provides
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.phone

import android.content.Context
import android.view.WindowInsetsController
import com.android.internal.colorextraction.ColorExtractor
import com.android.internal.view.AppearanceRegion
@@ -64,4 +65,8 @@ interface LightBarController : CoreStartable {
        scrimBehindAlpha: Float,
        scrimInFrontColor: ColorExtractor.GradientColors,
    )

    fun interface Factory {
        fun create(context: Context): LightBarController
    }
}
+46 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static com.android.systemui.shared.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
import static com.android.systemui.shared.statusbar.phone.BarTransitions.MODE_TRANSPARENT;

import android.content.Context;
import android.graphics.Rect;
import android.util.Log;
import android.view.Display;
@@ -34,12 +35,15 @@ import androidx.annotation.Nullable;

import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.view.AppearanceRegion;
import com.android.systemui.dagger.qualifiers.Application;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.data.model.StatusBarAppearance;
import com.android.systemui.statusbar.data.repository.DarkIconDispatcherStore;
import com.android.systemui.statusbar.data.repository.StatusBarModePerDisplayRepository;
import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.util.Compile;
import com.android.systemui.util.kotlin.JavaAdapterKt;
@@ -55,6 +59,8 @@ import kotlinx.coroutines.CoroutineScope;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.inject.Inject;

/**
 * Controls how light status bar flag applies to the icons.
 */
@@ -67,6 +73,7 @@ public class LightBarControllerImpl implements

    private static final float NAV_BAR_INVERSION_SCRIM_ALPHA_THRESHOLD = 0.1f;

    private final int mDisplayId;
    private final CoroutineScope mCoroutineScope;
    private final SysuiDarkIconDispatcher mStatusBarIconController;
    private final BatteryController mBatteryController;
@@ -140,6 +147,7 @@ public class LightBarControllerImpl implements
            DumpManager dumpManager,
            @Main CoroutineContext mainContext,
            BiometricUnlockController biometricUnlockController) {
        mDisplayId = displayId;
        mCoroutineScope = coroutineScope;
        mStatusBarIconController = (SysuiDarkIconDispatcher) darkIconDispatcher;
        mBatteryController = batteryController;
@@ -155,7 +163,12 @@ public class LightBarControllerImpl implements

    @Override
    public void start() {
        if (mDisplayId == Display.DEFAULT_DISPLAY) {
            // Can only register on default display, because NavigationBar creates its own instance
            // as well as PerDisplayStore.
            // TODO: b/380394368 - make sure there is only one instance per display.
            mDumpManager.registerCriticalDumpable(mDumpableName, this);
        }
        mBatteryController.addCallback(this);
        mNavigationMode = mNavModeController.addListener(mNavigationModeListener);
        JavaAdapterKt.collectFlow(
@@ -490,4 +503,36 @@ public class LightBarControllerImpl implements
                DarkIconDispatcher darkIconDispatcher,
                StatusBarModePerDisplayRepository statusBarModePerDisplayRepository);
    }

    public static class LegacyFactory implements LightBarController.Factory {

        private final Factory mFactory;
        private final CoroutineScope mApplicationScope;
        private final DarkIconDispatcherStore mDarkIconDispatcherStore;
        private final StatusBarModeRepositoryStore mStatusBarModeRepositoryStore;

        @Inject
        public LegacyFactory(
                LightBarControllerImpl.Factory factory,
                @Application CoroutineScope applicationScope,
                DarkIconDispatcherStore darkIconDispatcherStore,
                StatusBarModeRepositoryStore statusBarModeRepositoryStore) {
            mFactory = factory;
            mApplicationScope = applicationScope;
            mDarkIconDispatcherStore = darkIconDispatcherStore;
            mStatusBarModeRepositoryStore = statusBarModeRepositoryStore;
        }

        @NonNull
        @Override
        public LightBarController create(@NonNull Context context) {
            // TODO: b/380394368 - Make sure correct per display instances are used.
            return mFactory.create(
                    context.getDisplayId(),
                    mApplicationScope,
                    mDarkIconDispatcherStore.getDefaultDisplay(),
                    mStatusBarModeRepositoryStore.getDefaultDisplay()
            );
        }
    }
}