1 package com.android.settingslib.core; 2 3 import android.content.Context; 4 import android.support.v7.preference.Preference; 5 import android.support.v7.preference.PreferenceGroup; 6 import android.support.v7.preference.PreferenceScreen; 7 8 /** 9 * A controller that manages event for preference. 10 */ 11 public abstract class AbstractPreferenceController { 12 13 protected final Context mContext; 14 15 public AbstractPreferenceController(Context context) { 16 mContext = context; 17 } 18 19 /** 20 * Displays preference in this controller. 21 */ 22 public void displayPreference(PreferenceScreen screen) { 23 final String prefKey = getPreferenceKey(); 24 if (isAvailable()) { 25 setVisible(screen, prefKey, true /* visible */); 26 if (this instanceof Preference.OnPreferenceChangeListener) { 27 final Preference preference = screen.findPreference(prefKey); 28 preference.setOnPreferenceChangeListener( 29 (Preference.OnPreferenceChangeListener) this); 30 } 31 } else { 32 setVisible(screen, prefKey, false /* visible */); 33 } 34 } 35 36 /** 37 * Updates the current status of preference (summary, switch state, etc) 38 */ 39 public void updateState(Preference preference) { 40 refreshSummary(preference); 41 } 42 43 /** 44 * Refresh preference summary with getSummary() 45 */ 46 protected void refreshSummary(Preference preference) { 47 if (preference == null) { 48 return; 49 } 50 final CharSequence summary = getSummary(); 51 if (summary == null) { 52 // Default getSummary returns null. If subclass didn't override this, there is nothing 53 // we need to do. 54 return; 55 } 56 preference.setSummary(summary); 57 } 58 59 /** 60 * Returns true if preference is available (should be displayed) 61 */ 62 public abstract boolean isAvailable(); 63 64 /** 65 * Handles preference tree click 66 * 67 * @param preference the preference being clicked 68 * @return true if click is handled 69 */ 70 public boolean handlePreferenceTreeClick(Preference preference) { 71 return false; 72 } 73 74 /** 75 * Returns the key for this preference. 76 */ 77 public abstract String getPreferenceKey(); 78 79 /** 80 * Show/hide a preference. 81 */ 82 protected final void setVisible(PreferenceGroup group, String key, boolean isVisible) { 83 final Preference pref = group.findPreference(key); 84 if (pref != null) { 85 pref.setVisible(isVisible); 86 } 87 } 88 89 90 /** 91 * @return a {@link CharSequence} for the summary of the preference. 92 */ 93 public CharSequence getSummary() { 94 return null; 95 } 96 } 97