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=80c69e59bfece97bc7fd313b888f012bf4100b16;hp=4c2721d46651119789a96686669d3d4d296d35d1;hb=217da55a224e2ae899d0b50604e2e54f882ec04f;hpb=684e2ca7c63cc4d5491b2dd0784d232e906e813a 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 4c2721d4..80c69e59 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/DatePickerFragment.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2020 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -20,17 +20,17 @@ package net.ktnx.mobileledger.ui; import android.app.Dialog; import android.os.Bundle; import android.widget.CalendarView; -import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatDialogFragment; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.model.MobileLedgerProfile; +import net.ktnx.mobileledger.utils.SimpleDate; import java.util.Calendar; import java.util.GregorianCalendar; -import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,57 +39,24 @@ 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*$"); + private Calendar presentDate = GregorianCalendar.getInstance(); private DatePickedListener onDatePickedListener; - private MobileLedgerProfile.FutureDates futureDates = MobileLedgerProfile.FutureDates.None; - public MobileLedgerProfile.FutureDates getFutureDates() { - return futureDates; + private long minDate = 0; + private long maxDate = Long.MAX_VALUE; + public void setDateRange(@Nullable SimpleDate minDate, @Nullable SimpleDate maxDate) { + if (minDate == null) + this.minDate = 0; + else + this.minDate = minDate.toDate().getTime(); + + if (maxDate == null) + this.maxDate = Long.MAX_VALUE; + else + this.maxDate = maxDate.toDate().getTime(); } public void setFutureDates(MobileLedgerProfile.FutureDates futureDates) { - this.futureDates = futureDates; - } - @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); - TextView date = Objects.requireNonNull(getActivity()) - .findViewById(R.id.new_transaction_date); - - CharSequence present = date.getText(); - - Matcher m = reYMD.matcher(present); - if (m.matches()) { - year = Integer.parseInt(m.group(1)); - month = Integer.parseInt(m.group(2)) - 1; // month is 0-based - day = Integer.parseInt(m.group(3)); - } - else { - m = reMD.matcher(present); - if (m.matches()) { - month = Integer.parseInt(m.group(1)) - 1; - day = Integer.parseInt(m.group(2)); - } - else { - m = reD.matcher(present); - if (m.matches()) { - day = Integer.parseInt(m.group(1)); - } - } - } - - c.set(year, month, day); - - 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()); - if (futureDates == MobileLedgerProfile.FutureDates.All) { - cv.setMaxDate(Long.MAX_VALUE); + maxDate = Long.MAX_VALUE; } else { final Calendar dateLimit = GregorianCalendar.getInstance(); @@ -119,10 +86,51 @@ public class DatePickerFragment extends AppCompatDialogFragment dateLimit.add(Calendar.YEAR, 1); break; } - cv.setMaxDate(dateLimit.getTime() - .getTime()); + maxDate = dateLimit.getTime() + .getTime(); + } + } + 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()) { + year = Integer.parseInt(m.group(1)); + month = Integer.parseInt(m.group(2)) - 1; // month is 0-based + day = Integer.parseInt(m.group(3)); + } + else { + m = reMD.matcher(present); + if (m.matches()) { + month = Integer.parseInt(m.group(1)) - 1; + day = Integer.parseInt(m.group(2)); + } + else { + m = reD.matcher(present); + if (m.matches()) { + day = Integer.parseInt(m.group(1)); + } + } } + 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(presentDate.getTime() + .getTime()); + + cv.setMinDate(minDate); + cv.setMaxDate(maxDate); + cv.setOnDateChangeListener(this); return dpd;