package no.ntnu.item.csv;
import no.ntnu.item.csv.capability.Capability;
import no.ntnu.item.csv.capability.CapabilityImpl;
import no.ntnu.item.csv.capability.CapabilityType;
import no.ntnu.item.csv.contrib.com.bitzi.util.Base32;
import no.ntnu.item.csv.csvobject.CSVFolder;
import no.ntnu.item.csv.exception.FailedToVerifySignatureException;
import no.ntnu.item.csv.exception.RemoteFileDoesNotExistException;
import no.ntnu.item.csv.exception.ServerCommunicationException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ManualImportShareActivity extends Activity {
private static final int DIALOG_VERIFY_KEY = 1;
public static final String REQUEST_RESULT_USERNAME = "username";
public static final String REQUEST_RESULT_CAPABILITY = "capability";
private EditText keyEditText;
private EditText usernameEditText;
private Button processButon;
private String verifyHash;
private Capability shareCapability;
private String username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.manualimportshareactivity);
this.keyEditText = (EditText) findViewById(R.id.manualshareactivity_keyedittext);
this.usernameEditText = (EditText) findViewById(R.id.manualshareactivity_usernameedittext);
this.processButon = (Button) findViewById(R.id.manualshareactivity_processbutton);
this.processButon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
byte[] encKey = Base32.decode(keyEditText.getText().toString());
shareCapability = new CapabilityImpl(CapabilityType.RW, encKey,
null, false);
username = usernameEditText.getText().toString();
if (username.equals("")) {
Toast.makeText(ManualImportShareActivity.this,
"The folder name cannot be blank",
Toast.LENGTH_LONG).show();
} else {
CSVFolder folder;
try {
folder = CSVActivity.fm.downloadFolder(shareCapability);
if (folder == null) {
Toast.makeText(
ManualImportShareActivity.this,
"The requested share capability does not exist",
Toast.LENGTH_LONG).show();
} else {
verifyHash = Base32.encode(folder
.getPublicKeyHash());
showDialog(DIALOG_VERIFY_KEY);
}
} catch (ServerCommunicationException e) {
Toast.makeText(ManualImportShareActivity.this,
"There was an error communicating with server",
Toast.LENGTH_LONG).show();
} catch (RemoteFileDoesNotExistException e) {
Toast.makeText(ManualImportShareActivity.this,
"Invalid key specified", Toast.LENGTH_LONG)
.show();
} catch (FailedToVerifySignatureException e) {
// Should not happen since we don't have a key to
// compare with
}
}
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch (id) {
case DIALOG_VERIFY_KEY:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Is the following key correct?:\n"
+ this.verifyHash);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = getIntent();
intent.putExtra(REQUEST_RESULT_CAPABILITY,
shareCapability.toString() + ":"
+ verifyHash);
intent.putExtra(REQUEST_RESULT_USERNAME, username);
setResult(RESULT_OK, intent);
dismissDialog(DIALOG_VERIFY_KEY);
finish();
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismissDialog(DIALOG_VERIFY_KEY);
}
});
dialog = builder.create();
break;
default:
dialog = null;
}
return dialog;
}
}