diff --git a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java index 2078112811a..51a775e85c3 100644 --- a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java +++ b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java @@ -25,6 +25,8 @@ import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; import com.android.settings.widget.LabeledSeekBarPreference; +import java.util.Optional; + /** * The controller of {@link LabeledSeekBarPreference} that listens to display size and font size * settings changes and updates preview size threshold smoothly. @@ -33,19 +35,24 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements TextReadingResetController.ResetStateListener { private final PreviewSizeData mSizeData; private boolean mSeekByTouch; - private ProgressInteractionListener mInteractionListener; + private Optional mInteractionListener = Optional.empty(); private LabeledSeekBarPreference mSeekBarPreference; private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mInteractionListener.notifyPreferenceChanged(); - - if (!mSeekByTouch && mInteractionListener != null) { - mInteractionListener.onProgressChanged(); + if (mInteractionListener.isEmpty()) { + return; } + final ProgressInteractionListener interactionListener = + mInteractionListener.get(); + interactionListener.notifyPreferenceChanged(); + + if (!mSeekByTouch) { + interactionListener.onProgressChanged(); + } } @Override @@ -57,9 +64,7 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements public void onStopTrackingTouch(SeekBar seekBar) { mSeekByTouch = false; - if (mInteractionListener != null) { - mInteractionListener.onEndTrackingTouch(); - } + mInteractionListener.ifPresent(ProgressInteractionListener::onEndTrackingTouch); } }; @@ -70,7 +75,7 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements } void setInteractionListener(ProgressInteractionListener interactionListener) { - mInteractionListener = interactionListener; + mInteractionListener = Optional.ofNullable(interactionListener); } @Override @@ -95,6 +100,10 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements public void resetState() { final int defaultProgress = mSizeData.getValues().indexOf(mSizeData.getDefaultValue()); mSeekBarPreference.setProgress(defaultProgress); + + // Immediately take the effect of updating the progress to avoid waiting for receiving + // the event to delay update. + mInteractionListener.ifPresent(ProgressInteractionListener::onProgressChanged); } diff --git a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java index fae61d67e6f..31e0782a8c9 100644 --- a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java @@ -54,6 +54,9 @@ public class PreviewSizeSeekBarControllerTest { @Mock private PreferenceScreen mPreferenceScreen; + @Mock + private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -65,6 +68,8 @@ public class PreviewSizeSeekBarControllerTest { mSeekBarPreference = spy(new LabeledSeekBarPreference(mContext, /* attrs= */ null)); when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference); + + mSeekBarController.setInteractionListener(mInteractionListener); } @Test @@ -98,4 +103,12 @@ public class PreviewSizeSeekBarControllerTest { assertThat(mSeekBarPreference.getProgress()).isEqualTo(defaultProgress); } + + @Test + public void resetState_verifyOnProgressChanged() { + mSeekBarController.displayPreference(mPreferenceScreen); + mSeekBarController.resetState(); + + verify(mInteractionListener).onProgressChanged(); + } }