Merge "Separate vibration preference controller from accessibility"
This commit is contained in:
committed by
Android (Google) Code Review
commit
eaddedae58
@@ -123,9 +123,10 @@
|
|||||||
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutPreferenceController"/>
|
settings:controller="com.android.settings.accessibility.AccessibilityTimeoutPreferenceController"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.VibrationSettings"
|
|
||||||
android:key="vibration_preference_screen"
|
android:key="vibration_preference_screen"
|
||||||
android:title="@string/accessibility_vibration_settings_title"/>
|
android:title="@string/accessibility_vibration_settings_title"
|
||||||
|
android:fragment="com.android.settings.accessibility.VibrationSettings"
|
||||||
|
settings:controller="com.android.settings.accessibility.VibrationPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.accessibility;
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
import static android.os.Vibrator.VibrationIntensity;
|
|
||||||
|
|
||||||
import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_MEDIUM;
|
import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_MEDIUM;
|
||||||
|
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||||
@@ -33,7 +31,6 @@ import android.net.Uri;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.Vibrator;
|
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -110,8 +107,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
|||||||
"captioning_preference_screen";
|
"captioning_preference_screen";
|
||||||
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
|
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
|
||||||
"magnification_preference_screen";
|
"magnification_preference_screen";
|
||||||
private static final String VIBRATION_PREFERENCE_SCREEN =
|
|
||||||
"vibration_preference_screen";
|
|
||||||
private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN =
|
private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN =
|
||||||
"daltonizer_preference";
|
"daltonizer_preference";
|
||||||
private static final String DARK_UI_MODE_PREFERENCE =
|
private static final String DARK_UI_MODE_PREFERENCE =
|
||||||
@@ -198,7 +193,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
|||||||
private Preference mAccessibilityShortcutPreferenceScreen;
|
private Preference mAccessibilityShortcutPreferenceScreen;
|
||||||
private Preference mDisplayDaltonizerPreferenceScreen;
|
private Preference mDisplayDaltonizerPreferenceScreen;
|
||||||
private Preference mHearingAidPreference;
|
private Preference mHearingAidPreference;
|
||||||
private Preference mVibrationPreferenceScreen;
|
|
||||||
private Preference mLiveCaptionPreference;
|
private Preference mLiveCaptionPreference;
|
||||||
private SwitchPreference mToggleInversionPreference;
|
private SwitchPreference mToggleInversionPreference;
|
||||||
private AccessibilityHearingAidPreferenceController mHearingAidPreferenceController;
|
private AccessibilityHearingAidPreferenceController mHearingAidPreferenceController;
|
||||||
@@ -393,9 +387,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
|||||||
// Accessibility shortcut.
|
// Accessibility shortcut.
|
||||||
mAccessibilityShortcutPreferenceScreen = findPreference(ACCESSIBILITY_SHORTCUT_PREFERENCE);
|
mAccessibilityShortcutPreferenceScreen = findPreference(ACCESSIBILITY_SHORTCUT_PREFERENCE);
|
||||||
|
|
||||||
// Vibrations.
|
|
||||||
mVibrationPreferenceScreen = findPreference(VIBRATION_PREFERENCE_SCREEN);
|
|
||||||
|
|
||||||
// Dark Mode.
|
// Dark Mode.
|
||||||
mDarkUIModePreference = findPreference(DARK_UI_MODE_PREFERENCE);
|
mDarkUIModePreference = findPreference(DARK_UI_MODE_PREFERENCE);
|
||||||
mDarkUIPreferenceController = new DarkUIPreferenceController(getContext(),
|
mDarkUIPreferenceController = new DarkUIPreferenceController(getContext(),
|
||||||
@@ -618,8 +609,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
|||||||
mSelectLongPressTimeoutPreference.setValue(value);
|
mSelectLongPressTimeoutPreference.setValue(value);
|
||||||
mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValueToTitleMap.get(value));
|
mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValueToTitleMap.get(value));
|
||||||
|
|
||||||
updateVibrationSummary(mVibrationPreferenceScreen);
|
|
||||||
|
|
||||||
mHearingAidPreferenceController.updateState(mHearingAidPreference);
|
mHearingAidPreferenceController.updateState(mHearingAidPreference);
|
||||||
|
|
||||||
mLiveCaptionPreferenceController.updateState(mLiveCaptionPreference);
|
mLiveCaptionPreferenceController.updateState(mLiveCaptionPreference);
|
||||||
@@ -638,78 +627,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
|||||||
: R.string.accessibility_feature_state_off);
|
: R.string.accessibility_feature_state_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
void updateVibrationSummary(Preference pref) {
|
|
||||||
final Context context = getContext();
|
|
||||||
final Vibrator vibrator = context.getSystemService(Vibrator.class);
|
|
||||||
|
|
||||||
int ringIntensity = Settings.System.getInt(context.getContentResolver(),
|
|
||||||
Settings.System.RING_VIBRATION_INTENSITY,
|
|
||||||
vibrator.getDefaultRingVibrationIntensity());
|
|
||||||
if (Settings.System.getInt(context.getContentResolver(),
|
|
||||||
Settings.System.VIBRATE_WHEN_RINGING, 0) == 0 && !isRampingRingerEnabled(context)) {
|
|
||||||
ringIntensity = Vibrator.VIBRATION_INTENSITY_OFF;
|
|
||||||
}
|
|
||||||
CharSequence ringIntensityString =
|
|
||||||
VibrationIntensityPreferenceController.getIntensityString(context, ringIntensity);
|
|
||||||
|
|
||||||
int notificationIntensity = Settings.System.getInt(context.getContentResolver(),
|
|
||||||
Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
|
|
||||||
vibrator.getDefaultNotificationVibrationIntensity());
|
|
||||||
CharSequence notificationIntensityString =
|
|
||||||
VibrationIntensityPreferenceController.getIntensityString(context,
|
|
||||||
notificationIntensity);
|
|
||||||
|
|
||||||
int touchIntensity = Settings.System.getInt(context.getContentResolver(),
|
|
||||||
Settings.System.HAPTIC_FEEDBACK_INTENSITY,
|
|
||||||
vibrator.getDefaultHapticFeedbackIntensity());
|
|
||||||
if (Settings.System.getInt(context.getContentResolver(),
|
|
||||||
Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 0) {
|
|
||||||
touchIntensity = Vibrator.VIBRATION_INTENSITY_OFF;
|
|
||||||
}
|
|
||||||
CharSequence touchIntensityString =
|
|
||||||
VibrationIntensityPreferenceController.getIntensityString(context, touchIntensity);
|
|
||||||
|
|
||||||
if (mVibrationPreferenceScreen == null) {
|
|
||||||
mVibrationPreferenceScreen = findPreference(VIBRATION_PREFERENCE_SCREEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ringIntensity == touchIntensity && ringIntensity == notificationIntensity) {
|
|
||||||
mVibrationPreferenceScreen.setSummary(ringIntensityString);
|
|
||||||
} else {
|
|
||||||
mVibrationPreferenceScreen.setSummary(
|
|
||||||
getString(R.string.accessibility_vibration_summary,
|
|
||||||
ringIntensityString,
|
|
||||||
notificationIntensityString,
|
|
||||||
touchIntensityString));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
case Vibrator.VIBRATION_INTENSITY_LOW:
|
|
||||||
return context.getString(R.string.accessibility_vibration_summary_low);
|
|
||||||
case Vibrator.VIBRATION_INTENSITY_MEDIUM:
|
|
||||||
return context.getString(R.string.accessibility_vibration_summary_medium);
|
|
||||||
case Vibrator.VIBRATION_INTENSITY_HIGH:
|
|
||||||
return context.getString(R.string.accessibility_vibration_summary_high);
|
|
||||||
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 updateAccessibilityShortcut(Preference preference) {
|
private void updateAccessibilityShortcut(Preference preference) {
|
||||||
if (AccessibilityManager.getInstance(getActivity())
|
if (AccessibilityManager.getInstance(getActivity())
|
||||||
.getInstalledAccessibilityServiceList().isEmpty()) {
|
.getInstalledAccessibilityServiceList().isEmpty()) {
|
||||||
|
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Vibrator;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
public class VibrationPreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
|
private final Vibrator mVibrator;
|
||||||
|
|
||||||
|
public VibrationPreferenceController(Context context, String preferenceKey) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
mVibrator = mContext.getSystemService(Vibrator.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getSummary() {
|
||||||
|
int ringIntensity = Settings.System.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.RING_VIBRATION_INTENSITY,
|
||||||
|
mVibrator.getDefaultRingVibrationIntensity());
|
||||||
|
if (Settings.System.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.VIBRATE_WHEN_RINGING, 0) == 0
|
||||||
|
&& !AccessibilitySettings.isRampingRingerEnabled(mContext)) {
|
||||||
|
ringIntensity = Vibrator.VIBRATION_INTENSITY_OFF;
|
||||||
|
}
|
||||||
|
final CharSequence ringIntensityString =
|
||||||
|
VibrationIntensityPreferenceController.getIntensityString(mContext, ringIntensity);
|
||||||
|
|
||||||
|
final int notificationIntensity = Settings.System.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
|
||||||
|
mVibrator.getDefaultNotificationVibrationIntensity());
|
||||||
|
final CharSequence notificationIntensityString =
|
||||||
|
VibrationIntensityPreferenceController.getIntensityString(mContext,
|
||||||
|
notificationIntensity);
|
||||||
|
|
||||||
|
int touchIntensity = Settings.System.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.HAPTIC_FEEDBACK_INTENSITY,
|
||||||
|
mVibrator.getDefaultHapticFeedbackIntensity());
|
||||||
|
if (Settings.System.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 0) {
|
||||||
|
touchIntensity = Vibrator.VIBRATION_INTENSITY_OFF;
|
||||||
|
}
|
||||||
|
final CharSequence touchIntensityString =
|
||||||
|
VibrationIntensityPreferenceController.getIntensityString(mContext, touchIntensity);
|
||||||
|
|
||||||
|
if (ringIntensity == touchIntensity && ringIntensity == notificationIntensity) {
|
||||||
|
return ringIntensityString;
|
||||||
|
} else {
|
||||||
|
return mContext.getString(R.string.accessibility_vibration_summary, ringIntensityString,
|
||||||
|
notificationIntensityString, touchIntensityString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -22,12 +22,9 @@ import static org.mockito.Mockito.doReturn;
|
|||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Vibrator;
|
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.XmlTestUtils;
|
import com.android.settings.testutils.XmlTestUtils;
|
||||||
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
|
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
|
||||||
@@ -44,7 +41,6 @@ import java.util.List;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class AccessibilitySettingsTest {
|
public class AccessibilitySettingsTest {
|
||||||
private static final String VIBRATION_PREFERENCE_SCREEN = "vibration_preference_screen";
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private AccessibilitySettings mSettings;
|
private AccessibilitySettings mSettings;
|
||||||
@@ -67,28 +63,6 @@ public class AccessibilitySettingsTest {
|
|||||||
assertThat(keys).containsAllIn(niks);
|
assertThat(keys).containsAllIn(niks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateVibrationSummary_shouldUpdateSummary() {
|
|
||||||
final Preference vibrationPreferenceScreen = new Preference(mContext);
|
|
||||||
doReturn(vibrationPreferenceScreen).when(mSettings).findPreference(
|
|
||||||
VIBRATION_PREFERENCE_SCREEN);
|
|
||||||
|
|
||||||
vibrationPreferenceScreen.setKey(VIBRATION_PREFERENCE_SCREEN);
|
|
||||||
|
|
||||||
Settings.System.putInt(mContext.getContentResolver(),
|
|
||||||
Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
|
|
||||||
Vibrator.VIBRATION_INTENSITY_OFF);
|
|
||||||
|
|
||||||
Settings.System.putInt(mContext.getContentResolver(),
|
|
||||||
Settings.System.HAPTIC_FEEDBACK_INTENSITY,
|
|
||||||
Vibrator.VIBRATION_INTENSITY_OFF);
|
|
||||||
|
|
||||||
mSettings.updateVibrationSummary(vibrationPreferenceScreen);
|
|
||||||
assertThat(vibrationPreferenceScreen.getSummary()).isEqualTo(
|
|
||||||
VibrationIntensityPreferenceController.getIntensityString(mContext,
|
|
||||||
Vibrator.VIBRATION_INTENSITY_OFF));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {ShadowDeviceConfig.class})
|
@Config(shadows = {ShadowDeviceConfig.class})
|
||||||
public void testIsRampingRingerEnabled_bothFlagsOn_Enabled() {
|
public void testIsRampingRingerEnabled_bothFlagsOn_Enabled() {
|
||||||
|
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Vibrator;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
public class VibrationPreferenceControllerTest {
|
||||||
|
|
||||||
|
private static final String VIBRATION_ON = "On";
|
||||||
|
private static final String VIBRATION_OFF = "Off";
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
private VibrationPreferenceController mController;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
mContext = RuntimeEnvironment.application;
|
||||||
|
mController = new VibrationPreferenceController(mContext, "vibration_pref");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
|
||||||
|
assertThat(mController.getAvailabilityStatus())
|
||||||
|
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSummary_disabledVibration_shouldReturnOffSummary() {
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.HAPTIC_FEEDBACK_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
|
||||||
|
final String expectedResult = mContext.getString(R.string.switch_off_text);
|
||||||
|
|
||||||
|
assertThat(mController.getSummary()).isEqualTo(expectedResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getSummary_enabledSomeVibration_shouldReturnVibrationOnSummary() {
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_MEDIUM);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.VIBRATE_WHEN_RINGING, 1);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.NOTIFICATION_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.HAPTIC_FEEDBACK_INTENSITY, Vibrator.VIBRATION_INTENSITY_MEDIUM);
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
|
||||||
|
final String expectedResult = mContext.getString(R.string.accessibility_vibration_summary,
|
||||||
|
VIBRATION_ON /* ring */,
|
||||||
|
VIBRATION_OFF /* notification */,
|
||||||
|
VIBRATION_ON /* touch */);
|
||||||
|
|
||||||
|
assertThat(mController.getSummary()).isEqualTo(expectedResult);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user