/* * Copyright (C) 2015 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.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.pm.ServiceInfo; import android.os.Bundle; import android.provider.Settings; import android.support.v7.preference.Preference; import android.text.TextUtils; import android.view.accessibility.AccessibilityManager; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.DialogCreatable; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import java.util.List; /** * Activity with the accessibility settings specific to Setup Wizard. */ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragment implements DialogCreatable, Preference.OnPreferenceChangeListener { private static final String TAG = AccessibilitySettingsForSetupWizard.class.getSimpleName(); // Preferences. private static final String DISPLAY_MAGNIFICATION_PREFERENCE = "screen_magnification_preference"; private static final String SCREEN_READER_PREFERENCE = "screen_reader_preference"; private static final String FONT_SIZE_PREFERENCE = "font_size_preference"; // Preference controls. private Preference mDisplayMagnificationPreference; private Preference mScreenReaderPreference; @Override protected int getMetricsCategory() { return MetricsEvent.SUW_ACCESSIBILITY; } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard); mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE); mScreenReaderPreference = findPreference(SCREEN_READER_PREFERENCE); } @Override public void onResume() { super.onResume(); updateScreenReaderPreference(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(false); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { return false; } @Override public boolean onPreferenceTreeClick(Preference preference) { if (mDisplayMagnificationPreference == preference) { Bundle extras = mDisplayMagnificationPreference.getExtras(); extras.putString(AccessibilitySettings.EXTRA_TITLE, getString(R.string.accessibility_screen_magnification_title)); extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, getText(R.string.accessibility_screen_magnification_summary)); extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, Settings.Secure.getInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1); } return super.onPreferenceTreeClick(preference); } private AccessibilityServiceInfo findFirstServiceWithSpokenFeedback() { final AccessibilityManager manager = getActivity().getSystemService(AccessibilityManager.class); final List<AccessibilityServiceInfo> accessibilityServices = manager.getInstalledAccessibilityServiceList(); for (AccessibilityServiceInfo info : accessibilityServices) { if ((info.feedbackType & AccessibilityServiceInfo.FEEDBACK_SPOKEN) != 0) { return info; } } return null; } private void updateScreenReaderPreference() { // Find a screen reader. AccessibilityServiceInfo info = findFirstServiceWithSpokenFeedback(); if (info == null) { mScreenReaderPreference.setEnabled(false); } else { mScreenReaderPreference.setEnabled(true); } ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; String title = info.getResolveInfo().loadLabel(getPackageManager()).toString(); mScreenReaderPreference.setTitle(title); ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name); mScreenReaderPreference.setKey(componentName.flattenToString()); // Update the extras. Bundle extras = mScreenReaderPreference.getExtras(); extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName); extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, mScreenReaderPreference.getKey()); extras.putString(AccessibilitySettings.EXTRA_TITLE, title); String description = info.loadDescription(getPackageManager()); if (TextUtils.isEmpty(description)) { description = getString(R.string.accessibility_service_default_description); } extras.putString(AccessibilitySettings.EXTRA_SUMMARY, description); } }