OSDN Git Service

Enforce min value on panel slices slider
authorlindatseng <lindatseng@google.com>
Mon, 15 Apr 2019 22:51:07 +0000 (15:51 -0700)
committerLinda Tseng <lindatseng@google.com>
Tue, 16 Apr 2019 16:30:08 +0000 (16:30 +0000)
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

14 files changed:
src/com/android/settings/core/SliderPreferenceController.java
src/com/android/settings/display/NightDisplayIntensityPreferenceController.java
src/com/android/settings/notification/AudioHelper.java
src/com/android/settings/notification/RemoteVolumePreferenceController.java
src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
src/com/android/settings/slices/SliceBroadcastReceiver.java
src/com/android/settings/slices/SliceBuilderUtils.java
tests/robotests/src/com/android/settings/core/SettingsSliderPreferenceControllerTest.java
tests/robotests/src/com/android/settings/core/SliderPreferenceControllerTest.java
tests/robotests/src/com/android/settings/notification/AdjustVolumeRestrictedPreferenceControllerTest.java
tests/robotests/src/com/android/settings/notification/RemoteVolumePreferenceControllerTest.java
tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java
tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java
tests/robotests/src/com/android/settings/testutils/FakeSliderController.java

index 0ea6be3..0a7ece2 100644 (file)
@@ -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() {
index 48e261e..04e3b13 100644 (file)
@@ -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
index a918d86..d178113 100644 (file)
@@ -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);
+    }
 }
index b455465..9a7db4f 100644 (file)
@@ -150,7 +150,7 @@ public class RemoteVolumePreferenceController extends VolumeSeekBarPreferenceCon
     }
 
     @Override
-    public int getMaxSteps() {
+    public int getMax() {
         if (mPreference != null) {
             return mPreference.getMax();
         }
@@ -162,6 +162,14 @@ public class RemoteVolumePreferenceController extends VolumeSeekBarPreferenceCon
     }
 
     @Override
+    public int getMin() {
+        if (mPreference != null) {
+            return mPreference.getMin();
+        }
+        return 0;
+    }
+
+    @Override
     public boolean isSliceable() {
         return TextUtils.equals(getPreferenceKey(), KEY_REMOTE_VOLUME);
     }
index fff9aaf..f7bf75f 100644 (file)
@@ -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();
index 9926a52..fc3d0cc 100644 (file)
@@ -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);
index 00a82d2..aa76a9e 100644 (file)
@@ -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)
index ba9cd5d..a04ec37 100644 (file)
@@ -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,11 +90,16 @@ 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;
         }
index dbe7a14..ab0d9f5 100644 (file)
@@ -88,11 +88,16 @@ 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;
         }
index 3126cdf..de00189 100644 (file)
@@ -121,7 +121,12 @@ public class AdjustVolumeRestrictedPreferenceControllerTest {
         }
 
         @Override
-        public int getMaxSteps() {
+        public int getMax() {
+            return 0;
+        }
+
+        @Override
+        public int getMin() {
             return 0;
         }
     }
index 1e68de5..d750a9a 100644 (file)
@@ -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
index a9e74b7..2d54c38 100644 (file)
@@ -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
index 1ea324d..4e62b03 100644 (file)
@@ -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);
 
index 9e65913..da9cd63 100644 (file)
@@ -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