package com.mygeopay.wallet.ui; 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 com.mygeopay.core.coins.CoinType; import com.mygeopay.core.util.GenericUtils; import com.mygeopay.wallet.Constants; import com.mygeopay.wallet.R; import com.mygeopay.wallet.ui.widget.AddressView; import org.bitcoinj.core.Address; import org.bitcoinj.core.AddressFormatException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; /** * @author John L. Jegutanis */ abstract public class SelectCoinTypeDialog extends DialogFragment { private static final Logger log = LoggerFactory.getLogger(SelectCoinTypeDialog.class); public SelectCoinTypeDialog() {} @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); DialogBuilder builder = new DialogBuilder(getActivity()); String addressStr = args.getString(Constants.ARG_ADDRESS_STRING); List<CoinType> possibleTypes; try { possibleTypes = GenericUtils.getPossibleTypes(addressStr); } catch (AddressFormatException e) { log.error("Supplied invalid address: " + addressStr); possibleTypes = new ArrayList<>(0); } final LayoutInflater inflater = LayoutInflater.from(getActivity()); final View view = inflater.inflate(R.layout.select_coin_for_address, null); ViewGroup container = (ViewGroup) view.findViewById(R.id.pay_as_layout); int paddingBottom = getResources().getDimensionPixelSize(R.dimen.activity_vertical_margin); AddressView addressView = null; for (CoinType type : possibleTypes) { try { final Address address = new Address(type, addressStr); addressView = new AddressView(getActivity()); addressView.setPadding(0, 0, 0, paddingBottom); addressView.setAddressAndLabel(address); addressView.setIconShown(true); addressView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onAddressSelected(address); SelectCoinTypeDialog.this.dismiss(); } }); container.addView(addressView); } catch (AddressFormatException e) { /* should not happen*/ } } if (addressView != null) addressView.setPadding(0, 0, 0, 0); // remove padding from last one return builder.setTitle(R.string.ambiguous_address_title).setView(view).create(); } abstract public void onAddressSelected(Address address); }