X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2FDatePickerFragment.java;h=3115d477a2ba97450ec7254344cecdde46fed398;hp=a59d648199f666d2fe62a252e57e1bfac700f43e;hb=1a35d85c28218c830bf09daa4a5f1b808575e1dc;hpb=d5cbd1771884a06d815ad64634bf0715b2f658b7 diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java index a59d6481..3115d477 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java @@ -19,16 +19,16 @@ package net.ktnx.mobileledger.ui; import android.app.Dialog; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatDialogFragment; import android.widget.CalendarView; -import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatDialogFragment; import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.model.MobileLedgerProfile; import java.util.Calendar; import java.util.GregorianCalendar; -import java.util.Locale; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,18 +38,20 @@ public class DatePickerFragment extends AppCompatDialogFragment static final Pattern reYMD = Pattern.compile("^\\s*(\\d+)\\d*/\\s*(\\d+)\\s*/\\s*(\\d+)\\s*$"); static final Pattern reMD = Pattern.compile("^\\s*(\\d+)\\s*/\\s*(\\d+)\\s*$"); static final Pattern reD = Pattern.compile("\\s*(\\d+)\\s*$"); - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final Calendar c = GregorianCalendar.getInstance(); - int year = c.get(GregorianCalendar.YEAR); - int month = c.get(GregorianCalendar.MONTH); - int day = c.get(GregorianCalendar.DAY_OF_MONTH); - long todayStamp = c.getTimeInMillis(); - TextView date = - Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date); - - CharSequence present = date.getText(); + private Calendar presentDate = GregorianCalendar.getInstance(); + private DatePickedListener onDatePickedListener; + private MobileLedgerProfile.FutureDates futureDates = MobileLedgerProfile.FutureDates.None; + public MobileLedgerProfile.FutureDates getFutureDates() { + return futureDates; + } + public void setFutureDates(MobileLedgerProfile.FutureDates futureDates) { + this.futureDates = futureDates; + } + public void setCurrentDateFromText(CharSequence present) { + final Calendar now = GregorianCalendar.getInstance(); + int year = now.get(GregorianCalendar.YEAR); + int month = now.get(GregorianCalendar.MONTH); + int day = now.get(GregorianCalendar.DAY_OF_MONTH); Matcher m = reYMD.matcher(present); if (m.matches()) { @@ -71,39 +73,68 @@ public class DatePickerFragment extends AppCompatDialogFragment } } - c.set(year, month, day); - + presentDate.set(year, month, day); + } + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dpd = new Dialog(Objects.requireNonNull(getActivity())); dpd.setContentView(R.layout.date_picker_view); dpd.setTitle(null); CalendarView cv = dpd.findViewById(R.id.calendarView); - cv.setDate(c.getTime().getTime()); - cv.setMaxDate(todayStamp); + cv.setDate(presentDate.getTime() + .getTime()); + + if (futureDates == MobileLedgerProfile.FutureDates.All) { + cv.setMaxDate(Long.MAX_VALUE); + } + else { + final Calendar dateLimit = GregorianCalendar.getInstance(); + switch (futureDates) { + case None: + // already there + break; + case OneWeek: + dateLimit.add(Calendar.DAY_OF_MONTH, 7); + break; + case TwoWeeks: + dateLimit.add(Calendar.DAY_OF_MONTH, 14); + break; + case OneMonth: + dateLimit.add(Calendar.MONTH, 1); + break; + case TwoMonths: + dateLimit.add(Calendar.MONTH, 2); + break; + case ThreeMonths: + dateLimit.add(Calendar.MONTH, 3); + break; + case SixMonths: + dateLimit.add(Calendar.MONTH, 6); + break; + case OneYear: + dateLimit.add(Calendar.YEAR, 1); + break; + } + cv.setMaxDate(dateLimit.getTime() + .getTime()); + } cv.setOnDateChangeListener(this); return dpd; } - private void updateDateInput(int year, int month, int day) { - TextView date = - Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date); - - final Calendar c = GregorianCalendar.getInstance(); - if (c.get(GregorianCalendar.YEAR) == year) { - if (c.get(GregorianCalendar.MONTH) == month) - date.setText(String.format(Locale.US, "%d", day)); - else date.setText(String.format(Locale.US, "%d/%d", month + 1, day)); - } - else date.setText(String.format(Locale.US, "%d/%d/%d", year, month + 1, day)); - - TextView description = Objects.requireNonNull(getActivity()) - .findViewById(R.id.new_transaction_description); - description.requestFocus(); - } @Override public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) { - updateDateInput(year, month, dayOfMonth); this.dismiss(); + if (onDatePickedListener != null) + onDatePickedListener.onDatePicked(year, month, dayOfMonth); + } + public void setOnDatePickedListener(DatePickedListener listener) { + onDatePickedListener = listener; + } + public interface DatePickedListener { + void onDatePicked(int year, int month, int day); } }