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

Commit 1502f3be authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato Committed by alinazaidi
Browse files

Change status bar window height on config change (on all displays)

Before this change, only configuration changes for the default display were updating updating the status bar height. After, it updates for all displays.

This is important to react to configuration changes such as density or font scale.

Bug: 403608290
Test: PhoneStatusBarViewTest, StatusBarWindowControllerImplTest, Status bar reacts to density changes on all displays
Flag: com.android.systemui.shared.status_bar_connected_displays
Change-Id: Ic73e5af211b2f3232aa18c628e5222cf49c0db1f
parent d6c0959f
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.fragments.fragmentService
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.policy.statusBarConfigurationController
import com.android.systemui.statusbar.policy.mockStatusBarConfigurationController
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import org.junit.Before
@@ -47,7 +47,7 @@ class StatusBarWindowControllerImplTest : SysuiTestCase() {
    private val fakeWindowManager = kosmos.fakeWindowManager
    private val mockFragmentService = kosmos.fragmentService
    private val fakeStatusBarWindowViewInflater = kosmos.fakeStatusBarWindowViewInflater
    private val statusBarConfigurationController = kosmos.statusBarConfigurationController
    private val statusBarConfigurationController = kosmos.mockStatusBarConfigurationController

    @Before
    fun setUp() {
@@ -133,4 +133,24 @@ class StatusBarWindowControllerImplTest : SysuiTestCase() {

        assertThat(fakeWindowManager.addedViews.keys).containsExactly(windowView)
    }

    @Test
    @EnableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun attachThenStops_connectedDisplaysFlagEnabled_registersAndUnregistersConfigControllerListener() {
        underTest.attach()

        verify(statusBarConfigurationController).addCallback(any())

        underTest.stop()

        verify(statusBarConfigurationController).removeCallback(any())
    }

    @Test
    @DisableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun attach_connectedDisplaysFlagDisabled_doesNotRegisterConfigControllerListener() {
        underTest.attach()

        verify(statusBarConfigurationController, never()).addCallback(any())
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.Gefingerpoken;
import com.android.systemui.res.R;
import com.android.systemui.shade.ShadeExpandsOnStatusBarLongPress;
import com.android.systemui.shade.StatusBarLongPressGestureDetector;
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore;
import com.android.systemui.user.ui.binder.StatusBarUserChipViewBinder;
@@ -340,6 +341,10 @@ public class PhoneStatusBarView extends FrameLayout {
        if (Flags.statusBarStopUpdatingWindowHeight()) {
            return;
        }
        if (StatusBarConnectedDisplays.isEnabled()) {
            // Handled directly from StatusBarWindowControllerImpl (for each display)
            return;
        }
        mStatusBarWindowControllerStore.getDefaultDisplay().refreshStatusBarHeight();
    }

+15 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.systemui.util.leak.RotationUtils.ROTATION_SEASCAPE;
import static com.android.systemui.util.leak.RotationUtils.ROTATION_UPSIDE_DOWN;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Insets;
import android.graphics.PixelFormat;
import android.graphics.Rect;
@@ -58,6 +59,7 @@ import com.android.systemui.statusbar.core.StatusBarConnectedDisplays;
import com.android.systemui.statusbar.core.StatusBarRootModernization;
import com.android.systemui.statusbar.data.repository.StatusBarConfigurationController;
import com.android.systemui.statusbar.layout.StatusBarContentInsetsProvider;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.window.StatusBarWindowModule.InternalWindowViewInflater;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import com.android.systemui.unfold.util.JankMonitorTransitionProgressListener;
@@ -95,6 +97,14 @@ public class StatusBarWindowControllerImpl implements StatusBarWindowController
    private final WindowManager.LayoutParams mLpChanged;
    private final Binder mInsetsSourceOwner = new Binder();

    private final ConfigurationController.ConfigurationListener mConfigurationListener =
            new ConfigurationController.ConfigurationListener() {
                @Override
                public void onConfigChanged(Configuration newConfig) {
                    refreshStatusBarHeight();
                }
            };

    @AssistedInject
    public StatusBarWindowControllerImpl(
            @Assisted Context context,
@@ -174,6 +184,10 @@ public class StatusBarWindowControllerImpl implements StatusBarWindowController
                            + " doesn't exist anymore.",
                    e);
        }
        if (StatusBarConnectedDisplays.isEnabled()) {
            mStatusBarConfigurationController.addCallback(mConfigurationListener);
            refreshStatusBarHeight();
        }
        mLpChanged.copyFrom(mLp);

        mContentInsetsProvider.addCallback(this::calculateStatusBarLocationsForAllRotations);
@@ -195,7 +209,7 @@ public class StatusBarWindowControllerImpl implements StatusBarWindowController
            // it here will fail too, since it wasn't added in the first place.
            Log.e(TAG, "Failed to remove View from WindowManager. View was not attached", e);
        }

        mStatusBarConfigurationController.removeCallback(mConfigurationListener);
        if (StatusBarRootModernization.isEnabled()) {
            return;
        }
+22 −11
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.systemui.Flags.FLAG_STATUS_BAR_SWIPE_OVER_CHIP
import com.android.systemui.Gefingerpoken
import com.android.systemui.SysuiTestCase
import com.android.systemui.res.R
import com.android.systemui.shared.Flags.FLAG_STATUS_BAR_CONNECTED_DISPLAYS
import com.android.systemui.statusbar.window.StatusBarWindowController
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
import com.android.systemui.util.mockito.mock
@@ -186,24 +187,34 @@ class PhoneStatusBarViewTest : SysuiTestCase() {
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onAttachedToWindow_flagOff_updatesWindowHeight() {
    @EnableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    @DisableFlags(FLAG_STATUS_BAR_CONNECTED_DISPLAYS)
    fun onAttachedToWindow_stopUpdatingHeightFlagOn_connectedDisplayFlagOff_doesNotUpdateWindowHeight() {
        view.onAttachedToWindow()

        verify(windowController).refreshStatusBarHeight()
        verify(windowController, never()).refreshStatusBarHeight()
    }

    @Test
    @EnableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onAttachedToWindow_flagOn_doesNotUpdateWindowHeight() {
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    @EnableFlags(FLAG_STATUS_BAR_CONNECTED_DISPLAYS)
    fun onAttachedToWindow_stopUpdatingHeightFlagOff_connectedDisplayFlagOn_doesNotUpdateWindowHeight() {
        view.onAttachedToWindow()

        verify(windowController, never()).refreshStatusBarHeight()
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onConfigurationChanged_flagOff_updatesWindowHeight() {
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT, FLAG_STATUS_BAR_CONNECTED_DISPLAYS)
    fun onAttachedToWindow_stopUpdatingHeightFlagOff_connectedDisplayFlagOff_updatesWindowHeight() {
        view.onAttachedToWindow()

        verify(windowController).refreshStatusBarHeight()
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT, FLAG_STATUS_BAR_CONNECTED_DISPLAYS)
    fun onConfigurationChanged_stopUpdatingHeightFlagOff_connectedDisplayFlagOff_updatesWindowHeight() {
        view.onConfigurationChanged(Configuration())

        verify(windowController).refreshStatusBarHeight()
@@ -211,15 +222,15 @@ class PhoneStatusBarViewTest : SysuiTestCase() {

    @Test
    @EnableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onConfigurationChanged_flagOn_doesNotUpdateWindowHeight() {
    fun onConfigurationChanged_stopUpdatingHeightFlagOn_doesNotUpdateWindowHeight() {
        view.onConfigurationChanged(Configuration())

        verify(windowController, never()).refreshStatusBarHeight()
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onConfigurationChanged_multipleCalls_flagOff_updatesWindowHeightMultipleTimes() {
    @DisableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT, FLAG_STATUS_BAR_CONNECTED_DISPLAYS)
    fun onConfigurationChanged_multipleCalls_stopUpdatingHeightFlagOff_updatesWindowHeightMultipleTimes() {
        view.onConfigurationChanged(Configuration())
        view.onConfigurationChanged(Configuration())
        view.onConfigurationChanged(Configuration())
@@ -230,7 +241,7 @@ class PhoneStatusBarViewTest : SysuiTestCase() {

    @Test
    @EnableFlags(FLAG_STATUS_BAR_STOP_UPDATING_WINDOW_HEIGHT)
    fun onConfigurationChanged_multipleCalls_flagOn_neverUpdatesWindowHeight() {
    fun onConfigurationChanged_multipleCalls_stopUpdatingHeightFlagOn_neverUpdatesWindowHeight() {
        view.onConfigurationChanged(Configuration())
        view.onConfigurationChanged(Configuration())
        view.onConfigurationChanged(Configuration())
+4 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.policy

import com.android.systemui.kosmos.Kosmos
import com.android.systemui.statusbar.data.repository.StatusBarConfigurationController
import org.mockito.kotlin.mock

var Kosmos.configurationController: ConfigurationController by
    Kosmos.Fixture { fakeConfigurationController }
@@ -26,5 +27,8 @@ val Kosmos.fakeConfigurationController: FakeConfigurationController by
val Kosmos.statusBarConfigurationController: StatusBarConfigurationController by
    Kosmos.Fixture { fakeConfigurationController }

val Kosmos.mockStatusBarConfigurationController by
    Kosmos.Fixture { mock<StatusBarConfigurationController>() }

val ConfigurationController.fake
    get() = this as FakeConfigurationController
Loading