Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c60fc69 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Hide haptic intensity settings for devices without enough dynamic range." into pi-dev

parents 1ec06d46 3dbaac6e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -134,4 +134,9 @@
    <!-- Whether or not to show the night light suggestion. -->
    <bool name="config_night_light_suggestion_enabled">true</bool>

    <!-- Whether or not the device is capable of multiple levels of vibration intensity.
         Note that this is different from whether it can control the vibration amplitude as some
         devices will be able to vary their amplitude but do not possess enough dynamic range to
         have distinct intensity levels -->
    <bool name="config_vibration_supports_multiple_intensities">false</bool>
</resources>
+21 −11
Original line number Diff line number Diff line
@@ -779,6 +779,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
    }

    private String getVibrationSummary(Context context, @VibrationIntensity int intensity) {
        final boolean supportsMultipleIntensities = context.getResources().getBoolean(
                R.bool.config_vibration_supports_multiple_intensities);
        if (supportsMultipleIntensities) {
            switch (intensity) {
                case Vibrator.VIBRATION_INTENSITY_OFF:
                    return context.getString(R.string.accessibility_vibration_summary_off);
@@ -791,6 +794,13 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
                default:
                    return "";
            }
        } else {
            if (intensity == Vibrator.VIBRATION_INTENSITY_OFF) {
                return context.getString(R.string.switch_on_text);
            } else {
                return context.getString(R.string.switch_off_text);
            }
        }
    }

    private void updateLockScreenRotationCheckbox() {
+21 −11
Original line number Diff line number Diff line
@@ -81,18 +81,28 @@ public abstract class VibrationIntensityPreferenceController extends BasePrefere
   }

    public static CharSequence getIntensityString(Context context, int intensity) {
        final boolean supportsMultipleIntensities = context.getResources().getBoolean(
                R.bool.config_vibration_supports_multiple_intensities);
        if (supportsMultipleIntensities) {
            switch (intensity) {
                case Vibrator.VIBRATION_INTENSITY_OFF:
                return context.getText(R.string.accessibility_vibration_intensity_off);
                    return context.getString(R.string.accessibility_vibration_intensity_off);
                case Vibrator.VIBRATION_INTENSITY_LOW:
                return context.getText(R.string.accessibility_vibration_intensity_low);
                    return context.getString(R.string.accessibility_vibration_intensity_low);
                case Vibrator.VIBRATION_INTENSITY_MEDIUM:
                return context.getText(R.string.accessibility_vibration_intensity_medium);
                    return context.getString(R.string.accessibility_vibration_intensity_medium);
                case Vibrator.VIBRATION_INTENSITY_HIGH:
                return context.getText(R.string.accessibility_vibration_intensity_high);
                    return context.getString(R.string.accessibility_vibration_intensity_high);
                default:
                    return "";
            }
        } else {
            if (intensity == Vibrator.VIBRATION_INTENSITY_OFF) {
                return context.getString(R.string.switch_off_text);
            } else {
                return context.getString(R.string.switch_on_text);
            }
        }
    }

    protected abstract int getDefaultIntensity();
+40 −17
Original line number Diff line number Diff line
@@ -55,12 +55,31 @@ 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<>();
        mSettingsObserver = new SettingsObserver();
    }

    @Override
    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,
@@ -77,13 +96,14 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm
                    new VibrationIntensityCandidateInfo(KEY_INTENSITY_HIGH,
                        R.string.accessibility_vibration_intensity_high,
                        Vibrator.VIBRATION_INTENSITY_HIGH));
        mSettingsObserver = new SettingsObserver();
        } 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
    public void onAttach(Context context) {
        super.onAttach(context);
        mSettingsObserver.register();
    }

    @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();
            }
        }
+51 −3
Original line number Diff line number Diff line
@@ -18,10 +18,12 @@ package com.android.settings.accessibility;

import static android.provider.Settings.System.NOTIFICATION_VIBRATION_INTENSITY;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.arch.lifecycle.LifecycleOwner;
import android.content.Context;
import android.content.res.Resources;
import android.os.Vibrator;
import android.provider.Settings;
import android.support.v7.preference.Preference;
@@ -48,6 +50,7 @@ public class NotificationVibrationIntensityPreferenceControllerTest {
    private LifecycleOwner mLifecycleOwner;
    private Lifecycle mLifecycle;
    private Context mContext;
    private Resources mResources;
    private NotificationVibrationIntensityPreferenceController mController;
    private Preference mPreference;

@@ -56,7 +59,11 @@ public class NotificationVibrationIntensityPreferenceControllerTest {
        MockitoAnnotations.initMocks(this);
        mLifecycleOwner = () -> mLifecycle;
        mLifecycle = new Lifecycle(mLifecycleOwner);
        mContext = RuntimeEnvironment.application;
        mContext = spy(RuntimeEnvironment.application);
        mResources = spy(mContext.getResources());
        when(mContext.getResources()).thenReturn(mResources);
        when(mResources.getBoolean(R.bool.config_vibration_supports_multiple_intensities))
            .thenReturn(true);
        mController = new NotificationVibrationIntensityPreferenceController(mContext) {
            @Override
            protected int getDefaultIntensity() {
@@ -68,7 +75,6 @@ public class NotificationVibrationIntensityPreferenceControllerTest {
        mPreference.setSummary("Test");
        when(mScreen.findPreference(mController.getPreferenceKey()))
                .thenReturn(mPreference);
        mController.displayPreference(mScreen);
    }

    @Test
@@ -80,7 +86,10 @@ public class NotificationVibrationIntensityPreferenceControllerTest {
    }

    @Test
    public void updateState_shouldRefreshSummary() {
    public void updateState_withMultipleIntensitySuport_shouldRefreshSummary() {
        setSupportsMultipleIntensities(true);
        showPreference();

        Settings.System.putInt(mContext.getContentResolver(),
                NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_LOW);
        mController.updateState(mPreference);
@@ -105,4 +114,43 @@ public class NotificationVibrationIntensityPreferenceControllerTest {
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.accessibility_vibration_intensity_off));
    }

    @Test
    public void updateState_withoutMultipleIntensitySupport_shouldRefreshSummary() {
        setSupportsMultipleIntensities(false);
        showPreference();

        Settings.System.putInt(mContext.getContentResolver(),
                NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_LOW);
        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.switch_on_text));

        Settings.System.putInt(mContext.getContentResolver(),
                NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_HIGH);
        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.switch_on_text));

        Settings.System.putInt(mContext.getContentResolver(),
                NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_MEDIUM);
        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.switch_on_text));

        Settings.System.putInt(mContext.getContentResolver(),
                NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
        mController.updateState(mPreference);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.switch_off_text));
    }

    private void setSupportsMultipleIntensities(boolean hasSupport) {
        when(mResources.getBoolean(R.bool.config_vibration_supports_multiple_intensities))
            .thenReturn(hasSupport);
    }

    private void showPreference() {
        mController.displayPreference(mScreen);
    }
}
Loading