• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.accessibility;
18 
19 import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME;
20 import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_TILE_COMPONENT_NAME;
21 import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled;
22 import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
23 import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
24 
25 import android.app.settings.SettingsEnums;
26 import android.content.ComponentName;
27 import android.content.ContentResolver;
28 import android.net.Uri;
29 import android.os.Bundle;
30 import android.provider.Settings;
31 import android.view.LayoutInflater;
32 import android.view.View;
33 import android.view.ViewGroup;
34 
35 import com.android.settings.R;
36 import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
37 import com.android.settings.search.BaseSearchIndexProvider;
38 import com.android.settings.widget.SettingsMainSwitchPreference;
39 import com.android.settingslib.search.SearchIndexable;
40 
41 import java.util.ArrayList;
42 import java.util.List;
43 
44 /** Settings page for color inversion. */
45 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
46 public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment {
47 
48     private static final String TAG = "ToggleColorInversionPreferenceFragment";
49     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED;
50 
51     @Override
registerKeysToObserverCallback( AccessibilitySettingsContentObserver contentObserver)52     protected void registerKeysToObserverCallback(
53             AccessibilitySettingsContentObserver contentObserver) {
54         super.registerKeysToObserverCallback(contentObserver);
55 
56         final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
57         enableServiceFeatureKeys.add(ENABLED);
58         contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
59                 key -> updateSwitchBarToggleSwitch());
60     }
61 
62     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)63     public View onCreateView(LayoutInflater inflater, ViewGroup container,
64             Bundle savedInstanceState) {
65         mComponentName = COLOR_INVERSION_COMPONENT_NAME;
66         mPackageName = getText(R.string.accessibility_display_inversion_preference_title);
67         mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle);
68         mTopIntroTitle = getText(R.string.accessibility_display_inversion_preference_intro_text);
69         mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
70                 .authority(getPrefContext().getPackageName())
71                 .appendPath(String.valueOf(R.raw.a11y_color_inversion_banner))
72                 .build();
73         final View view = super.onCreateView(inflater, container, savedInstanceState);
74         updateFooterPreference();
75         return view;
76     }
77 
78     @Override
onViewCreated(View view, Bundle savedInstanceState)79     public void onViewCreated(View view, Bundle savedInstanceState) {
80         super.onViewCreated(view, savedInstanceState);
81         final View rootView = getActivity().getWindow().peekDecorView();
82         if (rootView != null) {
83             rootView.setAccessibilityPaneTitle(getString(
84                     R.string.accessibility_display_inversion_preference_title));
85         }
86     }
87 
88     @Override
getMetricsCategory()89     public int getMetricsCategory() {
90         return SettingsEnums.ACCESSIBILITY_COLOR_INVERSION_SETTINGS;
91     }
92 
93     @Override
onPreferenceToggled(String preferenceKey, boolean enabled)94     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
95         final boolean isEnabled = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
96         if (enabled == isEnabled) {
97             return;
98         }
99 
100         if (enabled) {
101             showQuickSettingsTooltipIfNeeded(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
102         }
103         logAccessibilityServiceEnabled(mComponentName, enabled);
104         Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? ON : OFF);
105     }
106 
107     @Override
getPreferenceScreenResId()108     protected int getPreferenceScreenResId() {
109         return R.xml.accessibility_color_inversion_settings;
110     }
111 
112     @Override
getLogTag()113     protected String getLogTag() {
114         return TAG;
115     }
116 
117     @Override
onRemoveSwitchPreferenceToggleSwitch()118     protected void onRemoveSwitchPreferenceToggleSwitch() {
119         super.onRemoveSwitchPreferenceToggleSwitch();
120         mToggleServiceSwitchPreference.setOnPreferenceClickListener(null);
121     }
122 
123     @Override
updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference)124     protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) {
125         switchPreference.setTitle(R.string.accessibility_display_inversion_switch_title);
126     }
127 
128     @Override
getShortcutTitle()129     protected CharSequence getShortcutTitle() {
130         return getText(R.string.accessibility_display_inversion_shortcut_title);
131     }
132 
updateFooterPreference()133     private void updateFooterPreference() {
134         final String title = getPrefContext().getString(
135                 R.string.accessibility_color_inversion_about_title);
136         final String learnMoreText = getPrefContext().getString(
137                 R.string.accessibility_color_inversion_footer_learn_more_content_description);
138         mFooterPreferenceController.setIntroductionTitle(title);
139         mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreText);
140         mFooterPreferenceController.displayPreference(getPreferenceScreen());
141     }
142 
143     @Override
onResume()144     public void onResume() {
145         super.onResume();
146         updateSwitchBarToggleSwitch();
147     }
148 
149     @Override
onPause()150     public void onPause() {
151         super.onPause();
152     }
153 
154     @Override
getHelpResource()155     public int getHelpResource() {
156         return R.string.help_url_color_inversion;
157     }
158 
159     @Override
getUserShortcutTypes()160     int getUserShortcutTypes() {
161         return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(),
162                 mComponentName);
163     }
164 
165     @Override
getTileComponentName()166     ComponentName getTileComponentName() {
167         return COLOR_INVERSION_TILE_COMPONENT_NAME;
168     }
169 
170     @Override
getTileTooltipContent(@uickSettingsTooltipType int type)171     CharSequence getTileTooltipContent(@QuickSettingsTooltipType int type) {
172         return getText(type == QuickSettingsTooltipType.GUIDE_TO_EDIT
173                 ? R.string.accessibility_color_inversion_qs_tooltip_content
174                 : R.string.accessibility_color_inversion_auto_added_qs_tooltip_content);
175     }
176 
177     @Override
updateSwitchBarToggleSwitch()178     protected void updateSwitchBarToggleSwitch() {
179         final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
180         if (mToggleServiceSwitchPreference.isChecked() == checked) {
181             return;
182         }
183         mToggleServiceSwitchPreference.setChecked(checked);
184     }
185 
186     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
187             new BaseSearchIndexProvider(R.xml.accessibility_color_inversion_settings);
188 }
189