package wb.android.preferences;
import android.content.Context;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
public class SummaryEditTextPreference extends EditTextPreference implements Preference.OnPreferenceChangeListener {
private OnPreferenceChangeListener mOnPreferenceChangeListener;
/**
* All this enabled stuff is a nifty hack for Pro subscription upsells
*/
private boolean mAppearsEnabled = true;
public SummaryEditTextPreference(Context context) {
super(context);
super.setOnPreferenceChangeListener(this); //Must use the super's method here (since we overwrite)
}
public SummaryEditTextPreference(Context context, AttributeSet attrs) {
super(context, attrs);
super.setOnPreferenceChangeListener(this); //Must use the super's method here (since we overwrite)
}
public SummaryEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
super.setOnPreferenceChangeListener(this); //Must use the super's method here (since we overwrite)
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(getSummary());
if (mOnPreferenceChangeListener != null) {
return mOnPreferenceChangeListener.onPreferenceChange(preference, newValue);
}
return true;
}
@Override
public void setOnPreferenceChangeListener(OnPreferenceChangeListener onPreferenceChangeListener) {
mOnPreferenceChangeListener = onPreferenceChangeListener;
}
@Override
public CharSequence getSummary() {
return getText();
}
public boolean appearsEnabled() {
return mAppearsEnabled;
}
public void setAppearsEnabled(boolean appearsEnabled) {
mAppearsEnabled = appearsEnabled;
}
@Override
protected void onClick() {
if (mAppearsEnabled) {
super.onClick();
}
}
@Override
protected void onBindView(@NonNull View view) {
super.onBindView(view);
boolean viewEnabled = isEnabled() && mAppearsEnabled;
enableView(view, viewEnabled);
}
private void enableView(@NonNull View view, boolean enabled) {
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
final ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
enableView(viewGroup.getChildAt(i), enabled);
}
}
}
}