From: AL Ho Date: Fri, 11 May 2018 06:58:10 +0000 (+0800) Subject: Update Accessibility vibration settings. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ae2893db10cdd6e021ac44103ecf83d8b1595e06;p=android-x86%2Fpackages-apps-Settings.git Update Accessibility vibration settings. - Get notification vibration and haptic feedback intensity respectively. - Use xliffs to compose these strings. - Use the version that passed in Vibrator.class to get Vibrator instance. - Refactor switch/case part in getSummary() of VibrationIntensityPreferenceController. Let AccessibilitySettings and VibrationIntensityPreferenceController both call it. - Add robolectric test for method: updateVibrationSummary(). - Refine test method, use real preference and test summary value. - Remove redundancy. Bug: 75322064 Test: make ROBOTEST_FILTER=AccessibilitySettingsTest RunSettingsRoboTests Change-Id: Ia3c7447b1ab1e336b36ad439800b673821417e48 Merged-In: Ia3c7447b1ab1e336b36ad439800b673821417e48 --- diff --git a/res/values/strings.xml b/res/values/strings.xml index b10df97654..b7ef7f7708 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4633,6 +4633,9 @@ Very long delay (%1$d ms) + + Ring %1$s, touch %2$s + Ring & notification set to off diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index de1732c960..cd92a9587f 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -33,6 +33,7 @@ import android.os.UserHandle; import android.os.Vibrator; import android.provider.SearchIndexableResource; import android.provider.Settings; +import androidx.annotation.VisibleForTesting; import androidx.preference.SwitchPreference; import androidx.core.content.ContextCompat; import androidx.preference.ListPreference; @@ -749,12 +750,34 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements pref.setSummary(entries[index]); } - private void updateVibrationSummary(Preference pref) { - Vibrator vibrator = getContext().getSystemService(Vibrator.class); - final int intensity = Settings.System.getInt(getContext().getContentResolver(), + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + void updateVibrationSummary(Preference pref) { + final Context context = getContext(); + final Vibrator vibrator = context.getSystemService(Vibrator.class); + + final int ringIntensity = Settings.System.getInt(context.getContentResolver(), Settings.System.NOTIFICATION_VIBRATION_INTENSITY, vibrator.getDefaultNotificationVibrationIntensity()); - mVibrationPreferenceScreen.setSummary(getVibrationSummary(getContext(), intensity)); + CharSequence ringIntensityString = + VibrationIntensityPreferenceController.getIntensityString(context, ringIntensity); + + final int touchIntensity = Settings.System.getInt(context.getContentResolver(), + Settings.System.HAPTIC_FEEDBACK_INTENSITY, + vibrator.getDefaultHapticFeedbackIntensity()); + CharSequence touchIntensityString = + VibrationIntensityPreferenceController.getIntensityString(context, touchIntensity); + + if (mVibrationPreferenceScreen == null) { + mVibrationPreferenceScreen = findPreference(VIBRATION_PREFERENCE_SCREEN); + } + + if (ringIntensity == touchIntensity) { + mVibrationPreferenceScreen.setSummary(ringIntensityString); + } else { + mVibrationPreferenceScreen.setSummary( + getString(R.string.accessibility_vibration_summary, + ringIntensityString, touchIntensityString)); + } } private String getVibrationSummary(Context context, @VibrationIntensity int intensity) { diff --git a/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java b/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java index 34516b412c..e99e32fe65 100644 --- a/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java +++ b/src/com/android/settings/accessibility/VibrationIntensityPreferenceController.java @@ -77,16 +77,19 @@ public abstract class VibrationIntensityPreferenceController extends BasePrefere public CharSequence getSummary() { final int intensity = Settings.System.getInt(mContext.getContentResolver(), mSettingKey, getDefaultIntensity()); + return getIntensityString(mContext, intensity); + } + public static CharSequence getIntensityString(Context context, int intensity) { switch (intensity) { case Vibrator.VIBRATION_INTENSITY_OFF: - return mContext.getText(R.string.accessibility_vibration_intensity_off); + return context.getText(R.string.accessibility_vibration_intensity_off); case Vibrator.VIBRATION_INTENSITY_LOW: - return mContext.getText(R.string.accessibility_vibration_intensity_low); + return context.getText(R.string.accessibility_vibration_intensity_low); case Vibrator.VIBRATION_INTENSITY_MEDIUM: - return mContext.getText(R.string.accessibility_vibration_intensity_medium); + return context.getText(R.string.accessibility_vibration_intensity_medium); case Vibrator.VIBRATION_INTENSITY_HIGH: - return mContext.getText(R.string.accessibility_vibration_intensity_high); + return context.getText(R.string.accessibility_vibration_intensity_high); default: return ""; } diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java index f257f54943..a4907dadac 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java @@ -18,7 +18,15 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import android.content.Context; +import android.os.Vibrator; +import android.provider.Settings; +import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -26,6 +34,8 @@ import com.android.settings.testutils.XmlTestUtils; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; @@ -45,4 +55,31 @@ public class AccessibilitySettingsTest { assertThat(keys).containsAllIn(niks); } -} \ No newline at end of file + + @Test + public void testUpdateVibrationSummary_shouldUpdateSummary() { + MockitoAnnotations.initMocks(this); + final Context mContext = RuntimeEnvironment.application; + final AccessibilitySettings mSettings = spy(new AccessibilitySettings()); + + final Preference mVibrationPreferenceScreen = new Preference(mContext); + doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference(anyString()); + + doReturn(mContext).when(mSettings).getContext(); + + mVibrationPreferenceScreen.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(mVibrationPreferenceScreen); + assertThat(mVibrationPreferenceScreen.getSummary()).isEqualTo( + VibrationIntensityPreferenceController.getIntensityString(mContext, + Vibrator.VIBRATION_INTENSITY_OFF)); + } +}