Skip to content

Commit b1b5d57

Browse files
committed
Fixed: crash after exporting transactions (in some cases)
Updated betterpickers library Use better dialogs for date and time when creating new transactions
1 parent 66a8144 commit b1b5d57

3 files changed

Lines changed: 41 additions & 41 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ dependencies {
154154
compile('com.android.support:support-v4:22.1.1',
155155
'com.actionbarsherlock:actionbarsherlock:4.4.0@aar',
156156
'com.viewpagerindicator:library:2.4.1@aar',
157-
'com.doomonafireball.betterpickers:library:1.5.2',
157+
'com.doomonafireball.betterpickers:library:1.6.0',
158158
'com.commonsware.cwac:merge:1.1.+',
159159
'com.github.PhilJay:MPAndroidChart:v2.1.0',
160160
'joda-time:joda-time:2.7',

app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.gnucash.android.export.xml.GncXmlExporter;
5656
import org.gnucash.android.model.Transaction;
5757
import org.gnucash.android.ui.account.AccountsActivity;
58+
import org.gnucash.android.ui.account.AccountsListFragment;
5859
import org.gnucash.android.ui.settings.SettingsActivity;
5960
import org.gnucash.android.ui.transaction.TransactionsActivity;
6061

@@ -233,7 +234,9 @@ protected void onPostExecute(Boolean exportResult) {
233234

234235
//now refresh the respective views
235236
if (mContext instanceof AccountsActivity){
236-
((AccountsActivity) mContext).getCurrentAccountListFragment().refresh();
237+
AccountsListFragment fragment = ((AccountsActivity) mContext).getCurrentAccountListFragment();
238+
if (fragment != null)
239+
fragment.refresh();
237240
}
238241
if (mContext instanceof TransactionsActivity){
239242
((TransactionsActivity) mContext).refresh();

app/src/main/java/org/gnucash/android/ui/transaction/TransactionFormFragment.java

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,11 @@
1616

1717
package org.gnucash.android.ui.transaction;
1818

19-
import android.app.DatePickerDialog;
20-
import android.app.DatePickerDialog.OnDateSetListener;
21-
import android.app.TimePickerDialog;
22-
import android.app.TimePickerDialog.OnTimeSetListener;
2319
import android.content.Context;
2420
import android.content.SharedPreferences;
2521
import android.database.Cursor;
2622
import android.os.Bundle;
2723
import android.preference.PreferenceManager;
28-
import android.support.v4.app.DialogFragment;
2924
import android.support.v4.app.FragmentManager;
3025
import android.support.v4.app.FragmentTransaction;
3126
import android.support.v4.widget.SimpleCursorAdapter;
@@ -41,19 +36,19 @@
4136
import android.widget.AutoCompleteTextView;
4237
import android.widget.Button;
4338
import android.widget.CheckBox;
44-
import android.widget.DatePicker;
4539
import android.widget.EditText;
4640
import android.widget.FilterQueryProvider;
4741
import android.widget.Spinner;
4842
import android.widget.TextView;
49-
import android.widget.TimePicker;
5043
import android.widget.Toast;
5144

5245
import com.actionbarsherlock.app.ActionBar;
5346
import com.actionbarsherlock.app.SherlockFragment;
5447
import com.actionbarsherlock.view.Menu;
5548
import com.actionbarsherlock.view.MenuInflater;
5649
import com.actionbarsherlock.view.MenuItem;
50+
import com.doomonafireball.betterpickers.calendardatepicker.CalendarDatePickerDialog;
51+
import com.doomonafireball.betterpickers.radialtimepicker.RadialTimePickerDialog;
5752
import com.doomonafireball.betterpickers.recurrencepicker.EventRecurrence;
5853
import com.doomonafireball.betterpickers.recurrencepicker.EventRecurrenceFormatter;
5954
import com.doomonafireball.betterpickers.recurrencepicker.RecurrencePickerDialog;
@@ -70,9 +65,7 @@
7065
import org.gnucash.android.model.Transaction;
7166
import org.gnucash.android.model.TransactionType;
7267
import org.gnucash.android.ui.UxArgument;
73-
import org.gnucash.android.ui.transaction.dialog.DatePickerDialogFragment;
7468
import org.gnucash.android.ui.transaction.dialog.SplitEditorDialogFragment;
75-
import org.gnucash.android.ui.transaction.dialog.TimePickerDialogFragment;
7669
import org.gnucash.android.ui.util.AmountInputFormatter;
7770
import org.gnucash.android.ui.util.RecurrenceParser;
7871
import org.gnucash.android.ui.util.TransactionTypeToggleButton;
@@ -90,14 +83,14 @@
9083
import java.util.GregorianCalendar;
9184
import java.util.List;
9285
import java.util.Locale;
93-
import java.util.Objects;
9486

9587
/**
9688
* Fragment for creating or editing transactions
9789
* @author Ngewi Fet <ngewif@gmail.com>
9890
*/
9991
public class TransactionFormFragment extends SherlockFragment implements
100-
OnDateSetListener, OnTimeSetListener, RecurrencePickerDialog.OnRecurrenceSetListener {
92+
CalendarDatePickerDialog.OnDateSetListener, RadialTimePickerDialog.OnTimeSetListener,
93+
RecurrencePickerDialog.OnRecurrenceSetListener {
10194

10295
public static final String FRAGMENT_TAG_SPLITS_EDITOR = "splits_editor";
10396
private static final String FRAGMENT_TAG_RECURRENCE_PICKER = "recurrence_picker";
@@ -570,17 +563,22 @@ public void onClick(View view) {
570563

571564
@Override
572565
public void onClick(View v) {
573-
FragmentTransaction ft = getFragmentManager().beginTransaction();
574-
575566
long dateMillis = 0;
576567
try {
577568
Date date = DATE_FORMATTER.parse(mDateTextView.getText().toString());
578569
dateMillis = date.getTime();
579570
} catch (ParseException e) {
580571
Log.e(getTag(), "Error converting input time to Date object");
581572
}
582-
DialogFragment newFragment = DatePickerDialogFragment.newInstance(TransactionFormFragment.this, dateMillis);
583-
newFragment.show(ft, "date_dialog");
573+
Calendar calendar = Calendar.getInstance();
574+
calendar.setTimeInMillis(dateMillis);
575+
576+
int year = calendar.get(Calendar.YEAR);
577+
int monthOfYear = calendar.get(Calendar.MONTH);
578+
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
579+
CalendarDatePickerDialog datePickerDialog = CalendarDatePickerDialog.newInstance(TransactionFormFragment.this,
580+
year, monthOfYear, dayOfMonth);
581+
datePickerDialog.show(getFragmentManager(), "date_picker_fragment");
584582
}
585583
});
586584

@@ -596,8 +594,14 @@ public void onClick(View v) {
596594
} catch (ParseException e) {
597595
Log.e(getTag(), "Error converting input time to Date object");
598596
}
599-
DialogFragment fragment = TimePickerDialogFragment.newInstance(TransactionFormFragment.this, timeMillis);
600-
fragment.show(ft, "time_dialog");
597+
598+
Calendar calendar = Calendar.getInstance();
599+
calendar.setTimeInMillis(timeMillis);
600+
601+
RadialTimePickerDialog timePickerDialog = RadialTimePickerDialog.newInstance(
602+
TransactionFormFragment.this, calendar.get(Calendar.HOUR_OF_DAY),
603+
calendar.get(Calendar.MINUTE), true);
604+
timePickerDialog.show(getFragmentManager(), "time_picker_dialog_fragment");
601605
}
602606
});
603607

@@ -894,29 +898,22 @@ private void finish() {
894898
}
895899
}
896900

897-
/**
898-
* Callback when the date is set in the {@link DatePickerDialog}
899-
*/
900-
@Override
901-
public void onDateSet(DatePicker view, int year, int monthOfYear,
902-
int dayOfMonth) {
903-
Calendar cal = new GregorianCalendar(year, monthOfYear, dayOfMonth);
904-
mDateTextView.setText(DATE_FORMATTER.format(cal.getTime()));
905-
mDate.set(Calendar.YEAR, year);
906-
mDate.set(Calendar.MONTH, monthOfYear);
907-
mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
908-
}
901+
@Override
902+
public void onDateSet(CalendarDatePickerDialog calendarDatePickerDialog, int year, int monthOfYear, int dayOfMonth) {
903+
Calendar cal = new GregorianCalendar(year, monthOfYear, dayOfMonth);
904+
mDateTextView.setText(DATE_FORMATTER.format(cal.getTime()));
905+
mDate.set(Calendar.YEAR, year);
906+
mDate.set(Calendar.MONTH, monthOfYear);
907+
mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
908+
}
909909

910-
/**
911-
* Callback when the time is set in the {@link TimePickerDialog}
912-
*/
913-
@Override
914-
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
915-
Calendar cal = new GregorianCalendar(0, 0, 0, hourOfDay, minute);
916-
mTimeTextView.setText(TIME_FORMATTER.format(cal.getTime()));
917-
mTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
918-
mTime.set(Calendar.MINUTE, minute);
919-
}
910+
@Override
911+
public void onTimeSet(RadialTimePickerDialog radialTimePickerDialog, int hourOfDay, int minute) {
912+
Calendar cal = new GregorianCalendar(0, 0, 0, hourOfDay, minute);
913+
mTimeTextView.setText(TIME_FORMATTER.format(cal.getTime()));
914+
mTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
915+
mTime.set(Calendar.MINUTE, minute);
916+
}
920917

921918
/**
922919
* Strips formatting from a currency string.

0 commit comments

Comments
 (0)