Merge "Add haptic effect for the seekbar in Settings 2/n."
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.settings.accessibility;
|
||||
|
||||
import static android.view.HapticFeedbackConstants.CLOCK_TICK;
|
||||
import static com.android.settings.Utils.isNightMode;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -44,6 +45,7 @@ public class BalanceSeekBar extends SeekBar {
|
||||
private final Context mContext;
|
||||
private final Object mListenerLock = new Object();
|
||||
private OnSeekBarChangeListener mOnSeekBarChangeListener;
|
||||
private int mLastProgress = -1;
|
||||
private final OnSeekBarChangeListener mProxySeekBarListener = new OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||
@@ -73,6 +75,12 @@ public class BalanceSeekBar extends SeekBar {
|
||||
progress = mCenter;
|
||||
seekBar.setProgress(progress); // direct update (fromUser becomes false)
|
||||
}
|
||||
if (progress != mLastProgress) {
|
||||
if (progress == mCenter || progress == getMin() || progress == getMax()) {
|
||||
seekBar.performHapticFeedback(CLOCK_TICK);
|
||||
}
|
||||
mLastProgress = progress;
|
||||
}
|
||||
final float balance = (progress - mCenter) * 0.01f;
|
||||
Settings.System.putFloatForUser(mContext.getContentResolver(),
|
||||
Settings.System.MASTER_BALANCE, balance, UserHandle.USER_CURRENT);
|
||||
@@ -152,10 +160,5 @@ public class BalanceSeekBar extends SeekBar {
|
||||
canvas.restore();
|
||||
super.onDraw(canvas);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
OnSeekBarChangeListener getProxySeekBarListener() {
|
||||
return mProxySeekBarListener;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -16,12 +16,16 @@
|
||||
|
||||
package com.android.settings.accessibility;
|
||||
|
||||
import static android.view.HapticFeedbackConstants.CLOCK_TICK;
|
||||
import static android.view.HapticFeedbackConstants.CONTEXT_CLICK;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
@@ -49,7 +53,7 @@ public class BalanceSeekBarTest {
|
||||
public void setUp() {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mSeekBar = new BalanceSeekBar(mContext, mAttrs);
|
||||
mProxySeekBarListener = mSeekBar.getProxySeekBarListener();
|
||||
mProxySeekBarListener = shadowOf(mSeekBar).getOnSeekBarChangeListener();
|
||||
mockSeekBarChangeListener = mock(SeekBar.OnSeekBarChangeListener.class);
|
||||
mSeekBar.setOnSeekBarChangeListener(mockSeekBarChangeListener);
|
||||
}
|
||||
@@ -77,6 +81,31 @@ public class BalanceSeekBarTest {
|
||||
eq(MAX_PROGRESS_VALUE), eq(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onProgressChanged_minimumValue_clockTickFeedbackPerformed() {
|
||||
mSeekBar.performHapticFeedback(CONTEXT_CLICK);
|
||||
mProxySeekBarListener.onProgressChanged(mSeekBar, 0, true);
|
||||
|
||||
assertThat(shadowOf(mSeekBar).lastHapticFeedbackPerformed()).isEqualTo(CLOCK_TICK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onProgressChanged_centerValue_clockTickFeedbackPerformed() {
|
||||
mSeekBar.performHapticFeedback(CONTEXT_CLICK);
|
||||
mProxySeekBarListener.onProgressChanged(mSeekBar, MAX_PROGRESS_VALUE / 2, true);
|
||||
|
||||
assertThat(shadowOf(mSeekBar).lastHapticFeedbackPerformed()).isEqualTo(CLOCK_TICK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onProgressChanged_maximumValue_clockTickFeedbackPerformed() {
|
||||
mSeekBar.setMax(MAX_PROGRESS_VALUE);
|
||||
mSeekBar.performHapticFeedback(CONTEXT_CLICK);
|
||||
mProxySeekBarListener.onProgressChanged(mSeekBar, MAX_PROGRESS_VALUE, true);
|
||||
|
||||
assertThat(shadowOf(mSeekBar).lastHapticFeedbackPerformed()).isEqualTo(CLOCK_TICK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setMaxTest_shouldSetValue() {
|
||||
mSeekBar.setMax(MAX_PROGRESS_VALUE);
|
||||
|
Reference in New Issue
Block a user