Merge "Hide dream status bar when system status bar showing." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
10afa70623
@@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user