@Override
  public void onViewCreated(final View view, final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    amountCalculatorLink.setExchangeDirection(config.getLastExchangeDirection());
    amountCalculatorLink.requestFocus();
  }
  @Override
  public void onViewCreated(final View view, final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // don't call in onCreate() because ActionBarSherlock invokes onCreateOptionsMenu() too early
    setHasOptionsMenu(true);

    amountCalculatorLink.setExchangeDirection(config.getLastExchangeDirection());
    amountCalculatorLink.requestFocus();
  }
Ejemplo n.º 3
0
  private void updateView() {
    sendConfirmButton.setEnabled(everythingValid());

    if (address == null) {
      setVisible(sendToAddressView);
      setGone(sendToStaticAddressView);
      setVisible(scanQrCodeButton);
      setGone(eraseAddressButton);

      if (actionMode != null) {
        actionMode.finish();
        actionMode = null;
      }
    } else {
      setGone(sendToAddressView);
      setVisible(sendToStaticAddressView);
      sendToStaticAddressView.setAddressAndLabel(address);
      setGone(scanQrCodeButton);
      setVisible(eraseAddressButton);
    }

    if (sendCoinAmountView.resetType(sendAmountType)) {
      amountCalculatorLink.setExchangeRate(getCurrentRate());
    }

    startOrStopMarketRatePolling();

    // enable actions
    scanQrCodeButton.setEnabled(state == State.INPUT);
    eraseAddressButton.setEnabled(state == State.INPUT);
  }
        @Override
        public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) {
          if (data != null && data.getCount() > 0) {
            data.moveToFirst();
            final ExchangeRate exchangeRate = ExchangeRatesProvider.getExchangeRate(data);

            amountCalculatorLink.setExchangeRate(exchangeRate);
            updateView();
          }
        }
  @Override
  public void onPause() {
    loaderManager.destroyLoader(ID_RATE_LOADER);

    Nfc.unpublish(nfcManager, activity);

    amountCalculatorLink.setListener(null);

    super.onPause();
  }
Ejemplo n.º 6
0
  /** Decide if should show errors in the UI. */
  private boolean shouldShowErrors(boolean isTyping, Value amount) {
    if (amount != null && !amount.isZero() && !isAmountWithinLimits(amount)) {
      return true;
    }

    if (isTyping) return false;
    if (amountCalculatorLink.isEmpty()) return false;
    if (amount != null && amount.isZero()) return false;

    return true;
  }
  private byte[] determinePaymentRequest(final boolean includeBluetoothMac) {
    final Address address = application.determineSelectedAddress();
    final BigInteger amount = amountCalculatorLink.getAmount();

    return PaymentProtocol.createPaymentRequest(
            amount,
            address,
            null,
            includeBluetoothMac && bluetoothMac != null ? "bt:" + bluetoothMac : null)
        .toByteArray();
  }
  private byte[] determinePaymentRequest(final boolean includeBluetoothMac) {
    final ECKey key = (ECKey) addressView.getSelectedItem();
    final Address address = key.toAddress(Constants.NETWORK_PARAMETERS);

    return PaymentProtocol.createPaymentRequest(
            amountCalculatorLink.getAmount(),
            address,
            null,
            includeBluetoothMac && bluetoothMac != null ? "bt:" + bluetoothMac : null)
        .toByteArray();
  }
  private String determineBitcoinRequestStr(final boolean includeBluetoothMac) {
    final Address address = application.determineSelectedAddress();
    final BigInteger amount = amountCalculatorLink.getAmount();

    final StringBuilder uri =
        new StringBuilder(BitcoinURI.convertToBitcoinURI(address, amount, null, null));
    if (includeBluetoothMac && bluetoothMac != null) {
      uri.append(amount == null ? '?' : '&');
      uri.append(Bluetooth.MAC_URI_PARAM).append('=').append(bluetoothMac);
    }
    return uri.toString();
  }
Ejemplo n.º 10
0
 private void reset() {
   clearAddress(true);
   sendToAddressView.setVisibility(View.VISIBLE);
   sendToStaticAddressView.setVisibility(View.GONE);
   amountCalculatorLink.setPrimaryAmount(null);
   sendAmount = null;
   state = State.INPUT;
   addressError.setVisibility(View.GONE);
   amountError.setVisibility(View.GONE);
   amountWarning.setVisibility(View.GONE);
   updateView();
 }
Ejemplo n.º 11
0
  private void validateAmount(boolean isTyping) {
    Value amountParsed = amountCalculatorLink.getPrimaryAmount();

    if (isAmountValid(amountParsed)) {
      sendAmount = amountParsed;
      amountError.setVisibility(View.GONE);
      // Show warning that fees apply when entered the full amount inside the pocket
      if (canCompare(sendAmount, lastBalance) && sendAmount.compareTo(lastBalance) == 0) {
        amountWarning.setText(R.string.amount_warn_fees_apply);
        amountWarning.setVisibility(View.VISIBLE);
      } else {
        amountWarning.setVisibility(View.GONE);
      }
    } else {
      amountWarning.setVisibility(View.GONE);
      // ignore printing errors for null and zero amounts
      if (shouldShowErrors(isTyping, amountParsed)) {
        sendAmount = null;
        if (amountParsed == null) {
          amountError.setText(R.string.amount_error);
        } else if (amountParsed.isNegative()) {
          amountError.setText(R.string.amount_error_negative);
        } else if (!isAmountWithinLimits(amountParsed)) {
          String message = getString(R.string.error_generic);
          // If the amount is dust or lower than the deposit limit
          if (isAmountTooSmall(amountParsed)) {
            Value minAmount = getLowestAmount(amountParsed.type);
            message = getString(R.string.amount_error_too_small, minAmount.toFriendlyString());
          } else {
            // If we have the amount
            if (canCompare(lastBalance, amountParsed) && amountParsed.compareTo(lastBalance) > 0) {
              message =
                  getString(R.string.amount_error_not_enough_money, lastBalance.toFriendlyString());
            }

            if (marketInfo != null
                && canCompare(marketInfo.limit, amountParsed)
                && amountParsed.compareTo(marketInfo.limit) > 0) {
              message =
                  getString(R.string.trade_error_max_limit, marketInfo.limit.toFriendlyString());
            }
          }
          amountError.setText(message);
        } else { // Should not happen, but show a generic error
          amountError.setText(R.string.amount_error);
        }
        amountError.setVisibility(View.VISIBLE);
      } else {
        amountError.setVisibility(View.GONE);
      }
    }
    updateView();
  }
Ejemplo n.º 12
0
  private void setAmountForEmptyWallet() {
    updateBalance();
    if (state != State.INPUT || pocket == null || lastBalance == null) return;

    if (lastBalance.isZero()) {
      String message = getResources().getString(R.string.amount_error_not_enough_money_plain);
      Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show();
    } else {
      amountCalculatorLink.setPrimaryAmount(lastBalance);
      validateAmount();
    }
  }
  private String determineBitcoinRequestStr(final boolean includeBluetoothMac) {
    final ECKey key = (ECKey) addressView.getSelectedItem();
    final Address address = key.toAddress(Constants.NETWORK_PARAMETERS);
    final BigInteger amount = amountCalculatorLink.getAmount();

    final StringBuilder uri =
        new StringBuilder(BitcoinURI.convertToBitcoinURI(address, amount, null, null));
    if (includeBluetoothMac && bluetoothMac != null) {
      uri.append(amount == null ? '?' : '&');
      uri.append(Bluetooth.MAC_URI_PARAM).append('=').append(bluetoothMac);
    }
    return uri.toString();
  }
Ejemplo n.º 14
0
 private void requestFocusFirst() {
   if (!isOutputsValid()) {
     sendToAddressView.requestFocus();
   } else if (!isAmountValid()) {
     amountCalculatorLink.requestFocus();
     // FIXME causes problems in older Androids
     //            Keyboard.focusAndShowKeyboard(sendAmountView, getActivity());
   } else if (everythingValid()) {
     sendConfirmButton.requestFocus();
   } else {
     log.warn("unclear focus");
   }
 }
Ejemplo n.º 15
0
  @Override
  public void onPause() {
    if (pocket != null) pocket.removeEventListener(transactionChangeListener);
    transactionChangeListener.removeCallbacks();

    resolver.unregisterContentObserver(addressBookObserver);

    amountCalculatorLink.setListener(null);

    stopPolling();

    super.onPause();
  }
Ejemplo n.º 16
0
  public void reset() {
    // No-op if the view is not created
    if (getView() == null) return;

    clearAddress(true);
    hideTxMessage();
    sendToAddressView.setVisibility(View.VISIBLE);
    sendToStaticAddressView.setVisibility(View.GONE);
    amountCalculatorLink.setPrimaryAmount(null);
    sendAmount = null;
    state = State.INPUT;
    addressError.setVisibility(View.GONE);
    amountError.setVisibility(View.GONE);
    amountWarning.setVisibility(View.GONE);
    updateView();
  }
Ejemplo n.º 17
0
  @Override
  public void onResume() {
    super.onResume();

    amountCalculatorLink.setListener(amountsListener);

    resolver.registerContentObserver(
        AddressBookProvider.contentUri(getActivity().getPackageName()), true, addressBookObserver);

    if (pocket != null) {
      pocket.addEventListener(transactionChangeListener, Threading.SAME_THREAD);
    }

    updateBalance();
    updateView();
  }
  @Override
  public void onResume() {
    super.onResume();

    amountCalculatorLink.setListener(
        new CurrencyAmountView.Listener() {
          @Override
          public void changed() {
            updateView();
            updateShareIntent();
          }

          @Override
          public void focusChanged(final boolean hasFocus) {}
        });

    addressView.setOnItemSelectedListener(
        new OnItemSelectedListener() {
          @Override
          public void onItemSelected(
              final AdapterView<?> parent, final View view, final int position, final long id) {
            // ignore layout operations
            if (view == null) return;

            updateView();
            //				updateShareIntent();
          }

          @Override
          public void onNothingSelected(final AdapterView<?> parent) {}
        });

    loaderManager.initLoader(ID_RATE_LOADER, null, rateLoaderCallbacks);

    if (ENABLE_BLUETOOTH_LISTENING
        && bluetoothAdapter != null
        && bluetoothAdapter.isEnabled()
        && acceptBluetoothPaymentView.isChecked()) startBluetoothListening();

    updateView();
  }
  private void updateView() {
    if (!isResumed()) return;

    final String bitcoinRequest = determineBitcoinRequestStr(true);
    final byte[] paymentRequest = determinePaymentRequest(true);

    // update qr-code
    final int size = (int) (256 * getResources().getDisplayMetrics().density);
    final String qrContent;
    if (config.getQrPaymentRequestEnabled())
      qrContent = "RDDCOIN:-" + Qr.encodeBinary(paymentRequest);
    else qrContent = bitcoinRequest;
    qrCodeBitmap = Qr.bitmap(qrContent, size);
    qrView.setImageBitmap(qrCodeBitmap);

    // update nfc ndef message
    final boolean nfcSuccess =
        Nfc.publishMimeObject(
            nfcManager,
            activity,
            com.google.reddcoin.protocols.payments.PaymentProtocol.MIMETYPE_PAYMENTREQUEST,
            paymentRequest,
            false);

    // update initiate request message
    final SpannableStringBuilder initiateText =
        new SpannableStringBuilder(getString(R.string.request_coins_fragment_initiate_request_qr));
    if (nfcSuccess)
      initiateText
          .append(' ')
          .append(getString(R.string.request_coins_fragment_initiate_request_nfc));
    initiateRequestView.setText(initiateText);

    // focus linking
    final int activeAmountViewId = amountCalculatorLink.activeTextView().getId();
    acceptBluetoothPaymentView.setNextFocusUpId(activeAmountViewId);
  }
  @Override
  public void onResume() {
    super.onResume();

    amountCalculatorLink.setListener(
        new CurrencyAmountView.Listener() {
          @Override
          public void changed() {
            updateView();
          }

          @Override
          public void focusChanged(final boolean hasFocus) {}
        });

    loaderManager.initLoader(ID_RATE_LOADER, null, rateLoaderCallbacks);

    if (ENABLE_BLUETOOTH_LISTENING
        && bluetoothAdapter != null
        && bluetoothAdapter.isEnabled()
        && acceptBluetoothPaymentView.isChecked()) startBluetoothListening();

    updateView();
  }
  @Override
  public void onDestroyView() {
    super.onDestroyView();

    config.setLastExchangeDirection(amountCalculatorLink.getExchangeDirection());
  }
Ejemplo n.º 22
0
 private void onLocalExchangeRatesUpdate(HashMap<String, ExchangeRate> rates) {
   localRates = rates;
   if (state == State.INPUT) {
     amountCalculatorLink.setExchangeRate(getCurrentRate());
   }
 }
Ejemplo n.º 23
0
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_send, container, false);

    sendToAddressView = (AutoCompleteTextView) view.findViewById(R.id.send_to_address);
    sendToAddressViewAdapter = new ReceivingAddressViewAdapter(application);
    sendToAddressView.setAdapter(sendToAddressViewAdapter);
    sendToAddressView.setOnFocusChangeListener(receivingAddressListener);
    sendToAddressView.addTextChangedListener(receivingAddressListener);

    sendToStaticAddressView = (AddressView) view.findViewById(R.id.send_to_address_static);
    sendToStaticAddressView.setOnClickListener(addressOnClickListener);

    sendCoinAmountView = (AmountEditView) view.findViewById(R.id.send_coin_amount);
    sendCoinAmountView.resetType(sendAmountType);
    if (sendAmount != null) sendCoinAmountView.setAmount(sendAmount, false);

    AmountEditView sendLocalAmountView = (AmountEditView) view.findViewById(R.id.send_local_amount);
    sendLocalAmountView.setFormat(FiatType.FRIENDLY_FORMAT);

    amountCalculatorLink = new CurrencyCalculatorLink(sendCoinAmountView, sendLocalAmountView);
    amountCalculatorLink.setExchangeDirection(config.getLastExchangeDirection());
    amountCalculatorLink.setExchangeRate(getCurrentRate());

    addressError = (TextView) view.findViewById(R.id.address_error_message);
    addressError.setVisibility(View.GONE);
    amountError = (TextView) view.findViewById(R.id.amount_error_message);
    amountError.setVisibility(View.GONE);
    amountWarning = (TextView) view.findViewById(R.id.amount_warning_message);
    amountWarning.setVisibility(View.GONE);

    scanQrCodeButton = (ImageButton) view.findViewById(R.id.scan_qr_code);
    scanQrCodeButton.setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View v) {
            handleScan();
          }
        });

    eraseAddressButton = (ImageButton) view.findViewById(R.id.erase_address);
    eraseAddressButton.setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View v) {
            clearAddress(true);
            updateView();
          }
        });

    sendConfirmButton = (Button) view.findViewById(R.id.send_confirm);
    sendConfirmButton.setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View v) {
            validateAddress();
            validateAmount();
            if (everythingValid()) handleSendConfirm();
            else requestFocusFirst();
          }
        });

    return view;
  }