diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java index 14281162157..89f1e2747b7 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreference.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java @@ -21,6 +21,7 @@ import android.content.Context; import android.media.AudioManager; import android.net.Uri; import android.preference.SeekBarVolumizer; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.PreferenceViewHolder; import android.text.TextUtils; import android.util.AttributeSet; @@ -51,30 +52,38 @@ public class VolumeSeekBarPreference extends SeekBarPreference { private int mIconResId; private int mMuteIconResId; private boolean mStopped; + @VisibleForTesting + AudioManager mAudioManager; public VolumeSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); setLayoutResource(R.layout.preference_volume_slider); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } public VolumeSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setLayoutResource(R.layout.preference_volume_slider); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } public VolumeSeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.preference_volume_slider); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } public VolumeSeekBarPreference(Context context) { super(context); setLayoutResource(R.layout.preference_volume_slider); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } public void setStream(int stream) { mStream = stream; + setMax(mAudioManager.getStreamMaxVolume(mStream)); + setProgress(mAudioManager.getStreamVolume(mStream)); } public void setCallback(Callback callback) { diff --git a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java new file mode 100644 index 00000000000..b091cd37bd0 --- /dev/null +++ b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.notification; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doCallRealMethod; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.media.AudioManager; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class VolumeSeekBarPreferenceTest { + + @Mock + private AudioManager mAudioManager; + @Mock + private VolumeSeekBarPreference mPreference; + @Mock + private Context mContext; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager); + mPreference.mAudioManager = mAudioManager; + } + + @Test + public void setStream_shouldSetMaxAndProgress() { + final int stream = 5; + final int max = 17; + final int progress = 4; + when(mAudioManager.getStreamMaxVolume(stream)).thenReturn(max); + when(mAudioManager.getStreamVolume(stream)).thenReturn(progress); + doCallRealMethod().when(mPreference).setStream(anyInt()); + + mPreference.setStream(stream); + + verify(mPreference).setMax(max); + verify(mPreference).setProgress(progress); + } + +}