import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
-import android.content.Context;
-import android.content.ComponentName;
+import android.preference.PreferenceManager;
import android.content.Intent;
-import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.DialogInterface;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
-import android.widget.TextView;
import android.widget.RadioButton;
-import org.average.nfcauthcr.Check;
-import org.average.nfcauthcr.CheckConnector;
+import org.average.nfcauthcr.QueryCrToken;
public class Enroll extends Activity {
private final String TAG = getClass().getName();
- private Enroll thisActivity = this;
private static boolean waitingForResult = false;
private static SharedPreferences prefs;
private static int slot;
- private AlertDialog swipeDialog;
- private CheckConnector checkConnector;
- private boolean mBound = false;
- private byte[] challenge = new byte[63];
-
- private ServiceConnection mConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName className,
- IBinder service) {
- checkConnector = (CheckConnector) service;
- checkConnector.setCaller(activity);
- mBound = true;
- }
-
- @Override
- public void onServiceDisconnected(ComponentName arg0) {
- mBound = false;
- }
- };
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Log.v(TAG, "Starting");
prefs = PreferenceManager.getDefaultSharedPreferences(this);
- Intent intent = new Intent(this, Check.class);
- bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
if (btn != null) btn.setChecked(true);
}
- @Override
- protected void onPause() {
- super.onPause();
- Log.v(TAG, "Going inactive, try to stop");
- if (!waitingForResult) {
- finish();
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- Log.v(TAG, "Stop requested");
- if (mBound) {
- unbindService(mConnection);
- mBound = false;
- }
- }
-
public void onSlotSelectionClicked(View view) {
Log.v(TAG, "Radio Button selected");
if (! ((RadioButton) view).isChecked()) return;
public void onEnrollClicked(View view) {
Log.v(TAG, "Enroll clicked");
if (slot > 0) {
- runEnrollment();
+ runEnrollment(slot);
} else {
showEnrollResult(R.string.need_slot);
}
}
- public void runCallback(int rc, byte[] response) {
- Log.v(TAG, "Got response");
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent intent) {
+ Log.v(TAG, "Got activity result");
waitingForResult = false;
- if(swipeDialog != null) {
- swipeDialog.dismiss();
- swipeDialog = null;
- }
- if (rc != 0) {
- Log.v(TAG, "Error result code " + rc);
+
+ if (resultCode != RESULT_OK) {
+ Log.v(TAG, "Error result code " + resultCode);
return;
}
+ byte[] challenge = intent.getByteArrayExtra("challenge");
Log.v(TAG, "Challenge is \"" + hex(challenge) + "\"");
+ byte[] response = intent.getByteArrayExtra("response");
Log.v(TAG, "Response is \"" + hex(response) + "\"");
Editor editor = prefs.edit();
editor.putString("challenge", hex(challenge));
dialog.show();
}
- private void runEnrollment() {
+ private void runEnrollment(int slot) {
Random rng = new Random();
+ byte[] challenge = new byte[63];
rng.nextBytes(challenge);
Log.v(TAG, "Random challenge: " + hex(challenge));
+ Intent crIntent = new Intent(this, QueryCrToken.class);
+ crIntent.putExtra("challenge", challenge);
waitingForResult = true;
- checkConnector.runEnroll(slot, challenge);
- if (swipeDialog != null) swipeDialog.dismiss();
- swipeDialog = makeDialog();
- swipeDialog.show();
- }
-
- private AlertDialog makeDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.challenging);
- builder.setMessage(R.string.swipe);
- builder.setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- Log.v(TAG, "unbind service FIXME");
- }
- });
- return builder.create();
+ this.startActivityForResult(crIntent, 0);
}
private String hex(byte[] a) {