Merge "Fix for blue screen of death" into lmp-dev
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index fcf1791..dd96d50 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -33,6 +33,7 @@
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnLayoutChangeListener;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
@@ -56,6 +57,7 @@
public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPresenter.CallCardUi>
implements CallCardPresenter.CallCardUi {
+ private AnimatorSet mAnimatorSet;
private int mRevealAnimationDuration;
private int mShrinkAnimationDuration;
private int mFabNormalDiameter;
@@ -917,22 +919,15 @@
final Animator shrinkAnimator =
getShrinkAnimator(parent.getHeight(), originalHeight);
- final AnimatorSet set = new AnimatorSet();
- set.playSequentially(revealAnimator, shrinkAnimator);
- set.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationCancel(Animator animation) {
- mPrimaryCallCardContainer.removeOnLayoutChangeListener(listener);
- mFloatingActionButtonController.scaleIn();
- }
-
+ mAnimatorSet = new AnimatorSet();
+ mAnimatorSet.playSequentially(revealAnimator, shrinkAnimator);
+ mAnimatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- mPrimaryCallCardContainer.removeOnLayoutChangeListener(listener);
- mFloatingActionButtonController.scaleIn();
+ setViewStatePostAnimation(listener);
}
});
- set.start();
+ mAnimatorSet.start();
}
});
}
@@ -959,6 +954,16 @@
mIsDialpadShowing ? mFabSmallDiameter : mFabNormalDiameter, true);
}
+ @Override
+ public void onResume() {
+ super.onResume();
+ // If the previous launch animation is still running, cancel it so that we don't get
+ // stuck in an intermediate animation state.
+ if (mAnimatorSet != null && mAnimatorSet.isRunning()) {
+ mAnimatorSet.cancel();
+ }
+ }
+
/**
* Adds a global layout listener to update the FAB's positioning on the next layout. This allows
* us to position the FAB after the secondary call info's height has been calculated.
@@ -1032,6 +1037,23 @@
.setDuration(mShrinkAnimationDuration).setInterpolator(AnimUtils.EASE_IN);
}
+ private void setViewStatePostAnimation(View view) {
+ view.setTranslationY(0);
+ view.setAlpha(1);
+ }
+
+ private void setViewStatePostAnimation(OnLayoutChangeListener layoutChangeListener) {
+ setViewStatePostAnimation(mCallButtonsContainer);
+ setViewStatePostAnimation(mCallStateLabel);
+ setViewStatePostAnimation(mPrimaryName);
+ setViewStatePostAnimation(mCallTypeLabel);
+ setViewStatePostAnimation(mCallNumberAndLabel);
+ setViewStatePostAnimation(mCallStateIcon);
+
+ mPrimaryCallCardContainer.removeOnLayoutChangeListener(layoutChangeListener);
+ mFloatingActionButtonController.scaleIn();
+ }
+
private final class LayoutIgnoringListener implements View.OnLayoutChangeListener {
@Override
public void onLayoutChange(View v,