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

Commit addc0c7d authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Update dialog visibility in SysUIState per display

Many classes in launcher hide UI element when there is a dialog visible in SysUI.
This propagates the "dialog visible" bit in the correct SysUIState associated with a display, resulting in launcher hiding the correct elements.

Before this, for example, opening a dialog in the external display was causing the taskbar to be hidden in the default display.

Note the context will have a different display id only when
shade_window_goes_around is enabled, so this is essentially guarded by
that flag.

Bug: 362719719
Bug: 405959656
Test: SystemUIDialogTest, SysUIStatePerDisplayInteractorTest
Flag: com.android.systemui.shade_window_goes_around
Change-Id: I114d568f1d69f8f74820abae94706a76253f6dd5
parent 5d640a15
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -27,8 +27,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.common.domain.interactor.SysUIStateDisplaysInteractor
import com.android.systemui.common.ui.view.SeekBarWithIconButtonsView
import com.android.systemui.model.SysUiState
import com.android.systemui.res.R
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.phone.SystemUIDialog
@@ -44,8 +44,6 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.Mock
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
@@ -75,7 +73,7 @@ class FontScalingDialogDelegateTest : SysuiTestCase() {
    @Mock private lateinit var dialogManager: SystemUIDialogManager
    @Mock private lateinit var dialogFactory: SystemUIDialog.Factory
    @Mock private lateinit var userTracker: UserTracker
    @Mock private lateinit var sysuiState: SysUiState
    @Mock private lateinit var sysUIStateInteractor: SysUIStateDisplaysInteractor
    @Mock private lateinit var mDialogTransitionAnimator: DialogTransitionAnimator

    @Before
@@ -90,7 +88,6 @@ class FontScalingDialogDelegateTest : SysuiTestCase() {
        secureSettings = fakeSettings
        systemClock = FakeSystemClock()
        backgroundDelayableExecutor = FakeExecutor(systemClock)
        whenever(sysuiState.setFlag(anyLong(), anyBoolean())).thenReturn(sysuiState)

        fontScalingDialogDelegate =
            spy(
@@ -113,7 +110,7 @@ class FontScalingDialogDelegateTest : SysuiTestCase() {
                0,
                DEFAULT_DISMISS_ON_DEVICE_LOCK,
                dialogManager,
                sysuiState,
                sysUIStateInteractor,
                fakeBroadcastDispatcher,
                mDialogTransitionAnimator,
                fontScalingDialogDelegate,
+3 −6
Original line number Diff line number Diff line
@@ -26,9 +26,7 @@ import static com.android.systemui.accessibility.hearingaid.HearingDevicesDialog
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -69,7 +67,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogTransitionAnimator;
import com.android.systemui.bluetooth.qsdialog.DeviceItem;
import com.android.systemui.bluetooth.qsdialog.DeviceItemType;
import com.android.systemui.model.SysUiState;
import com.android.systemui.common.domain.interactor.SysUIStateDisplaysInteractor;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.shared.QSSettingsPackageRepository;
import com.android.systemui.res.R;
@@ -115,7 +113,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
    @Mock
    private SystemUIDialogManager mSystemUIDialogManager;
    @Mock
    private SysUiState mSysUiState;
    private SysUIStateDisplaysInteractor mSysUiStateInteractor;
    @Mock
    private DialogTransitionAnimator mDialogTransitionAnimator;
    @Mock
@@ -171,7 +169,6 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
        when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
        when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(List.of(mCachedDevice));
        when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
        when(mSysUiState.setFlag(anyLong(), anyBoolean())).thenReturn(mSysUiState);
        when(mQSSettingsPackageRepository.getSettingsPackageName())
                .thenReturn(SETTINGS_PACKAGE_NAME);
        when(mDevice.getBondState()).thenReturn(BOND_BONDED);
@@ -394,7 +391,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
        mDialogFactory = new SystemUIDialog.Factory(
                mContext,
                mSystemUIDialogManager,
                mSysUiState,
                mSysUiStateInteractor,
                getFakeBroadcastDispatcher(),
                mDialogTransitionAnimator
        );
+27 −0
Original line number Diff line number Diff line
@@ -119,4 +119,31 @@ class SysUIStatePerDisplayInteractorTest : SysuiTestCase() {
        assertThat(state1.isFlagEnabled(1)).isFalse()
        assertThat(state2.isFlagEnabled(1)).isFalse()
    }

    @Test
    fun setsFlags_setsCorrectly() {
        state0.setFlag(1, true).setFlag(2, true).commitUpdate()
        state1.setFlag(1, true).setFlag(2, true).commitUpdate()
        state2.setFlag(1, true).setFlag(2, true).commitUpdate()

        val stateChange = StateChange().setFlag(1L, false)

        underTest.setFlags(1, stateChange)

        assertThat(state0.isFlagEnabled(1)).isTrue()
        assertThat(state1.isFlagEnabled(1)).isFalse()
        assertThat(state2.isFlagEnabled(1)).isTrue()

        underTest.setFlags(2, stateChange)

        assertThat(state0.isFlagEnabled(1)).isTrue()
        assertThat(state1.isFlagEnabled(1)).isFalse()
        assertThat(state2.isFlagEnabled(1)).isFalse()

        underTest.setFlags(0, stateChange)

        assertThat(state0.isFlagEnabled(1)).isFalse()
        assertThat(state1.isFlagEnabled(1)).isFalse()
        assertThat(state2.isFlagEnabled(1)).isFalse()
    }
}
+3 −6
Original line number Diff line number Diff line
@@ -26,12 +26,12 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.common.domain.interactor.SysUIStateDisplaysInteractor
import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger
import com.android.systemui.mediaprojection.SessionCreationSource
import com.android.systemui.mediaprojection.devicepolicy.ScreenCaptureDevicePolicyResolver
import com.android.systemui.mediaprojection.devicepolicy.ScreenCaptureDisabledDialogDelegate
import com.android.systemui.model.SysUiState
import com.android.systemui.recordissue.IssueRecordingState.Companion.ISSUE_TYPE_NOT_SET
import com.android.systemui.res.R
import com.android.systemui.settings.UserTracker
@@ -49,9 +49,7 @@ import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
@@ -73,7 +71,7 @@ class RecordIssueDialogDelegateTest : SysuiTestCase() {
    private lateinit var screenCaptureDisabledDialogDelegate: ScreenCaptureDisabledDialogDelegate
    @Mock private lateinit var screenCaptureDisabledDialog: SystemUIDialog

    @Mock private lateinit var sysuiState: SysUiState
    @Mock private lateinit var sysUIStateDisplaysInteractor: SysUIStateDisplaysInteractor
    @Mock private lateinit var systemUIDialogManager: SystemUIDialogManager
    @Mock private lateinit var broadcastDispatcher: BroadcastDispatcher
    private val systemClock = FakeSystemClock()
@@ -89,7 +87,6 @@ class RecordIssueDialogDelegateTest : SysuiTestCase() {
    fun setup() {
        MockitoAnnotations.initMocks(this)
        whenever(dprLazy.get()).thenReturn(devicePolicyResolver)
        whenever(sysuiState.setFlag(anyLong(), anyBoolean())).thenReturn(sysuiState)
        whenever(screenCaptureDisabledDialogDelegate.createSysUIDialog())
            .thenReturn(screenCaptureDisabledDialog)
        whenever(state.issueTypeRes).thenReturn(ISSUE_TYPE_NOT_SET)
@@ -99,7 +96,7 @@ class RecordIssueDialogDelegateTest : SysuiTestCase() {
                SystemUIDialog.Factory(
                    context,
                    systemUIDialogManager,
                    sysuiState,
                    sysUIStateDisplaysInteractor,
                    broadcastDispatcher,
                    mDialogTransitionAnimator,
                )
+2 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.systemui.Dependency
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.common.domain.interactor.SysUIStateDisplaysInteractor
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger
import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorActivity
import com.android.systemui.mediaprojection.permission.ENTIRE_SCREEN
@@ -78,7 +79,7 @@ class ScreenRecordPermissionDialogDelegateTest : SysuiTestCase() {
            SystemUIDialog.Factory(
                context,
                Dependency.get(SystemUIDialogManager::class.java),
                Dependency.get(SysUiState::class.java),
                Dependency.get(SysUIStateDisplaysInteractor::class.java),
                Dependency.get(BroadcastDispatcher::class.java),
                Dependency.get(DialogTransitionAnimator::class.java),
            )
Loading