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