Android Open Source - callmeter C V List Preference






From Project

Back to project page callmeter.

License

The source code is released under:

GNU General Public License

If you think the Android project callmeter listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package de.ub0r.android.callmeter.ui.prefs;
/*  w ww  .  ja v  a 2  s  .c om*/
import android.app.AlertDialog.Builder;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import de.ub0r.android.callmeter.R;

/**
 * {@link ListPreference} holding it's value in {@link ContentValues}.
 *
 * @author flx
 */
public final class CVListPreference extends ListPreference {

    /** {@link ContentValues} for saving values. */
    private final ContentValues cv;
    /** Show a multi select dialog. */
    private final boolean m;
    /** Checked values. */
    private boolean[] checked = null;
    /** {@link UpdateListener}. */
    private final UpdateListener ul;
    /** Show help. */
    private final boolean sh;

    /**
     * Default constructor.
     *
     * @param context {@link Context}
     * @param values  {@link ContentValues}
     * @param key     key
     */
    public CVListPreference(final Context context, final ContentValues values, final String key) {
        super(context);
        setPersistent(false);
        setKey(key);
        cv = values;
        m = false;
        sh = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                Preferences.PREFS_SHOWHELP, true);
        if (context instanceof UpdateListener) {
            ul = (UpdateListener) context;
        } else {
            ul = null;
        }
    }

    /**
     * Default constructor.
     *
     * @param context {@link Context}
     * @param values  {@link ContentValues}
     * @param key     key
     * @param multi   show multi selection
     */
    public CVListPreference(final Context context, final ContentValues values, final String key,
            final boolean multi) {
        super(context);
        setPersistent(false);
        setKey(key);
        cv = values;
        m = multi;
        sh = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                Preferences.PREFS_SHOWHELP, true);
        if (context instanceof UpdateListener) {
            ul = (UpdateListener) context;
        } else {
            ul = null;
        }
    }

    @Override
    public void setTitle(final int titleResId) {
        super.setTitle(titleResId);
        setDialogTitle(titleResId);
    }

    @Override
    public void setTitle(final CharSequence title) {
        super.setTitle(title);
        setDialogTitle(title);
    }

    /**
     * Set static list.
     *
     * @param values values
     * @param names  names
     */
    public void setStatic(final String[] values, final String[] names) {
        setEntryValues(values);
        setEntries(names);
        if (m) {
            setCheckedArray();
        }
    }

    /**
     * Set static list.
     *
     * @param values values
     * @param names  names
     */
    public void setStatic(final int values, final int names) {
        setEntryValues(values);
        setEntries(names);
        if (m) {
            setCheckedArray();
        }
    }

    /**
     * Set list by {@link Cursor}.
     *
     * @param c     {@link Cursor}
     * @param value index of id
     * @param name  index of name
     */
    public void setCursor(final Cursor c, final int value, final int name) {
        int l = c.getCount();
        String[] values = new String[l];
        String[] names = new String[l];
        if (c.moveToFirst()) {
            int i = 0;
            do {
                values[i] = c.getString(value);
                names[i] = c.getString(name);
                i++;
            } while (c.moveToNext());
        }
        setEntryValues(values);
        setEntries(names);
        c.close();
        if (m) {
            setCheckedArray();
        }
    }

    /** Initialize checked array. */
    private void setCheckedArray() {
        int l = getEntries().length;
        checked = new boolean[l];
        reloadCheckedArray();
    }

    /** Reload checked array. */
    private void reloadCheckedArray() {
        CharSequence[] values = getEntryValues();
        String s = "," + getValue() + ",";
        int l = checked.length;
        for (int i = 0; i < l; i++) {
            checked[i] = s.contains("," + values[i] + ",");
        }
    }

    /**
     * @return checked values
     */
    private String storeCheckedArray() {
        CharSequence[] values = getEntryValues();
        StringBuilder sb = new StringBuilder();
        sb.append(",");
        int l = checked.length;
        boolean empty = true;
        for (int i = 0; i < l; i++) {
            if (checked[i]) {
                sb.append(values[i]);
                sb.append(",");
                empty = false;
            }
        }
        if (empty) {
            return null;
        } else {
            return sb.toString();
        }
    }

    @Override
    public void setValue(final String value) {
        if (m) {
            String v = value;
            if (v != null) {
                v = v.replaceAll(",,", ",");
            }
            super.setValue(v);
            reloadCheckedArray();
            if (!this.sh) {
                StringBuilder sb = new StringBuilder();
                sb.append(getContext().getString(R.string.value));
                sb.append(": ");
                for (int i = 0; i < checked.length; i++) {
                    if (checked[i]) {
                        CharSequence e = getEntries()[i];
                        sb.append(e == null ? "?" : e.toString().trim());
                        sb.append(", ");
                    }
                }
                String s = sb.toString();
                if (s.endsWith(", ")) {
                    s = s.substring(0, s.length() - 2);
                }
                setSummary(s);
            }
        } else {
            super.setValue(value);
            if (!this.sh) {
                CharSequence e = getEntry();
                setSummary(getContext().getString(R.string.value) + ": "
                        + (e == null ? "" : e.toString().trim()));
            }
        }
    }

    @Override
    protected void onPrepareDialogBuilder(final Builder builder) {
        if (m) {
            builder.setMultiChoiceItems(getEntries(), checked,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        public void onClick(final DialogInterface dialog, final int which,
                                final boolean val) {
                            CVListPreference.this.checked[which] = val;
                        }
                    });
        } else {
            super.onPrepareDialogBuilder(builder);
        }
    }

    @Override
    protected View onCreateView(final ViewGroup parent) {
        View v = super.onCreateView(parent);
        TextView tv = (TextView) v.findViewById(android.R.id.summary);
        if (tv != null) {
            tv.setMaxLines(Integer.MAX_VALUE);
        }
        return v;
    }

    @Override
    protected void onDialogClosed(final boolean positiveResult) {
        if (m) {
            if (positiveResult) {
                String v = storeCheckedArray();
                String ov = getValue();
                if (ov == null & v != null || ov != null && !ov.equals(v)) {
                    setValue(v);
                }
                cv.put(getKey(), v);
            }
        } else {
            super.onDialogClosed(positiveResult);
            if (positiveResult) {
                cv.put(getKey(), getValue());
            }
        }
        if (positiveResult && ul != null) {
            ul.onUpdateValue(this);
        }
    }
}




Java Source Code List

android.preference.DatePreference.java
com.actionbarsherlock.BuildConfig.java
de.ub0r.android.callmeter.Ads.java
de.ub0r.android.callmeter.CallMeter.java
de.ub0r.android.callmeter.TrackingUtils.java
de.ub0r.android.callmeter.data.DataProvider.java
de.ub0r.android.callmeter.data.Device.java
de.ub0r.android.callmeter.data.ExportProvider.java
de.ub0r.android.callmeter.data.LogRunnerReceiver.java
de.ub0r.android.callmeter.data.LogRunnerService.java
de.ub0r.android.callmeter.data.NameCache.java
de.ub0r.android.callmeter.data.NameLoader.java
de.ub0r.android.callmeter.data.RuleMatcher.java
de.ub0r.android.callmeter.data.SysClassNet.java
de.ub0r.android.callmeter.ui.AboutActivity.java
de.ub0r.android.callmeter.ui.AddLogActivity.java
de.ub0r.android.callmeter.ui.AskForPlan.java
de.ub0r.android.callmeter.ui.Common.java
de.ub0r.android.callmeter.ui.HelpActivity.java
de.ub0r.android.callmeter.ui.IntroActivity.java
de.ub0r.android.callmeter.ui.LogsFragment.java
de.ub0r.android.callmeter.ui.PlansFragment.java
de.ub0r.android.callmeter.ui.Plans.java
de.ub0r.android.callmeter.ui.TrackingActivity.java
de.ub0r.android.callmeter.ui.TrackingSherlockActivity.java
de.ub0r.android.callmeter.ui.TrackingSherlockFragmentActivity.java
de.ub0r.android.callmeter.ui.TrackingSherlockPreferenceActivity.java
de.ub0r.android.callmeter.ui.prefs.BillModeListPreference.java
de.ub0r.android.callmeter.ui.prefs.CV2EditTextPreference.java
de.ub0r.android.callmeter.ui.prefs.CVBillModePreference.java
de.ub0r.android.callmeter.ui.prefs.CVCheckBoxPreference.java
de.ub0r.android.callmeter.ui.prefs.CVDatePreference.java
de.ub0r.android.callmeter.ui.prefs.CVEditTextPreference.java
de.ub0r.android.callmeter.ui.prefs.CVListPreference.java
de.ub0r.android.callmeter.ui.prefs.HourGroupEdit.java
de.ub0r.android.callmeter.ui.prefs.HourGroups.java
de.ub0r.android.callmeter.ui.prefs.NumberGroupEdit.java
de.ub0r.android.callmeter.ui.prefs.NumberGroups.java
de.ub0r.android.callmeter.ui.prefs.PlanEdit.java
de.ub0r.android.callmeter.ui.prefs.Plans.java
de.ub0r.android.callmeter.ui.prefs.PreferencesImport.java
de.ub0r.android.callmeter.ui.prefs.PreferencesPlain.java
de.ub0r.android.callmeter.ui.prefs.PreferencesRules.java
de.ub0r.android.callmeter.ui.prefs.Preferences.java
de.ub0r.android.callmeter.ui.prefs.RuleEdit.java
de.ub0r.android.callmeter.ui.prefs.Rules.java
de.ub0r.android.callmeter.ui.prefs.SimplePreferencesChild.java
de.ub0r.android.callmeter.ui.prefs.SimplePreferences.java
de.ub0r.android.callmeter.ui.prefs.UpDownPreference.java
de.ub0r.android.callmeter.ui.prefs.UpdateListener.java
de.ub0r.android.callmeter.widget.LogsAppWidgetConfigure.java
de.ub0r.android.callmeter.widget.LogsAppWidgetProvider.java
de.ub0r.android.callmeter.widget.StatsAppWidgetConfigure.java
de.ub0r.android.callmeter.widget.StatsAppWidgetProvider.java
yuku.ambilwarna.AmbilWarnaDialog.java
yuku.ambilwarna.AmbilWarnaKotak.java