Merge "Split-shade: prevent new shade expansion when shade already expanded" into tm-dev am: 9cbaca7306
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17940788 Change-Id: Id1b55f9c6c706335b220fe002c095cc8965ffb5e Ignore-AOSP-First: this is an automerge Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1735,6 +1735,11 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
boolean isQsTracking() {
|
||||||
|
return mQsTracking;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isInContentBounds(float x, float y) {
|
protected boolean isInContentBounds(float x, float y) {
|
||||||
float stackScrollerX = mNotificationStackScrollLayoutController.getX();
|
float stackScrollerX = mNotificationStackScrollLayoutController.getX();
|
||||||
@@ -2812,7 +2817,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
|
private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
|
||||||
if (!isQsExpansionEnabled() || mCollapsedOnDown
|
if (!isQsExpansionEnabled() || mCollapsedOnDown
|
||||||
|| (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled())
|
|| (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled())
|
||||||
|| (mKeyguardShowing && mShouldUseSplitNotificationShade)) {
|
|| mShouldUseSplitNotificationShade) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
View header = mKeyguardShowing || mQs == null ? mKeyguardStatusBar : mQs.getHeader();
|
View header = mKeyguardShowing || mQs == null ? mKeyguardStatusBar : mQs.getHeader();
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ import android.util.DisplayMetrics;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewParent;
|
||||||
import android.view.ViewPropertyAnimator;
|
import android.view.ViewPropertyAnimator;
|
||||||
import android.view.ViewStub;
|
import android.view.ViewStub;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
@@ -99,6 +100,7 @@ import com.android.systemui.media.MediaHierarchyManager;
|
|||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
import com.android.systemui.navigationbar.NavigationModeController;
|
import com.android.systemui.navigationbar.NavigationModeController;
|
||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
|
import com.android.systemui.plugins.qs.QS;
|
||||||
import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
|
import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
|
||||||
import com.android.systemui.screenrecord.RecordingController;
|
import com.android.systemui.screenrecord.RecordingController;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
@@ -334,6 +336,12 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
|||||||
private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
|
private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
|
||||||
@Mock
|
@Mock
|
||||||
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||||
|
@Mock
|
||||||
|
private QS mQs;
|
||||||
|
@Mock
|
||||||
|
private View mQsHeader;
|
||||||
|
@Mock
|
||||||
|
private ViewParent mViewParent;
|
||||||
private NotificationPanelViewController.PanelEventsEmitter mPanelEventsEmitter;
|
private NotificationPanelViewController.PanelEventsEmitter mPanelEventsEmitter;
|
||||||
private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
|
private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
|
||||||
private SysuiStatusBarStateController mStatusBarStateController;
|
private SysuiStatusBarStateController mStatusBarStateController;
|
||||||
@@ -455,6 +463,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
|||||||
return null;
|
return null;
|
||||||
}).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
|
}).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
|
||||||
|
|
||||||
|
when(mView.getParent()).thenReturn(mViewParent);
|
||||||
|
when(mQs.getHeader()).thenReturn(mQsHeader);
|
||||||
|
|
||||||
mMainHandler = new Handler(Looper.getMainLooper());
|
mMainHandler = new Handler(Looper.getMainLooper());
|
||||||
mPanelEventsEmitter = new NotificationPanelViewController.PanelEventsEmitter();
|
mPanelEventsEmitter = new NotificationPanelViewController.PanelEventsEmitter();
|
||||||
|
|
||||||
@@ -984,6 +995,50 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
|||||||
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue();
|
assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() {
|
||||||
|
mNotificationPanelViewController.mQs = mQs;
|
||||||
|
when(mQsFrame.getX()).thenReturn(0f);
|
||||||
|
when(mQsFrame.getWidth()).thenReturn(1000);
|
||||||
|
when(mQsHeader.getTop()).thenReturn(0);
|
||||||
|
when(mQsHeader.getBottom()).thenReturn(1000);
|
||||||
|
PanelViewController.TouchHandler touchHandler =
|
||||||
|
mNotificationPanelViewController.createTouchHandler();
|
||||||
|
|
||||||
|
mNotificationPanelViewController.setExpandedFraction(1f);
|
||||||
|
touchHandler.onInterceptTouchEvent(
|
||||||
|
createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
|
||||||
|
touchHandler.onInterceptTouchEvent(
|
||||||
|
createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
|
||||||
|
|
||||||
|
assertThat(mNotificationPanelViewController.isQsTracking()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void interceptTouchEvent_withinQs_shadeExpanded_inSplitShade_doesNotStartQsTracking() {
|
||||||
|
enableSplitShade(true);
|
||||||
|
mNotificationPanelViewController.mQs = mQs;
|
||||||
|
when(mQsFrame.getX()).thenReturn(0f);
|
||||||
|
when(mQsFrame.getWidth()).thenReturn(1000);
|
||||||
|
when(mQsHeader.getTop()).thenReturn(0);
|
||||||
|
when(mQsHeader.getBottom()).thenReturn(1000);
|
||||||
|
PanelViewController.TouchHandler touchHandler =
|
||||||
|
mNotificationPanelViewController.createTouchHandler();
|
||||||
|
|
||||||
|
mNotificationPanelViewController.setExpandedFraction(1f);
|
||||||
|
touchHandler.onInterceptTouchEvent(
|
||||||
|
createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
|
||||||
|
touchHandler.onInterceptTouchEvent(
|
||||||
|
createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
|
||||||
|
|
||||||
|
assertThat(mNotificationPanelViewController.isQsTracking()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MotionEvent createMotionEvent(int x, int y, int action) {
|
||||||
|
return MotionEvent.obtain(
|
||||||
|
/* downTime= */ 0, /* eventTime= */ 0, action, x, y, /* metaState= */ 0);
|
||||||
|
}
|
||||||
|
|
||||||
private void triggerPositionClockAndNotifications() {
|
private void triggerPositionClockAndNotifications() {
|
||||||
mNotificationPanelViewController.closeQs();
|
mNotificationPanelViewController.closeQs();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user