package no.ntnu.item.csv.firststart; import no.ntnu.item.csv.CSVActivity; import no.ntnu.item.csv.GetRootCapActivity; import no.ntnu.item.csv.R; import no.ntnu.item.csv.SetPasswordActivity; import no.ntnu.item.csv.capability.Capability; import no.ntnu.item.csv.capability.CapabilityImpl; import no.ntnu.item.csv.contrib.com.google.zxing.integration.android.IntentIntegrator; import no.ntnu.item.csv.credentials.DisplayCapability; import no.ntnu.item.csv.credentials.LocalCredentials; import no.ntnu.item.csv.workers.CreateRootCapTask; import no.ntnu.item.csv.workers.ImportShareTask; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.ComponentName; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class FirstStartActivity extends Activity { private static final int REQUEST_ROOTCAP = 1; private static final int REQUEST_BARCODE = 0; public static final String ROOT_CAP_STRING_KEY = "rootcapstring"; public Capability rootCapability; public String rootCapString; private Button bCreateNew; private Button bImport; private Button bShow; private Dialog progress; private static final int PROGRESSBAR_GENERATE = 2; private static final int SET_PASSWORD_NEW_ROOT = 3; private static final int SET_PASSWORD_OLD_ROOT = 4; private static final int MENU_SHOWROOTCAP = 5; private static final int REQUEST_SHOWROOTCAP = 6; private static final int MENU_IMPORTROOTCAP = 7; private ProgressDialog progressDialog; private ComponentName caller; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.firststart); bCreateNew = (Button) findViewById(R.id.firstStart_new); bImport = (Button) findViewById(R.id.firstStart_import); bShow = (Button) findViewById(R.id.firstStart_show); this.caller = getCallingActivity(); if (CSVActivity.initiated()) { bShow.setEnabled(true); bShow.setVisibility(View.VISIBLE); } bCreateNew.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(FirstStartActivity.this, SetPasswordActivity.class); startActivityForResult(intent, SET_PASSWORD_NEW_ROOT); } }); bImport.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(MENU_IMPORTROOTCAP); } }); bShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(MENU_SHOWROOTCAP); } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case PROGRESSBAR_GENERATE: { this.progressDialog = new ProgressDialog( FirstStartActivity.this.getApplicationContext()); this.progressDialog.setTitle("Title"); this.progressDialog.setMessage("Message"); return this.progressDialog; } case MENU_SHOWROOTCAP: { final CharSequence[] items = { "Generate Barcode", "Display in Plain Text" }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Choose Display Method"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { switch (item) { case 0: { IntentIntegrator.shareText(FirstStartActivity.this, CSVActivity.fm.getRootFolder().getCapability() .toString()); break; } case 1: { DisplayCapability.displayCapability( FirstStartActivity.this, CSVActivity.fm.getRootFolder().getCapability()) .show(); break; } } } }); return builder.create(); } case MENU_IMPORTROOTCAP: { final CharSequence[] items = { "From Barcode", "From Plain Input Text" }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Choose Import Method"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { switch (item) { case 0: { Intent intent = new Intent( "com.google.zxing.client.android.SCAN"); intent.setPackage("com.google.zxing.client.android"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, REQUEST_BARCODE); break; } case 1: { Intent intent = new Intent(); intent.setClass(FirstStartActivity.this, ManualCapabilityImportActivity.class); startActivityForResult(intent, 1); break; } } } }); return builder.create(); } } return super.onCreateDialog(id); } private void done() { Intent intent = getIntent(); if (rootCapString == null) { rootCapString = rootCapability.toString(); } intent.putExtra(GetRootCapActivity.ROOTCAP, rootCapString); setResult(RESULT_OK, intent); finish(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_ROOTCAP: { if (resultCode == RESULT_OK) { rootCapString = data.getStringExtra(ROOT_CAP_STRING_KEY); Intent intent = new Intent(); intent.setClass(FirstStartActivity.this, SetPasswordActivity.class); startActivityForResult(intent, SET_PASSWORD_OLD_ROOT); } break; } case REQUEST_BARCODE: { if (resultCode == RESULT_OK) { rootCapString = data.getStringExtra("SCAN_RESULT"); Intent intent = new Intent(); intent.setClass(FirstStartActivity.this, SetPasswordActivity.class); startActivityForResult(intent, SET_PASSWORD_OLD_ROOT); } break; } case SET_PASSWORD_NEW_ROOT: { if (resultCode == RESULT_OK) { progress = ProgressDialog.show(FirstStartActivity.this, "", "Generating secret keys, please wait..", true); new CreateRootCapTask(FirstStartActivity.this, data.getStringExtra(SetPasswordActivity.PASSWORD)) .execute(); } return; } case SET_PASSWORD_OLD_ROOT: { if (resultCode == RESULT_OK) { Capability capability = CapabilityImpl .fromString(rootCapString); LocalCredentials.importExistingLocalCredentials(this, data.getStringExtra(SetPasswordActivity.PASSWORD), capability); if (this.caller == null) { CSVActivity.fm.setRootCapability(capability); } done(); } return; } case REQUEST_SHOWROOTCAP: { if (resultCode == RESULT_OK) { String tmp = data.getStringExtra("SCAN_RESULT"); String username = tmp.split(":")[0]; String stringCap = tmp.substring(username.length() - 1); Capability capability = CapabilityImpl.fromString(stringCap); ImportShareTask ist = new ImportShareTask(this, capability); ist.execute(username); } return; } } } public void supplyWithRootCap(Capability capability) { this.rootCapability = capability; if (this.caller == null) { CSVActivity.fm.setRootCapability(capability); } this.progress.dismiss(); done(); } }