diff options
author | chchao <chchao@google.com> | 2017-01-20 14:45:32 -0800 |
---|---|---|
committer | chchao <chchao@google.com> | 2017-01-25 13:11:26 -0800 |
commit | 5ebb9bb502c5d6ca862a6f34143c5849f087193b (patch) | |
tree | f439aa582e0abcb5d4fcaf3a6663a49ffc915f74 /src | |
parent | d9d463be8ba2bb07d88f609a71336da5f27e7e37 (diff) | |
download | packages_apps_Settings-5ebb9bb502c5d6ca862a6f34143c5849f087193b.tar.gz packages_apps_Settings-5ebb9bb502c5d6ca862a6f34143c5849f087193b.tar.bz2 packages_apps_Settings-5ebb9bb502c5d6ca862a6f34143c5849f087193b.zip |
Integrate Select-To-Speak in Vision Settings.
This allows users to launch Select to Speak service in SetupWizard when
setting up their devices.
Bug: 29517229
Test: manual
Change-Id: I3844e2692e1fc9eb3d0736feb4ca4f74d474130b
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java | 41 | ||||
-rw-r--r-- | src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java | 51 |
2 files changed, 78 insertions, 14 deletions
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(); + } +} + |