package com.mygeopay.wallet.ui; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.support.v4.app.DialogFragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.mygeopay.core.coins.CoinID; import com.mygeopay.core.coins.CoinType; import com.mygeopay.core.wallet.Wallet; import com.mygeopay.core.wallet.WalletAccount; import com.mygeopay.wallet.Constants; import com.mygeopay.wallet.R; import com.mygeopay.wallet.tasks.AddCoinTask; import java.util.ArrayList; import javax.annotation.CheckForNull; import javax.annotation.Nullable; public class AddCoinsActivity extends BaseWalletActivity implements SelectCoinsFragment.Listener { @CheckForNull private Wallet wallet; private MyAddCoinTask addCoinTask; private CoinType selectedCoin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_coins); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new SelectCoinsFragment()) .commit(); } getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(false); wallet = getWalletApplication().getWallet(); } @Override public void onCoinSelection(Bundle args) { ArrayList<String> ids = args.getStringArrayList(Constants.ARG_MULTIPLE_COIN_IDS); // For new we add only one coin at a time selectedCoin = CoinID.typeFromId(ids.get(0)); if (wallet.isAccountExists(selectedCoin)) { new AlertDialog.Builder(this) .setTitle(getString(R.string.coin_already_added_title, selectedCoin.getName())) .setMessage(R.string.coin_already_added) .setPositiveButton(R.string.button_ok, null) .create().show(); return; } if (wallet.isEncrypted()) { addCoinPasswordDialog.show(getSupportFragmentManager(), null); } else { new AlertDialog.Builder(this) .setTitle(getString(R.string.adding_coin_confirmation_title, selectedCoin.getName())) .setPositiveButton(R.string.button_add, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { addCoin(null); } }) .setNegativeButton(R.string.button_cancel, null) .create().show(); } } private void addCoin(@Nullable String password) { if (selectedCoin != null && addCoinTask == null) { addCoinTask = new MyAddCoinTask(selectedCoin, wallet, password); addCoinTask.execute(); } } private class MyAddCoinTask extends AddCoinTask { private Dialogs.ProgressDialogFragment verifyDialog; public MyAddCoinTask(CoinType type, Wallet wallet, @Nullable String password) { super(type, wallet, password); } @Override protected void onPreExecute() { verifyDialog = Dialogs.ProgressDialogFragment.newInstance( getResources().getString(R.string.adding_coin_working, type.getName())); verifyDialog.show(getSupportFragmentManager(), null); } @Override protected void onPostExecute(Exception e, WalletAccount newAccount) { verifyDialog.dismiss(); result(newAccount, e == null ? null : e.getMessage()); } } public void result(WalletAccount newAccount, @Nullable String errorMessage) { final Intent result = new Intent(); if (errorMessage != null) { String message = getResources().getString(R.string.add_coin_error, selectedCoin.getName(), errorMessage); Toast.makeText(AddCoinsActivity.this, message, Toast.LENGTH_LONG).show(); setResult(RESULT_CANCELED, result); } else { result.putExtra(Constants.ARG_ACCOUNT_ID, newAccount.getId()); setResult(RESULT_OK, result); } finish(); } private DialogFragment addCoinPasswordDialog = new DialogFragment() { public TextView passwordView; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final LayoutInflater inflater = LayoutInflater.from(getActivity()); final View view = inflater.inflate(R.layout.get_password_dialog, null); passwordView = (TextView) view.findViewById(R.id.password); return new DialogBuilder(getActivity()) .setTitle(getString(R.string.adding_coin_confirmation_title, selectedCoin.getName())) .setView(view) .setNegativeButton(R.string.button_cancel, null) .setPositiveButton(R.string.button_add, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { addCoin(passwordView.getText().toString()); } }).create(); } }; }