Protecting QSB scroll while transition animation is running.

During transition animation the qorkspace scroll changes while the actual
workspace UI is mostly stable. This causes the QSB to animate while the
pages are not changing.
Bug: 30229069

Change-Id: I66ec41276c0e26164d20da6a5e0e251975390428
This commit is contained in:
Sunny Goyal 2016-07-20 11:18:25 -07:00
parent 4dcb831382
commit c553c33ae6
1 changed files with 32 additions and 4 deletions

View File

@ -53,11 +53,9 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.accessibility.AccessibilityManager;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.Space;
import android.widget.TextView;
import com.android.launcher3.Launcher.CustomContentCallbacks;
@ -315,6 +313,7 @@ public class Workspace extends PagedView
// Total over scrollX in the overlay direction.
private float mOverlayTranslation;
private int mFirstPageScrollX;
private boolean mIgnoreQsbScroll;
// Handles workspace state transitions
private WorkspaceStateTransitionAnimation mStateTransitionAnimation;
@ -1395,8 +1394,10 @@ public class Workspace extends PagedView
}
private void onWorkspaceOverallScrollChanged() {
mLauncher.getQsbContainer().setTranslationX(
mOverlayTranslation + mFirstPageScrollX - getScrollX());
if (!mIgnoreQsbScroll) {
mLauncher.getQsbContainer().setTranslationX(
mOverlayTranslation + mFirstPageScrollX - getScrollX());
}
}
@Override
@ -1805,6 +1806,33 @@ public class Workspace extends PagedView
super.onLayout(changed, left, top, right, bottom);
mFirstPageScrollX = getScrollForPage(0);
onWorkspaceOverallScrollChanged();
final LayoutTransition transition = getLayoutTransition();
// If the transition is running defer updating max scroll, as some empty pages could
// still be present, and a max scroll change could cause sudden jumps in scroll.
if (transition != null && transition.isRunning()) {
transition.addTransitionListener(new LayoutTransition.TransitionListener() {
@Override
public void startTransition(LayoutTransition transition, ViewGroup container,
View view, int transitionType) {
mIgnoreQsbScroll = true;
}
@Override
public void endTransition(LayoutTransition transition, ViewGroup container,
View view, int transitionType) {
// Wait until all transitions are complete.
if (!transition.isRunning()) {
mIgnoreQsbScroll = false;
transition.removeTransitionListener(this);
mFirstPageScrollX = getScrollForPage(0);
onWorkspaceOverallScrollChanged();
}
}
});
}
}
@Override