]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/DatePickerFragment.java
a30913c091220e69ab1bb7578c8f50e7a66f2fcf
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / DatePickerFragment.java
1 package net.ktnx.mobileledger;
2
3 import android.annotation.TargetApi;
4 import android.app.DatePickerDialog;
5 import android.app.Dialog;
6 import android.os.Build;
7 import android.os.Bundle;
8 import android.support.annotation.NonNull;
9 import android.support.v7.app.AppCompatDialogFragment;
10 import android.util.Log;
11 import android.widget.DatePicker;
12 import android.widget.TextView;
13
14 import java.util.Calendar;
15 import java.util.GregorianCalendar;
16 import java.util.Locale;
17 import java.util.Objects;
18 import java.util.regex.Matcher;
19 import java.util.regex.Pattern;
20
21 public class DatePickerFragment extends AppCompatDialogFragment
22 implements DatePickerDialog.OnDateSetListener, DatePicker.OnDateChangedListener
23 {
24     @NonNull
25     @Override
26     public Dialog onCreateDialog(Bundle savedInstanceState) {
27         final Calendar c = GregorianCalendar.getInstance();
28         int year = c.get(GregorianCalendar.YEAR);
29         int month = c.get(GregorianCalendar.MONTH);
30         int day = c.get(GregorianCalendar.DAY_OF_MONTH);
31         TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date);
32
33         CharSequence present = date.getText();
34
35         Pattern re_mon_day = Pattern.compile("^\\s*(\\d+)\\s*/\\s*(\\d+)\\s*$");
36         Matcher m_mon_day = re_mon_day.matcher(present);
37
38         if (m_mon_day.matches()) {
39             month = Integer.parseInt(m_mon_day.group(1))-1;
40             day = Integer.parseInt(m_mon_day.group(2));
41         }
42         else {
43             Pattern re_day = Pattern.compile("^\\s*(\\d{1,2})\\s*$");
44             Matcher m_day = re_day.matcher(present);
45             if (m_day.matches()) {
46                 day = Integer.parseInt(m_day.group(1));
47             }
48         }
49
50         DatePickerDialog dpd =  new DatePickerDialog(Objects.requireNonNull(getActivity()), this, year, month, day);
51         // quicker date selection available in API 26
52         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
53             DatePicker dp = dpd.getDatePicker();
54             dp.setOnDateChangedListener(this);
55         }
56
57         return dpd;
58     }
59
60     @TargetApi(Build.VERSION_CODES.O)
61     public void onDateSet(DatePicker view, int year, int month, int day) {
62         TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date);
63
64         final Calendar c = GregorianCalendar.getInstance();
65         if ( c.get(GregorianCalendar.YEAR) == year && c.get(GregorianCalendar.MONTH) == month) {
66             date.setText(String.format(Locale.US, "%d", day));
67         }
68         else {
69             date.setText(String.format(Locale.US, "%d/%d", month+1, day));
70         }
71
72         TextView description = Objects.requireNonNull(getActivity())
73                 .findViewById(R.id.new_transaction_description);
74         description.requestFocus();
75     }
76
77     @Override
78     public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
79         TextView date = Objects.requireNonNull(getActivity()).findViewById(R.id.new_transaction_date);
80
81         final Calendar c = GregorianCalendar.getInstance();
82         if ( c.get(GregorianCalendar.YEAR) == year && c.get(GregorianCalendar.MONTH) == monthOfYear) {
83             date.setText(String.format(Locale.US, "%d", dayOfMonth));
84         }
85         else {
86             date.setText(String.format(Locale.US, "%d/%d", monthOfYear+1, dayOfMonth));
87         }
88
89         TextView description = Objects.requireNonNull(getActivity())
90                 .findViewById(R.id.new_transaction_description);
91         description.requestFocus();
92
93         this.dismiss();
94     }
95 }