182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler/* 282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * Copyright (C) 2015 The Android Open Source Project 382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * 482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * you may not use this file except in compliance with the License. 682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * You may obtain a copy of the License at 782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * 882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * 1082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * Unless required by applicable law or agreed to in writing, software 1182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 1282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * See the License for the specific language governing permissions and 1482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler * limitations under the License 1582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler */ 1682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 1782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerpackage com.android.tv.settings.system; 1882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 1982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.accessibilityservice.AccessibilityServiceInfo; 2082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.content.ComponentName; 2182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.content.Context; 2282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.content.Intent; 2382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.content.pm.ServiceInfo; 2482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.os.Bundle; 2582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.provider.Settings; 2682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.annotation.NonNull; 2740d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantlerimport android.support.v14.preference.SwitchPreference; 2882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v17.leanback.app.GuidedStepFragment; 2982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v17.leanback.widget.GuidanceStylist; 3082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v17.leanback.widget.GuidedAction; 3182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v17.preference.LeanbackPreferenceFragment; 3282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v7.preference.CheckBoxPreference; 3382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v7.preference.Preference; 3482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v7.preference.PreferenceCategory; 3582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v7.preference.PreferenceGroup; 3682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.support.v7.preference.PreferenceScreen; 3782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.text.TextUtils; 3882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport android.view.accessibility.AccessibilityManager; 3982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 4082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport com.android.settingslib.accessibility.AccessibilityUtils; 4182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport com.android.tv.settings.R; 4282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 4382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport java.util.List; 4482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerimport java.util.Set; 4582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 4682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantlerpublic class AccessibilityFragment extends LeanbackPreferenceFragment { 4740d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler private static final String TOGGLE_HIGH_TEXT_CONTRAST_PREFERENCE = 4840d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler "toggle_high_text_contrast_preference"; 4940d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler 5082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private PreferenceGroup mServicesPref; 5182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 5282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public static AccessibilityFragment newInstance() { 5382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler return new AccessibilityFragment(); 5482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 5582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 5682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 5782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onResume() { 5882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler super.onResume(); 5982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler if (mServicesPref != null) { 6082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler refreshServices(mServicesPref); 6182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 6282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 6382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 6482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 6582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 6682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Context themedContext = getPreferenceManager().getContext(); 6782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final PreferenceScreen screen = 6882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getPreferenceManager().createPreferenceScreen(themedContext); 6982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.setTitle(R.string.system_accessibility); 7082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 7182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Preference captionsPreference = new Preference(themedContext); 7282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler captionsPreference.setTitle(R.string.accessibility_captions); 7382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler captionsPreference.setIntent(new Intent(Intent.ACTION_MAIN).setComponent( 7482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler new ComponentName(getActivity(), CaptionSetupActivity.class))); 7582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.addPreference(captionsPreference); 7682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 7740d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler final SwitchPreference highContrastPreference = new SwitchPreference(themedContext); 7840d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler highContrastPreference.setKey(TOGGLE_HIGH_TEXT_CONTRAST_PREFERENCE); 7940d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler highContrastPreference.setPersistent(false); 8040d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler highContrastPreference.setTitle( 8140d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler R.string.accessibility_toggle_high_text_contrast_preference_title); 8240d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler highContrastPreference.setSummary(R.string.experimental_preference); 8340d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler highContrastPreference.setChecked(Settings.Secure.getInt(getContext().getContentResolver(), 8440d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 0) == 1); 8540d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler screen.addPreference(highContrastPreference); 8640d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler 8782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mServicesPref = new PreferenceCategory(themedContext); 8882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mServicesPref.setTitle(R.string.system_services); 8982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.addPreference(mServicesPref); 9082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler refreshServices(mServicesPref); 9182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 9282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Preference ttsPref = new Preference(themedContext); 9382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler ttsPref.setTitle(R.string.system_accessibility_tts_output); 9482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler ttsPref.setFragment(TextToSpeechFragment.class.getName()); 9582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.addPreference(ttsPref); 9682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 9782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler setPreferenceScreen(screen); 9882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 9982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 10040d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler @Override 10140d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler public boolean onPreferenceTreeClick(Preference preference) { 10240d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler if (TextUtils.equals(preference.getKey(), TOGGLE_HIGH_TEXT_CONTRAST_PREFERENCE)) { 10340d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler Settings.Secure.putInt(getActivity().getContentResolver(), 10440d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 10540d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler (((SwitchPreference) preference).isChecked() ? 1 : 0)); 10640d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler return true; 10740d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler } else { 10840d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler return super.onPreferenceTreeClick(preference); 10940d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler } 11040d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler } 11140d004bd36714e56696f2e683ab2a4f54e575b4fTony Mantler 11282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private void refreshServices(PreferenceGroup group) { 11382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final List<AccessibilityServiceInfo> installedServiceInfos = AccessibilityManager 11482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler .getInstance(getActivity()).getInstalledAccessibilityServiceList(); 11582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Set<ComponentName> enabledServices = 11682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler AccessibilityUtils.getEnabledServicesFromSettings(getActivity()); 11782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final boolean accessibilityEnabled = Settings.Secure.getInt( 11882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getActivity().getContentResolver(), 11982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1; 12082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 12182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler for (final AccessibilityServiceInfo accInfo : installedServiceInfos) { 12282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final ServiceInfo serviceInfo = accInfo.getResolveInfo().serviceInfo; 12382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final ComponentName componentName = new ComponentName(serviceInfo.packageName, 12482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler serviceInfo.name); 12582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 12682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final boolean serviceEnabled = accessibilityEnabled 12782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler && enabledServices.contains(componentName); 12882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 12982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String title = accInfo.getResolveInfo() 13082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler .loadLabel(getActivity().getPackageManager()).toString(); 13182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 132c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler final String key = "ServicePref:" + componentName.flattenToString(); 133c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler Preference servicePref = findPreference(key); 134c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler if (servicePref == null) { 135c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler servicePref = new Preference(group.getContext()); 136c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler servicePref.setKey(key); 137c7b53d78f6f5ac1304b6e57c7cf21fc079aea17aTony Mantler } 13882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler servicePref.setTitle(title); 13982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler servicePref.setSummary(serviceEnabled ? R.string.settings_on : R.string.settings_off); 14082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler servicePref.setFragment(AccessibilityServiceFragment.class.getName()); 14182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler AccessibilityServiceFragment.prepareArgs(servicePref.getExtras(), 14282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler serviceInfo.packageName, 14382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler serviceInfo.name, 14482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler accInfo.getSettingsActivityName(), 14582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler title); 14682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler group.addPreference(servicePref); 14782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 14882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 14982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 15082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public static class AccessibilityServiceFragment extends LeanbackPreferenceFragment { 15182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_PACKAGE_NAME = "packageName"; 15282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_SERVICE_NAME = "serviceName"; 15382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_SETTINGS_ACTIVITY_NAME = "settingsActivityName"; 15482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_LABEL = "label"; 15582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 15682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private CheckBoxPreference mEnablePref; 15782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 15882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public static void prepareArgs(@NonNull Bundle args, String packageName, String serviceName, 15982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler String activityName, String label) { 16082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putString(ARG_PACKAGE_NAME, packageName); 16182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putString(ARG_SERVICE_NAME, serviceName); 16282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putString(ARG_SETTINGS_ACTIVITY_NAME, activityName); 16382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putString(ARG_LABEL, label); 16482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 16582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 16682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 16782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 16882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Context themedContext = getPreferenceManager().getContext(); 16982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final PreferenceScreen screen = 17082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getPreferenceManager().createPreferenceScreen(themedContext); 17182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.setTitle(getArguments().getString(ARG_LABEL)); 17282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 17382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mEnablePref = new CheckBoxPreference(themedContext); 17482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mEnablePref.setTitle(R.string.system_accessibility_status); 17582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mEnablePref.setFragment(EnableDisableConfirmationFragment.class.getName()); 17682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.addPreference(mEnablePref); 17782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 17882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Preference settingsPref = new Preference(themedContext); 17982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler settingsPref.setTitle(R.string.system_accessibility_config); 18082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String activityName = getArguments().getString(ARG_SETTINGS_ACTIVITY_NAME); 18182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler if (!TextUtils.isEmpty(activityName)) { 18282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String packageName = getArguments().getString(ARG_PACKAGE_NAME); 18382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler settingsPref.setIntent(new Intent(Intent.ACTION_MAIN) 18482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler .setComponent(new ComponentName(packageName, activityName))); 18582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } else { 18682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler settingsPref.setEnabled(false); 18782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 18882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler screen.addPreference(settingsPref); 18982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 19082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler setPreferenceScreen(screen); 19182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 19282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 19382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 19482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onResume() { 19582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler super.onResume(); 19682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 19782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String packageName = getArguments().getString(ARG_PACKAGE_NAME); 19882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String serviceName = getArguments().getString(ARG_SERVICE_NAME); 19982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 20082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final ComponentName serviceComponent = new ComponentName(packageName, serviceName); 20182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Set<ComponentName> enabledServices = 20282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler AccessibilityUtils.getEnabledServicesFromSettings(getActivity()); 20382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final boolean enabled = enabledServices.contains(serviceComponent); 20482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 20582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler mEnablePref.setChecked(enabled); 20682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler EnableDisableConfirmationFragment.prepareArgs(mEnablePref.getExtras(), 20782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler new ComponentName(packageName, serviceName), 20882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getArguments().getString(ARG_LABEL), !enabled); 20982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 21082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 21182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public static class EnableDisableConfirmationFragment extends GuidedStepFragment { 21282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_LABEL = "label"; 21382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_COMPONENT = "component"; 21482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler private static final String ARG_ENABLING = "enabling"; 21582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 21682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public static void prepareArgs(@NonNull Bundle args, ComponentName cn, String label, 21782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler boolean enabling) { 21882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putParcelable(ARG_COMPONENT, cn); 21982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putString(ARG_LABEL, label); 22082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler args.putBoolean(ARG_ENABLING, enabling); 22182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 22282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 22382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @NonNull 22482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 22582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) { 22682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final String label = getArguments().getString(ARG_LABEL); 22782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler if (getArguments().getBoolean(ARG_ENABLING)) { 22882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler return new GuidanceStylist.Guidance( 22982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getString(R.string.system_accessibility_service_on_confirm_title, 23082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler label), 23182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getString(R.string.system_accessibility_service_on_confirm_desc, 23282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler label), 23382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler null, 2348f472252a02517b065b5de166135a50e93d4b425Tony Mantler getActivity().getDrawable(R.drawable.ic_accessibility_new_132dp) 23582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler ); 23682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } else { 23782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler return new GuidanceStylist.Guidance( 23882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getString(R.string.system_accessibility_service_off_confirm_title, 23982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler label), 24082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getString(R.string.system_accessibility_service_off_confirm_desc, 24182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler label), 24282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler null, 2438f472252a02517b065b5de166135a50e93d4b425Tony Mantler getActivity().getDrawable(R.drawable.ic_accessibility_new_132dp) 24482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler ); 24582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 24682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 24782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 24882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 24982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onCreateActions(@NonNull List<GuidedAction> actions, 25082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler Bundle savedInstanceState) { 25182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final Context context = getActivity(); 252846b83807749cd73aa1b75749e8d072e8f58860dDake Gu actions.add(new GuidedAction.Builder(context) 253846b83807749cd73aa1b75749e8d072e8f58860dDake Gu .clickAction(GuidedAction.ACTION_ID_OK).build()); 254846b83807749cd73aa1b75749e8d072e8f58860dDake Gu actions.add(new GuidedAction.Builder(context) 255846b83807749cd73aa1b75749e8d072e8f58860dDake Gu .clickAction(GuidedAction.ACTION_ID_CANCEL).build()); 25682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 25782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler 25882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler @Override 25982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler public void onGuidedActionClicked(GuidedAction action) { 26082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler if (action.getId() == GuidedAction.ACTION_ID_OK) { 26182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler final ComponentName component = getArguments().getParcelable(ARG_COMPONENT); 26282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler AccessibilityUtils.setAccessibilityServiceState(getActivity(), 26382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler component, getArguments().getBoolean(ARG_ENABLING)); 26482a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getFragmentManager().popBackStack(); 26582a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } else if (action.getId() == GuidedAction.ACTION_ID_CANCEL) { 26682a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler getFragmentManager().popBackStack(); 26782a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } else { 26882a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler super.onGuidedActionClicked(action); 26982a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 27082a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 27182a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 27282a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler } 27382a7d036da6c8372a42c1d6bde48ea174d0d3e49Tony Mantler} 274