Fix SystemUI animator leak

am: 3c988197fa

* commit '3c988197fac989e4cca7fd1a96f6489e8ed4a05b':
  Fix SystemUI animator leak
This commit is contained in:
Jorim Jaggi
2016-01-21 05:34:13 +00:00
committed by android-build-merger

View File

@@ -351,10 +351,13 @@ public class SignalClusterView
for (PhoneState state : mPhoneStates) {
if (state.mMobile != null) {
state.maybeStopAnimatableDrawable(state.mMobile);
state.mMobile.setImageDrawable(null);
state.mLastMobileStrengthId = -1;
}
if (state.mMobileType != null) {
state.mMobileType.setImageDrawable(null);
state.mLastMobileTypeId = -1;
}
}
@@ -486,6 +489,8 @@ public class SignalClusterView
private final int mSubId;
private boolean mMobileVisible = false;
private int mMobileStrengthId = 0, mMobileTypeId = 0;
private int mLastMobileStrengthId = -1;
private int mLastMobileTypeId = -1;
private boolean mIsMobileTypeIconWide;
private String mMobileDescription, mMobileTypeDescription;
@@ -508,25 +513,16 @@ public class SignalClusterView
public boolean apply(boolean isSecondaryIcon) {
if (mMobileVisible && !mIsAirplaneMode) {
mMobile.setImageResource(mMobileStrengthId);
Drawable mobileDrawable = mMobile.getDrawable();
if (mobileDrawable instanceof Animatable) {
Animatable ad = (Animatable) mobileDrawable;
if (!ad.isRunning()) {
ad.start();
}
if (mLastMobileStrengthId != mMobileStrengthId) {
updateAnimatableIcon(mMobile, mMobileStrengthId);
updateAnimatableIcon(mMobileDark, mMobileStrengthId);
mLastMobileStrengthId = mMobileStrengthId;
}
mMobileDark.setImageResource(mMobileStrengthId);
Drawable mobileDarkDrawable = mMobileDark.getDrawable();
if (mobileDarkDrawable instanceof Animatable) {
Animatable ad = (Animatable) mobileDarkDrawable;
if (!ad.isRunning()) {
ad.start();
}
if (mLastMobileTypeId != mMobileTypeId) {
mMobileType.setImageResource(mMobileTypeId);
mLastMobileTypeId = mMobileTypeId;
}
mMobileType.setImageResource(mMobileTypeId);
mMobileGroup.setContentDescription(mMobileTypeDescription
+ " " + mMobileDescription);
mMobileGroup.setVisibility(View.VISIBLE);
@@ -550,6 +546,32 @@ public class SignalClusterView
return mMobileVisible;
}
private void updateAnimatableIcon(ImageView view, int resId) {
maybeStopAnimatableDrawable(view);
view.setImageResource(resId);
maybeStartAnimatableDrawable(view);
}
private void maybeStopAnimatableDrawable(ImageView view) {
Drawable drawable = view.getDrawable();
if (drawable instanceof Animatable) {
Animatable ad = (Animatable) drawable;
if (ad.isRunning()) {
ad.stop();
}
}
}
private void maybeStartAnimatableDrawable(ImageView view) {
Drawable drawable = view.getDrawable();
if (drawable instanceof Animatable) {
Animatable ad = (Animatable) drawable;
if (!ad.isRunning()) {
ad.start();
}
}
}
public void populateAccessibilityEvent(AccessibilityEvent event) {
if (mMobileVisible && mMobileGroup != null
&& mMobileGroup.getContentDescription() != null) {