Merge "Prevent premature resetting of quickswitch mode" into rvc-dev am: 1c90b51de6 am: 995cab35af
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/11977176 Change-Id: I046c8d8a8bfc1e0ab7920ce42399da1d62e85288
This commit is contained in:
@@ -68,13 +68,13 @@ class OrientationTouchTransformer {
|
|||||||
private Resources mResources;
|
private Resources mResources;
|
||||||
private OrientationRectF mLastRectTouched;
|
private OrientationRectF mLastRectTouched;
|
||||||
/**
|
/**
|
||||||
* The rotation of the last touched nav bar. Derived from {@link #mLastRectTouched}, but has a
|
* The rotation of the last touched nav bar, whether that be through the last region the user
|
||||||
* longer lifetime than the rect. Note this is different than {@link #mQuickStepStartingRotation}
|
* touched down on or valid rotation user turned their device to.
|
||||||
* as it always updates its value on every touch whereas mQuickstepStartingRotation only
|
* Note this is different than
|
||||||
* updates when device rotation matches touch rotation. Maybe this will be only one necessary
|
* {@link #mQuickStepStartingRotation} as it always updates its value on every touch whereas
|
||||||
* after TODO(b/154580671) is in. TBD.
|
* mQuickstepStartingRotation only updates when device rotation matches touch rotation.
|
||||||
*/
|
*/
|
||||||
private int mLastRectRotation;
|
private int mActiveTouchRotation;
|
||||||
private SysUINavigationMode.Mode mMode;
|
private SysUINavigationMode.Mode mMode;
|
||||||
private QuickStepContractInfo mContractInfo;
|
private QuickStepContractInfo mContractInfo;
|
||||||
|
|
||||||
@@ -159,12 +159,26 @@ class OrientationTouchTransformer {
|
|||||||
if (mEnableMultipleRegions) {
|
if (mEnableMultipleRegions) {
|
||||||
mQuickStepStartingRotation = info.rotation;
|
mQuickStepStartingRotation = info.rotation;
|
||||||
} else {
|
} else {
|
||||||
mLastRectRotation = 0;
|
mActiveTouchRotation = 0;
|
||||||
mQuickStepStartingRotation = QUICKSTEP_ROTATION_UNINITIALIZED;
|
mQuickStepStartingRotation = QUICKSTEP_ROTATION_UNINITIALIZED;
|
||||||
}
|
}
|
||||||
resetSwipeRegions(info);
|
resetSwipeRegions(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call when removing multiple regions to swipe from, but still in active quickswitch mode (task
|
||||||
|
* list is still frozen).
|
||||||
|
* Ex. This would be called when user has quickswitched to the same app rotation that
|
||||||
|
* they started quickswitching in, indicating that extra nav regions can be ignored. Calling
|
||||||
|
* this will update the value of {@link #mActiveTouchRotation}
|
||||||
|
*
|
||||||
|
* @param displayInfo The display whos rotation will be used as the current active rotation
|
||||||
|
*/
|
||||||
|
void setSingleActiveRegion(DefaultDisplay.Info displayInfo) {
|
||||||
|
mActiveTouchRotation = displayInfo.rotation;
|
||||||
|
resetSwipeRegions(displayInfo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only saves the swipe region represented by {@param region}, clears the
|
* Only saves the swipe region represented by {@param region}, clears the
|
||||||
* rest from {@link #mSwipeTouchRegions}
|
* rest from {@link #mSwipeTouchRegions}
|
||||||
@@ -258,7 +272,7 @@ class OrientationTouchTransformer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getCurrentActiveRotation() {
|
int getCurrentActiveRotation() {
|
||||||
return mLastRectRotation;
|
return mActiveTouchRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getQuickStepStartingRotation() {
|
int getQuickStepStartingRotation() {
|
||||||
@@ -303,8 +317,9 @@ class OrientationTouchTransformer {
|
|||||||
Log.d(TestProtocol.NO_SWIPE_TO_HOME, "setting mLastRectTouched");
|
Log.d(TestProtocol.NO_SWIPE_TO_HOME, "setting mLastRectTouched");
|
||||||
}
|
}
|
||||||
mLastRectTouched = rect;
|
mLastRectTouched = rect;
|
||||||
mLastRectRotation = rect.mRotation;
|
mActiveTouchRotation = rect.mRotation;
|
||||||
if (mEnableMultipleRegions && mCurrentDisplayRotation == mLastRectRotation) {
|
if (mEnableMultipleRegions
|
||||||
|
&& mCurrentDisplayRotation == mActiveTouchRotation) {
|
||||||
// TODO(b/154580671) might make this block unnecessary
|
// TODO(b/154580671) might make this block unnecessary
|
||||||
// Start a touch session for the default nav region for the display
|
// Start a touch session for the default nav region for the display
|
||||||
mQuickStepStartingRotation = mLastRectTouched.mRotation;
|
mQuickStepStartingRotation = mLastRectTouched.mRotation;
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public class RecentsAnimationDeviceState implements
|
|||||||
* sysui to adjust the navbar.
|
* sysui to adjust the navbar.
|
||||||
*/
|
*/
|
||||||
private OrientationEventListener mOrientationListener;
|
private OrientationEventListener mOrientationListener;
|
||||||
private int mPreviousRotation = ROTATION_0;
|
private int mSensorRotation = ROTATION_0;
|
||||||
/**
|
/**
|
||||||
* This is the configuration of the foreground app or the app that will be in the foreground
|
* This is the configuration of the foreground app or the app that will be in the foreground
|
||||||
* once a quickstep gesture finishes.
|
* once a quickstep gesture finishes.
|
||||||
@@ -246,18 +246,18 @@ public class RecentsAnimationDeviceState implements
|
|||||||
@Override
|
@Override
|
||||||
public void onOrientationChanged(int degrees) {
|
public void onOrientationChanged(int degrees) {
|
||||||
int newRotation = RecentsOrientedState.getRotationForUserDegreesRotated(degrees,
|
int newRotation = RecentsOrientedState.getRotationForUserDegreesRotated(degrees,
|
||||||
mPreviousRotation);
|
mSensorRotation);
|
||||||
if (newRotation == mPreviousRotation) {
|
if (newRotation == mSensorRotation) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mPreviousRotation = newRotation;
|
mSensorRotation = newRotation;
|
||||||
mPrioritizeDeviceRotation = true;
|
mPrioritizeDeviceRotation = true;
|
||||||
|
|
||||||
if (newRotation == mCurrentAppRotation) {
|
if (newRotation == mCurrentAppRotation) {
|
||||||
// When user rotates device to the orientation of the foreground app after
|
// When user rotates device to the orientation of the foreground app after
|
||||||
// quickstepping
|
// quickstepping
|
||||||
toggleSecondaryNavBarsForRotation(false);
|
toggleSecondaryNavBarsForRotation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -339,14 +339,16 @@ public class RecentsAnimationDeviceState implements
|
|||||||
mCurrentAppRotation = mDisplayRotation;
|
mCurrentAppRotation = mDisplayRotation;
|
||||||
|
|
||||||
/* Update nav bars on the following:
|
/* Update nav bars on the following:
|
||||||
* a) if we're not expecting quickswitch, this is coming from an activity rotation
|
* a) if this is coming from an activity rotation OR
|
||||||
* b) we launch an app in the orientation that user is already in
|
* aa) we launch an app in the orientation that user is already in
|
||||||
* c) We're not in overview, since overview will always be portrait (w/o home rotation)
|
* b) We're not in overview, since overview will always be portrait (w/o home rotation)
|
||||||
|
* c) We're actively in quickswitch mode
|
||||||
*/
|
*/
|
||||||
if ((mPrioritizeDeviceRotation
|
if ((mPrioritizeDeviceRotation
|
||||||
|| mCurrentAppRotation == mPreviousRotation) // switch to an app of orientation user is in
|
|| mCurrentAppRotation == mSensorRotation) // switch to an app of orientation user is in
|
||||||
&& !mInOverview) {
|
&& !mInOverview
|
||||||
toggleSecondaryNavBarsForRotation(false);
|
&& mTaskListFrozen) {
|
||||||
|
toggleSecondaryNavBarsForRotation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,7 +463,9 @@ public class RecentsAnimationDeviceState implements
|
|||||||
* @return whether SystemUI is in a state where we can start a system gesture.
|
* @return whether SystemUI is in a state where we can start a system gesture.
|
||||||
*/
|
*/
|
||||||
public boolean canStartSystemGesture() {
|
public boolean canStartSystemGesture() {
|
||||||
return (mSystemUiStateFlags & SYSUI_STATE_NAV_BAR_HIDDEN) == 0
|
boolean canStartWithNavHidden = (mSystemUiStateFlags & SYSUI_STATE_NAV_BAR_HIDDEN) == 0
|
||||||
|
|| mTaskListFrozen;
|
||||||
|
return canStartWithNavHidden
|
||||||
&& (mSystemUiStateFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) == 0
|
&& (mSystemUiStateFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) == 0
|
||||||
&& (mSystemUiStateFlags & SYSUI_STATE_QUICK_SETTINGS_EXPANDED) == 0
|
&& (mSystemUiStateFlags & SYSUI_STATE_QUICK_SETTINGS_EXPANDED) == 0
|
||||||
&& ((mSystemUiStateFlags & SYSUI_STATE_HOME_DISABLED) == 0
|
&& ((mSystemUiStateFlags & SYSUI_STATE_HOME_DISABLED) == 0
|
||||||
@@ -634,29 +638,26 @@ public class RecentsAnimationDeviceState implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void enableMultipleRegions(boolean enable) {
|
private void enableMultipleRegions(boolean enable) {
|
||||||
toggleSecondaryNavBarsForRotation(enable);
|
mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo());
|
||||||
if (enable && !TestProtocol.sDisableSensorRotation) {
|
notifySysuiOfCurrentRotation(mOrientationTouchTransformer.getQuickStepStartingRotation());
|
||||||
|
if (enable && !mInOverview && !TestProtocol.sDisableSensorRotation) {
|
||||||
|
// Clear any previous state from sensor manager
|
||||||
|
mSensorRotation = mCurrentAppRotation;
|
||||||
mOrientationListener.enable();
|
mOrientationListener.enable();
|
||||||
} else {
|
} else {
|
||||||
mOrientationListener.disable();
|
mOrientationListener.disable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifySysuiForRotation(int rotation) {
|
|
||||||
UI_HELPER_EXECUTOR.execute(() ->
|
|
||||||
SystemUiProxy.INSTANCE.get(mContext).onQuickSwitchToNewTask(rotation));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStartGesture() {
|
public void onStartGesture() {
|
||||||
if (mTaskListFrozen) {
|
if (mTaskListFrozen) {
|
||||||
// Prioritize whatever nav bar user touches once in quickstep
|
// Prioritize whatever nav bar user touches once in quickstep
|
||||||
// This case is specifically when user changes what nav bar they are using mid
|
// This case is specifically when user changes what nav bar they are using mid
|
||||||
// quickswitch session before tasks list is unfrozen
|
// quickswitch session before tasks list is unfrozen
|
||||||
notifySysuiForRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
notifySysuiOfCurrentRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void onEndTargetCalculated(GestureState.GestureEndTarget endTarget,
|
void onEndTargetCalculated(GestureState.GestureEndTarget endTarget,
|
||||||
BaseActivityInterface activityInterface) {
|
BaseActivityInterface activityInterface) {
|
||||||
if (endTarget == GestureState.GestureEndTarget.RECENTS) {
|
if (endTarget == GestureState.GestureEndTarget.RECENTS) {
|
||||||
@@ -673,7 +674,8 @@ public class RecentsAnimationDeviceState implements
|
|||||||
// First gesture to start quickswitch
|
// First gesture to start quickswitch
|
||||||
enableMultipleRegions(true);
|
enableMultipleRegions(true);
|
||||||
} else {
|
} else {
|
||||||
notifySysuiForRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
notifySysuiOfCurrentRotation(
|
||||||
|
mOrientationTouchTransformer.getCurrentActiveRotation());
|
||||||
}
|
}
|
||||||
|
|
||||||
// A new gesture is starting, reset the current device rotation
|
// A new gesture is starting, reset the current device rotation
|
||||||
@@ -685,7 +687,7 @@ public class RecentsAnimationDeviceState implements
|
|||||||
// touched nav bar but didn't go anywhere and not quickswitching, do nothing
|
// touched nav bar but didn't go anywhere and not quickswitching, do nothing
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
notifySysuiForRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
notifySysuiOfCurrentRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,13 +699,10 @@ public class RecentsAnimationDeviceState implements
|
|||||||
/**
|
/**
|
||||||
* Disables/Enables multiple nav bars on {@link OrientationTouchTransformer} and then
|
* Disables/Enables multiple nav bars on {@link OrientationTouchTransformer} and then
|
||||||
* notifies system UI of the primary rotation the user is interacting with
|
* notifies system UI of the primary rotation the user is interacting with
|
||||||
*
|
|
||||||
* @param enable if {@code true}, this will report to sysUI the navbar of the region the gesture
|
|
||||||
* started in (during ACTION_DOWN), otherwise will report {@param displayRotation}
|
|
||||||
*/
|
*/
|
||||||
private void toggleSecondaryNavBarsForRotation(boolean enable) {
|
private void toggleSecondaryNavBarsForRotation() {
|
||||||
mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo());
|
mOrientationTouchTransformer.setSingleActiveRegion(mDefaultDisplay.getInfo());
|
||||||
notifySysuiOfCurrentRotation(mOrientationTouchTransformer.getQuickStepStartingRotation());
|
notifySysuiOfCurrentRotation(mOrientationTouchTransformer.getCurrentActiveRotation());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCurrentActiveRotation() {
|
public int getCurrentActiveRotation() {
|
||||||
|
|||||||
Reference in New Issue
Block a user