From fadedb321c49be1d43bc431061d396aa4b6b826c Mon Sep 17 00:00:00 2001 From: lindatseng Date: Mon, 15 Apr 2019 15:51:07 -0700 Subject: [PATCH] Enforce min value on panel slices slider We did not set the min value on slider slices when converting them from preference to slices, which makes the slices all have min 0. However, there are some slider which should have min value greater than 0, for example, call and alarm. We should get the min value and apply it to slider slice to make it consistent with what we have in settings pref. Test: Manual verification Test: make -j40 RunSettingRobotests Test: atest VolumeSeekBarPreferenceControllerTest Fixes: 130439216 Fixes: 130358208 Change-Id: Ib4399c36c7da3ac41a6d46a6c150f0ec1b9b0b0f --- .../core/SliderPreferenceController.java | 11 +++++++--- ...tDisplayIntensityPreferenceController.java | 10 +++++++-- .../settings/notification/AudioHelper.java | 4 ++++ .../RemoteVolumePreferenceController.java | 10 ++++++++- .../VolumeSeekBarPreferenceController.java | 10 ++++++++- .../slices/SliceBroadcastReceiver.java | 9 ++++---- .../settings/slices/SliceBuilderUtils.java | 3 ++- ...ettingsSliderPreferenceControllerTest.java | 10 +++++++-- .../core/SliderPreferenceControllerTest.java | 7 +++++- ...umeRestrictedPreferenceControllerTest.java | 7 +++++- .../RemoteVolumePreferenceControllerTest.java | 22 +++++++++++++++---- ...VolumeSeekBarPreferenceControllerTest.java | 16 +++++++++++--- .../slices/SliceBroadcastReceiverTest.java | 8 +++---- .../testutils/FakeSliderController.java | 11 +++++++--- 14 files changed, 108 insertions(+), 30 deletions(-) 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