Fix the state didn't reset after the size change and rotation.
Action: Immediately take the effect of updating the progress to avoid waiting for receiving the event to delay update. Bug: 244979646 Test: make RunSettingsRoboTests ROBOTEST_FILTER=PreviewSizeSeekBarControllerTest Change-Id: I6b78555c8536b666a3f015e41574c65e15879d1d
This commit is contained in:
@@ -25,6 +25,8 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.widget.LabeledSeekBarPreference;
|
import com.android.settings.widget.LabeledSeekBarPreference;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The controller of {@link LabeledSeekBarPreference} that listens to display size and font size
|
* The controller of {@link LabeledSeekBarPreference} that listens to display size and font size
|
||||||
* settings changes and updates preview size threshold smoothly.
|
* settings changes and updates preview size threshold smoothly.
|
||||||
@@ -33,19 +35,24 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
TextReadingResetController.ResetStateListener {
|
TextReadingResetController.ResetStateListener {
|
||||||
private final PreviewSizeData<? extends Number> mSizeData;
|
private final PreviewSizeData<? extends Number> mSizeData;
|
||||||
private boolean mSeekByTouch;
|
private boolean mSeekByTouch;
|
||||||
private ProgressInteractionListener mInteractionListener;
|
private Optional<ProgressInteractionListener> mInteractionListener = Optional.empty();
|
||||||
private LabeledSeekBarPreference mSeekBarPreference;
|
private LabeledSeekBarPreference mSeekBarPreference;
|
||||||
|
|
||||||
private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
|
private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
|
||||||
new SeekBar.OnSeekBarChangeListener() {
|
new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
mInteractionListener.notifyPreferenceChanged();
|
if (mInteractionListener.isEmpty()) {
|
||||||
|
return;
|
||||||
if (!mSeekByTouch && mInteractionListener != null) {
|
|
||||||
mInteractionListener.onProgressChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ProgressInteractionListener interactionListener =
|
||||||
|
mInteractionListener.get();
|
||||||
|
interactionListener.notifyPreferenceChanged();
|
||||||
|
|
||||||
|
if (!mSeekByTouch) {
|
||||||
|
interactionListener.onProgressChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -57,9 +64,7 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||||
mSeekByTouch = false;
|
mSeekByTouch = false;
|
||||||
|
|
||||||
if (mInteractionListener != null) {
|
mInteractionListener.ifPresent(ProgressInteractionListener::onEndTrackingTouch);
|
||||||
mInteractionListener.onEndTrackingTouch();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -70,7 +75,7 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setInteractionListener(ProgressInteractionListener interactionListener) {
|
void setInteractionListener(ProgressInteractionListener interactionListener) {
|
||||||
mInteractionListener = interactionListener;
|
mInteractionListener = Optional.ofNullable(interactionListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -95,6 +100,10 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
public void resetState() {
|
public void resetState() {
|
||||||
final int defaultProgress = mSizeData.getValues().indexOf(mSizeData.getDefaultValue());
|
final int defaultProgress = mSizeData.getValues().indexOf(mSizeData.getDefaultValue());
|
||||||
mSeekBarPreference.setProgress(defaultProgress);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -54,6 +54,9 @@ public class PreviewSizeSeekBarControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -65,6 +68,8 @@ public class PreviewSizeSeekBarControllerTest {
|
|||||||
|
|
||||||
mSeekBarPreference = spy(new LabeledSeekBarPreference(mContext, /* attrs= */ null));
|
mSeekBarPreference = spy(new LabeledSeekBarPreference(mContext, /* attrs= */ null));
|
||||||
when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference);
|
when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference);
|
||||||
|
|
||||||
|
mSeekBarController.setInteractionListener(mInteractionListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -98,4 +103,12 @@ public class PreviewSizeSeekBarControllerTest {
|
|||||||
|
|
||||||
assertThat(mSeekBarPreference.getProgress()).isEqualTo(defaultProgress);
|
assertThat(mSeekBarPreference.getProgress()).isEqualTo(defaultProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resetState_verifyOnProgressChanged() {
|
||||||
|
mSeekBarController.displayPreference(mPreferenceScreen);
|
||||||
|
mSeekBarController.resetState();
|
||||||
|
|
||||||
|
verify(mInteractionListener).onProgressChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user