Merge "Adding more test coverage for QuickSettingsController" into tm-qpr-dev am: 5a9061eeb3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21466903 Change-Id: If56d59ddc33a0061415f527ea0cd3c34f3f5625d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -425,6 +425,11 @@ public class QuickSettingsController {
|
||||
updateExpansionEnabledAmbient();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setStatusBarMinHeight(int height) {
|
||||
mStatusBarMinHeight = height;
|
||||
}
|
||||
|
||||
int getHeaderHeight() {
|
||||
return mQs.getHeader().getHeight();
|
||||
}
|
||||
@@ -474,7 +479,8 @@ public class QuickSettingsController {
|
||||
}
|
||||
|
||||
/** Returns whether or not event should open QS */
|
||||
private boolean isOpenQsEvent(MotionEvent event) {
|
||||
@VisibleForTesting
|
||||
boolean isOpenQsEvent(MotionEvent event) {
|
||||
final int pointerCount = event.getPointerCount();
|
||||
final int action = event.getActionMasked();
|
||||
|
||||
@@ -847,6 +853,11 @@ public class QuickSettingsController {
|
||||
mTwoFingerExpandPossible = expandPossible;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isTwoFingerExpandPossible() {
|
||||
return mTwoFingerExpandPossible;
|
||||
}
|
||||
|
||||
/** Called when Qs starts expanding */
|
||||
private void onExpansionStarted() {
|
||||
cancelExpansionAnimation();
|
||||
@@ -1363,7 +1374,8 @@ public class QuickSettingsController {
|
||||
return mTouchAboveFalsingThreshold;
|
||||
}
|
||||
|
||||
private void onHeightChanged() {
|
||||
@VisibleForTesting
|
||||
void onHeightChanged() {
|
||||
mMaxExpansionHeight = isQsFragmentCreated() ? mQs.getDesiredHeight() : 0;
|
||||
if (mExpanded && mFullyExpanded) {
|
||||
mExpansionHeight = mMaxExpansionHeight;
|
||||
@@ -1668,7 +1680,8 @@ public class QuickSettingsController {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onPanelExpansionChanged(ShadeExpansionChangeEvent event) {
|
||||
@VisibleForTesting
|
||||
void onPanelExpansionChanged(ShadeExpansionChangeEvent event) {
|
||||
mShadeExpandedFraction = event.getFraction();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
|
||||
package com.android.systemui.shade;
|
||||
|
||||
import static android.view.MotionEvent.ACTION_DOWN;
|
||||
import static android.view.MotionEvent.ACTION_MOVE;
|
||||
import static android.view.MotionEvent.ACTION_POINTER_DOWN;
|
||||
import static android.view.MotionEvent.ACTION_UP;
|
||||
import static android.view.MotionEvent.BUTTON_SECONDARY;
|
||||
import static android.view.MotionEvent.BUTTON_STYLUS_PRIMARY;
|
||||
|
||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE;
|
||||
|
||||
@@ -70,13 +77,11 @@ import com.android.systemui.statusbar.StatusBarStateControllerImpl;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.stack.AmbientState;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
|
||||
import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
|
||||
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.ScrimController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
|
||||
@@ -97,6 +102,11 @@ import dagger.Lazy;
|
||||
public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
|
||||
private static final int SPLIT_SHADE_FULL_TRANSITION_DISTANCE = 400;
|
||||
private static final float QS_FRAME_START_X = 0f;
|
||||
private static final int QS_FRAME_WIDTH = 1000;
|
||||
private static final int QS_FRAME_TOP = 0;
|
||||
private static final int QS_FRAME_BOTTOM = 1000;
|
||||
|
||||
|
||||
private QuickSettingsController mQsController;
|
||||
|
||||
@@ -139,8 +149,7 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
@Mock private ShadeLogger mShadeLogger;
|
||||
|
||||
@Mock private DumpManager mDumpManager;
|
||||
@Mock private DozeParameters mDozeParameters;
|
||||
@Mock private ScreenOffAnimationController mScreenOffAnimationController;
|
||||
|
||||
@Mock private HeadsUpManagerPhone mHeadsUpManager;
|
||||
@Mock private UiEventLogger mUiEventLogger;
|
||||
|
||||
@@ -169,6 +178,12 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
when(mPanelView.findViewById(R.id.keyguard_header)).thenReturn(mKeyguardStatusBar);
|
||||
when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
|
||||
when(mPanelView.findViewById(R.id.qs_frame)).thenReturn(mQsFrame);
|
||||
when(mQsFrame.getX()).thenReturn(QS_FRAME_START_X);
|
||||
when(mQsFrame.getWidth()).thenReturn(QS_FRAME_WIDTH);
|
||||
when(mQsHeader.getTop()).thenReturn(QS_FRAME_TOP);
|
||||
when(mQsHeader.getBottom()).thenReturn(QS_FRAME_BOTTOM);
|
||||
when(mPanelView.getY()).thenReturn((float) QS_FRAME_TOP);
|
||||
when(mPanelView.getHeight()).thenReturn(QS_FRAME_BOTTOM);
|
||||
when(mPanelView.findViewById(R.id.keyguard_status_view))
|
||||
.thenReturn(mock(KeyguardStatusView.class));
|
||||
when(mQs.getView()).thenReturn(mPanelView);
|
||||
@@ -229,20 +244,9 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
mNotificationPanelViewController.cancelHeightAnimator();
|
||||
mMainHandler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnTouchEvent_isConflictingExpansionGestureSet() {
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isFalse();
|
||||
mShadeExpansionStateManager.onPanelExpansionChanged(1f, true, false, 0f);
|
||||
mQsController.handleTouch(MotionEvent.obtain(0L /* downTime */,
|
||||
0L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 0f /* y */,
|
||||
0 /* metaState */), false, false);
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCloseQsSideEffects() {
|
||||
enableSplitShade(true);
|
||||
@@ -270,7 +274,7 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
public void testPanelStaysOpenWhenClosingQs() {
|
||||
mShadeExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
|
||||
/* expanded= */ true, /* tracking= */ false, /* dragDownPxAmount= */ 0);
|
||||
mNotificationPanelViewController.setExpandedFraction(1f);
|
||||
mQsController.setShadeExpandedHeight(1);
|
||||
|
||||
float shadeExpandedHeight = mQsController.getShadeExpandedHeight();
|
||||
mQsController.animateCloseQs(false);
|
||||
@@ -281,16 +285,12 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() {
|
||||
mQsController.setQs(mQs);
|
||||
when(mQsFrame.getX()).thenReturn(0f);
|
||||
when(mQsFrame.getWidth()).thenReturn(1000);
|
||||
when(mQsHeader.getTop()).thenReturn(0);
|
||||
when(mQsHeader.getBottom()).thenReturn(1000);
|
||||
|
||||
mQsController.setShadeExpandedHeight(1f);
|
||||
mQsController.onIntercept(
|
||||
createMotionEvent(0, 0, MotionEvent.ACTION_DOWN));
|
||||
createMotionEvent(0, 0, ACTION_DOWN));
|
||||
mQsController.onIntercept(
|
||||
createMotionEvent(0, 500, MotionEvent.ACTION_MOVE));
|
||||
createMotionEvent(0, 500, ACTION_MOVE));
|
||||
|
||||
assertThat(mQsController.isTracking()).isTrue();
|
||||
}
|
||||
@@ -299,20 +299,123 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
public void interceptTouchEvent_withinQs_shadeExpanded_inSplitShade_doesNotStartQsTracking() {
|
||||
enableSplitShade(true);
|
||||
mQsController.setQs(mQs);
|
||||
when(mQsFrame.getX()).thenReturn(0f);
|
||||
when(mQsFrame.getWidth()).thenReturn(1000);
|
||||
when(mQsHeader.getTop()).thenReturn(0);
|
||||
when(mQsHeader.getBottom()).thenReturn(1000);
|
||||
|
||||
mQsController.setShadeExpandedHeight(1f);
|
||||
mQsController.onIntercept(
|
||||
createMotionEvent(0, 0, MotionEvent.ACTION_DOWN));
|
||||
createMotionEvent(0, 0, ACTION_DOWN));
|
||||
mQsController.onIntercept(
|
||||
createMotionEvent(0, 500, MotionEvent.ACTION_MOVE));
|
||||
createMotionEvent(0, 500, ACTION_MOVE));
|
||||
|
||||
assertThat(mQsController.isTracking()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void interceptTouch_downBetweenFullyCollapsedAndExpanded() {
|
||||
mQsController.setQs(mQs);
|
||||
when(mQs.getDesiredHeight()).thenReturn(QS_FRAME_BOTTOM);
|
||||
mQsController.onHeightChanged();
|
||||
mQsController.setExpansionHeight(QS_FRAME_BOTTOM / 2f);
|
||||
|
||||
assertThat(mQsController.onIntercept(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM / 2, ACTION_DOWN))).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onTouch_moveActionSetsCorrectExpansionHeight() {
|
||||
mQsController.setQs(mQs);
|
||||
when(mQs.getDesiredHeight()).thenReturn(QS_FRAME_BOTTOM);
|
||||
mQsController.onHeightChanged();
|
||||
mQsController.setExpansionHeight(QS_FRAME_BOTTOM / 2f);
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM / 4, ACTION_DOWN), false, false);
|
||||
assertThat(mQsController.isTracking()).isTrue();
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM / 4 + 1, ACTION_MOVE), false, false);
|
||||
|
||||
assertThat(mQsController.getExpansionHeight()).isEqualTo(QS_FRAME_BOTTOM / 2 + 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_downActionInQsArea() {
|
||||
mQsController.setQs(mQs);
|
||||
mQsController.setBarState(SHADE);
|
||||
mQsController.onPanelExpansionChanged(
|
||||
new ShadeExpansionChangeEvent(
|
||||
0.5f,
|
||||
true,
|
||||
true,
|
||||
0
|
||||
));
|
||||
MotionEvent event =
|
||||
createMotionEvent(QS_FRAME_WIDTH / 2, QS_FRAME_BOTTOM / 2, ACTION_DOWN);
|
||||
mQsController.handleTouch(event, false, false);
|
||||
|
||||
assertThat(mQsController.isTracking()).isTrue();
|
||||
assertThat(mQsController.getInitialTouchY()).isEqualTo(QS_FRAME_BOTTOM / 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_qsTouchedWhileCollapsingDisablesTracking() {
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM, ACTION_DOWN), false, false);
|
||||
mQsController.setLastShadeFlingWasExpanding(false);
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM / 2, ACTION_MOVE), false, true);
|
||||
MotionEvent secondTouch = createMotionEvent(0, QS_FRAME_TOP, ACTION_DOWN);
|
||||
mQsController.handleTouch(secondTouch, false, true);
|
||||
assertThat(mQsController.isTracking()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_qsTouchedWhileExpanding() {
|
||||
mQsController.setQs(mQs);
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(100, 100, ACTION_DOWN), false, false);
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_BOTTOM / 2, ACTION_MOVE), false, false);
|
||||
mQsController.setLastShadeFlingWasExpanding(true);
|
||||
mQsController.handleTouch(
|
||||
createMotionEvent(0, QS_FRAME_TOP, ACTION_DOWN), false, false);
|
||||
assertThat(mQsController.isTracking()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_isConflictingExpansionGestureSet() {
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isFalse();
|
||||
mShadeExpansionStateManager.onPanelExpansionChanged(1f, true, false, 0f);
|
||||
mQsController.handleTouch(MotionEvent.obtain(0L /* downTime */,
|
||||
0L /* eventTime */, ACTION_DOWN, 0f /* x */, 0f /* y */,
|
||||
0 /* metaState */), false, false);
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_isConflictingExpansionGestureSet_cancel() {
|
||||
mShadeExpansionStateManager.onPanelExpansionChanged(1f, true, false, 0f);
|
||||
mQsController.handleTouch(createMotionEvent(0, 0, ACTION_DOWN), false, false);
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isTrue();
|
||||
mQsController.handleTouch(createMotionEvent(0, 0, ACTION_UP), true, true);
|
||||
assertThat(mQsController.isConflictingExpansionGesture()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_twoFingerExpandPossibleConditions() {
|
||||
assertThat(mQsController.isTwoFingerExpandPossible()).isFalse();
|
||||
mQsController.handleTouch(createMotionEvent(0, 0, ACTION_DOWN), true, false);
|
||||
assertThat(mQsController.isTwoFingerExpandPossible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_twoFingerDrag() {
|
||||
mQsController.setQs(mQs);
|
||||
mQsController.setStatusBarMinHeight(1);
|
||||
mQsController.setTwoFingerExpandPossible(true);
|
||||
mQsController.handleTouch(
|
||||
createMultitouchMotionEvent(ACTION_POINTER_DOWN), false, false);
|
||||
assertThat(mQsController.isExpandImmediate()).isTrue();
|
||||
verify(mQs).setListening(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onQsFragmentAttached_fullWidth_setsFullWidthTrueOnQS() {
|
||||
setIsFullWidth(true);
|
||||
@@ -329,19 +432,6 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
verify(mQSFragment).setIsNotificationPanelFullWidth(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getMaxPanelTransitionDistance_inSplitShade_withHeadsUp_returnsBiggerValue() {
|
||||
enableSplitShade(true);
|
||||
mNotificationPanelViewController.expandWithQs();
|
||||
when(mHeadsUpManager.isTrackingHeadsUp()).thenReturn(true);
|
||||
|
||||
mNotificationPanelViewController.setHeadsUpDraggingStartingHeight(
|
||||
SPLIT_SHADE_FULL_TRANSITION_DISTANCE);
|
||||
|
||||
assertThat(mQsController.calculatePanelHeightExpanded(0))
|
||||
.isGreaterThan(SPLIT_SHADE_FULL_TRANSITION_DISTANCE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setQsExpansion_lockscreenShadeTransitionInProgress_usesLockscreenSquishiness() {
|
||||
float squishinessFraction = 0.456f;
|
||||
@@ -378,6 +468,21 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateExpansion_expandImmediateOrAlreadyExpanded_usesFullSquishiness() {
|
||||
mQsController.setQs(mQs);
|
||||
when(mQs.getDesiredHeight()).thenReturn(100);
|
||||
mQsController.onHeightChanged();
|
||||
|
||||
mQsController.setExpandImmediate(true);
|
||||
mQsController.setExpanded(false);
|
||||
mQsController.updateExpansion();
|
||||
mQsController.setExpandImmediate(false);
|
||||
mQsController.setExpanded(true);
|
||||
mQsController.updateExpansion();
|
||||
verify(mQs, times(2)).setQsExpansion(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shadeExpanded_onKeyguard() {
|
||||
mStatusBarStateController.setState(KEYGUARD);
|
||||
@@ -393,9 +498,52 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
assertThat(mQsController.computeExpansionFraction()).isEqualTo(1f);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTouch_splitShadeAndtouchXOutsideQs() {
|
||||
enableSplitShade(true);
|
||||
|
||||
assertThat(mQsController.handleTouch(createMotionEvent(
|
||||
QS_FRAME_WIDTH + 1, QS_FRAME_BOTTOM - 1, ACTION_DOWN),
|
||||
false, false)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isOpenQsEvent_twoFingerDrag() {
|
||||
assertThat(mQsController.isOpenQsEvent(
|
||||
createMultitouchMotionEvent(ACTION_POINTER_DOWN))).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isOpenQsEvent_stylusButtonClickDrag() {
|
||||
MotionEvent event = createMotionEvent(0, 0, ACTION_DOWN);
|
||||
event.setButtonState(BUTTON_STYLUS_PRIMARY);
|
||||
|
||||
assertThat(mQsController.isOpenQsEvent(event)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isOpenQsEvent_mouseButtonClickDrag() {
|
||||
MotionEvent event = createMotionEvent(0, 0, ACTION_DOWN);
|
||||
event.setButtonState(BUTTON_SECONDARY);
|
||||
|
||||
assertThat(mQsController.isOpenQsEvent(event)).isTrue();
|
||||
}
|
||||
|
||||
private static MotionEvent createMotionEvent(int x, int y, int action) {
|
||||
return MotionEvent.obtain(
|
||||
/* downTime= */ 0, /* eventTime= */ 0, action, x, y, /* metaState= */ 0);
|
||||
return MotionEvent.obtain(0, 0, action, x, y, 0);
|
||||
}
|
||||
|
||||
// Creates an empty multitouch event for now
|
||||
private static MotionEvent createMultitouchMotionEvent(int action) {
|
||||
return MotionEvent.obtain(0, 0, action, 2,
|
||||
new MotionEvent.PointerProperties[] {
|
||||
new MotionEvent.PointerProperties(),
|
||||
new MotionEvent.PointerProperties()
|
||||
},
|
||||
new MotionEvent.PointerCoords[] {
|
||||
new MotionEvent.PointerCoords(),
|
||||
new MotionEvent.PointerCoords()
|
||||
}, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
private void enableSplitShade(boolean enabled) {
|
||||
@@ -412,4 +560,6 @@ public class QuickSettingsControllerTest extends SysuiTestCase {
|
||||
int oldMaxHeight = mQsController.updateHeightsOnShadeLayoutChange();
|
||||
mQsController.handleShadeLayoutChanged(oldMaxHeight);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user