Merge "Don't clear focus during transition animations" into pi-dev am: 09ba7e0bae
am: 13f13935ea
Change-Id: Id5e4345720f6307c1809cc0e36a144f1ddf8365b
diff --git a/core/java/android/transition/ChangeBounds.java b/core/java/android/transition/ChangeBounds.java
index 546f93a..56af3ac 100644
--- a/core/java/android/transition/ChangeBounds.java
+++ b/core/java/android/transition/ChangeBounds.java
@@ -311,6 +311,38 @@
++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 @@
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 6b16d42..3807079 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -20850,7 +20850,9 @@
}
// 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();