package com.mygeopay.wallet.ui; import android.os.Bundle; import com.mygeopay.core.coins.Value; import com.mygeopay.core.wallet.WalletAccount; import com.mygeopay.wallet.Constants; import com.mygeopay.wallet.ExchangeHistoryProvider.ExchangeEntry; import com.mygeopay.wallet.R; import org.bitcoinj.crypto.KeyCrypterException; import javax.annotation.Nullable; public class TradeActivity extends BaseWalletActivity implements TradeSelectFragment.Listener, MakeTransactionFragment.Listener, TradeStatusFragment.Listener { private int containerRes; private enum State { INPUT, PREPARATION, SENDING, SENT, FAILED } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_trade); containerRes = R.id.container; if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(containerRes, new TradeSelectFragment()) .commit(); } } @Override public void onMakeTrade(WalletAccount fromAccount, WalletAccount toAccount, Value amount) { Bundle args = new Bundle(); args.putString(Constants.ARG_ACCOUNT_ID, fromAccount.getId()); args.putString(Constants.ARG_SEND_TO_ACCOUNT_ID, toAccount.getId()); if (amount.type.equals(fromAccount.getCoinType())) { // TODO set the empty wallet flag in the fragment // Decide if emptying wallet or not Value lastBalance = fromAccount.getBalance(); if (amount.compareTo(lastBalance) == 0) { args.putSerializable(Constants.ARG_EMPTY_WALLET, true); } else { args.putSerializable(Constants.ARG_SEND_VALUE, amount); } } else if (amount.type.equals(toAccount.getCoinType())) { args.putSerializable(Constants.ARG_SEND_VALUE, amount); } else { throw new IllegalStateException("Amount does not have the expected type: " + amount.type); } replaceFragment(MakeTransactionFragment.newInstance(args), containerRes); } @Override public void onSignResult(@Nullable Exception error, ExchangeEntry exchangeEntry) { if (error != null) { getSupportFragmentManager().popBackStack(); // Ignore wallet decryption errors if (!(error instanceof KeyCrypterException)) { DialogBuilder builder = DialogBuilder.warn(this, R.string.trade_error); builder.setMessage(getString(R.string.trade_error_sign_tx_message, error.getMessage())); builder.setPositiveButton(R.string.button_ok, null) .create().show(); } } else if (exchangeEntry != null) { getSupportFragmentManager().popBackStack(); replaceFragment(TradeStatusFragment.newInstance(exchangeEntry, true), containerRes); } } @Override public void onFinish() { finish(); } }