Merge "Don't register multiple predraw listeners" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-10-20 18:49:14 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 10 deletions

View File

@@ -89,6 +89,7 @@ public class KeyguardClockSwitch extends RelativeLayout {
private int mClockSwitchYAmount;
@VisibleForTesting boolean mChildrenAreLaidOut = false;
private OnPreDrawListener mPreDrawListener;
public KeyguardClockSwitch(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -284,15 +285,14 @@ public class KeyguardClockSwitch extends RelativeLayout {
if (mChildrenAreLaidOut) {
animateClockChange(clockSize == LARGE);
mDisplayedClockSize = clockSize;
} else {
getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
switchToClock(clockSize);
getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
} else if (mPreDrawListener == null) {
mPreDrawListener = () -> {
switchToClock(clockSize);
getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
mPreDrawListener = null;
return true;
};
getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
}
return true;
}
@@ -303,6 +303,13 @@ public class KeyguardClockSwitch extends RelativeLayout {
mChildrenAreLaidOut = true;
}
void onViewDetached() {
if (mPreDrawListener != null) {
getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
mPreDrawListener = null;
}
}
public Paint getPaint() {
return mClockView.getPaint();
}

View File

@@ -238,6 +238,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
}
mColorExtractor.removeOnColorsChangedListener(mColorsListener);
mView.setClockPlugin(null, mStatusBarStateController.getState());
mView.onViewDetached();
}
/**

View File

@@ -194,7 +194,7 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
verifyAttachment(times(1));
listenerArgumentCaptor.getValue().onViewDetachedFromWindow(mView);
verify(mView).onViewDetached();
verify(mColorExtractor).removeOnColorsChangedListener(
any(ColorExtractor.OnColorsChangedListener.class));
}