Fix crashing of font size settings screen due to the timing

of initialization of ExploreByTouchHelper
Bug: 27674946

Change-Id: Ief92b5db975861aa31029712854e78edf4454eb5
This commit is contained in:
Noah Wang
2016-03-29 20:23:29 -07:00
parent 8870706614
commit c89855aef9

View File

@@ -139,6 +139,9 @@ public class LabeledSeekBar extends SeekBar {
private ExploreByTouchHelper mAccessHelper;
private boolean mOnMeasureCalled;
private boolean mOnAttachedWindowCalled;
public LabeledSeekBar(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.seekBarStyle);
}
@@ -204,11 +207,18 @@ public class LabeledSeekBar extends SeekBar {
super.setOnSeekBarChangeListener(l2);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mOnMeasureCalled = true;
tryInitAccessHelper();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mAccessHelper = new LabeledSeekBarExploreByTouchHelper(this);
ViewCompat.setAccessibilityDelegate(this, mAccessHelper);
mOnAttachedWindowCalled = true;
tryInitAccessHelper();
}
@Override
@@ -227,6 +237,18 @@ public class LabeledSeekBar extends SeekBar {
return super.dispatchHoverEvent(event);
}
/**
* Initialize accessibility delegation only when both onAttachedWindow and onMeasure
* has been called.
*/
private void tryInitAccessHelper() {
if (mOnAttachedWindowCalled && mOnMeasureCalled) {
mAccessHelper = new LabeledSeekBarExploreByTouchHelper(this);
ViewCompat.setAccessibilityDelegate(this, mAccessHelper);
mOnAttachedWindowCalled = mOnMeasureCalled = false;
}
}
private void sendClickEventForAccessibility(int progress) {
if (mAccessHelper != null) {
mAccessHelper.invalidateRoot();