1 /* 2 * Copyright (C) 2013 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 android.content.Intent; 20 import android.content.pm.ResolveInfo; 21 import android.os.Bundle; 22 import android.support.v7.preference.Preference; 23 import android.support.v7.preference.PreferenceScreen; 24 import android.view.View; 25 26 import com.android.settings.R; 27 import com.android.settings.SettingsActivity; 28 import com.android.settings.SettingsPreferenceFragment; 29 import com.android.settings.widget.SwitchBar; 30 import com.android.settings.widget.ToggleSwitch; 31 32 public abstract class ToggleFeaturePreferenceFragment extends SettingsPreferenceFragment { 33 34 protected SwitchBar mSwitchBar; 35 protected ToggleSwitch mToggleSwitch; 36 37 protected String mPreferenceKey; 38 39 protected CharSequence mSettingsTitle; 40 protected Intent mSettingsIntent; 41 42 @Override 43 public void onCreate(Bundle savedInstanceState) { 44 super.onCreate(savedInstanceState); 45 final int resId = getPreferenceScreenResId(); 46 if (resId <= 0) { 47 PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen( 48 getActivity()); 49 setPreferenceScreen(preferenceScreen); 50 } 51 } 52 53 @Override 54 public void onViewCreated(View view, Bundle savedInstanceState) { 55 super.onViewCreated(view, savedInstanceState); 56 57 SettingsActivity activity = (SettingsActivity) getActivity(); 58 mSwitchBar = activity.getSwitchBar(); 59 updateSwitchBarText(mSwitchBar); 60 mToggleSwitch = mSwitchBar.getSwitch(); 61 62 onProcessArguments(getArguments()); 63 64 // Show the "Settings" menu as if it were a preference screen 65 if (mSettingsTitle != null && mSettingsIntent != null) { 66 PreferenceScreen preferenceScreen = getPreferenceScreen(); 67 Preference settingsPref = new Preference(preferenceScreen.getContext()); 68 settingsPref.setTitle(mSettingsTitle); 69 settingsPref.setIconSpaceReserved(true); 70 settingsPref.setIntent(mSettingsIntent); 71 preferenceScreen.addPreference(settingsPref); 72 } 73 } 74 75 @Override 76 public void onActivityCreated(Bundle savedInstanceState) { 77 super.onActivityCreated(savedInstanceState); 78 installActionBarToggleSwitch(); 79 } 80 81 @Override 82 public void onDestroyView() { 83 super.onDestroyView(); 84 85 removeActionBarToggleSwitch(); 86 } 87 88 protected void updateSwitchBarText(SwitchBar switchBar) { 89 // Implement this to provide meaningful text in switch bar 90 switchBar.setSwitchBarText(R.string.accessibility_service_master_switch_title, 91 R.string.accessibility_service_master_switch_title); 92 } 93 94 protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled); 95 96 protected void onInstallSwitchBarToggleSwitch() { 97 // Implement this to set a checked listener. 98 } 99 100 protected void onRemoveSwitchBarToggleSwitch() { 101 // Implement this to reset a checked listener. 102 } 103 104 private void installActionBarToggleSwitch() { 105 mSwitchBar.show(); 106 onInstallSwitchBarToggleSwitch(); 107 } 108 109 private void removeActionBarToggleSwitch() { 110 mToggleSwitch.setOnBeforeCheckedChangeListener(null); 111 onRemoveSwitchBarToggleSwitch(); 112 mSwitchBar.hide(); 113 } 114 115 public void setTitle(String title) { 116 getActivity().setTitle(title); 117 } 118 119 protected void onProcessArguments(Bundle arguments) { 120 // Key. 121 mPreferenceKey = arguments.getString(AccessibilitySettings.EXTRA_PREFERENCE_KEY); 122 123 // Enabled. 124 if (arguments.containsKey(AccessibilitySettings.EXTRA_CHECKED)) { 125 final boolean enabled = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED); 126 mSwitchBar.setCheckedInternal(enabled); 127 } 128 129 // Title. 130 if (arguments.containsKey(AccessibilitySettings.EXTRA_RESOLVE_INFO)) { 131 ResolveInfo info = arguments.getParcelable(AccessibilitySettings.EXTRA_RESOLVE_INFO); 132 getActivity().setTitle(info.loadLabel(getPackageManager()).toString()); 133 } else if (arguments.containsKey(AccessibilitySettings.EXTRA_TITLE)) { 134 setTitle(arguments.getString(AccessibilitySettings.EXTRA_TITLE)); 135 } 136 137 // Summary. 138 if (arguments.containsKey(AccessibilitySettings.EXTRA_SUMMARY_RES)) { 139 final int summary = arguments.getInt(AccessibilitySettings.EXTRA_SUMMARY_RES); 140 mFooterPreferenceMixin.createFooterPreference().setTitle(summary); 141 } else if (arguments.containsKey(AccessibilitySettings.EXTRA_SUMMARY)) { 142 final CharSequence summary = arguments.getCharSequence( 143 AccessibilitySettings.EXTRA_SUMMARY); 144 mFooterPreferenceMixin.createFooterPreference().setTitle(summary); 145 } 146 } 147 } 148