blob: 38fe8790e4d0c17f5d1f92971955773c83e03f14 [file] [log] [blame]
package com.android.settingslib.core;
import android.content.Context;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
/**
* A controller that manages event for preference.
*/
public abstract class AbstractPreferenceController {
protected final Context mContext;
public AbstractPreferenceController(Context context) {
mContext = context;
}
/**
* Displays preference in this controller.
*/
public void displayPreference(PreferenceScreen screen) {
if (isAvailable()) {
if (this instanceof Preference.OnPreferenceChangeListener) {
final Preference preference = screen.findPreference(getPreferenceKey());
preference.setOnPreferenceChangeListener(
(Preference.OnPreferenceChangeListener) this);
}
} else {
removePreference(screen, getPreferenceKey());
}
}
/**
* Updates the current status of preference (summary, switch state, etc)
*/
public void updateState(Preference preference) {
}
/**
* Returns true if preference is available (should be displayed)
*/
public abstract boolean isAvailable();
/**
* Handles preference tree click
*
* @param preference the preference being clicked
* @return true if click is handled
*/
public boolean handlePreferenceTreeClick(Preference preference) {
return false;
}
/**
* Returns the key for this preference.
*/
public abstract String getPreferenceKey();
/**
* Removes preference from screen.
*/
protected final void removePreference(PreferenceScreen screen, String key) {
findAndRemovePreference(screen, key);
}
// finds the preference recursively and removes it from its parent
private boolean findAndRemovePreference(PreferenceGroup prefGroup, String key) {
final int preferenceCount = prefGroup.getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
final Preference preference = prefGroup.getPreference(i);
final String curKey = preference.getKey();
if (curKey != null && curKey.equals(key)) {
return prefGroup.removePreference(preference);
}
if (preference instanceof PreferenceGroup) {
if (findAndRemovePreference((PreferenceGroup) preference, key)) {
return true;
}
}
}
return false;
}
}