Merge "Prevent QS expansion while remote input active" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
89bc0823de
@@ -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 */);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user