Merge "Prevent QS expansion while remote input active" into sc-dev

This commit is contained in:
Steve Elliott
2021-06-30 15:25:40 +00:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 14 deletions

View File

@@ -121,6 +121,7 @@ import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.KeyguardIndicationController; import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShelfController; import com.android.systemui.statusbar.NotificationShelfController;
import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.PulseExpansionHandler;
@@ -314,6 +315,7 @@ public class NotificationPanelViewController extends PanelViewController {
private final ScrimController mScrimController; private final ScrimController mScrimController;
private final PrivacyDotViewController mPrivacyDotViewController; private final PrivacyDotViewController mPrivacyDotViewController;
private final QuickAccessWalletController mQuickAccessWalletController; private final QuickAccessWalletController mQuickAccessWalletController;
private final NotificationRemoteInputManager mRemoteInputManager;
// Maximum # notifications to show on Keyguard; extras will be collapsed in an overflow card. // Maximum # notifications to show on Keyguard; extras will be collapsed in an overflow card.
// If there are exactly 1 + mMaxKeyguardNotifications, then still shows all notifications // If there are exactly 1 + mMaxKeyguardNotifications, then still shows all notifications
@@ -372,7 +374,6 @@ public class NotificationPanelViewController extends PanelViewController {
private float mLastOverscroll; private float mLastOverscroll;
private boolean mQsExpansionEnabledPolicy = true; private boolean mQsExpansionEnabledPolicy = true;
private boolean mQsExpansionEnabledAmbient = true; private boolean mQsExpansionEnabledAmbient = true;
private boolean mQsExpansionEnabled = mQsExpansionEnabledPolicy && mQsExpansionEnabledAmbient;
private ValueAnimator mQsExpansionAnimator; private ValueAnimator mQsExpansionAnimator;
private FlingAnimationUtils mFlingAnimationUtils; private FlingAnimationUtils mFlingAnimationUtils;
private int mStatusBarMinHeight; private int mStatusBarMinHeight;
@@ -696,7 +697,8 @@ public class NotificationPanelViewController extends PanelViewController {
QuickAccessWalletController quickAccessWalletController, QuickAccessWalletController quickAccessWalletController,
@Main Executor uiExecutor, @Main Executor uiExecutor,
SecureSettings secureSettings, SecureSettings secureSettings,
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) { UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
NotificationRemoteInputManager remoteInputManager) {
super(view, falsingManager, dozeLog, keyguardStateController, super(view, falsingManager, dozeLog, keyguardStateController,
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper, (SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
statusBarKeyguardViewManager, latencyTracker, flingAnimationUtilsBuilder.get(), statusBarKeyguardViewManager, latencyTracker, flingAnimationUtilsBuilder.get(),
@@ -789,6 +791,8 @@ public class NotificationPanelViewController extends PanelViewController {
mAuthController = authController; mAuthController = authController;
mLockIconViewController = lockIconViewController; mLockIconViewController = lockIconViewController;
mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
mRemoteInputManager = remoteInputManager;
int currentMode = navigationModeController.addListener( int currentMode = navigationModeController.addListener(
mode -> mIsGestureNavigation = QuickStepContract.isGesturalMode(mode)); mode -> mIsGestureNavigation = QuickStepContract.isGesturalMode(mode));
mIsGestureNavigation = QuickStepContract.isGesturalMode(currentMode); mIsGestureNavigation = QuickStepContract.isGesturalMode(currentMode);
@@ -1460,9 +1464,8 @@ public class NotificationPanelViewController extends PanelViewController {
} }
private void setQsExpansionEnabled() { private void setQsExpansionEnabled() {
mQsExpansionEnabled = mQsExpansionEnabledPolicy && mQsExpansionEnabledAmbient;
if (mQs == null) return; if (mQs == null) return;
mQs.setHeaderClickable(mQsExpansionEnabled); mQs.setHeaderClickable(isQsExpansionEnabled());
} }
public void setQsExpansionEnabledPolicy(boolean qsExpansionEnabledPolicy) { public void setQsExpansionEnabledPolicy(boolean qsExpansionEnabledPolicy) {
@@ -1531,8 +1534,13 @@ public class NotificationPanelViewController extends PanelViewController {
flingSettings(0 /* vel */, animateAway ? FLING_HIDE : FLING_COLLAPSE); flingSettings(0 /* vel */, animateAway ? FLING_HIDE : FLING_COLLAPSE);
} }
private boolean isQsExpansionEnabled() {
return mQsExpansionEnabledPolicy && mQsExpansionEnabledAmbient
&& !mRemoteInputManager.getController().isRemoteInputActive();
}
public void expandWithQs() { public void expandWithQs() {
if (mQsExpansionEnabled) { if (isQsExpansionEnabled()) {
mQsExpandImmediate = true; mQsExpandImmediate = true;
mNotificationStackScrollLayoutController.setShouldShowShelfOnly(true); mNotificationStackScrollLayoutController.setShouldShowShelfOnly(true);
} }
@@ -1797,7 +1805,7 @@ public class NotificationPanelViewController extends PanelViewController {
private boolean handleQsTouch(MotionEvent event) { private boolean handleQsTouch(MotionEvent event) {
final int action = event.getActionMasked(); final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f if (action == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f
&& mBarState != KEYGUARD && !mQsExpanded && mQsExpansionEnabled) { && mBarState != KEYGUARD && !mQsExpanded && isQsExpansionEnabled()) {
// Down in the empty area while fully expanded - go to QS. // Down in the empty area while fully expanded - go to QS.
mQsTracking = true; mQsTracking = true;
traceQsJank(true /* startTracing */, false /* wasCancelled */); traceQsJank(true /* startTracing */, false /* wasCancelled */);
@@ -1819,7 +1827,7 @@ public class NotificationPanelViewController extends PanelViewController {
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
mConflictingQsExpansionGesture = false; mConflictingQsExpansionGesture = false;
} }
if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed() && mQsExpansionEnabled) { if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed() && isQsExpansionEnabled()) {
mTwoFingerQsExpandPossible = true; mTwoFingerQsExpandPossible = true;
} }
if (mTwoFingerQsExpandPossible && isOpenQsEvent(event) && event.getY(event.getActionIndex()) if (mTwoFingerQsExpandPossible && isOpenQsEvent(event) && event.getY(event.getActionIndex())
@@ -2657,7 +2665,7 @@ public class NotificationPanelViewController extends PanelViewController {
* @return Whether we should intercept a gesture to open Quick Settings. * @return Whether we should intercept a gesture to open Quick Settings.
*/ */
private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) { private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
if (!mQsExpansionEnabled || mCollapsedOnDown || (mKeyguardShowing if (!isQsExpansionEnabled() || mCollapsedOnDown || (mKeyguardShowing
&& mKeyguardBypassController.getBypassEnabled())) { && mKeyguardBypassController.getBypassEnabled())) {
return false; return false;
} }
@@ -3476,7 +3484,7 @@ public class NotificationPanelViewController extends PanelViewController {
mQs = (QS) fragment; mQs = (QS) fragment;
mQs.setPanelView(mHeightListener); mQs.setPanelView(mHeightListener);
mQs.setExpandClickListener(mOnClickListener); mQs.setExpandClickListener(mOnClickListener);
mQs.setHeaderClickable(mQsExpansionEnabled); mQs.setHeaderClickable(isQsExpansionEnabled());
updateQSPulseExpansion(); updateQSPulseExpansion();
mQs.setOverscrolling(mStackScrollerOverscrolling); mQs.setOverscrolling(mStackScrollerOverscrolling);
mQs.setTranslateWhileExpanding(mShouldUseSplitNotificationShade); mQs.setTranslateWhileExpanding(mShouldUseSplitNotificationShade);
@@ -3967,7 +3975,7 @@ public class NotificationPanelViewController extends PanelViewController {
if (mQsExpanded) { if (mQsExpanded) {
flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */, flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */,
true /* isClick */); true /* isClick */);
} else if (mQsExpansionEnabled) { } else if (isQsExpansionEnabled()) {
mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0); mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0);
flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */, flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */,
true /* isClick */); true /* isClick */);
@@ -3984,7 +3992,7 @@ public class NotificationPanelViewController extends PanelViewController {
return; return;
} }
cancelQsAnimation(); cancelQsAnimation();
if (!mQsExpansionEnabled) { if (!isQsExpansionEnabled()) {
amount = 0f; amount = 0f;
} }
float rounded = amount >= 1f ? amount : 0f; float rounded = amount >= 1f ? amount : 0f;
@@ -4012,8 +4020,9 @@ public class NotificationPanelViewController extends PanelViewController {
setOverScrolling(false); setOverScrolling(false);
} }
setQsExpansion(mQsExpansionHeight); setQsExpansion(mQsExpansionHeight);
flingSettings(!mQsExpansionEnabled && open ? 0f : velocity, boolean canExpand = isQsExpansionEnabled();
open && mQsExpansionEnabled ? FLING_EXPAND : FLING_COLLAPSE, () -> { flingSettings(!canExpand && open ? 0f : velocity,
open && canExpand ? FLING_EXPAND : FLING_COLLAPSE, () -> {
setOverScrolling(false); setOverScrolling(false);
updateQsState(); updateQsState();
}, false /* isClick */); }, false /* isClick */);

View File

@@ -100,9 +100,11 @@ import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.KeyguardIndicationController; import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShelfController; import com.android.systemui.statusbar.NotificationShelfController;
import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.VibratorHelper;
@@ -289,6 +291,10 @@ public class NotificationPanelViewTest extends SysuiTestCase {
private FragmentHostManager mFragmentHostManager; private FragmentHostManager mFragmentHostManager;
@Mock @Mock
private QuickAccessWalletController mQuickAccessWalletController; private QuickAccessWalletController mQuickAccessWalletController;
@Mock
private NotificationRemoteInputManager mNotificationRemoteInputManager;
@Mock
private RemoteInputController mRemoteInputController;
private SysuiStatusBarStateController mStatusBarStateController; private SysuiStatusBarStateController mStatusBarStateController;
private NotificationPanelViewController mNotificationPanelViewController; private NotificationPanelViewController mNotificationPanelViewController;
@@ -384,6 +390,8 @@ public class NotificationPanelViewTest extends SysuiTestCase {
.thenReturn(mKeyguardStatusView); .thenReturn(mKeyguardStatusView);
when(mLayoutInflater.inflate(eq(R.layout.keyguard_bottom_area), any(), anyBoolean())) when(mLayoutInflater.inflate(eq(R.layout.keyguard_bottom_area), any(), anyBoolean()))
.thenReturn(mKeyguardBottomArea); .thenReturn(mKeyguardBottomArea);
when(mNotificationRemoteInputManager.getController()).thenReturn(mRemoteInputController);
when(mRemoteInputController.isRemoteInputActive()).thenReturn(false);
reset(mView); reset(mView);
@@ -427,7 +435,8 @@ public class NotificationPanelViewTest extends SysuiTestCase {
mQuickAccessWalletController, mQuickAccessWalletController,
new FakeExecutor(new FakeSystemClock()), new FakeExecutor(new FakeSystemClock()),
mSecureSettings, mSecureSettings,
mUnlockedScreenOffAnimationController); mUnlockedScreenOffAnimationController,
mNotificationRemoteInputManager);
mNotificationPanelViewController.initDependencies( mNotificationPanelViewController.initDependencies(
mStatusBar, mStatusBar,
mNotificationShelfController); mNotificationShelfController);