Volume dialog doesn't show on ambient/aod.

Fixes: 62598406

Test: runtest -x packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
Change-Id: Ibb2e1119f0c6d96e9016ebe8fdd9d03b6a3c71b8
This commit is contained in:
Beverly
2017-07-21 14:49:27 -04:00
parent 484115b77d
commit 85e05eb545
3 changed files with 45 additions and 4 deletions

View File

@@ -637,6 +637,15 @@ public class StatusBar extends SystemUI implements DemoMode,
// Fingerprint (as computed by getLoggingFingerprint() of the last logged state.
private int mLastLoggedStateFingerprint;
public boolean isStartedGoingToSleep() {
return mStartedGoingToSleep;
}
/**
* If set, the device has started going to sleep but isn't fully non-interactive yet.
*/
protected boolean mStartedGoingToSleep;
private final OnChildLocationsChangedListener mNotificationLocationsChangedListener =
new OnChildLocationsChangedListener() {
@Override
@@ -5114,6 +5123,7 @@ public class StatusBar extends SystemUI implements DemoMode,
recomputeDisableFlags(true /* animate */);
}
WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() {
@Override
public void onFinishedGoingToSleep() {
@@ -5147,6 +5157,11 @@ public class StatusBar extends SystemUI implements DemoMode,
updateIsKeyguard();
}
@Override
public void onStartedGoingToSleep() {
dismissVolumeDialog();
}
@Override
public void onStartedWakingUp() {
mDeviceInteractive = true;
@@ -5193,6 +5208,10 @@ public class StatusBar extends SystemUI implements DemoMode,
}
};
public int getWakefulnessState() {
return mWakefulnessLifecycle.getWakefulness();
}
private void vibrateForCameraGesture() {
// Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep.
mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */);

View File

@@ -49,6 +49,8 @@ import com.android.internal.annotations.GuardedBy;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.qs.tiles.DndTile;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -336,11 +338,17 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
}
}
boolean onVolumeChangedW(int stream, int flags) {
private boolean shouldShowUI(int flags) {
updateStatusBar();
return mStatusBar != null
&& mStatusBar.getWakefulnessState() != WakefulnessLifecycle.WAKEFULNESS_ASLEEP
&& mStatusBar.getWakefulnessState() != WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP
&& mStatusBar.isDeviceInteractive()
&& (flags & AudioManager.FLAG_SHOW_UI) != 0;
}
final boolean showUI = (mStatusBar != null && mStatusBar.isDeviceInteractive()) &&
((flags & AudioManager.FLAG_SHOW_UI) != 0);
boolean onVolumeChangedW(int stream, int flags) {
final boolean showUI = shouldShowUI(flags);
final boolean fromKey = (flags & AudioManager.FLAG_FROM_KEY) != 0;
final boolean showVibrateHint = (flags & AudioManager.FLAG_SHOW_VIBRATE_HINT) != 0;
final boolean showSilentHint = (flags & AudioManager.FLAG_SHOW_SILENT_HINT) != 0;
@@ -935,7 +943,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
@Override
public void onRemoteVolumeChanged(Token token, int flags) {
final int stream = mRemoteStreams.get(token);
final boolean showUI = (flags & AudioManager.FLAG_SHOW_UI) != 0;
final boolean showUI = shouldShowUI(flags);
boolean changed = updateActiveStreamW(stream);
if (showUI) {
changed |= checkRoutedToBluetoothW(AudioManager.STREAM_MUSIC);

View File

@@ -26,6 +26,7 @@ import android.content.Context;
import android.media.AudioManager;
import android.support.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.statusbar.phone.StatusBar;
import org.junit.Before;
@@ -48,6 +49,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase {
@Test
public void testVolumeChangeW_deviceNotInteractiveAOD() {
when(mStatusBar.isDeviceInteractive()).thenReturn(false);
when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI);
verify(mCallback, never()).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED);
}
@@ -55,6 +57,18 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase {
@Test
public void testVolumeChangeW_deviceInteractive() {
when(mStatusBar.isDeviceInteractive()).thenReturn(true);
when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI);
verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED);
}
@Test
public void testVolumeChangeW_deviceInteractive_StartedSleeping() {
when(mStatusBar.isDeviceInteractive()).thenReturn(true);
when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI);
when(mStatusBar.isDeviceInteractive()).thenReturn(false);
when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP);
mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI);
verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED);
}