final static String KEY_INTENSITY_MEDIUM = "intensity_medium";
@VisibleForTesting
final static String KEY_INTENSITY_HIGH = "intensity_high";
+ // KEY_INTENSITY_ON is only used when the device doesn't support multiple intensity levels.
+ @VisibleForTesting
+ final static String KEY_INTENSITY_ON = "intensity_on";
private final Map<String, VibrationIntensityCandidateInfo> mCandidates;
private final SettingsObserver mSettingsObserver;
public VibrationPreferenceFragment() {
mCandidates = new ArrayMap<>();
- mCandidates.put(KEY_INTENSITY_OFF,
- new VibrationIntensityCandidateInfo(KEY_INTENSITY_OFF,
- R.string.accessibility_vibration_intensity_off,
- Vibrator.VIBRATION_INTENSITY_OFF));
- mCandidates.put(KEY_INTENSITY_LOW,
- new VibrationIntensityCandidateInfo(KEY_INTENSITY_LOW,
- R.string.accessibility_vibration_intensity_low,
- Vibrator.VIBRATION_INTENSITY_LOW));
- mCandidates.put(KEY_INTENSITY_MEDIUM,
- new VibrationIntensityCandidateInfo(KEY_INTENSITY_MEDIUM,
- R.string.accessibility_vibration_intensity_medium,
- Vibrator.VIBRATION_INTENSITY_MEDIUM));
- mCandidates.put(KEY_INTENSITY_HIGH,
- new VibrationIntensityCandidateInfo(KEY_INTENSITY_HIGH,
- R.string.accessibility_vibration_intensity_high,
- Vibrator.VIBRATION_INTENSITY_HIGH));
mSettingsObserver = new SettingsObserver();
}
public void onAttach(Context context) {
super.onAttach(context);
mSettingsObserver.register();
+ if (mCandidates.isEmpty()) {
+ loadCandidates(context);
+ }
+ }
+
+ private void loadCandidates(Context context) {
+ final boolean supportsMultipleIntensities = context.getResources().getBoolean(
+ R.bool.config_vibration_supports_multiple_intensities);
+ if (supportsMultipleIntensities) {
+ mCandidates.put(KEY_INTENSITY_OFF,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_OFF,
+ R.string.accessibility_vibration_intensity_off,
+ Vibrator.VIBRATION_INTENSITY_OFF));
+ mCandidates.put(KEY_INTENSITY_LOW,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_LOW,
+ R.string.accessibility_vibration_intensity_low,
+ Vibrator.VIBRATION_INTENSITY_LOW));
+ mCandidates.put(KEY_INTENSITY_MEDIUM,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_MEDIUM,
+ R.string.accessibility_vibration_intensity_medium,
+ Vibrator.VIBRATION_INTENSITY_MEDIUM));
+ mCandidates.put(KEY_INTENSITY_HIGH,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_HIGH,
+ R.string.accessibility_vibration_intensity_high,
+ Vibrator.VIBRATION_INTENSITY_HIGH));
+ } else {
+ mCandidates.put(KEY_INTENSITY_OFF,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_OFF,
+ R.string.switch_off_text, Vibrator.VIBRATION_INTENSITY_OFF));
+ mCandidates.put(KEY_INTENSITY_ON,
+ new VibrationIntensityCandidateInfo(KEY_INTENSITY_ON,
+ R.string.switch_on_text, getDefaultVibrationIntensity()));
+ }
}
@Override
final int vibrationIntensity = Settings.System.getInt(getContext().getContentResolver(),
getVibrationIntensitySetting(), getDefaultVibrationIntensity());
for (VibrationIntensityCandidateInfo candidate : mCandidates.values()) {
- if (candidate.getIntensity() == vibrationIntensity) {
+ final boolean matchesIntensity = candidate.getIntensity() == vibrationIntensity;
+ final boolean matchesOn = candidate.getKey().equals(KEY_INTENSITY_ON)
+ && vibrationIntensity != Vibrator.VIBRATION_INTENSITY_OFF;
+ if (matchesIntensity || matchesOn) {
return candidate.getKey();
}
}