Ensure RecentsOrientedState.mRecentsRotation is up to date on swipe up

- Updates RecentsOrientedState.mRecentsRotation after launcher is started, as it's not updated when RecentsView is in foreground when device rotates e.g. inside another app
- No longer calls updateOrientationHandler in onConfigurationChanged, as updateOrientationHandler is already called in setInsets, which get called on rotation

Bug: 181550945
Test: Swipe up to enter overview, launch app, rotate, then swipe up again
Test: Swipe up to enter overview from landscape only app, while holding device in portrait
Change-Id: I268093617d51333678e510c910ed15275706f984
This commit is contained in:
Alex Chau
2021-05-24 19:10:42 +01:00
parent 81f5ff3b3b
commit 7d964726d5
2 changed files with 10 additions and 6 deletions

View File

@@ -393,6 +393,9 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
if (mStateCallback.hasStates(STATE_HANDLER_INVALIDATED)) {
return;
}
// RecentsView never updates the display rotation until swipe-up, force update
// RecentsOrientedState before passing to TaskViewSimulator.
mRecentsView.updateRecentsRotation();
mTaskViewSimulator.setOrientationState(mRecentsView.getPagedViewOrientedState());
// If we've already ended the gesture and are going home, don't prepare recents UI,

View File

@@ -2618,19 +2618,20 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
if (LIVE_TILE.get() && mEnableDrawingLiveTile && newConfig.orientation != mOrientation) {
switchToScreenshot(
() -> finishRecentsAnimation(true /* toRecents */,
this::onConfigurationChangedInternal));
this::updateRecentsRotation));
mEnableDrawingLiveTile = false;
} else {
onConfigurationChangedInternal();
updateRecentsRotation();
}
mOrientation = newConfig.orientation;
}
private void onConfigurationChangedInternal() {
/**
* Updates {@link RecentsOrientedState}'s cached RecentsView rotation.
*/
public void updateRecentsRotation() {
final int rotation = mActivity.getDisplay().getRotation();
if (mOrientationState.setRecentsRotation(rotation)) {
updateOrientationHandler();
}
mOrientationState.setRecentsRotation(rotation);
}
public void setLayoutRotation(int touchRotation, int displayRotation) {