diff options
| author | 2018-05-01 21:30:17 +0000 | |
|---|---|---|
| committer | 2018-05-01 21:30:17 +0000 | |
| commit | 09ba7e0bae2be35cb5767bb2de627d38f27381dd (patch) | |
| tree | 2a491dcb2d7483a9862761177e7c3b37bfc16825 | |
| parent | 1f87cda692a8578a43f0020479b25b6af890cc2e (diff) | |
| parent | 8cd89cddc10ee1f02dd68fb7e8a4480c889fcf41 (diff) | |
Merge "Don't clear focus during transition animations" into pi-dev
| -rw-r--r-- | core/java/android/transition/ChangeBounds.java | 64 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 4 |
2 files changed, 35 insertions, 33 deletions
diff --git a/core/java/android/transition/ChangeBounds.java b/core/java/android/transition/ChangeBounds.java index 546f93a2e97a..56af3ac0f3c9 100644 --- a/core/java/android/transition/ChangeBounds.java +++ b/core/java/android/transition/ChangeBounds.java @@ -311,6 +311,38 @@ public class ChangeBounds extends Transition { ++numChanges; } if (numChanges > 0) { + if (view.getParent() instanceof ViewGroup) { + final ViewGroup parent = (ViewGroup) view.getParent(); + parent.suppressLayout(true); + TransitionListener transitionListener = new TransitionListenerAdapter() { + boolean mCanceled = false; + + @Override + public void onTransitionCancel(Transition transition) { + parent.suppressLayout(false); + mCanceled = true; + } + + @Override + public void onTransitionEnd(Transition transition) { + if (!mCanceled) { + parent.suppressLayout(false); + } + transition.removeListener(this); + } + + @Override + public void onTransitionPause(Transition transition) { + parent.suppressLayout(false); + } + + @Override + public void onTransitionResume(Transition transition) { + parent.suppressLayout(true); + } + }; + addListener(transitionListener); + } Animator anim; if (!mResizeClip) { view.setLeftTopRightBottom(startLeft, startTop, startRight, startBottom); @@ -398,38 +430,6 @@ public class ChangeBounds extends Transition { anim = TransitionUtils.mergeAnimators(positionAnimator, clipAnimator); } - if (view.getParent() instanceof ViewGroup) { - final ViewGroup parent = (ViewGroup) view.getParent(); - parent.suppressLayout(true); - TransitionListener transitionListener = new TransitionListenerAdapter() { - boolean mCanceled = false; - - @Override - public void onTransitionCancel(Transition transition) { - parent.suppressLayout(false); - mCanceled = true; - } - - @Override - public void onTransitionEnd(Transition transition) { - if (!mCanceled) { - parent.suppressLayout(false); - } - transition.removeListener(this); - } - - @Override - public void onTransitionPause(Transition transition) { - parent.suppressLayout(false); - } - - @Override - public void onTransitionResume(Transition transition) { - parent.suppressLayout(true); - } - }; - addListener(transitionListener); - } return anim; } } else { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 6b16d42ac7ef..380707996436 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -20850,7 +20850,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } // If this isn't laid out yet, focus assignment will be handled during the "deferment/ // backtracking" of requestFocus during layout, so don't touch focus here. - if (!sCanFocusZeroSized && isLayoutValid()) { + if (!sCanFocusZeroSized && isLayoutValid() + // Don't touch focus if animating + && !(mParent instanceof ViewGroup && ((ViewGroup) mParent).isLayoutSuppressed())) { if (newWidth <= 0 || newHeight <= 0) { if (hasFocus()) { clearFocus(); |