14
14
import android.content.DialogInterface;
15
15
import android.content.Intent;
16
16
import android.database.Cursor;
17
import android.os.Bundle;
17
18
import android.util.Log;
18
19
import android.view.Menu;
19
20
import android.view.MenuItem;
31
32
import ru.orangesoftware.financisto.widget.AmountInput;
32
33
import ru.orangesoftware.financisto.widget.AmountInput.OnAmountChangedListener;
34
36
import java.util.*;
35
import java.util.concurrent.atomic.AtomicLong;
37
38
import static ru.orangesoftware.financisto.model.Category.isSplit;
38
39
import static ru.orangesoftware.financisto.utils.AndroidUtils.isSupportedApiLevel;
42
43
public class TransactionActivity extends AbstractTransactionActivity {
44
45
public static final String CURRENT_BALANCE_EXTRA = "accountCurrentBalance";
46
public static final String ACTIVITY_STATE = "ACTIVITY_STATE";
46
48
private static final int MENU_TURN_GPS_ON = Menu.FIRST;
47
49
private static final int SPLIT_REQUEST = 5001;
49
private final AtomicLong idSequence = new AtomicLong();
51
private long idSequence = 0;
50
52
private final IdentityHashMap<View, Transaction> viewToSplitMap = new IdentityHashMap<View, Transaction>();
52
54
private AutoCompleteTextView payeeText;
439
441
private void createSplit(boolean asTransfer) {
440
442
Transaction split = new Transaction();
441
split.id = idSequence.decrementAndGet();
443
split.id = --idSequence;
442
444
split.fromAccountId = selectedAccountId;
443
445
split.fromAmount = split.unsplitAmount = calculateUnsplitAmount();
444
446
editSplit(split, asTransfer ? SplitTransferActivity.class : SplitTransactionActivity.class);
467
protected void onSaveInstanceState(Bundle outState) {
468
super.onSaveInstanceState(outState);
469
Log.d("Financisto", "onSaveInstanceState");
471
if (selectedCategoryId == Category.SPLIT_CATEGORY_ID) {
472
Log.d("Financisto", "Saving splits...");
473
ActivityState state = new ActivityState();
474
state.categoryId = selectedCategoryId;
475
state.idSequence = idSequence;
476
state.splits = new ArrayList<Transaction>(viewToSplitMap.values());
477
ByteArrayOutputStream s = new ByteArrayOutputStream();
479
ObjectOutputStream out = new ObjectOutputStream(s);
480
out.writeObject(state);
481
outState.putByteArray(ACTIVITY_STATE, s.toByteArray());
486
} catch (IOException e) {
487
Log.e("Financisto", "Unable to save state", e);
492
protected void onRestoreInstanceState(Bundle savedInstanceState) {
493
super.onRestoreInstanceState(savedInstanceState);
494
Log.d("Financisto", "onRestoreInstanceState");
495
byte[] bytes = savedInstanceState.getByteArray(ACTIVITY_STATE);
498
ByteArrayInputStream s = new ByteArrayInputStream(bytes);
500
ObjectInputStream in = new ObjectInputStream(s);
501
ActivityState state = (ActivityState) in.readObject();
502
if (state.categoryId == Category.SPLIT_CATEGORY_ID) {
503
Log.d("Financisto", "Restoring splits...");
504
viewToSplitMap.clear();
505
splitsLayout.removeAllViews();
506
idSequence = state.idSequence;
507
selectCategory(state.categoryId);
508
for (Transaction split : state.splits) {
509
addOrEditSplit(split);
515
} catch (Exception e) {
516
Log.e("Financisto", "Unable to restore state", e);
464
521
private void addOrEditSplit(Transaction split) {
465
522
View v = findView(split);