Loading src/com/android/settings/accessibility/PreviewSizeSeekBarController.java +33 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.R; 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 com.android.settings.widget.SeekBarPreference; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnDestroy; Loading @@ -52,11 +53,14 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp private AccessibilityQuickSettingsTooltipWindow mTooltipWindow; private AccessibilityQuickSettingsTooltipWindow mTooltipWindow; private final Handler mHandler; private final Handler mHandler; private String[] mStateLabels = null; 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) { setSeekbarStateDescription(progress); if (mInteractionListener.isEmpty()) { if (mInteractionListener.isEmpty()) { return; return; } } Loading Loading @@ -141,6 +145,7 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp if (mNeedsQSTooltipReshow) { if (mNeedsQSTooltipReshow) { mHandler.post(this::showQuickSettingsTooltipIfNeeded); mHandler.post(this::showQuickSettingsTooltipIfNeeded); } } setSeekbarStateDescription(mSeekBarPreference.getProgress()); } } @Override @Override Loading @@ -153,6 +158,34 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp mInteractionListener.ifPresent(ProgressInteractionListener::onProgressChanged); mInteractionListener.ifPresent(ProgressInteractionListener::onProgressChanged); } } /** * Stores the String array we would like to use for describing the state of seekbar progress * and updates the state description with current progress. * * @param labels The state descriptions to be announced for each progress. */ public void setProgressStateLabels(String[] labels) { mStateLabels = labels; if (mStateLabels == null) { return; } updateState(mSeekBarPreference); } /** * Sets the state of seekbar based on current progress. The progress of seekbar is * corresponding to the index of the string array. If the progress is larger than or equals * to the length of the array, the state description is set to an empty string. */ private void setSeekbarStateDescription(int index) { if (mStateLabels == null) { return; } mSeekBarPreference.setSeekBarStateDescription( (index < mStateLabels.length) ? mStateLabels[index] : ""); } private void onProgressFinalized() { private void onProgressFinalized() { // Using progress in SeekBarPreference since the progresses in // Using progress in SeekBarPreference since the progresses in // SeekBarPreference and seekbar are not always the same. // SeekBarPreference and seekbar are not always the same. Loading src/com/android/settings/accessibility/TextReadingPreferenceFragment.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -170,6 +170,15 @@ public class TextReadingPreferenceFragment extends DashboardFragment { R.string.accessibility_font_scaling_auto_added_qs_tooltip_content); R.string.accessibility_font_scaling_auto_added_qs_tooltip_content); } } }; }; final String[] labelArray = new String[fontSizeData.getValues().size()]; for (int i = 0; i < labelArray.length; i++) { labelArray[i] = context.getResources().getString( com.android.settingslib.R.string.font_scale_percentage, (int) (fontSizeData.getValues().get(i) * 100) ); } fontSizeController.setProgressStateLabels(labelArray); fontSizeController.setInteractionListener(mPreviewController); fontSizeController.setInteractionListener(mPreviewController); getSettingsLifecycle().addObserver(fontSizeController); getSettingsLifecycle().addObserver(fontSizeController); controllers.add(fontSizeController); controllers.add(fontSizeController); Loading tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java +22 −2 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.SeekBarPreference; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading Loading @@ -75,6 +76,7 @@ public class PreviewSizeSeekBarControllerTest { private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder; @Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS) private PreferenceManager mPreferenceManager; private PreferenceManager mPreferenceManager; private SeekBar mSeekBar; @Mock @Mock private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener; private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener; Loading @@ -101,8 +103,10 @@ public class PreviewSizeSeekBarControllerTest { mSeekBarPreference.setKey(FONT_SIZE_KEY); mSeekBarPreference.setKey(FONT_SIZE_KEY); LayoutInflater inflater = LayoutInflater.from(mContext); LayoutInflater inflater = LayoutInflater.from(mContext); mHolder = PreferenceViewHolder.createInstanceForTests(inflater.inflate( mHolder = spy(PreferenceViewHolder.createInstanceForTests(inflater.inflate( R.layout.preference_labeled_slider, null)); R.layout.preference_labeled_slider, null))); mSeekBar = spy(new SeekBar(mContext)); doReturn(mSeekBar).when(mHolder).findViewById(com.android.internal.R.id.seekbar); mSeekBarPreference.onBindViewHolder(mHolder); mSeekBarPreference.onBindViewHolder(mHolder); when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference); when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference); Loading Loading @@ -224,6 +228,22 @@ public class PreviewSizeSeekBarControllerTest { assertThat(getLatestPopupWindow().isShowing()).isTrue(); assertThat(getLatestPopupWindow().isShowing()).isTrue(); } } @Test public void onProgressChanged_setCorrespondingCustomizedStateDescription() { String[] stateLabels = new String[]{"1", "2", "3", "4", "5"}; mSeekBarController.setProgressStateLabels(stateLabels); mSeekBarController.displayPreference(mPreferenceScreen); int progress = 3; mSeekBarPreference.setProgress(progress); mSeekBarPreference.onProgressChanged(mSeekBar, progress, /* fromUser= */ false); verify(mSeekBarPreference).setSeekBarStateDescription(stateLabels[progress]); assertThat(mSeekBar.getStateDescription().toString()).isEqualTo(stateLabels[progress]); } private static class TestFragment extends SettingsPreferenceFragment { private static class TestFragment extends SettingsPreferenceFragment { @Override @Override Loading Loading
src/com/android/settings/accessibility/PreviewSizeSeekBarController.java +33 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.R; 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 com.android.settings.widget.SeekBarPreference; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnDestroy; Loading @@ -52,11 +53,14 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp private AccessibilityQuickSettingsTooltipWindow mTooltipWindow; private AccessibilityQuickSettingsTooltipWindow mTooltipWindow; private final Handler mHandler; private final Handler mHandler; private String[] mStateLabels = null; 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) { setSeekbarStateDescription(progress); if (mInteractionListener.isEmpty()) { if (mInteractionListener.isEmpty()) { return; return; } } Loading Loading @@ -141,6 +145,7 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp if (mNeedsQSTooltipReshow) { if (mNeedsQSTooltipReshow) { mHandler.post(this::showQuickSettingsTooltipIfNeeded); mHandler.post(this::showQuickSettingsTooltipIfNeeded); } } setSeekbarStateDescription(mSeekBarPreference.getProgress()); } } @Override @Override Loading @@ -153,6 +158,34 @@ abstract class PreviewSizeSeekBarController extends BasePreferenceController imp mInteractionListener.ifPresent(ProgressInteractionListener::onProgressChanged); mInteractionListener.ifPresent(ProgressInteractionListener::onProgressChanged); } } /** * Stores the String array we would like to use for describing the state of seekbar progress * and updates the state description with current progress. * * @param labels The state descriptions to be announced for each progress. */ public void setProgressStateLabels(String[] labels) { mStateLabels = labels; if (mStateLabels == null) { return; } updateState(mSeekBarPreference); } /** * Sets the state of seekbar based on current progress. The progress of seekbar is * corresponding to the index of the string array. If the progress is larger than or equals * to the length of the array, the state description is set to an empty string. */ private void setSeekbarStateDescription(int index) { if (mStateLabels == null) { return; } mSeekBarPreference.setSeekBarStateDescription( (index < mStateLabels.length) ? mStateLabels[index] : ""); } private void onProgressFinalized() { private void onProgressFinalized() { // Using progress in SeekBarPreference since the progresses in // Using progress in SeekBarPreference since the progresses in // SeekBarPreference and seekbar are not always the same. // SeekBarPreference and seekbar are not always the same. Loading
src/com/android/settings/accessibility/TextReadingPreferenceFragment.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -170,6 +170,15 @@ public class TextReadingPreferenceFragment extends DashboardFragment { R.string.accessibility_font_scaling_auto_added_qs_tooltip_content); R.string.accessibility_font_scaling_auto_added_qs_tooltip_content); } } }; }; final String[] labelArray = new String[fontSizeData.getValues().size()]; for (int i = 0; i < labelArray.length; i++) { labelArray[i] = context.getResources().getString( com.android.settingslib.R.string.font_scale_percentage, (int) (fontSizeData.getValues().get(i) * 100) ); } fontSizeController.setProgressStateLabels(labelArray); fontSizeController.setInteractionListener(mPreviewController); fontSizeController.setInteractionListener(mPreviewController); getSettingsLifecycle().addObserver(fontSizeController); getSettingsLifecycle().addObserver(fontSizeController); controllers.add(fontSizeController); controllers.add(fontSizeController); Loading
tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java +22 −2 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.SeekBarPreference; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading Loading @@ -75,6 +76,7 @@ public class PreviewSizeSeekBarControllerTest { private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder; @Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS) private PreferenceManager mPreferenceManager; private PreferenceManager mPreferenceManager; private SeekBar mSeekBar; @Mock @Mock private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener; private PreviewSizeSeekBarController.ProgressInteractionListener mInteractionListener; Loading @@ -101,8 +103,10 @@ public class PreviewSizeSeekBarControllerTest { mSeekBarPreference.setKey(FONT_SIZE_KEY); mSeekBarPreference.setKey(FONT_SIZE_KEY); LayoutInflater inflater = LayoutInflater.from(mContext); LayoutInflater inflater = LayoutInflater.from(mContext); mHolder = PreferenceViewHolder.createInstanceForTests(inflater.inflate( mHolder = spy(PreferenceViewHolder.createInstanceForTests(inflater.inflate( R.layout.preference_labeled_slider, null)); R.layout.preference_labeled_slider, null))); mSeekBar = spy(new SeekBar(mContext)); doReturn(mSeekBar).when(mHolder).findViewById(com.android.internal.R.id.seekbar); mSeekBarPreference.onBindViewHolder(mHolder); mSeekBarPreference.onBindViewHolder(mHolder); when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference); when(mPreferenceScreen.findPreference(anyString())).thenReturn(mSeekBarPreference); Loading Loading @@ -224,6 +228,22 @@ public class PreviewSizeSeekBarControllerTest { assertThat(getLatestPopupWindow().isShowing()).isTrue(); assertThat(getLatestPopupWindow().isShowing()).isTrue(); } } @Test public void onProgressChanged_setCorrespondingCustomizedStateDescription() { String[] stateLabels = new String[]{"1", "2", "3", "4", "5"}; mSeekBarController.setProgressStateLabels(stateLabels); mSeekBarController.displayPreference(mPreferenceScreen); int progress = 3; mSeekBarPreference.setProgress(progress); mSeekBarPreference.onProgressChanged(mSeekBar, progress, /* fromUser= */ false); verify(mSeekBarPreference).setSeekBarStateDescription(stateLabels[progress]); assertThat(mSeekBar.getStateDescription().toString()).isEqualTo(stateLabels[progress]); } private static class TestFragment extends SettingsPreferenceFragment { private static class TestFragment extends SettingsPreferenceFragment { @Override @Override Loading