Hide haptic intensity settings for devices without enough dynamic range.
Despite our hope, devices prior to P18 just don't have the dynamic range to give three distinct vibration intensity settings. Given this, only show an on / off toggle for devices by default unless they explicitly opt-in to multiple intensity levels. Test: m -j RunSettingsRoboTests Bug: 80243632 Change-Id: I14ece855cf20f9fa44b0648d28f89c0053be5c5f
This commit is contained in:
@@ -20,16 +20,19 @@ import static com.android.settings.accessibility.VibrationPreferenceFragment.KEY
|
||||
import static com.android.settings.accessibility.VibrationPreferenceFragment.KEY_INTENSITY_LOW;
|
||||
import static com.android.settings.accessibility.VibrationPreferenceFragment.KEY_INTENSITY_MEDIUM;
|
||||
import static com.android.settings.accessibility.VibrationPreferenceFragment.KEY_INTENSITY_OFF;
|
||||
import static com.android.settings.accessibility.VibrationPreferenceFragment.KEY_INTENSITY_ON;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.UserManager;
|
||||
import android.os.Vibrator;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.accessibility.VibrationPreferenceFragment.VibrationIntensityCandidateInfo;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
@@ -58,12 +61,11 @@ public class VibrationPreferenceFragmentTest {
|
||||
INTENSITY_TO_KEY.put(Vibrator.VIBRATION_INTENSITY_HIGH, KEY_INTENSITY_HIGH);
|
||||
}
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private Activity mActivity;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
|
||||
private Context mContext;
|
||||
private Resources mResources;
|
||||
private TestVibrationPreferenceFragment mFragment;
|
||||
|
||||
@Before
|
||||
@@ -71,16 +73,18 @@ public class VibrationPreferenceFragmentTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
FakeFeatureFactory.setupForTest();
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mResources = spy(mContext.getResources());
|
||||
when(mContext.getResources()).thenReturn(mResources);
|
||||
|
||||
mFragment = spy(new TestVibrationPreferenceFragment());
|
||||
doReturn(mUserManager).when(mActivity).getSystemService(Context.USER_SERVICE);
|
||||
doReturn(mContext).when(mFragment).getContext();
|
||||
mFragment.onAttach(mActivity);
|
||||
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void changeIntensitySetting_shouldResultInCorrespondingKey() {
|
||||
setSupportsMultipleIntensities(true);
|
||||
mFragment.onAttach(mContext);
|
||||
for (Map.Entry<Integer, String> entry : INTENSITY_TO_KEY.entrySet()) {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.HAPTIC_FEEDBACK_INTENSITY, entry.getKey());
|
||||
@@ -88,13 +92,38 @@ public class VibrationPreferenceFragmentTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void changeIntensitySetting_WithoutMultipleIntensitySupport_shouldResultInOn() {
|
||||
setSupportsMultipleIntensities(false);
|
||||
mFragment.onAttach(mContext);
|
||||
for (int intensity : INTENSITY_TO_KEY.keySet()) {
|
||||
Settings.System.putInt(mContext.getContentResolver(),
|
||||
Settings.System.HAPTIC_FEEDBACK_INTENSITY, intensity);
|
||||
final String expectedKey = intensity == Vibrator.VIBRATION_INTENSITY_OFF
|
||||
? KEY_INTENSITY_OFF
|
||||
: KEY_INTENSITY_ON;
|
||||
assertThat(mFragment.getDefaultKey()).isEqualTo(expectedKey);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialDefaultKey_shouldBeMedium() {
|
||||
setSupportsMultipleIntensities(true);
|
||||
mFragment.onAttach(mContext);
|
||||
assertThat(mFragment.getDefaultKey()).isEqualTo(KEY_INTENSITY_MEDIUM);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialDefaultKey_WithoutMultipleIntensitySupport_shouldBeOn() {
|
||||
setSupportsMultipleIntensities(false);
|
||||
mFragment.onAttach(mContext);
|
||||
assertThat(mFragment.getDefaultKey()).isEqualTo(KEY_INTENSITY_ON);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void candidates_shouldBeSortedByIntensity() {
|
||||
setSupportsMultipleIntensities(true);
|
||||
mFragment.onAttach(mContext);
|
||||
final List<? extends CandidateInfo> candidates = mFragment.getCandidates();
|
||||
assertThat(candidates.size()).isEqualTo(INTENSITY_TO_KEY.size());
|
||||
VibrationIntensityCandidateInfo prevCandidate =
|
||||
@@ -106,6 +135,11 @@ public class VibrationPreferenceFragmentTest {
|
||||
}
|
||||
}
|
||||
|
||||
private void setSupportsMultipleIntensities(boolean hasSupport) {
|
||||
when(mResources.getBoolean(R.bool.config_vibration_supports_multiple_intensities))
|
||||
.thenReturn(hasSupport);
|
||||
}
|
||||
|
||||
private class TestVibrationPreferenceFragment extends VibrationPreferenceFragment {
|
||||
@Override
|
||||
protected int getPreferenceScreenResId() {
|
||||
@@ -129,5 +163,10 @@ public class VibrationPreferenceFragmentTest {
|
||||
protected int getDefaultVibrationIntensity() {
|
||||
return Vibrator.VIBRATION_INTENSITY_MEDIUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context getContext() {
|
||||
return mContext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user