diff options
5 files changed, 88 insertions, 14 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index aea2408b75..51af9d4bf9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3972,6 +3972,8 @@ <string name="talkback_title">Talkback</string> <!-- Summary for the Talkback Accessibility Service. Lets the user know that Talkback is a screenreader and that it is usually most helpful to blind and low vision users and whether the service is on. [CHAR_LIMIT=none] --> <string name="talkback_summary">Screen reader primarily for people with blindness and low vision</string> + <!-- Summary for the Select to Speak Accessibility Service. [CHAR_LIMIT=none] --> + <string name="select_to_speak_summary">Tap items on your screen to hear them read aloud</string> <!-- Title for the accessibility preference category of system related preferences. [CHAR LIMIT=25] --> <string name="accessibility_system_title">System</string> <!-- Title for the accessibility preference category of display related preferences. [CHAR LIMIT=25] --> diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml index c938f240cd..42b137bf09 100644 --- a/res/xml/accessibility_settings_for_setup_wizard.xml +++ b/res/xml/accessibility_settings_for_setup_wizard.xml @@ -46,6 +46,13 @@ <Preference android:fragment= + "com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard" + android:key="select_to_speak_preference" + android:summary="@string/select_to_speak_summary" + android:persistent="true" /> + + <Preference + android:fragment= "com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard" android:key="screen_reader_preference" android:summary="@string/talkback_summary" diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java index 009fa5d353..b8f3af5871 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java @@ -41,11 +41,21 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm private static final String DISPLAY_MAGNIFICATION_PREFERENCE = "screen_magnification_preference"; private static final String SCREEN_READER_PREFERENCE = "screen_reader_preference"; + private static final String SELECT_TO_SPEAK_PREFERENCE = "select_to_speak_preference"; private static final String FONT_SIZE_PREFERENCE = "font_size_preference"; + // Package names and service names used to identify screen reader and SelectToSpeak services. + private static final String SCREEN_READER_PACKAGE_NAME = "com.google.android.marvin.talkback"; + private static final String SCREEN_READER_SERVICE_NAME = + "com.google.android.marvin.talkback.TalkBackService"; + private static final String SELECT_TO_SPEAK_PACKAGE_NAME = "com.google.android.marvin.talkback"; + private static final String SELECT_TO_SPEAK_SERVICE_NAME = + "com.google.android.accessibility.selecttospeak.SelectToSpeakService"; + // Preference controls. private Preference mDisplayMagnificationPreference; private Preference mScreenReaderPreference; + private Preference mSelectToSpeakPreference; @Override public int getMetricsCategory() { @@ -59,12 +69,16 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE); mScreenReaderPreference = findPreference(SCREEN_READER_PREFERENCE); + mSelectToSpeakPreference = findPreference(SELECT_TO_SPEAK_PREFERENCE); } @Override public void onResume() { super.onResume(); - updateScreenReaderPreference(); + updateAccessibilityServicePreference(mScreenReaderPreference, + findService(SCREEN_READER_PACKAGE_NAME, SCREEN_READER_SERVICE_NAME)); + updateAccessibilityServicePreference(mSelectToSpeakPreference, + findService(SELECT_TO_SPEAK_PACKAGE_NAME, SELECT_TO_SPEAK_SERVICE_NAME)); } @Override @@ -94,13 +108,15 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm return super.onPreferenceTreeClick(preference); } - private AccessibilityServiceInfo findFirstServiceWithSpokenFeedback() { + private AccessibilityServiceInfo findService(String packageName, String serviceName) { final AccessibilityManager manager = getActivity().getSystemService(AccessibilityManager.class); final List<AccessibilityServiceInfo> accessibilityServices = manager.getInstalledAccessibilityServiceList(); for (AccessibilityServiceInfo info : accessibilityServices) { - if ((info.feedbackType & AccessibilityServiceInfo.FEEDBACK_SPOKEN) != 0) { + ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; + if (packageName.equals(serviceInfo.packageName) + && serviceName.equals(serviceInfo.name)) { return info; } } @@ -108,28 +124,25 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm return null; } - private void updateScreenReaderPreference() { - // Find a screen reader. - AccessibilityServiceInfo info = findFirstServiceWithSpokenFeedback(); + private void updateAccessibilityServicePreference(Preference preference, + AccessibilityServiceInfo info) { if (info == null) { - mScreenReaderPreference.setEnabled(false); - } else { - mScreenReaderPreference.setEnabled(true); + getPreferenceScreen().removePreference(preference); + return; } ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; String title = info.getResolveInfo().loadLabel(getPackageManager()).toString(); - mScreenReaderPreference.setTitle(title); - + preference.setTitle(title); ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name); - mScreenReaderPreference.setKey(componentName.flattenToString()); + preference.setKey(componentName.flattenToString()); // Update the extras. - Bundle extras = mScreenReaderPreference.getExtras(); + Bundle extras = preference.getExtras(); extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName); extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, - mScreenReaderPreference.getKey()); + preference.getKey()); extras.putString(AccessibilitySettings.EXTRA_TITLE, title); String description = info.loadDescription(getPackageManager()); diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java new file mode 100644 index 0000000000..2c9b58c662 --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 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.os.Bundle; + +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; + +public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard + extends ToggleAccessibilityServicePreferenceFragment { + + private boolean mToggleSwitchWasInitiallyChecked; + + @Override + protected void onProcessArguments(Bundle arguments) { + super.onProcessArguments(arguments); + mToggleSwitchWasInitiallyChecked = mToggleSwitch.isChecked(); + } + + @Override + public int getMetricsCategory() { + return MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER; + } + + @Override + public void onStop() { + // Log the final choice in value if it's different from the previous value. + if (mToggleSwitch.isChecked() != mToggleSwitchWasInitiallyChecked) { + mMetricsFeatureProvider.action(getContext(), + MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK, + mToggleSwitch.isChecked()); + } + + super.onStop(); + } +} + diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable index a17859655b..30a2da17a8 100644 --- a/tests/robotests/assets/grandfather_not_implementing_indexable +++ b/tests/robotests/assets/grandfather_not_implementing_indexable @@ -50,6 +50,7 @@ com.android.settings.notification.NotificationStation com.android.settings.print.PrintJobSettingsFragment com.android.settings.applications.SpecialAccessSettings com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard +com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard com.android.settings.accounts.AccountSyncSettings com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment com.android.settings.inputmethod.InputMethodAndSubtypeEnabler |