Merge "Make Media Vibration setting configurable" am: dcb1dbc7f5

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2432412

Change-Id: I1b9b9ff95026831fec9329ccfefeb6096e984389
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-02-16 10:46:42 +00:00
committed by Automerger Merge Worker
5 changed files with 82 additions and 3 deletions

View File

@@ -217,6 +217,10 @@
--> -->
<integer name="config_vibration_supported_intensity_levels">1</integer> <integer name="config_vibration_supported_intensity_levels">1</integer>
<!-- Whether or not to show Media vibration settings in the vibration and haptics screen.
Can be overridden for specific product builds if the target device does not support it -->
<bool name="config_media_vibration_supported">true</bool>
<!-- <!--
Whether or not the homepage should be powered by legacy suggestion (versus contextual cards) Whether or not the homepage should be powered by legacy suggestion (versus contextual cards)
Default to true as not all devices support contextual cards. Default to true as not all devices support contextual cards.

View File

@@ -20,6 +20,8 @@ import android.content.Context;
import android.os.VibrationAttributes; import android.os.VibrationAttributes;
import android.provider.Settings; import android.provider.Settings;
import com.android.settings.R;
/** Preference controller for am vibration intensity */ /** Preference controller for am vibration intensity */
public class MediaVibrationIntensityPreferenceController public class MediaVibrationIntensityPreferenceController
extends VibrationIntensityPreferenceController { extends VibrationIntensityPreferenceController {
@@ -46,6 +48,7 @@ public class MediaVibrationIntensityPreferenceController
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return AVAILABLE; return mContext.getResources().getBoolean(R.bool.config_media_vibration_supported) ?
AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings.accessibility;
import android.content.Context; import android.content.Context;
import com.android.settings.accessibility.MediaVibrationIntensityPreferenceController.MediaVibrationPreferenceConfig; import com.android.settings.accessibility.MediaVibrationIntensityPreferenceController.MediaVibrationPreferenceConfig;
import com.android.settings.R;
/** Preference controller for alarm vibration with only a toggle for on/off states. */ /** Preference controller for alarm vibration with only a toggle for on/off states. */
public class MediaVibrationTogglePreferenceController extends VibrationTogglePreferenceController { public class MediaVibrationTogglePreferenceController extends VibrationTogglePreferenceController {
@@ -29,6 +30,7 @@ public class MediaVibrationTogglePreferenceController extends VibrationTogglePre
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return AVAILABLE; return mContext.getResources().getBoolean(R.bool.config_media_vibration_supported) ?
AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
} }

View File

@@ -31,10 +31,13 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -45,7 +48,7 @@ import org.robolectric.annotation.Config;
/** Test for {@link MediaVibrationIntensityPreferenceController}. */ /** Test for {@link MediaVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class}) @Config(shadows = {ShadowInteractionJankMonitor.class, SettingsShadowResources.class})
public class MediaVibrationIntensityPreferenceControllerTest { public class MediaVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";
@@ -76,6 +79,11 @@ public class MediaVibrationIntensityPreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
} }
@After
public void tearDown() {
SettingsShadowResources.reset();
}
@Test @Test
public void verifyConstants() { public void verifyConstants() {
assertThat(mController.getPreferenceKey()).isEqualTo(PREFERENCE_KEY); assertThat(mController.getPreferenceKey()).isEqualTo(PREFERENCE_KEY);
@@ -156,6 +164,32 @@ public class MediaVibrationIntensityPreferenceControllerTest {
.isEqualTo(Vibrator.VIBRATION_INTENSITY_HIGH); .isEqualTo(Vibrator.VIBRATION_INTENSITY_HIGH);
} }
@Test
public void configForMediaVibration_enabled_shouldShowSlider() {
SettingsShadowResources.overrideResource(R.bool.config_media_vibration_supported, true);
mController.updateState(mPreference);
final boolean mediaVibrationConfig = mContext.getResources()
.getBoolean(R.bool.config_media_vibration_supported);
assertThat(mediaVibrationConfig).isTrue();
assertThat(mController.isAvailable()).isTrue();
assertThat(mController.isSupported()).isTrue();
}
@Test
public void configForMediaVibration_disabled_shouldHideSlider() {
SettingsShadowResources.overrideResource(R.bool.config_media_vibration_supported, false);
mController.updateState(mPreference);
final boolean mediaVibrationConfig = mContext.getResources()
.getBoolean(R.bool.config_media_vibration_supported);
assertThat(mediaVibrationConfig).isFalse();
assertThat(mController.isAvailable()).isFalse();
assertThat(mController.isSupported()).isFalse();
}
private void updateSetting(String key, int value) { private void updateSetting(String key, int value) {
Settings.System.putInt(mContext.getContentResolver(), key, value); Settings.System.putInt(mContext.getContentResolver(), key, value);
} }

View File

@@ -32,17 +32,22 @@ import androidx.preference.SwitchPreference;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.R;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
/** Test for {@link MediaVibrationIntensityPreferenceController}. */ /** Test for {@link MediaVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.class})
public class MediaVibrationTogglePreferenceControllerTest { public class MediaVibrationTogglePreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";
@@ -72,6 +77,11 @@ public class MediaVibrationTogglePreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
} }
@After
public void tearDown() {
SettingsShadowResources.reset();
}
@Test @Test
public void verifyConstants() { public void verifyConstants() {
assertThat(mController.getPreferenceKey()).isEqualTo(PREFERENCE_KEY); assertThat(mController.getPreferenceKey()).isEqualTo(PREFERENCE_KEY);
@@ -144,6 +154,32 @@ public class MediaVibrationTogglePreferenceControllerTest {
.isEqualTo(Vibrator.VIBRATION_INTENSITY_OFF); .isEqualTo(Vibrator.VIBRATION_INTENSITY_OFF);
} }
@Test
public void configForMediaVibration_enabled_shouldShowToogle() {
SettingsShadowResources.overrideResource(R.bool.config_media_vibration_supported, true);
mController.updateState(mPreference);
final boolean mediaVibrationConfig = mContext.getResources()
.getBoolean(R.bool.config_media_vibration_supported);
assertThat(mediaVibrationConfig).isTrue();
assertThat(mController.isAvailable()).isTrue();
assertThat(mController.isSupported()).isTrue();
}
@Test
public void configForMediaVibration_disabled_shouldHideToggle() {
SettingsShadowResources.overrideResource(R.bool.config_media_vibration_supported, false);
mController.updateState(mPreference);
final boolean mediaVibrationConfig = mContext.getResources()
.getBoolean(R.bool.config_media_vibration_supported);
assertThat(mediaVibrationConfig).isFalse();
assertThat(mController.isAvailable()).isFalse();
assertThat(mController.isSupported()).isFalse();
}
private void updateSetting(String key, int value) { private void updateSetting(String key, int value) {
Settings.System.putInt(mContext.getContentResolver(), key, value); Settings.System.putInt(mContext.getContentResolver(), key, value);
} }