Merge "RESTRICT AUTOMERGE Fix alternateBouncer => primaryBouncer flicker" into tm-qpr-dev
This commit is contained in:
@@ -168,7 +168,7 @@ public interface KeyguardViewController {
|
|||||||
/**
|
/**
|
||||||
* Stop showing the alternate bouncer, if showing.
|
* Stop showing the alternate bouncer, if showing.
|
||||||
*/
|
*/
|
||||||
void hideAlternateBouncer(boolean forceUpdateScrim);
|
void hideAlternateBouncer(boolean updateScrim);
|
||||||
|
|
||||||
// TODO: Deprecate registerStatusBar in KeyguardViewController interface. It is currently
|
// TODO: Deprecate registerStatusBar in KeyguardViewController interface. It is currently
|
||||||
// only used for testing purposes in StatusBarKeyguardViewManager, and it prevents us from
|
// only used for testing purposes in StatusBarKeyguardViewManager, and it prevents us from
|
||||||
|
|||||||
@@ -240,7 +240,9 @@ public class NotificationShadeWindowViewController {
|
|||||||
|
|
||||||
mFalsingCollector.onTouchEvent(ev);
|
mFalsingCollector.onTouchEvent(ev);
|
||||||
mPulsingWakeupGestureHandler.onTouchEvent(ev);
|
mPulsingWakeupGestureHandler.onTouchEvent(ev);
|
||||||
mStatusBarKeyguardViewManager.onTouch(ev);
|
if (mStatusBarKeyguardViewManager.onTouch(ev)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (mBrightnessMirror != null
|
if (mBrightnessMirror != null
|
||||||
&& mBrightnessMirror.getVisibility() == View.VISIBLE) {
|
&& mBrightnessMirror.getVisibility() == View.VISIBLE) {
|
||||||
// Disallow new pointers while the brightness mirror is visible. This is so that
|
// Disallow new pointers while the brightness mirror is visible. This is so that
|
||||||
|
|||||||
@@ -605,7 +605,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
|||||||
|
|
||||||
private Runnable mLaunchTransitionEndRunnable;
|
private Runnable mLaunchTransitionEndRunnable;
|
||||||
private Runnable mLaunchTransitionCancelRunnable;
|
private Runnable mLaunchTransitionCancelRunnable;
|
||||||
private boolean mLaunchingAffordance;
|
|
||||||
private boolean mLaunchCameraWhenFinishedWaking;
|
private boolean mLaunchCameraWhenFinishedWaking;
|
||||||
private boolean mLaunchCameraOnFinishedGoingToSleep;
|
private boolean mLaunchCameraOnFinishedGoingToSleep;
|
||||||
private boolean mLaunchEmergencyActionWhenFinishedWaking;
|
private boolean mLaunchEmergencyActionWhenFinishedWaking;
|
||||||
@@ -3744,8 +3743,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
|||||||
|
|
||||||
mScrimController.setExpansionAffectsAlpha(!unlocking);
|
mScrimController.setExpansionAffectsAlpha(!unlocking);
|
||||||
|
|
||||||
boolean launchingAffordanceWithPreview = mLaunchingAffordance;
|
|
||||||
mScrimController.setLaunchingAffordanceWithPreview(launchingAffordanceWithPreview);
|
|
||||||
if (mAlternateBouncerInteractor.isVisibleState()) {
|
if (mAlternateBouncerInteractor.isVisibleState()) {
|
||||||
if ((!isOccluded() || isPanelExpanded())
|
if ((!isOccluded() || isPanelExpanded())
|
||||||
&& (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED
|
&& (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED
|
||||||
@@ -3764,9 +3761,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
|
|||||||
ScrimState state = mStatusBarKeyguardViewManager.primaryBouncerNeedsScrimming()
|
ScrimState state = mStatusBarKeyguardViewManager.primaryBouncerNeedsScrimming()
|
||||||
? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
|
? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
|
||||||
mScrimController.transitionTo(state);
|
mScrimController.transitionTo(state);
|
||||||
} else if (launchingAffordanceWithPreview) {
|
|
||||||
// We want to avoid animating when launching with a preview.
|
|
||||||
mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
|
|
||||||
} else if (mBrightnessMirrorVisible) {
|
} else if (mBrightnessMirrorVisible) {
|
||||||
mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
|
mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
|
||||||
} else if (mState == StatusBarState.SHADE_LOCKED) {
|
} else if (mState == StatusBarState.SHADE_LOCKED) {
|
||||||
|
|||||||
@@ -405,14 +405,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a new legacy alternate bouncer. Only used if mdoern alternate bouncer is NOT enable.
|
* Sets a new legacy alternate bouncer. Only used if modern alternate bouncer is NOT enabled.
|
||||||
*/
|
*/
|
||||||
public void setLegacyAlternateBouncer(@NonNull LegacyAlternateBouncer alternateBouncerLegacy) {
|
public void setLegacyAlternateBouncer(@NonNull LegacyAlternateBouncer alternateBouncerLegacy) {
|
||||||
if (!mIsModernAlternateBouncerEnabled) {
|
if (!mIsModernAlternateBouncerEnabled) {
|
||||||
if (!Objects.equals(mAlternateBouncerInteractor.getLegacyAlternateBouncer(),
|
if (!Objects.equals(mAlternateBouncerInteractor.getLegacyAlternateBouncer(),
|
||||||
alternateBouncerLegacy)) {
|
alternateBouncerLegacy)) {
|
||||||
mAlternateBouncerInteractor.setLegacyAlternateBouncer(alternateBouncerLegacy);
|
mAlternateBouncerInteractor.setLegacyAlternateBouncer(alternateBouncerLegacy);
|
||||||
hideAlternateBouncer(false);
|
hideAlternateBouncer(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,7 +640,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
*/
|
*/
|
||||||
public void showPrimaryBouncer(boolean scrimmed) {
|
public void showPrimaryBouncer(boolean scrimmed) {
|
||||||
hideAlternateBouncer(false);
|
hideAlternateBouncer(false);
|
||||||
|
|
||||||
if (mKeyguardStateController.isShowing() && !isBouncerShowing()) {
|
if (mKeyguardStateController.isShowing() && !isBouncerShowing()) {
|
||||||
mPrimaryBouncerInteractor.show(scrimmed);
|
mPrimaryBouncerInteractor.show(scrimmed);
|
||||||
}
|
}
|
||||||
@@ -734,7 +733,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
showBouncerOrKeyguard(hideBouncerWhenShowing);
|
showBouncerOrKeyguard(hideBouncerWhenShowing);
|
||||||
}
|
}
|
||||||
if (hideBouncerWhenShowing) {
|
if (hideBouncerWhenShowing) {
|
||||||
hideAlternateBouncer(false);
|
hideAlternateBouncer(true);
|
||||||
}
|
}
|
||||||
mKeyguardUpdateManager.sendKeyguardReset();
|
mKeyguardUpdateManager.sendKeyguardReset();
|
||||||
updateStates();
|
updateStates();
|
||||||
@@ -742,8 +741,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hideAlternateBouncer(boolean forceUpdateScrim) {
|
public void hideAlternateBouncer(boolean updateScrim) {
|
||||||
updateAlternateBouncerShowing(mAlternateBouncerInteractor.hide() || forceUpdateScrim);
|
updateAlternateBouncerShowing(mAlternateBouncerInteractor.hide() && updateScrim);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAlternateBouncerShowing(boolean updateScrim) {
|
private void updateAlternateBouncerShowing(boolean updateScrim) {
|
||||||
@@ -1448,16 +1447,21 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
* For any touches on the NPVC, show the primary bouncer if the alternate bouncer is currently
|
* For any touches on the NPVC, show the primary bouncer if the alternate bouncer is currently
|
||||||
* showing.
|
* showing.
|
||||||
*/
|
*/
|
||||||
public void onTouch(MotionEvent event) {
|
public boolean onTouch(MotionEvent event) {
|
||||||
if (mAlternateBouncerInteractor.isVisibleState()
|
boolean handledTouch = false;
|
||||||
|
if (event.getAction() == MotionEvent.ACTION_UP
|
||||||
|
&& mAlternateBouncerInteractor.isVisibleState()
|
||||||
&& mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()) {
|
&& mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()) {
|
||||||
showPrimaryBouncer(true);
|
showPrimaryBouncer(true);
|
||||||
|
handledTouch = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forward NPVC touches to callbacks in case they want to respond to touches
|
// Forward NPVC touches to callbacks in case they want to respond to touches
|
||||||
for (KeyguardViewManagerCallback callback: mCallbacks) {
|
for (KeyguardViewManagerCallback callback: mCallbacks) {
|
||||||
callback.onTouch(event);
|
callback.onTouch(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return handledTouch;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update keyguard position based on a tapped X coordinate. */
|
/** Update keyguard position based on a tapped X coordinate. */
|
||||||
|
|||||||
@@ -276,6 +276,20 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
|
|||||||
underTest.keyguardMessageArea
|
underTest.keyguardMessageArea
|
||||||
verify(view).findViewById<ViewGroup>(R.id.keyguard_message_area)
|
verify(view).findViewById<ViewGroup>(R.id.keyguard_message_area)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun handleDispatchTouchEvent_statusBarViewControllerOnTouch_returnsTrue() {
|
||||||
|
underTest.setStatusBarViewController(phoneStatusBarViewController)
|
||||||
|
|
||||||
|
// GIVEN the statusBarKeyguardViewManager will handle any touches
|
||||||
|
whenever(statusBarKeyguardViewManager.onTouch(any())).thenReturn(true)
|
||||||
|
|
||||||
|
// WHEN a touch is dispatched
|
||||||
|
val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
|
||||||
|
|
||||||
|
// THEN handleDispatchTouchEvent returns true
|
||||||
|
assertThat(returnVal).isTrue()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val downEv = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
|
private val downEv = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone;
|
|||||||
import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN;
|
import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN;
|
||||||
import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE;
|
import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
@@ -35,6 +36,7 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewRootImpl;
|
import android.view.ViewRootImpl;
|
||||||
@@ -709,4 +711,48 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
// THEN alternate bouncer is NOT hidden
|
// THEN alternate bouncer is NOT hidden
|
||||||
verify(mAlternateBouncerInteractor, never()).hide();
|
verify(mAlternateBouncerInteractor, never()).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlternateBouncerToShowPrimaryBouncer_updatesScrimControllerOnce() {
|
||||||
|
// GIVEN the alternate bouncer has shown and calls to hide() will result in successfully
|
||||||
|
// hiding it
|
||||||
|
when(mAlternateBouncerInteractor.hide()).thenReturn(true);
|
||||||
|
when(mKeyguardStateController.isShowing()).thenReturn(true);
|
||||||
|
when(mPrimaryBouncerInteractor.isFullyShowing()).thenReturn(false);
|
||||||
|
when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(false);
|
||||||
|
|
||||||
|
// WHEN request to show primary bouncer
|
||||||
|
mStatusBarKeyguardViewManager.showPrimaryBouncer(true);
|
||||||
|
|
||||||
|
// THEN the scrim isn't updated from StatusBarKeyguardViewManager
|
||||||
|
verify(mCentralSurfaces, never()).updateScrimController();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlternateBouncerOnTouch_actionDown_doesNotHandleTouch() {
|
||||||
|
// GIVEN the alternate bouncer has shown for a minimum amount of time
|
||||||
|
when(mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()).thenReturn(true);
|
||||||
|
when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(true);
|
||||||
|
|
||||||
|
// WHEN ACTION_DOWN touch event comes
|
||||||
|
boolean touchHandled = mStatusBarKeyguardViewManager.onTouch(
|
||||||
|
MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0));
|
||||||
|
|
||||||
|
// THEN the touch is not handled
|
||||||
|
assertFalse(touchHandled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlternateBouncerOnTouch_actionUp_handlesTouch() {
|
||||||
|
// GIVEN the alternate bouncer has shown for a minimum amount of time
|
||||||
|
when(mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()).thenReturn(true);
|
||||||
|
when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(true);
|
||||||
|
|
||||||
|
// WHEN ACTION_UP touch event comes
|
||||||
|
boolean touchHandled = mStatusBarKeyguardViewManager.onTouch(
|
||||||
|
MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0));
|
||||||
|
|
||||||
|
// THEN the touch is handled
|
||||||
|
assertTrue(touchHandled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user