X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2FDatePickerFragment.java;h=ebee058053726fcb1bbad343ace603bfc701a638;hp=7aa2db06b1bc1ae626ceb0fd3dae58fde65a3c8c;hb=8b2a83f10265f8c8e8044b8dd990337283834afd;hpb=df957964a684943af44a013c8020463fbf7e8f93 diff --git a/app/src/main/java/net/ktnx/mobileledger/DatePickerFragment.java b/app/src/main/java/net/ktnx/mobileledger/DatePickerFragment.java index 7aa2db06..ebee0580 100644 --- a/app/src/main/java/net/ktnx/mobileledger/DatePickerFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/DatePickerFragment.java @@ -1,3 +1,20 @@ +/* + * Copyright © 2018 Damyan Ivanov. + * This file is part of Mobile-Ledger. + * Mobile-Ledger is free software: you can distribute it and/or modify it + * under the term of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your opinion), any later version. + * + * Mobile-Ledger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License terms for details. + * + * You should have received a copy of the GNU General Public License + * along with Mobile-Ledger. If not, see . + */ + package net.ktnx.mobileledger; import android.annotation.TargetApi; @@ -18,7 +35,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class DatePickerFragment extends AppCompatDialogFragment -implements DatePickerDialog.OnDateSetListener +implements DatePickerDialog.OnDateSetListener, DatePicker.OnDateChangedListener { @NonNull @Override @@ -27,7 +44,7 @@ implements DatePickerDialog.OnDateSetListener int year = c.get(GregorianCalendar.YEAR); int month = c.get(GregorianCalendar.MONTH); int day = c.get(GregorianCalendar.DAY_OF_MONTH); - TextView date = getActivity().findViewById(R.id.new_transaction_date); + TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date); CharSequence present = date.getText(); @@ -46,12 +63,19 @@ implements DatePickerDialog.OnDateSetListener } } - return new DatePickerDialog(Objects.requireNonNull(getActivity()), this, year, month, day); + DatePickerDialog dpd = new DatePickerDialog(Objects.requireNonNull(getActivity()), this, year, month, day); + // quicker date selection available in API 26 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + DatePicker dp = dpd.getDatePicker(); + dp.setOnDateChangedListener(this); + } + + return dpd; } @TargetApi(Build.VERSION_CODES.O) public void onDateSet(DatePicker view, int year, int month, int day) { - TextView date = getActivity().findViewById(R.id.new_transaction_date); + TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date); final Calendar c = GregorianCalendar.getInstance(); if ( c.get(GregorianCalendar.YEAR) == year && c.get(GregorianCalendar.MONTH) == month) { @@ -60,5 +84,28 @@ implements DatePickerDialog.OnDateSetListener else { date.setText(String.format(Locale.US, "%d/%d", month+1, day)); } + + TextView description = Objects.requireNonNull(getActivity()) + .findViewById(R.id.new_transaction_description); + description.requestFocus(); + } + + @Override + public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { + TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date); + + final Calendar c = GregorianCalendar.getInstance(); + if ( c.get(GregorianCalendar.YEAR) == year && c.get(GregorianCalendar.MONTH) == monthOfYear) { + date.setText(String.format(Locale.US, "%d", dayOfMonth)); + } + else { + date.setText(String.format(Locale.US, "%d/%d", monthOfYear+1, dayOfMonth)); + } + + TextView description = Objects.requireNonNull(getActivity()) + .findViewById(R.id.new_transaction_description); + description.requestFocus(); + + this.dismiss(); } }