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

Commit e7fc65ff authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Introduce VibrationConfig.Builder" into main

parents 6c230612 88512383
Loading
Loading
Loading
Loading
+184 −42
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.os.VibrationAttributes.USAGE_RINGTONE;
import static android.os.VibrationAttributes.USAGE_TOUCH;
import static android.os.VibrationAttributes.USAGE_UNKNOWN;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.res.Resources;
import android.os.VibrationAttributes;
@@ -69,10 +70,12 @@ public class VibrationConfig {
    private final int mRampDownDurationMs;
    private final int mRequestVibrationParamsTimeoutMs;
    private final int[] mRequestVibrationParamsForUsages;
    private final float mDefaultVibrationScaleLevelGain;
    private final float[] mVibrationScaleFactors;
    private final float[] mExternalVibrationScaleFactors;

    private final boolean mIgnoreVibrationsOnWirelessCharger;
    private final boolean mKeyboardVibrationSettingsSupported;
    private final int mVibrationPipelineMaxDurationMs;

    @VibrationIntensity
    private final int mDefaultAlarmVibrationIntensity;
@@ -87,48 +90,31 @@ public class VibrationConfig {
    @VibrationIntensity
    private final int mDefaultKeyboardVibrationIntensity;

    private final boolean mKeyboardVibrationSettingsSupported;
    private final int mVibrationPipelineMaxDurationMs;

    /** @hide */
    public VibrationConfig(@Nullable Resources resources) {
        mDefaultVibrationAmplitude = resources.getInteger(
                com.android.internal.R.integer.config_defaultVibrationAmplitude);
        mHapticChannelMaxVibrationAmplitude = loadFloat(resources,
                com.android.internal.R.dimen.config_hapticChannelMaxVibrationAmplitude);
        mRampDownDurationMs = loadInteger(resources,
                com.android.internal.R.integer.config_vibrationWaveformRampDownDuration, 0);
        mRampStepDurationMs = loadInteger(resources,
                com.android.internal.R.integer.config_vibrationWaveformRampStepDuration, 0);
        mRequestVibrationParamsTimeoutMs = loadInteger(resources,
                com.android.internal.R.integer.config_requestVibrationParamsTimeout, 0);
        mRequestVibrationParamsForUsages = loadIntArray(resources,
                com.android.internal.R.array.config_requestVibrationParamsForUsages);

        mIgnoreVibrationsOnWirelessCharger = loadBoolean(resources,
                com.android.internal.R.bool.config_ignoreVibrationsOnWirelessCharger);
        mKeyboardVibrationSettingsSupported = loadBoolean(resources,
                com.android.internal.R.bool.config_keyboardVibrationSettingsSupported);
        mVibrationPipelineMaxDurationMs = loadInteger(resources,
                com.android.internal.R.integer.config_vibrationPipelineMaxDuration, 0);

        mDefaultAlarmVibrationIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultAlarmVibrationIntensity);
        mDefaultHapticFeedbackIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultHapticFeedbackIntensity);
        mDefaultMediaVibrationIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultMediaVibrationIntensity);
        mDefaultNotificationVibrationIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultNotificationVibrationIntensity);
        mDefaultRingVibrationIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultRingVibrationIntensity);
        mDefaultKeyboardVibrationIntensity = loadDefaultIntensity(resources,
                com.android.internal.R.integer.config_defaultKeyboardVibrationIntensity);
        this(new Builder(resources));
    }

        mVibrationScaleFactors = loadIntensityScaleFactors(resources,
                com.android.internal.R.array.config_vibrationIntensityScaleFactors);
        mExternalVibrationScaleFactors = loadIntensityScaleFactors(resources,
                com.android.internal.R.array.config_externalVibrationIntensityScaleFactors);
    /** @hide */
    public VibrationConfig(@NonNull Builder builder) {
        mDefaultVibrationAmplitude = builder.mDefaultVibrationAmplitude;
        mHapticChannelMaxVibrationAmplitude = builder.mHapticChannelMaxVibrationAmplitude;
        mRampDownDurationMs = builder.mRampDownDurationMs;
        mRampStepDurationMs = builder.mRampStepDurationMs;
        mRequestVibrationParamsTimeoutMs = builder.mRequestVibrationParamsTimeoutMs;
        mRequestVibrationParamsForUsages = builder.mRequestVibrationParamsForUsages;
        mIgnoreVibrationsOnWirelessCharger = builder.mIgnoreVibrationsOnWirelessCharger;
        mKeyboardVibrationSettingsSupported = builder.mKeyboardVibrationSettingsSupported;
        mVibrationPipelineMaxDurationMs = builder.mVibrationPipelineMaxDurationMs;
        mDefaultVibrationScaleLevelGain = builder.mDefaultVibrationScaleLevelGain;
        mVibrationScaleFactors = builder.mVibrationScaleFactors;
        mExternalVibrationScaleFactors = builder.mExternalVibrationScaleFactors;
        mDefaultAlarmVibrationIntensity = builder.mDefaultAlarmVibrationIntensity;
        mDefaultHapticFeedbackIntensity = builder.mDefaultHapticFeedbackIntensity;
        mDefaultMediaVibrationIntensity = builder.mDefaultMediaVibrationIntensity;
        mDefaultNotificationVibrationIntensity = builder.mDefaultNotificationVibrationIntensity;
        mDefaultRingVibrationIntensity = builder.mDefaultRingVibrationIntensity;
        mDefaultKeyboardVibrationIntensity = builder.mDefaultKeyboardVibrationIntensity;
    }

    @VibrationIntensity
@@ -161,6 +147,10 @@ public class VibrationConfig {
        return res != null ? res.getFloat(resId) : 0f;
    }

    private static int loadInteger(@Nullable Resources res, int resId) {
        return loadInteger(res, resId, 0);
    }

    private static int loadInteger(@Nullable Resources res, int resId, int defaultValue) {
        return res != null ? res.getInteger(resId) : defaultValue;
    }
@@ -218,8 +208,11 @@ public class VibrationConfig {
     * for each level.
     */
    public float getDefaultVibrationScaleLevelGain() {
        if (mDefaultVibrationScaleLevelGain <= 1) {
            return DEFAULT_SCALE_LEVEL_GAIN;
        }
        return mDefaultVibrationScaleLevelGain;
    }

    /** Return true if device has vibration scale factors config. */
    public boolean hasVibrationScaleFactors() {
@@ -415,4 +408,153 @@ public class VibrationConfig {

        return names;
    }

    /**
     * Builder for {@link VibrationConfig}.
     *
     * @hide
     */
    public static final class Builder {
        private float mHapticChannelMaxVibrationAmplitude;
        private int mDefaultVibrationAmplitude;
        private int mRampStepDurationMs;
        private int mRampDownDurationMs;
        private int mRequestVibrationParamsTimeoutMs;
        private int[] mRequestVibrationParamsForUsages;
        private float mDefaultVibrationScaleLevelGain;
        private float[] mVibrationScaleFactors;
        private float[] mExternalVibrationScaleFactors;
        private boolean mIgnoreVibrationsOnWirelessCharger;
        private boolean mKeyboardVibrationSettingsSupported;
        private int mVibrationPipelineMaxDurationMs;

        @VibrationIntensity
        private int mDefaultAlarmVibrationIntensity;
        @VibrationIntensity
        private int mDefaultHapticFeedbackIntensity;
        @VibrationIntensity
        private int mDefaultMediaVibrationIntensity;
        @VibrationIntensity
        private int mDefaultNotificationVibrationIntensity;
        @VibrationIntensity
        private int mDefaultRingVibrationIntensity;
        @VibrationIntensity
        private int mDefaultKeyboardVibrationIntensity;

        public Builder(@Nullable Resources resources) {
            mDefaultVibrationAmplitude = loadInteger(resources,
                    com.android.internal.R.integer.config_defaultVibrationAmplitude,
                    DEFAULT_AMPLITUDE);
            mHapticChannelMaxVibrationAmplitude = loadFloat(resources,
                    com.android.internal.R.dimen.config_hapticChannelMaxVibrationAmplitude);
            mRampDownDurationMs = loadInteger(resources,
                    com.android.internal.R.integer.config_vibrationWaveformRampDownDuration);
            mRampStepDurationMs = loadInteger(resources,
                    com.android.internal.R.integer.config_vibrationWaveformRampStepDuration);
            mRequestVibrationParamsTimeoutMs = loadInteger(resources,
                    com.android.internal.R.integer.config_requestVibrationParamsTimeout);
            mRequestVibrationParamsForUsages = loadIntArray(resources,
                    com.android.internal.R.array.config_requestVibrationParamsForUsages);
            mIgnoreVibrationsOnWirelessCharger = loadBoolean(resources,
                    com.android.internal.R.bool.config_ignoreVibrationsOnWirelessCharger);
            mKeyboardVibrationSettingsSupported = loadBoolean(resources,
                    com.android.internal.R.bool.config_keyboardVibrationSettingsSupported);
            mVibrationPipelineMaxDurationMs = loadInteger(resources,
                    com.android.internal.R.integer.config_vibrationPipelineMaxDuration);
            mVibrationScaleFactors = loadIntensityScaleFactors(resources,
                    com.android.internal.R.array.config_vibrationIntensityScaleFactors);
            mExternalVibrationScaleFactors = loadIntensityScaleFactors(resources,
                    com.android.internal.R.array.config_externalVibrationIntensityScaleFactors);
            mDefaultAlarmVibrationIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultAlarmVibrationIntensity);
            mDefaultHapticFeedbackIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultHapticFeedbackIntensity);
            mDefaultMediaVibrationIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultMediaVibrationIntensity);
            mDefaultNotificationVibrationIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultNotificationVibrationIntensity);
            mDefaultRingVibrationIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultRingVibrationIntensity);
            mDefaultKeyboardVibrationIntensity = loadDefaultIntensity(resources,
                    com.android.internal.R.integer.config_defaultKeyboardVibrationIntensity);
            mDefaultVibrationScaleLevelGain = DEFAULT_SCALE_LEVEL_GAIN;
        }

        public void setDefaultVibrationAmplitude(int amplitude) {
            mDefaultVibrationAmplitude = amplitude;
        }

        public void setHapticChannelMaxVibrationAmplitude(float amplitude) {
            mHapticChannelMaxVibrationAmplitude = amplitude;
        }

        public void setRampDownDurationMs(int durationMs) {
            mRampDownDurationMs = durationMs;
        }

        public void setRampStepDurationMs(int durationMs) {
            mRampStepDurationMs = durationMs;
        }

        public void setRequestVibrationParamsTimeoutMs(int timeoutMs) {
            mRequestVibrationParamsTimeoutMs = timeoutMs;
        }

        public void setVibrationPipelineMaxDurationMs(int durationMs) {
            mVibrationPipelineMaxDurationMs = durationMs;
        }

        public void setIgnoreVibrationsOnWirelessCharger(boolean shouldIgnore) {
            mIgnoreVibrationsOnWirelessCharger = shouldIgnore;
        }

        public void setKeyboardVibrationSettingsSupported(boolean isSupported) {
            mKeyboardVibrationSettingsSupported = isSupported;
        }

        public void setDefaultAlarmVibrationIntensity(int intensity) {
            mDefaultAlarmVibrationIntensity = intensity;
        }

        public void setDefaultNotificationVibrationIntensity(int intensity) {
            mDefaultNotificationVibrationIntensity = intensity;
        }

        public void setDefaultRingVibrationIntensity(int intensity) {
            mDefaultRingVibrationIntensity = intensity;
        }

        public void setDefaultHapticFeedbackIntensity(int intensity) {
            mDefaultHapticFeedbackIntensity = intensity;
        }

        public void setDefaultKeyboardVibrationIntensity(int intensity) {
            mDefaultKeyboardVibrationIntensity = intensity;
        }

        public void setDefaultMediaVibrationIntensity(int intensity) {
            mDefaultMediaVibrationIntensity = intensity;
        }

        public void setVibrationScaleFactors(float[] scaleFactors) {
            mVibrationScaleFactors = scaleFactors;
        }

        public void setDefaultVibrationScaleLevelGain(float scaleLevelGain) {
            mDefaultVibrationScaleLevelGain = scaleLevelGain;
        }

        public void setExternalVibrationScaleFactors(float[] scaleFactors) {
            mExternalVibrationScaleFactors = scaleFactors;
        }

        public void setRequestVibrationParamsForUsages(int[] usages) {
            mRequestVibrationParamsForUsages = usages;
        }

        /** Create {@link VibrationConfig} with data from this builder. */
        public VibrationConfig build() {
            return new VibrationConfig(this);
        }
    }
}
+94 −134

File changed.

Preview size limit exceeded, changes collapsed.

+47 −45
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -72,7 +71,6 @@ import android.os.Process;
import android.os.UserHandle;
import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.os.test.TestLooper;
import android.os.vibrator.VibrationConfig;
import android.platform.test.flag.junit.CheckFlagsRule;
@@ -135,10 +133,10 @@ public class VibrationSettingsTest {
    @Mock private PackageManagerInternal mPackageManagerInternalMock;
    @Mock private AudioManager mAudioManagerMock;
    @Mock private IActivityManager mActivityManagerMock;
    @Mock private VibrationConfig mVibrationConfigMock;

    private TestLooper mTestLooper;
    private ContextWrapper mContextSpy;
    private VibrationConfig.Builder mVibrationConfigBuilder;
    private VibrationSettings mVibrationSettings;

    @Before
@@ -156,9 +154,8 @@ public class VibrationSettingsTest {
        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
                .thenReturn(new ComponentName(SYSUI_PACKAGE_NAME, ""));

        setDefaultIntensity(VIBRATION_INTENSITY_MEDIUM);
        mVibrationConfigBuilder = new VibrationConfig.Builder(null); // use defaults

        setIgnoreVibrationsOnWirelessCharger(false);
        mockGoToSleep(/* goToSleepTime= */ 0, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT);

        createSystemReadyVibrationSettings();
@@ -166,7 +163,7 @@ public class VibrationSettingsTest {

    private void createSystemReadyVibrationSettings() {
        mVibrationSettings = new VibrationSettings(mContextSpy,
                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
                new Handler(mTestLooper.getLooper()), mVibrationConfigBuilder.build());

        // Simulate System defaults.
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
@@ -182,7 +179,7 @@ public class VibrationSettingsTest {
    @Test
    public void create_withOnlyRequiredSystemServices() {
        VibrationSettings minimalVibrationSettings = new VibrationSettings(mContextSpy,
                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
                new Handler(mTestLooper.getLooper()), mVibrationConfigBuilder.build());

        // The only core services that we depend on are Power, Package and Activity managers
        minimalVibrationSettings.onSystemReady(mPackageManagerInternalMock,
@@ -290,7 +287,7 @@ public class VibrationSettingsTest {

    @Test
    public void wirelessChargingVibrationsEnabled_doesNotRegisterBatteryReceiver_allowsAnyUsage() {
        setIgnoreVibrationsOnWirelessCharger(false);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(false);
        createSystemReadyVibrationSettings();

        verify(mContextSpy, never()).registerReceiver(any(BroadcastReceiver.class),
@@ -303,7 +300,7 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_noBatteryIntentWhenSystemReady_allowsAnyUsage() {
        setIgnoreVibrationsOnWirelessCharger(true);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(true);
        createSystemReadyVibrationSettings();

        for (int usage : ALL_USAGES) {
@@ -318,7 +315,7 @@ public class VibrationSettingsTest {
                any(BroadcastReceiver.class),
                argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt());

        setIgnoreVibrationsOnWirelessCharger(true);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(true);
        createSystemReadyVibrationSettings();

        for (int usage : ALL_USAGES) {
@@ -333,7 +330,7 @@ public class VibrationSettingsTest {
                any(BroadcastReceiver.class),
                argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt());

        setIgnoreVibrationsOnWirelessCharger(true);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(true);
        createSystemReadyVibrationSettings();

        for (int usage : ALL_USAGES) {
@@ -343,7 +340,7 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_receivesWirelessChargingIntent_doesNotAllowFromAnyUsage() {
        setIgnoreVibrationsOnWirelessCharger(true);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(true);
        createSystemReadyVibrationSettings();

        Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS);
@@ -357,7 +354,7 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_receivesNonWirelessChargingIntent_allowsAnyUsage() {
        setIgnoreVibrationsOnWirelessCharger(true);
        mVibrationConfigBuilder.setIgnoreVibrationsOnWirelessCharger(true);
        createSystemReadyVibrationSettings();

        Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS);
@@ -454,7 +451,7 @@ public class VibrationSettingsTest {
    @Test
    public void shouldIgnoreVibration_withoutAudioManager_allowsAllVibrations() {
        mVibrationSettings = new VibrationSettings(mContextSpy,
                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
                new Handler(mTestLooper.getLooper()), mVibrationConfigBuilder.build());
        mVibrationSettings.onSystemReady(mPackageManagerInternalMock,
                mPowerManagerInternalMock, mActivityManagerMock, mVirtualDeviceManagerInternalMock,
                /* audioManager= */ null);
@@ -604,7 +601,8 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_withKeyboardSettingsOff_shouldIgnoreKeyboardVibration() {
        setKeyboardVibrationSettingsSupported(true);
        mVibrationConfigBuilder.setKeyboardVibrationSettingsSupported(true);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
        setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 0 /* OFF*/);

@@ -626,7 +624,8 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_withKeyboardSettingsOn_shouldNotIgnoreKeyboardVibration() {
        setKeyboardVibrationSettingsSupported(true);
        mVibrationConfigBuilder.setKeyboardVibrationSettingsSupported(true);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
        setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */);

@@ -642,7 +641,8 @@ public class VibrationSettingsTest {

    @Test
    public void shouldIgnoreVibration_notSupportKeyboardVibration_followsTouchFeedbackSettings() {
        setKeyboardVibrationSettingsSupported(false);
        mVibrationConfigBuilder.setKeyboardVibrationSettingsSupported(false);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
        setUserSetting(Settings.System.KEYBOARD_VIBRATION_ENABLED, 1 /* ON */);

@@ -814,7 +814,13 @@ public class VibrationSettingsTest {

    @Test
    public void getDefaultIntensity_returnsIntensityFromVibratorConfig() {
        setDefaultIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultAlarmVibrationIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultRingVibrationIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultNotificationVibrationIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultHapticFeedbackIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultMediaVibrationIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setDefaultKeyboardVibrationIntensity(VIBRATION_INTENSITY_HIGH);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
@@ -830,7 +836,13 @@ public class VibrationSettingsTest {

    @Test
    public void getCurrentIntensity_returnsIntensityFromSettings() {
        setDefaultIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultAlarmVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultRingVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultNotificationVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultHapticFeedbackIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultMediaVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultKeyboardVibrationIntensity(VIBRATION_INTENSITY_OFF);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
@@ -848,7 +860,13 @@ public class VibrationSettingsTest {

    @Test
    public void getCurrentIntensity_updateTriggeredAfterUserSwitched() {
        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultAlarmVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultRingVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultNotificationVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultHapticFeedbackIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultMediaVibrationIntensity(VIBRATION_INTENSITY_OFF);
        mVibrationConfigBuilder.setDefaultKeyboardVibrationIntensity(VIBRATION_INTENSITY_OFF);
        createSystemReadyVibrationSettings();
        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
        assertEquals(VIBRATION_INTENSITY_HIGH,
                mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE));
@@ -869,7 +887,9 @@ public class VibrationSettingsTest {

    @Test
    public void getCurrentIntensity_noHardwareFeedbackValueUsesHapticFeedbackValue() {
        setDefaultIntensity(USAGE_HARDWARE_FEEDBACK, VIBRATION_INTENSITY_MEDIUM);
        mVibrationConfigBuilder.setDefaultHapticFeedbackIntensity(VIBRATION_INTENSITY_MEDIUM);
        createSystemReadyVibrationSettings();

        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
        assertEquals(VIBRATION_INTENSITY_OFF, mVibrationSettings.getCurrentIntensity(USAGE_TOUCH));
        // If haptic feedback is off, fallback to default value.
@@ -890,16 +910,15 @@ public class VibrationSettingsTest {

    @Test
    public void getCurrentIntensity_ImeFeedbackValueReflectsToKeyboardVibrationSettings() {
        setDefaultIntensity(USAGE_IME_FEEDBACK, VIBRATION_INTENSITY_MEDIUM);
        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_HIGH);

        setKeyboardVibrationSettingsSupported(false);
        mVibrationSettings.update();
        mVibrationConfigBuilder.setDefaultKeyboardVibrationIntensity(VIBRATION_INTENSITY_MEDIUM);
        mVibrationConfigBuilder.setDefaultHapticFeedbackIntensity(VIBRATION_INTENSITY_HIGH);
        mVibrationConfigBuilder.setKeyboardVibrationSettingsSupported(false);
        createSystemReadyVibrationSettings();
        assertEquals(VIBRATION_INTENSITY_HIGH,
                mVibrationSettings.getCurrentIntensity(USAGE_IME_FEEDBACK));

        setKeyboardVibrationSettingsSupported(true);
        mVibrationSettings.update();
        mVibrationConfigBuilder.setKeyboardVibrationSettingsSupported(true);
        createSystemReadyVibrationSettings();
        assertEquals(VIBRATION_INTENSITY_MEDIUM,
                mVibrationSettings.getCurrentIntensity(USAGE_IME_FEEDBACK));
    }
@@ -972,23 +991,6 @@ public class VibrationSettingsTest {
        return "Error for attributes " + attrs;
    }

    private void setDefaultIntensity(@Vibrator.VibrationIntensity int intensity) {
        when(mVibrationConfigMock.getDefaultVibrationIntensity(anyInt())).thenReturn(intensity);
    }

    private void setDefaultIntensity(@VibrationAttributes.Usage int usage,
            @Vibrator.VibrationIntensity int intensity) {
        when(mVibrationConfigMock.getDefaultVibrationIntensity(eq(usage))).thenReturn(intensity);
    }

    private void setIgnoreVibrationsOnWirelessCharger(boolean ignore) {
        when(mVibrationConfigMock.ignoreVibrationsOnWirelessCharger()).thenReturn(ignore);
    }

    private void setKeyboardVibrationSettingsSupported(boolean supported) {
        when(mVibrationConfigMock.isKeyboardVibrationSettingsSupported()).thenReturn(supported);
    }

    private void deleteUserSetting(String settingName) {
        Settings.System.putStringForUser(
                mContextSpy.getContentResolver(), settingName, null, UserHandle.USER_CURRENT);
+35 −32

File changed.

Preview size limit exceeded, changes collapsed.