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.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled; 21 import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; 22 import static com.android.settings.accessibility.AccessibilityUtil.State.ON; 23 24 import android.app.settings.SettingsEnums; 25 import android.content.ContentResolver; 26 import android.net.Uri; 27 import android.os.Bundle; 28 import android.os.Handler; 29 import android.provider.Settings; 30 import android.view.LayoutInflater; 31 import android.view.View; 32 import android.view.ViewGroup; 33 34 import com.android.settings.R; 35 import com.android.settings.widget.SettingsMainSwitchPreference; 36 37 import java.util.ArrayList; 38 import java.util.List; 39 40 /** Settings page for color inversion. */ 41 public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment { 42 43 private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED; 44 private final Handler mHandler = new Handler(); 45 private SettingsContentObserver mSettingsContentObserver; 46 47 @Override getMetricsCategory()48 public int getMetricsCategory() { 49 return SettingsEnums.ACCESSIBILITY_COLOR_INVERSION_SETTINGS; 50 } 51 52 @Override onPreferenceToggled(String preferenceKey, boolean enabled)53 protected void onPreferenceToggled(String preferenceKey, boolean enabled) { 54 logAccessibilityServiceEnabled(mComponentName, enabled); 55 Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? ON : OFF); 56 } 57 58 @Override getPreferenceScreenResId()59 protected int getPreferenceScreenResId() { 60 return R.xml.accessibility_color_inversion_settings; 61 } 62 63 @Override onRemoveSwitchPreferenceToggleSwitch()64 protected void onRemoveSwitchPreferenceToggleSwitch() { 65 super.onRemoveSwitchPreferenceToggleSwitch(); 66 mToggleServiceSwitchPreference.setOnPreferenceClickListener(null); 67 } 68 69 @Override updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference)70 protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) { 71 switchPreference.setTitle(R.string.accessibility_display_inversion_switch_title); 72 } 73 74 @Override updateShortcutTitle(ShortcutPreference shortcutPreference)75 protected void updateShortcutTitle(ShortcutPreference shortcutPreference) { 76 shortcutPreference.setTitle(R.string.accessibility_display_inversion_shortcut_title); 77 } 78 79 @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)80 public View onCreateView(LayoutInflater inflater, ViewGroup container, 81 Bundle savedInstanceState) { 82 mComponentName = COLOR_INVERSION_COMPONENT_NAME; 83 mPackageName = getText(R.string.accessibility_display_inversion_preference_title); 84 mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle); 85 mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) 86 .authority(getPrefContext().getPackageName()) 87 .appendPath(String.valueOf(R.raw.accessibility_color_inversion_banner)) 88 .build(); 89 final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1); 90 enableServiceFeatureKeys.add(ENABLED); 91 mSettingsContentObserver = new SettingsContentObserver(mHandler, enableServiceFeatureKeys) { 92 @Override 93 public void onChange(boolean selfChange, Uri uri) { 94 updateSwitchBarToggleSwitch(); 95 } 96 }; 97 98 final View view = super.onCreateView(inflater, container, savedInstanceState); 99 updateFooterPreference(); 100 return view; 101 } 102 updateFooterPreference()103 private void updateFooterPreference() { 104 final String title = getPrefContext().getString( 105 R.string.accessibility_color_inversion_about_title); 106 final String learnMoreContentDescription = getPrefContext().getString( 107 R.string.accessibility_color_inversion_footer_learn_more_content_description); 108 mFooterPreferenceController.setIntroductionTitle(title); 109 mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription); 110 mFooterPreferenceController.displayPreference(getPreferenceScreen()); 111 } 112 113 @Override onResume()114 public void onResume() { 115 super.onResume(); 116 updateSwitchBarToggleSwitch(); 117 mSettingsContentObserver.register(getContentResolver()); 118 } 119 120 @Override onPause()121 public void onPause() { 122 mSettingsContentObserver.unregister(getContentResolver()); 123 super.onPause(); 124 } 125 126 @Override getHelpResource()127 public int getHelpResource() { 128 return R.string.help_url_color_inversion; 129 } 130 131 @Override getUserShortcutTypes()132 int getUserShortcutTypes() { 133 return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), 134 mComponentName); 135 } 136 137 @Override updateSwitchBarToggleSwitch()138 protected void updateSwitchBarToggleSwitch() { 139 final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON; 140 if (mToggleServiceSwitchPreference.isChecked() == checked) { 141 return; 142 } 143 mToggleServiceSwitchPreference.setChecked(checked); 144 } 145 } 146