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"/>
|
||||
|
||||
<Preference
|
||||
android:fragment="com.android.settings.accessibility.VibrationSettings"
|
||||
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>
|
||||
|
||||
|
@@ -16,8 +16,6 @@
|
||||
|
||||
package com.android.settings.accessibility;
|
||||
|
||||
import static android.os.Vibrator.VibrationIntensity;
|
||||
|
||||
import static com.android.settingslib.TwoTargetPreference.ICON_SIZE_MEDIUM;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
@@ -33,7 +31,6 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.UserHandle;
|
||||
import android.os.Vibrator;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.provider.SearchIndexableResource;
|
||||
import android.provider.Settings;
|
||||
@@ -110,8 +107,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
||||
"captioning_preference_screen";
|
||||
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
|
||||
"magnification_preference_screen";
|
||||
private static final String VIBRATION_PREFERENCE_SCREEN =
|
||||
"vibration_preference_screen";
|
||||
private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN =
|
||||
"daltonizer_preference";
|
||||
private static final String DARK_UI_MODE_PREFERENCE =
|
||||
@@ -198,7 +193,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
||||
private Preference mAccessibilityShortcutPreferenceScreen;
|
||||
private Preference mDisplayDaltonizerPreferenceScreen;
|
||||
private Preference mHearingAidPreference;
|
||||
private Preference mVibrationPreferenceScreen;
|
||||
private Preference mLiveCaptionPreference;
|
||||
private SwitchPreference mToggleInversionPreference;
|
||||
private AccessibilityHearingAidPreferenceController mHearingAidPreferenceController;
|
||||
@@ -393,9 +387,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
||||
// Accessibility shortcut.
|
||||
mAccessibilityShortcutPreferenceScreen = findPreference(ACCESSIBILITY_SHORTCUT_PREFERENCE);
|
||||
|
||||
// Vibrations.
|
||||
mVibrationPreferenceScreen = findPreference(VIBRATION_PREFERENCE_SCREEN);
|
||||
|
||||
// Dark Mode.
|
||||
mDarkUIModePreference = findPreference(DARK_UI_MODE_PREFERENCE);
|
||||
mDarkUIPreferenceController = new DarkUIPreferenceController(getContext(),
|
||||
@@ -618,8 +609,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
||||
mSelectLongPressTimeoutPreference.setValue(value);
|
||||
mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValueToTitleMap.get(value));
|
||||
|
||||
updateVibrationSummary(mVibrationPreferenceScreen);
|
||||
|
||||
mHearingAidPreferenceController.updateState(mHearingAidPreference);
|
||||
|
||||
mLiveCaptionPreferenceController.updateState(mLiveCaptionPreference);
|
||||
@@ -638,78 +627,6 @@ public class AccessibilitySettings extends DashboardFragment implements
|
||||
: 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) {
|
||||
if (AccessibilityManager.getInstance(getActivity())
|
||||
.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 android.content.Context;
|
||||
import android.os.Vibrator;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.testutils.XmlTestUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
|
||||
@@ -44,7 +41,6 @@ import java.util.List;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class AccessibilitySettingsTest {
|
||||
private static final String VIBRATION_PREFERENCE_SCREEN = "vibration_preference_screen";
|
||||
|
||||
private Context mContext;
|
||||
private AccessibilitySettings mSettings;
|
||||
@@ -67,28 +63,6 @@ public class AccessibilitySettingsTest {
|
||||
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
|
||||
@Config(shadows = {ShadowDeviceConfig.class})
|
||||
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