diff --git a/src/com/android/settings/core/SliderPreferenceController.java b/src/com/android/settings/core/SliderPreferenceController.java index 0ea6be30738..0a7ece25d4b 100644 --- a/src/com/android/settings/core/SliderPreferenceController.java +++ b/src/com/android/settings/core/SliderPreferenceController.java @@ -44,7 +44,7 @@ public abstract class SliderPreferenceController extends BasePreferenceControlle } /** - * @return the value of the Slider's position based on the range: [0, maxSteps). + * @return the value of the Slider's position based on the range: [min, max]. */ public abstract int getSliderPosition(); @@ -57,9 +57,14 @@ public abstract class SliderPreferenceController extends BasePreferenceControlle public abstract boolean setSliderPosition(int position); /** - * @return the number of steps supported by the slider. + * @return the maximum value supported by the slider. */ - public abstract int getMaxSteps(); + public abstract int getMax(); + + /** + * @return the minimum value supported by the slider. + */ + public abstract int getMin(); @Override public int getSliceType() { diff --git a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java index 48e261e40a2..04e3b13a2da 100644 --- a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java @@ -55,7 +55,8 @@ public class NightDisplayIntensityPreferenceController extends SliderPreferenceC super.displayPreference(screen); final SeekBarPreference preference = screen.findPreference(getPreferenceKey()); preference.setContinuousUpdates(true); - preference.setMax(getMaxSteps()); + preference.setMax(getMax()); + preference.setMin(getMin()); } @Override @@ -75,10 +76,15 @@ public class NightDisplayIntensityPreferenceController extends SliderPreferenceC } @Override - public int getMaxSteps() { + public int getMax() { return convertTemperature(ColorDisplayManager.getMinimumColorTemperature(mContext)); } + @Override + public int getMin() { + return ColorDisplayManager.getMinimumColorTemperature(mContext); + } + /** * Inverts and range-adjusts a raw value from the SeekBar (i.e. [0, maxTemp-minTemp]), or * converts an inverted and range-adjusted value to the raw SeekBar value, depending on the diff --git a/src/com/android/settings/notification/AudioHelper.java b/src/com/android/settings/notification/AudioHelper.java index a918d8689d6..d1781139064 100644 --- a/src/com/android/settings/notification/AudioHelper.java +++ b/src/com/android/settings/notification/AudioHelper.java @@ -74,4 +74,8 @@ public class AudioHelper { public int getMaxVolume(int stream) { return mAudioManager.getStreamMaxVolume(stream); } + + public int getMinVolume(int stream) { + return mAudioManager.getStreamMinVolume(stream); + } } diff --git a/src/com/android/settings/notification/RemoteVolumePreferenceController.java b/src/com/android/settings/notification/RemoteVolumePreferenceController.java index b4554651cac..9a7db4f5d7b 100644 --- a/src/com/android/settings/notification/RemoteVolumePreferenceController.java +++ b/src/com/android/settings/notification/RemoteVolumePreferenceController.java @@ -150,7 +150,7 @@ public class RemoteVolumePreferenceController extends VolumeSeekBarPreferenceCon } @Override - public int getMaxSteps() { + public int getMax() { if (mPreference != null) { return mPreference.getMax(); } @@ -161,6 +161,14 @@ public class RemoteVolumePreferenceController extends VolumeSeekBarPreferenceCon return playbackInfo != null ? playbackInfo.getMaxVolume() : 0; } + @Override + public int getMin() { + if (mPreference != null) { + return mPreference.getMin(); + } + return 0; + } + @Override public boolean isSliceable() { return TextUtils.equals(getPreferenceKey(), KEY_REMOTE_VOLUME); diff --git a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java index fff9aaf947e..f7bf75f13c4 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java @@ -92,13 +92,21 @@ public abstract class VolumeSeekBarPreferenceController extends } @Override - public int getMaxSteps() { + public int getMax() { if (mPreference != null) { return mPreference.getMax(); } return mHelper.getMaxVolume(getAudioStream()); } + @Override + public int getMin() { + if (mPreference != null) { + return mPreference.getMin(); + } + return mHelper.getMinVolume(getAudioStream()); + } + protected abstract int getAudioStream(); protected abstract int getMuteIcon(); diff --git a/src/com/android/settings/slices/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java index 9926a5237a4..fc3d0cc6965 100644 --- a/src/com/android/settings/slices/SliceBroadcastReceiver.java +++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java @@ -164,11 +164,12 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { } final SliderPreferenceController sliderController = (SliderPreferenceController) controller; - final int maxSteps = sliderController.getMaxSteps(); - if (newPosition < 0 || newPosition > maxSteps) { + final int minValue = sliderController.getMin(); + final int maxValue = sliderController.getMax(); + if (newPosition < minValue || newPosition > maxValue) { throw new IllegalArgumentException( - "Invalid position passed to Slider controller. Expected between 0 and " - + maxSteps + " but found " + newPosition); + "Invalid position passed to Slider controller. Expected between " + minValue + + " and " + maxValue + " but found " + newPosition); } sliderController.setSliderPosition(newPosition); diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 00a82d231fa..aa76a9e75bb 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -326,7 +326,8 @@ public class SliceBuilderUtils { .setTitle(sliceData.getTitle()) .setSubtitle(subtitleText) .setPrimaryAction(primaryAction) - .setMax(sliderController.getMaxSteps()) + .setMax(sliderController.getMax()) + .setMin(sliderController.getMin()) .setValue(sliderController.getSliderPosition()) .setInputAction(actionIntent)) .setKeywords(keywords) diff --git a/tests/robotests/src/com/android/settings/core/SettingsSliderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/SettingsSliderPreferenceControllerTest.java index ba9cd5d8a22..a04ec373e2c 100644 --- a/tests/robotests/src/com/android/settings/core/SettingsSliderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/SettingsSliderPreferenceControllerTest.java @@ -41,7 +41,8 @@ public class SettingsSliderPreferenceControllerTest { "key"); mPreference.setContinuousUpdates(true); - mPreference.setMax(mSliderController.getMaxSteps()); + mPreference.setMin(mSliderController.getMin()); + mPreference.setMax(mSliderController.getMax()); } @Test @@ -89,10 +90,15 @@ public class SettingsSliderPreferenceControllerTest { } @Override - public int getMaxSteps() { + public int getMax() { return MAX_STEPS; } + @Override + public int getMin() { + return 0; + } + @Override public int getAvailabilityStatus() { return AVAILABLE; diff --git a/tests/robotests/src/com/android/settings/core/SliderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/SliderPreferenceControllerTest.java index dbe7a14bb68..ab0d9f54542 100644 --- a/tests/robotests/src/com/android/settings/core/SliderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/SliderPreferenceControllerTest.java @@ -88,10 +88,15 @@ public class SliderPreferenceControllerTest { } @Override - public int getMaxSteps() { + public int getMax() { return MAX_STEPS; } + @Override + public int getMin() { + return 0; + } + @Override public int getAvailabilityStatus() { return AVAILABLE; diff --git a/tests/robotests/src/com/android/settings/notification/AdjustVolumeRestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/AdjustVolumeRestrictedPreferenceControllerTest.java index 3126cdf1fa8..de001896ea9 100644 --- a/tests/robotests/src/com/android/settings/notification/AdjustVolumeRestrictedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/AdjustVolumeRestrictedPreferenceControllerTest.java @@ -121,7 +121,12 @@ public class AdjustVolumeRestrictedPreferenceControllerTest { } @Override - public int getMaxSteps() { + public int getMax() { + return 0; + } + + @Override + public int getMin() { return 0; } } diff --git a/tests/robotests/src/com/android/settings/notification/RemoteVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/RemoteVolumePreferenceControllerTest.java index 1e68de59684..d750a9a01ce 100644 --- a/tests/robotests/src/com/android/settings/notification/RemoteVolumePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/RemoteVolumePreferenceControllerTest.java @@ -122,17 +122,31 @@ public class RemoteVolumePreferenceControllerTest { } @Test - public void getMaxSteps_controllerNull_returnZero() { + public void getMinValue_controllerNull_returnZero() { mController.mMediaController = null; - assertThat(mController.getMaxSteps()).isEqualTo(0); + assertThat(mController.getMin()).isEqualTo(0); } @Test - public void getMaxSteps_controllerExists_returnValue() { + public void getMinValue_controllerExists_returnValue() { mController.mMediaController = mMediaController; - assertThat(mController.getMaxSteps()).isEqualTo(MAX_POS); + assertThat(mController.getMin()).isEqualTo(0); + } + + @Test + public void getMaxValue_controllerNull_returnZero() { + mController.mMediaController = null; + + assertThat(mController.getMax()).isEqualTo(0); + } + + @Test + public void getMaxValue_controllerExists_returnValue() { + mController.mMediaController = mMediaController; + + assertThat(mController.getMax()).isEqualTo(MAX_POS); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java index a9e74b74306..2d54c38e249 100644 --- a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java @@ -106,8 +106,10 @@ public class VolumeSeekBarPreferenceControllerTest { public void sliderMethods_handleNullPreference() { when(mHelper.getStreamVolume(mController.getAudioStream())).thenReturn(4); when(mHelper.getMaxVolume(mController.getAudioStream())).thenReturn(10); + when(mHelper.getMinVolume(mController.getAudioStream())).thenReturn(1); - assertThat(mController.getMaxSteps()).isEqualTo(10); + assertThat(mController.getMax()).isEqualTo(10); + assertThat(mController.getMin()).isEqualTo(1); assertThat(mController.getSliderPosition()).isEqualTo(4); mController.setSliderPosition(9); @@ -123,11 +125,19 @@ public class VolumeSeekBarPreferenceControllerTest { } @Test - public void getMaxSteps_passesAlongValue() { + public void getMaxValue_passesAlongValue() { when(mPreference.getMax()).thenReturn(6); mController.displayPreference(mScreen); - assertThat(mController.getMaxSteps()).isEqualTo(6); + assertThat(mController.getMax()).isEqualTo(6); + } + + @Test + public void getMinValue_passesAlongValue() { + when(mPreference.getMin()).thenReturn(1); + mController.displayPreference(mScreen); + + assertThat(mController.getMin()).isEqualTo(1); } @Test diff --git a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java index 1ea324d1fc9..4e62b03b3b5 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java @@ -191,8 +191,8 @@ public class SliceBroadcastReceiverTest { .build(); final ContentResolver resolver = mock(ContentResolver.class); doReturn(resolver).when(mContext).getContentResolver(); - final int position = FakeSliderController.MAX_STEPS - 1; - final int oldPosition = FakeSliderController.MAX_STEPS; + final int position = FakeSliderController.MAX_VALUE - 1; + final int oldPosition = FakeSliderController.MAX_VALUE; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); insertSpecialCase(FakeSliderController.class, key); @@ -310,8 +310,8 @@ public class SliceBroadcastReceiverTest { // Insert Fake Slider into Database final String key = "key"; - final int position = FakeSliderController.MAX_STEPS - 1; - final int oldPosition = FakeSliderController.MAX_STEPS; + final int position = FakeSliderController.MAX_VALUE - 1; + final int oldPosition = FakeSliderController.MAX_VALUE; mSearchFeatureProvider.getSearchIndexableResources().getProviderValues().clear(); insertSpecialCase(FakeSliderController.class, key); diff --git a/tests/robotests/src/com/android/settings/testutils/FakeSliderController.java b/tests/robotests/src/com/android/settings/testutils/FakeSliderController.java index 9e659130d70..da9cd632713 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeSliderController.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeSliderController.java @@ -25,7 +25,7 @@ public class FakeSliderController extends SliderPreferenceController { public static final String AVAILABILITY_KEY = "fake_slider_availability_key"; - public static final int MAX_STEPS = 9; + public static final int MAX_VALUE = 9; private static final String SETTING_KEY = "fake_slider_key"; @@ -44,8 +44,13 @@ public class FakeSliderController extends SliderPreferenceController { } @Override - public int getMaxSteps() { - return MAX_STEPS; + public int getMax() { + return MAX_VALUE; + } + + @Override + public int getMin() { + return 0; } @Override