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

Commit b596ee5d authored by William Leshner's avatar William Leshner Committed by Automerger Merge Worker
Browse files

Merge "Hide dream status bar when system status bar showing." into tm-dev am: 10afa706

parents 4382d8ee 10afa706
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -16,8 +16,13 @@

package com.android.systemui.dreams;

import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_HIDING;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;

import android.annotation.Nullable;
import android.app.AlarmManager;
import android.app.StatusBarManager;
import android.content.res.Resources;
import android.hardware.SensorPrivacyManager;
import android.net.ConnectivityManager;
@@ -29,6 +34,7 @@ import android.os.UserHandle;
import android.provider.Settings;
import android.text.format.DateFormat;
import android.util.PluralsMessageFormatter;
import android.view.View;

import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
@@ -36,6 +42,7 @@ import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.time.DateFormatUtil;
@@ -119,7 +126,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
            DateFormatUtil dateFormatUtil,
            IndividualSensorPrivacyController sensorPrivacyController,
            DreamOverlayNotificationCountProvider dreamOverlayNotificationCountProvider,
            ZenModeController zenModeController) {
            ZenModeController zenModeController,
            StatusBarWindowStateController statusBarWindowStateController) {
        super(view);
        mResources = resources;
        mMainExecutor = mainExecutor;
@@ -131,6 +139,10 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
        mSensorPrivacyController = sensorPrivacyController;
        mDreamOverlayNotificationCountProvider = dreamOverlayNotificationCountProvider;
        mZenModeController = zenModeController;

        // Register to receive show/hide updates for the system status bar. Our custom status bar
        // needs to hide when the system status bar is showing to ovoid overlapping status bars.
        statusBarWindowStateController.addListener(this::onSystemStatusBarStateChanged);
    }

    @Override
@@ -229,4 +241,22 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
            }
        });
    }

    private void onSystemStatusBarStateChanged(@StatusBarManager.WindowVisibleState int state) {
        mMainExecutor.execute(() -> {
            if (!mIsAttached) {
                return;
            }

            switch (state) {
                case WINDOW_STATE_SHOWING:
                    mView.setVisibility(View.INVISIBLE);
                    break;
                case WINDOW_STATE_HIDING:
                case WINDOW_STATE_HIDDEN:
                    mView.setVisibility(View.VISIBLE);
                    break;
            }
        });
    }
}
+48 −1
Original line number Diff line number Diff line
@@ -16,10 +16,14 @@

package com.android.systemui.dreams;

import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -32,6 +36,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.view.View;

import androidx.test.filters.SmallTest;

@@ -40,6 +45,8 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateListener;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.time.DateFormatUtil;

@@ -84,6 +91,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
    ZenModeController mZenModeController;
    @Mock
    DreamOverlayNotificationCountProvider mDreamOverlayNotificationCountProvider;
    @Mock
    StatusBarWindowStateController mStatusBarWindowStateController;

    private final Executor mMainExecutor = Runnable::run;

@@ -107,7 +116,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
                mDateFormatUtil,
                mSensorPrivacyController,
                mDreamOverlayNotificationCountProvider,
                mZenModeController);
                mZenModeController,
                mStatusBarWindowStateController);
    }

    @Test
@@ -401,4 +411,41 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
        verify(mView).showIcon(
                DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null);
    }

    @Test
    public void testStatusBarHiddenWhenSystemStatusBarShown() {
        mController.onViewAttached();

        final ArgumentCaptor<StatusBarWindowStateListener>
                callbackCapture = ArgumentCaptor.forClass(StatusBarWindowStateListener.class);
        verify(mStatusBarWindowStateController).addListener(callbackCapture.capture());
        callbackCapture.getValue().onStatusBarWindowStateChanged(WINDOW_STATE_SHOWING);

        verify(mView).setVisibility(View.INVISIBLE);
    }

    @Test
    public void testStatusBarShownWhenSystemStatusBarHidden() {
        mController.onViewAttached();

        final ArgumentCaptor<StatusBarWindowStateListener>
                callbackCapture = ArgumentCaptor.forClass(StatusBarWindowStateListener.class);
        verify(mStatusBarWindowStateController).addListener(callbackCapture.capture());
        callbackCapture.getValue().onStatusBarWindowStateChanged(WINDOW_STATE_HIDDEN);

        verify(mView).setVisibility(View.VISIBLE);
    }

    @Test
    public void testUnattachedStatusBarVisibilityUnchangedWhenSystemStatusBarHidden() {
        mController.onViewAttached();
        mController.onViewDetached();

        final ArgumentCaptor<StatusBarWindowStateListener>
                callbackCapture = ArgumentCaptor.forClass(StatusBarWindowStateListener.class);
        verify(mStatusBarWindowStateController).addListener(callbackCapture.capture());
        callbackCapture.getValue().onStatusBarWindowStateChanged(WINDOW_STATE_SHOWING);

        verify(mView, never()).setVisibility(anyInt());
    }
}