private void switchCurrency() {
    int newDecimalPlaces;
    BigDecimal newAmount;
    if (_enterFiatAmount) {
      // We are switching from Fiat to BTC

      // Set BTC button
      Button btCurrency = (Button) findViewById(R.id.btCurrency);
      btCurrency.setText(_mbwManager.getBitcoinDenomination().getUnicodeName());

      // Set BTC balance
      ((TextView) findViewById(R.id.tvMaxAmount)).setText(getBalanceString(_balance));

      newDecimalPlaces = _mbwManager.getBitcoinDenomination().getDecimalPlaces();
      Long satoshis = getSatoshisToSend();
      if (satoshis == null) {
        newAmount = null;
      } else {
        newAmount = BigDecimal.valueOf(satoshis).divide(BigDecimal.TEN.pow(newDecimalPlaces));
      }
    } else {
      // We are switching from BTC to Fiat

      // Set Fiat button
      Button btCurrency = (Button) findViewById(R.id.btCurrency);
      btCurrency.setText(_mbwManager.getFiatCurrency());

      // Set Fiat balance
      String fiatBalance = Utils.getFiatValueAsString(_balance, _oneBtcInFiat);
      String balanceString =
          getResources().getString(R.string.max_fiat, fiatBalance, _mbwManager.getFiatCurrency());
      ((TextView) findViewById(R.id.tvMaxAmount)).setText(balanceString);

      newDecimalPlaces = 2;
      Long fiatCents = getFiatCentsToSend();
      if (fiatCents == null) {
        newAmount = null;
      } else {
        newAmount = BigDecimal.valueOf(fiatCents).divide(BigDecimal.TEN.pow(newDecimalPlaces));
      }
    }
    // Note: Do the boolean switch before updating numberEntry, as there is
    // feedback from numberEntry back to ourselves
    _enterFiatAmount = !_enterFiatAmount;
    _numberEntry.setEntry(newAmount, newDecimalPlaces);

    // Check whether we can enable the paste button
    findViewById(R.id.btPaste).setEnabled(enablePaste());
  }
 private BigDecimal getAmountFromClipboard() {
   String content = Utils.getClipboardString(GetSendingAmountActivity.this);
   if (content.length() == 0) {
     return null;
   }
   String number = content.toString().trim();
   if (_enterFiatAmount) {
     number = Utils.truncateAndConvertDecimalString(number, 2);
     if (number == null) {
       return null;
     }
     BigDecimal value = new BigDecimal(number);
     if (value.compareTo(BigDecimal.ZERO) < 1) {
       return null;
     }
     return value;
   } else {
     number =
         Utils.truncateAndConvertDecimalString(
             number, _mbwManager.getBitcoinDenomination().getDecimalPlaces());
     if (number == null) {
       return null;
     }
     BigDecimal value = new BigDecimal(number);
     if (value.compareTo(BigDecimal.ZERO) < 1) {
       return null;
     }
     return value;
   }
 }
 @Override
 public void onClick(View arg0) {
   BigDecimal clipboardValue = getAmountFromClipboard();
   if (clipboardValue == null) {
     return;
   }
   _numberEntry.setEntry(
       clipboardValue, _mbwManager.getBitcoinDenomination().getDecimalPlaces());
 }
 private Long getSatoshisToSend() {
   BigDecimal entry = _numberEntry.getEntryAsBigDecimal();
   if (entry == null) {
     return null;
   }
   if (_enterFiatAmount) {
     return Utils.getSatoshis(entry, _oneBtcInFiat);
   } else {
     int decimals = _mbwManager.getBitcoinDenomination().getDecimalPlaces();
     Long satoshis = entry.movePointRight(decimals).longValue();
     return satoshis;
   }
 }
 private void maximizeAmount() {
   if (_maxSendable == 0) {
     String msg = getResources().getString(R.string.insufficient_funds);
     _toast.setText(msg);
     _toast.show();
   } else {
     if (_enterFiatAmount) {
       switchCurrency();
     }
     int newDecimalPlaces = _mbwManager.getBitcoinDenomination().getDecimalPlaces();
     BigDecimal newAmount =
         BigDecimal.valueOf(_maxSendable).divide(BigDecimal.TEN.pow(newDecimalPlaces));
     _numberEntry.setEntry(newAmount, newDecimalPlaces);
   }
 }
 // todo de-duplicate code
 private Long getFiatCentsToSend() {
   Double fiatAmount;
   BigDecimal entry = _numberEntry.getEntryAsBigDecimal();
   if (entry == null) {
     return null;
   }
   if (_enterFiatAmount) {
     fiatAmount = entry.doubleValue();
   } else {
     int decimals = _mbwManager.getBitcoinDenomination().getDecimalPlaces();
     Long satoshis = entry.movePointRight(decimals).longValue();
     fiatAmount = Utils.getFiatValue(satoshis, _oneBtcInFiat);
   }
   Double fiatCents = fiatAmount * 100;
   return fiatCents.longValue();
 }
  @SuppressLint("ShowToast")
  @Override
  public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.get_sending_amount_activity);
    _toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    _mbwManager = MbwManager.getInstance(getApplication());

    // Get intent parameters
    _wallet = Preconditions.checkNotNull((Wallet) getIntent().getSerializableExtra("wallet"));
    _spendable =
        Preconditions.checkNotNull(
            (SpendableOutputs) getIntent().getSerializableExtra("spendable"));
    // May be null
    _oneBtcInFiat = (Double) getIntent().getSerializableExtra("oneBtcInFiat");
    Long amount = (Long) getIntent().getSerializableExtra("amountToSend");

    // Load saved state
    if (savedInstanceState != null) {
      amount = (Long) savedInstanceState.getSerializable("amountToSend");
    }

    // Construct list of outputs
    _outputs = new LinkedList<UnspentTransactionOutput>();
    _outputs.addAll(_spendable.unspent);
    _outputs.addAll(_spendable.change);

    // Construct private key ring
    _privateKeyRing = _wallet.getPrivateKeyRing();

    // Determine and set balance
    _balance = 0;
    for (UnspentTransactionOutput out : _outputs) {
      _balance += out.value;
    }
    ((TextView) findViewById(R.id.tvMaxAmount)).setText(getBalanceString(_balance));

    // Calculate the maximum amount we can send
    _maxSendable = getMaxAmount();

    // Set amount
    String amountString;
    if (amount != null) {
      amountString = CoinUtil.valueString(amount, _mbwManager.getBitcoinDenomination(), false);
    } else {
      amountString = "";
    }
    TextView tvAmount = (TextView) findViewById(R.id.tvAmount);
    tvAmount.setText(amountString);

    _numberEntry =
        new NumberEntry(
            _mbwManager.getBitcoinDenomination().getDecimalPlaces(), this, this, amountString);
    checkTransaction();

    // Make both currency button and invisible right button at top a listener
    // switch currency
    Button btCurrency = (Button) findViewById(R.id.btCurrency);
    btCurrency.setText(_mbwManager.getBitcoinDenomination().getUnicodeName());
    btCurrency.setEnabled(_oneBtcInFiat != null);
    btCurrency.setOnClickListener(switchCurrencyListener);
    findViewById(R.id.btRight).setOnClickListener(switchCurrencyListener);

    // Make both paste button and invisible left button at top a listener to
    // paste from clipboard
    Button btPaste = (Button) findViewById(R.id.btPaste);
    btPaste.setOnClickListener(pasteListener);
    findViewById(R.id.btLeft).setOnClickListener(pasteListener);

    // Next Button
    findViewById(R.id.btOk).setOnClickListener(okClickListener);

    // Max Button
    findViewById(R.id.btMax).setOnClickListener(maxClickListener);
  }