| /* |
| * 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<String> 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); |
| } |
| } |