X-Git-Url: http://www.average.org/gitweb/?p=YkNeoCR.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fnfcauthcr%2FNFCAuthCREnroll.java;h=daea0d848c0bbe42103db9f6841ca48a3542dc57;hp=30077733db632e9dcd3307dc435661ef777603fd;hb=d68162938933f84fdde11f7a4ae5b919ccc469a1;hpb=709b304bdfc76061ace6d86d4d04f3cbdafbfa6a diff --git a/src/org/average/nfcauthcr/NFCAuthCREnroll.java b/src/org/average/nfcauthcr/NFCAuthCREnroll.java index 3007773..daea0d8 100644 --- a/src/org/average/nfcauthcr/NFCAuthCREnroll.java +++ b/src/org/average/nfcauthcr/NFCAuthCREnroll.java @@ -1,24 +1,138 @@ package org.average.nfcauthcr; -import android.app.Activity; +import java.util.Random; + import android.os.Bundle; +import android.app.Activity; +import android.app.AlertDialog; +import android.preference.PreferenceManager; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.content.DialogInterface; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.RadioButton; + +import org.average.nfcauthcr.NFCAuthCRCheck; + +public class NFCAuthCREnroll extends Activity { + + private final String TAG = getClass().getName(); + + private static boolean waitingForResult = false; + private static SharedPreferences prefs; + private static int slot; + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + Log.v(TAG, "Starting"); + prefs = PreferenceManager.getDefaultSharedPreferences(this); + } + + @Override + protected void onResume() { + super.onResume(); + setContentView(R.layout.main); + slot = prefs.getInt("slot_number", -1); + Log.v(TAG, "found saved slot value " + slot); + RadioButton btn = null; + switch (slot) { + case 1: btn = (RadioButton)findViewById(R.id.slot_1); + break; + case 2: btn = (RadioButton)findViewById(R.id.slot_2); + break; + } + 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"); + } + + public void onSlotSelectionClicked(View view) { + Log.v(TAG, "Radio Button selected"); + if (! ((RadioButton) view).isChecked()) return; + switch(view.getId()) { + case R.id.slot_1: slot=1; break; + case R.id.slot_2: slot=2; break; + } + Editor editor = prefs.edit(); + editor.putInt("slot_number", slot); + editor.commit(); + Log.v(TAG, "stored slot number " + slot); + } + + public void onEnrollClicked(View view) { + Log.v(TAG, "Enroll clicked"); + if (slot > 0) { + runEnrollment(slot); + } else { + showEnrollResult("Must specify which slot to use"); + } + } + + public void onActivityResult(int requestCode, int resultCode, + Intent intent) { + Log.v(TAG, "Got activity result"); + waitingForResult = false; + + 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) + "\""); + } -public class NFCAuthCREnroll extends Activity -{ - private static final String logTag = "NFCAuthCR"; + private void showEnrollResult(final String msg) { + Log.v(TAG, "Show result: \"" + msg + "\""); - private static boolean waitingForResult = false; + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.enrollresult); + builder.setMessage(msg); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + if (!waitingForResult) { finish(); } + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + } - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - setContentView(R.layout.main); - } + private void runEnrollment(int slot) { + Random rng = new Random(); + byte[] challenge = new byte[63]; + rng.nextBytes(challenge); + Log.v(TAG, "Random challenge: " + hex(challenge)); + Log.v(TAG, "Launching challenging activity"); + Intent crIntent = new Intent(this, NFCAuthCRCheck.class); + crIntent.putExtra("slot", slot); + crIntent.putExtra("challenge", challenge); + this.startActivityForResult(crIntent, 0); + waitingForResult = true; + } - @Override - protected void onStop() { - super.onStop(); - if (!waitingForResult) { finish(); } - } + private String hex(byte[] a) { + StringBuilder sb = new StringBuilder(); + if (a == null) return ""; + for (byte b: a) sb.append(String.format("%02x", b&0xff)); + return sb.toString(); + } }