package com.mygeopay.wallet.ui;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.mygeopay.core.coins.CoinType;
import com.mygeopay.core.uri.CoinURI;
import com.mygeopay.core.uri.CoinURIParseException;
import com.mygeopay.core.wallet.WalletAccount;
import com.mygeopay.wallet.Constants;
import com.mygeopay.wallet.R;
import com.mygeopay.wallet.WalletApplication;
import com.mygeopay.wallet.ui.widget.CoinListItem;
import com.mygeopay.wallet.util.UiUtils;
/**
* @author John L. Jegutanis
*/
public abstract class PayWithDialog extends DialogFragment {
public PayWithDialog() {}
@Override @NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
final WalletApplication app = (WalletApplication) getActivity().getApplication();
final LayoutInflater inflater = LayoutInflater.from(getActivity());
final View view = inflater.inflate(R.layout.select_pay_with, null);
final CoinURI uri;
final CoinType type;
try {
uri = new CoinURI(getArguments().getString(Constants.ARG_URI));
type = uri.getType();
} catch (final CoinURIParseException e) {
return new DialogBuilder(getActivity())
.setMessage(getString(R.string.scan_error, e.getMessage()))
.create();
}
// Setup accounts that we can send from directly
ViewGroup typeAccounts = (ViewGroup) view.findViewById(R.id.pay_with_layout);
boolean canSend = false;
for (WalletAccount account : app.getAccounts(uri.getType())) {
if (account.getBalance().isPositive()) {
addPayWithAccountRow(typeAccounts, account, uri);
canSend = true;
}
}
if (!canSend) {
UiUtils.setGone(view.findViewById(R.id.pay_with_title));
UiUtils.setGone(typeAccounts);
}
// Setup possible exchange accounts
ViewGroup exchangeAccounts = (ViewGroup) view.findViewById(R.id.exchange_and_pay_layout);
boolean canExchange = false;
for (WalletAccount account : app.getAllAccounts()) {
if (!account.isType(type) && account.getBalance().isPositive()) {
addPayWithAccountRow(exchangeAccounts, account, uri);
canExchange = true;
}
}
if (canExchange) {
TextView poweredByShapeShift = (TextView) view.findViewById(R.id.powered_by_shapeshift);
poweredByShapeShift.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.about_shapeshift_title)
.setMessage(R.string.about_shapeshift_message)
.setPositiveButton(R.string.button_ok, null)
.create().show();
}
});
} else {
UiUtils.setGone(view.findViewById(R.id.exchange_and_pay_title));
UiUtils.setGone(exchangeAccounts);
UiUtils.setGone(view.findViewById(R.id.powered_by_shapeshift));
}
return new DialogBuilder(getActivity())
.setView(view)
.create();
}
private void addPayWithAccountRow(final ViewGroup container, final WalletAccount account,
final CoinURI uri) {
CoinListItem row = new CoinListItem(getActivity());
row.setAccount(account);
row.setExchangeRate(null);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
payWith(account, uri);
dismiss();
}
});
container.addView(row);
}
abstract public void payWith(WalletAccount account, CoinURI uri);
}