Loading src/com/android/settings/notification/SoundSettings.java +23 −25 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Message; import android.os.UserHandle; import android.preference.SeekBarVolumizer; import android.provider.SearchIndexableResource; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.text.TextUtils; Loading @@ -50,8 +51,22 @@ public class SoundSettings extends DashboardFragment { private static final int SAMPLE_CUTOFF = 2000; // manually cap sample playback at 2 seconds private final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback(); private final H mHandler = new H(); @VisibleForTesting static final int STOP_SAMPLE = 1; @VisibleForTesting final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback(); @VisibleForTesting final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case STOP_SAMPLE: mVolumeCallback.stopSample(); break; } } }; private RingtonePreference mRequestPreference; Loading Loading @@ -140,14 +155,17 @@ public class SoundSettings extends DashboardFragment { } mCurrent = sbv; if (mCurrent != null) { mHandler.removeMessages(H.STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(H.STOP_SAMPLE, SAMPLE_CUTOFF); mHandler.removeMessages(STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(STOP_SAMPLE, SAMPLE_CUTOFF); } } @Override public void onStreamValueChanged(int stream, int progress) { // noop if (mCurrent != null) { mHandler.removeMessages(STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(STOP_SAMPLE, SAMPLE_CUTOFF); } } public void stopSample() { Loading @@ -157,26 +175,6 @@ public class SoundSettings extends DashboardFragment { } } // === Callbacks === private final class H extends Handler { private static final int STOP_SAMPLE = 1; private H() { super(Looper.getMainLooper()); } @Override public void handleMessage(Message msg) { switch (msg.what) { case STOP_SAMPLE: mVolumeCallback.stopSample(); break; } } } private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, SoundSettings fragment, VolumeSeekBarPreference.Callback callback, Lifecycle lifecycle) { Loading src/com/android/settings/notification/VolumeSeekBarPreference.java +0 −10 Original line number Diff line number Diff line Loading @@ -148,7 +148,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference { mVolumizer.start(); mVolumizer.setSeekBar(mSeekBar); updateIconView(); mCallback.onStreamValueChanged(mStream, mSeekBar.getProgress()); updateSuppressionText(); if (!isEnabled()) { mSeekBar.setEnabled(false); Loading @@ -156,15 +155,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference { } } // during initialization, this preference is the SeekBar listener @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { super.onProgressChanged(seekBar, progress, fromTouch); if (mCallback != null) { mCallback.onStreamValueChanged(mStream, progress); } } private void updateIconView() { if (mIconView == null) return; if (mIconResId != 0) { Loading src/com/android/settings/widget/SeekBarPreference.java +1 −2 Original line number Diff line number Diff line Loading @@ -233,8 +233,7 @@ public class SeekBarPreference extends RestrictedPreference } @Override public void onProgressChanged( SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser && (mContinuousUpdates || !mTrackingTouch)) { syncProgress(seekBar); } Loading tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.media.AudioManager; import android.os.Handler; import android.os.UserManager; import android.preference.SeekBarVolumizer; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; Loading @@ -36,6 +38,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.List; Loading @@ -44,7 +47,7 @@ public class SoundSettingsTest { @Test @Config(shadows = {ShadowUserManager.class, ShadowAudioHelper.class}) public void testNonIndexableKeys_existInXmlLayout() { public void getNonIndexableKeys_existInXmlLayout() { final Context context = spy(RuntimeEnvironment.application); AudioManager audioManager = mock(AudioManager.class); doReturn(audioManager).when(context).getSystemService(Context.AUDIO_SERVICE); Loading @@ -66,4 +69,16 @@ public class SoundSettingsTest { assertThat(keys).containsAllIn(niks); } @Test public void onStreamValueChanged_shouldRepostStopSampleMessage() { final SoundSettings settings = new SoundSettings(); final Handler handler = settings.mHandler; ReflectionHelpers.setField( settings.mVolumeCallback, "mCurrent", mock(SeekBarVolumizer.class)); settings.mVolumeCallback.onStreamValueChanged(0, 5); assertThat(settings.mHandler.hasMessages(SoundSettings.STOP_SAMPLE)).isTrue(); } } Loading
src/com/android/settings/notification/SoundSettings.java +23 −25 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Message; import android.os.UserHandle; import android.preference.SeekBarVolumizer; import android.provider.SearchIndexableResource; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.text.TextUtils; Loading @@ -50,8 +51,22 @@ public class SoundSettings extends DashboardFragment { private static final int SAMPLE_CUTOFF = 2000; // manually cap sample playback at 2 seconds private final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback(); private final H mHandler = new H(); @VisibleForTesting static final int STOP_SAMPLE = 1; @VisibleForTesting final VolumePreferenceCallback mVolumeCallback = new VolumePreferenceCallback(); @VisibleForTesting final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case STOP_SAMPLE: mVolumeCallback.stopSample(); break; } } }; private RingtonePreference mRequestPreference; Loading Loading @@ -140,14 +155,17 @@ public class SoundSettings extends DashboardFragment { } mCurrent = sbv; if (mCurrent != null) { mHandler.removeMessages(H.STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(H.STOP_SAMPLE, SAMPLE_CUTOFF); mHandler.removeMessages(STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(STOP_SAMPLE, SAMPLE_CUTOFF); } } @Override public void onStreamValueChanged(int stream, int progress) { // noop if (mCurrent != null) { mHandler.removeMessages(STOP_SAMPLE); mHandler.sendEmptyMessageDelayed(STOP_SAMPLE, SAMPLE_CUTOFF); } } public void stopSample() { Loading @@ -157,26 +175,6 @@ public class SoundSettings extends DashboardFragment { } } // === Callbacks === private final class H extends Handler { private static final int STOP_SAMPLE = 1; private H() { super(Looper.getMainLooper()); } @Override public void handleMessage(Message msg) { switch (msg.what) { case STOP_SAMPLE: mVolumeCallback.stopSample(); break; } } } private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, SoundSettings fragment, VolumeSeekBarPreference.Callback callback, Lifecycle lifecycle) { Loading
src/com/android/settings/notification/VolumeSeekBarPreference.java +0 −10 Original line number Diff line number Diff line Loading @@ -148,7 +148,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference { mVolumizer.start(); mVolumizer.setSeekBar(mSeekBar); updateIconView(); mCallback.onStreamValueChanged(mStream, mSeekBar.getProgress()); updateSuppressionText(); if (!isEnabled()) { mSeekBar.setEnabled(false); Loading @@ -156,15 +155,6 @@ public class VolumeSeekBarPreference extends SeekBarPreference { } } // during initialization, this preference is the SeekBar listener @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { super.onProgressChanged(seekBar, progress, fromTouch); if (mCallback != null) { mCallback.onStreamValueChanged(mStream, progress); } } private void updateIconView() { if (mIconView == null) return; if (mIconResId != 0) { Loading
src/com/android/settings/widget/SeekBarPreference.java +1 −2 Original line number Diff line number Diff line Loading @@ -233,8 +233,7 @@ public class SeekBarPreference extends RestrictedPreference } @Override public void onProgressChanged( SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser && (mContinuousUpdates || !mTrackingTouch)) { syncProgress(seekBar); } Loading
tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.media.AudioManager; import android.os.Handler; import android.os.UserManager; import android.preference.SeekBarVolumizer; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; Loading @@ -36,6 +38,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.List; Loading @@ -44,7 +47,7 @@ public class SoundSettingsTest { @Test @Config(shadows = {ShadowUserManager.class, ShadowAudioHelper.class}) public void testNonIndexableKeys_existInXmlLayout() { public void getNonIndexableKeys_existInXmlLayout() { final Context context = spy(RuntimeEnvironment.application); AudioManager audioManager = mock(AudioManager.class); doReturn(audioManager).when(context).getSystemService(Context.AUDIO_SERVICE); Loading @@ -66,4 +69,16 @@ public class SoundSettingsTest { assertThat(keys).containsAllIn(niks); } @Test public void onStreamValueChanged_shouldRepostStopSampleMessage() { final SoundSettings settings = new SoundSettings(); final Handler handler = settings.mHandler; ReflectionHelpers.setField( settings.mVolumeCallback, "mCurrent", mock(SeekBarVolumizer.class)); settings.mVolumeCallback.onStreamValueChanged(0, 5); assertThat(settings.mHandler.hasMessages(SoundSettings.STOP_SAMPLE)).isTrue(); } }