/* * Copyright (C) 2019 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 static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logAccessibilityServiceEnabled; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.preference.SwitchPreference; import com.android.settings.R; import java.util.ArrayList; import java.util.List; /** Settings page for color inversion. */ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment { private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED; private final Handler mHandler = new Handler(); private SettingsContentObserver mSettingsContentObserver; @Override public int getMetricsCategory() { return SettingsEnums.ACCESSIBILITY_COLOR_INVERSION_SETTINGS; } @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { logAccessibilityServiceEnabled(mComponentName, enabled); Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? ON : OFF); } @Override protected int getPreferenceScreenResId() { return R.xml.accessibility_color_inversion_settings; } @Override protected void onRemoveSwitchPreferenceToggleSwitch() { super.onRemoveSwitchPreferenceToggleSwitch(); mToggleServiceDividerSwitchPreference.setOnPreferenceClickListener(null); } @Override protected void updateToggleServiceTitle(SwitchPreference switchPreference) { switchPreference.setTitle(R.string.accessibility_display_inversion_switch_title); } @Override protected void onInstallSwitchPreferenceToggleSwitch() { super.onInstallSwitchPreferenceToggleSwitch(); updateSwitchBarToggleSwitch(); mToggleServiceDividerSwitchPreference.setOnPreferenceClickListener((preference) -> { boolean checked = ((SwitchPreference) preference).isChecked(); onPreferenceToggled(mPreferenceKey, checked); return false; }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mComponentName = COLOR_INVERSION_COMPONENT_NAME; mPackageName = getText(R.string.accessibility_display_inversion_preference_title); mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle); mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) .authority(getPrefContext().getPackageName()) .appendPath(String.valueOf(R.drawable.accessibility_color_inversion_banner)) .build(); final List enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1); enableServiceFeatureKeys.add(ENABLED); mSettingsContentObserver = new SettingsContentObserver(mHandler, enableServiceFeatureKeys) { @Override public void onChange(boolean selfChange, Uri uri) { updateSwitchBarToggleSwitch(); } }; return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onResume() { super.onResume(); updateSwitchBarToggleSwitch(); mSettingsContentObserver.register(getContentResolver()); } @Override public void onPause() { mSettingsContentObserver.unregister(getContentResolver()); super.onPause(); } @Override public int getHelpResource() { return R.string.help_url_color_inversion; } @Override public void onSettingsClicked(ShortcutPreference preference) { super.onSettingsClicked(preference); showDialog(DialogEnums.EDIT_SHORTCUT); } @Override int getUserShortcutTypes() { return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(), mComponentName); } private void updateSwitchBarToggleSwitch() { final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON; if (mToggleServiceDividerSwitchPreference.isChecked() == checked) { return; } mToggleServiceDividerSwitchPreference.setChecked(checked); } }