OSDN Git Service

Merge "Hide haptic intensity settings for devices without enough dynamic range."...
[android-x86/packages-apps-Settings.git] / src / com / android / settings / accessibility / VibrationPreferenceFragment.java
index 93fd7f5..b92aac2 100644 (file)
@@ -55,28 +55,15 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm
     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();
     }
 
@@ -84,6 +71,39 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm
     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
@@ -138,7 +158,10 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm
         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();
             }
         }