Home | History | Annotate | Download | only in core
      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