package edu.princeton.bitcointwofactorauth.android;
import java.math.BigInteger;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class ConfirmActivity extends Activity {
private static final String TAG = "ConfirmActivity";
ProgressDialog progress;
TFAConnection connection;
TransactionData mTXData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_confirm);
connection = TFAConnection.getMainConnection();
mTXData = connection.mTransactionData;
BigInteger value = connection.mTransactionData.getValue();
String toAddress = connection.mTransactionData.getToAddress();
String fromAddress = connection.mTransactionData.getFromAddress();
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, ConfirmFragment.newInstance(fromAddress, toAddress, value)).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.confirm, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private class ConfirmTask extends AsyncTask<TFAConnection, String, Boolean> {
@Override
protected Boolean doInBackground(TFAConnection... arg0) {
try {
TFAConnection connection = arg0[0];
publishProgress("Signing Transaction");
connection.sendBoolean(true);
return connection.signTransaction(mTXData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onProgressUpdate(String... message) {
progress.setMessage(message[0]);
}
protected void onPostExecute(Boolean result) {
progress.dismiss();
returnToMain();
}
protected void onPreExecute() {
showDialog();
}
}
private class RejectTask extends AsyncTask<TFAConnection, String, Void> {
@Override
protected Void doInBackground(TFAConnection... arg0) {
try {
TFAConnection connection = arg0[0];
connection.sendBoolean(false);
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
returnToMain();
}
}
private void showDialog() {
progress = new ProgressDialog(this);
progress.setTitle("Signing");
progress.setMessage("Wait while transaction is signed...");
progress.show();
}
private void returnToMain() {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
public void confirmTransaction(View view) {
Log.d(TAG, "Confirming transaction");
new ConfirmTask().execute(connection);
}
public void rejectTransaction(View view) {
Log.d(TAG, "Rejecting transaction");
new RejectTask().execute(connection);
}
}