All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.holoeverywhere.preference.DatePreference Maven / Gradle / Ivy

The newest version!

package org.holoeverywhere.preference;

import java.util.Calendar;

import org.holoeverywhere.app.DatePickerDialog;
import org.holoeverywhere.widget.DatePicker;

import android.app.Dialog;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;

public class DatePreference extends DialogPreference {
    public static interface OnDateSetListener {
        public boolean onDateSet(DatePreference preference, long date, int year, int month, int day);
    }

    private final DatePickerDialog.OnDateSetListener mCallback = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(0);
            calendar.set(Calendar.YEAR, mYear = year);
            calendar.set(Calendar.MONTH, mMonth = month);
            calendar.set(Calendar.DAY_OF_MONTH, mDay = day);
            DatePreference.this.onDateSet(datePicker, calendar.getTimeInMillis(), year, month, day);
            updateDialogState();
        }
    };

    private long mDefaultDate;
    private boolean mDefaultDateSetted = false;
    private OnDateSetListener mOnDateSetListener;
    private int mYear, mMonth, mDay;

    public DatePreference(Context context) {
        this(context, null);
    }

    public DatePreference(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.datePreferenceStyle);
    }

    public DatePreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        context = getContext();
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DatePreference,
                defStyle, R.style.Holo_PreferenceDate);
        a.recycle();
    }

    public int getDay() {
        return mDay;
    }

    public long getDefaultDate() {
        if (!mDefaultDateSetted) {
            return System.currentTimeMillis();
        }
        return mDefaultDate;
    }

    public int getMonth() {
        return mMonth;
    }

    public OnDateSetListener getOnDateSetListener() {
        return mOnDateSetListener;
    }

    public int getYear() {
        return mYear;
    }

    @Override
    protected Dialog onCreateDialog(Context context) {
        return new DatePickerDialog(context, mCallback, mYear, mMonth, mDay);
    }

    public void onDateSet(DatePicker datePicker, long date, int year, int month, int day) {
        if (mOnDateSetListener == null
                || mOnDateSetListener.onDateSet(this, date, year, month, day)) {
            persistLong(date);
        }
    }

    @Override
    protected String onGetDefaultValue(TypedArray a, int index) {
        String value = a.getString(index);
        if (value == null || value.length() == 0) {
            value = String.valueOf(getDefaultDate());
        }
        return value;
    }

    @Override
    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
        if (restorePersistedValue) {
            defaultValue = getPersistedLong(getDefaultDate());
        }
        long time;
        try {
            if (defaultValue instanceof Long) {
                time = ((Long) defaultValue).longValue();
            } else {
                time = Long.parseLong(String.valueOf(defaultValue));
            }
            time = Long.parseLong(String.valueOf(defaultValue));
        } catch (Exception e) {
            time = getDefaultDate();
        }
        setTime(time);
    }

    public void resetDefaultDate() {
        mDefaultDateSetted = false;
    }

    public void setDay(int day) {
        mDay = day;
        updateDialogState();
    }

    public void setDefaultDate(long defaultDate) {
        mDefaultDate = defaultDate;
        mDefaultDateSetted = true;
    }

    public void setMonth(int month) {
        mMonth = month;
        updateDialogState();
    }

    public void setOnDateSetListener(OnDateSetListener onTimeSetListener) {
        mOnDateSetListener = onTimeSetListener;
    }

    private void setTime(long time) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(time);
        mYear = calendar.get(Calendar.YEAR);
        mMonth = calendar.get(Calendar.MONTH);
        mDay = calendar.get(Calendar.DAY_OF_MONTH);
        updateDialogState();
    }

    public void setYear(int year) {
        mYear = year;
        updateDialogState();
    }

    protected void updateDialogState() {
        DatePickerDialog dialog = (DatePickerDialog) getDialog();
        if (dialog != null) {
            dialog.updateDate(mYear, mMonth, mDay);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy