package cri.sanity;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import cri.sanity.util.*;
import cri.sanity.pref.*;
public abstract class PrefActivity extends PreferenceActivity
{
//---- inner classes
public static abstract class Click implements OnPreferenceClickListener
{
protected Preference pref;
@Override
public boolean onPreferenceClick(Preference pref) {
this.pref = pref;
return on();
}
public abstract boolean on();
}
public static abstract class Change implements OnPreferenceChangeListener
{
protected Preference pref;
protected Object value;
@Override
public boolean onPreferenceChange(Preference pref, Object value) {
this.pref = pref;
this.value = value;
return on();
}
public abstract boolean on();
}
//---- Activity override
@Override
public void onCreate(Bundle savedInstanceState)
{
Alert.activity = this;
super.onCreate(savedInstanceState);
}
@Override
public void onResume()
{
Alert.activity = this;
super.onResume();
}
//---- general api
public boolean isMainActivity() { return false; }
//---- preference api
public final Preference pref(String key) { return findPreference(key); }
// enabledDep is true if and only if "key" preference is dependent also to global "enabled" key
public final void updatePref(String key, boolean enabledDep) {
final Preference p = findPreference(key);
final String kd = p.getDependency();
final CheckBoxPreference dep = A.empty(kd)? null : (CheckBoxPreference)findPreference(kd);
enabledDep = !enabledDep || A.isEnabled();
p.setEnabled(enabledDep && (dep==null || (dep.isEnabled() && dep.isChecked())));
if( p instanceof CheckBoxPreference) ((CheckBoxPreference)p).setChecked(A.is(key));
else if(p instanceof PList ) { PList q = (PList)p; if(q.isWrap()) q.setValue(A.geti(q.getWrapKey())); else q.setValue(A.gets(key)); }
else if(p instanceof PFilter ) ((PFilter)p).updateSum();
else if(p instanceof PEdit ) ((PEdit )p).updateSum();
else if(p instanceof PPwd ) ((PPwd )p).updateSum();
else if(p instanceof ListPreference ) ((ListPreference)p).setValue(A.gets(key));
}
public final void updatePref (String key ) { updatePref(key, true); }
public final void updatePrefs (String ... keys) { for(final String k : keys) updatePref(k, true ); }
public final void updatePrefsNoDep(String ... keys) { for(final String k : keys) updatePref(k, false); }
public final boolean is(String key) { return ((CheckBoxPreference)pref(key)).isChecked(); }
public final boolean is(Preference p) { return ((CheckBoxPreference)p ).isChecked(); }
public final void setChecked(String key, boolean checked) {
((CheckBoxPreference)pref(key)).setChecked(checked);
}
public final void setChecked(Preference p, boolean checked) {
((CheckBoxPreference)p).setChecked(checked);
}
public final void setEnabled(String key, boolean enabled) {
pref(key).setEnabled(enabled);
}
public final void setEnabled(Preference p, boolean enabled) {
p.setEnabled(enabled);
}
public final void on(String key, Click listener) { on(pref(key), listener); }
public final void on(String key, Change listener) { on(pref(key), listener); }
public final void on(String key, Click click, Change change) { on(pref(key), click, change); }
public final void on(Preference p, Click listener) { p.setOnPreferenceClickListener (listener); }
public final void on(Preference p, Change listener) { p.setOnPreferenceChangeListener(listener); }
public final void on(Preference p, Click click, Change change) {
p.setOnPreferenceClickListener(click);
p.setOnPreferenceChangeListener(change);
}
public final void fullOnly(Preference ... prefs) { for(Preference p : prefs) fullOnly(p); }
public final void fullOnly(String ... keys ) { for(String k : keys ) fullOnly(k); }
public final void fullOnly(String key ) { fullOnly(pref(key)); }
public final void fullOnly(Preference p) {
if(A.isFull()) return;
if(p instanceof CheckBoxPreference || p instanceof ListPreference || p instanceof EditTextPreference)
on(p, new Change(){ public boolean on(){ Alert.msg(A.s(R.string.msg_option_full)); return false; }});
else
on(p, new Click(){ public boolean on(){ Alert.msg(A.s(R.string.msg_option_full)); return true ; }});
}
}