summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Rosky <erosky@google.com> 2018-05-01 21:30:17 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-05-01 21:30:17 +0000
commit09ba7e0bae2be35cb5767bb2de627d38f27381dd (patch)
tree2a491dcb2d7483a9862761177e7c3b37bfc16825
parent1f87cda692a8578a43f0020479b25b6af890cc2e (diff)
parent8cd89cddc10ee1f02dd68fb7e8a4480c889fcf41 (diff)
Merge "Don't clear focus during transition animations" into pi-dev
-rw-r--r--core/java/android/transition/ChangeBounds.java64
-rw-r--r--core/java/android/view/View.java4
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();