aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Wong <wongma@protonmail.ch>2015-07-15 02:50:45 -0400
committerMatthew Wong <wongma@protonmail.ch>2015-07-15 02:50:45 -0400
commitd03ab8ee3c9585e862435b621edd2360232be083 (patch)
tree985d7b0712369646a31cbd51ba52c550786ff36c
parente0954cd400aa2f8799b92b979cb98aa583938144 (diff)
Make AsyncTask for ssh key generation and show a progress dialog. Show the exception if it fails
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/SshKeyGen.java100
1 files changed, 70 insertions, 30 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/SshKeyGen.java b/app/src/main/java/com/zeapo/pwdstore/SshKeyGen.java
index a1c76ffb..17d952ad 100644
--- a/app/src/main/java/com/zeapo/pwdstore/SshKeyGen.java
+++ b/app/src/main/java/com/zeapo/pwdstore/SshKeyGen.java
@@ -1,9 +1,13 @@
package com.zeapo.pwdstore;
+import android.app.AlertDialog;
import android.app.Fragment;
+import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
+import android.content.DialogInterface;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
@@ -37,7 +41,7 @@ public class SshKeyGen extends AppCompatActivity {
Spinner spinner = (Spinner) v.findViewById(R.id.length);
Integer[] lengths = new Integer[]{2048, 4096};
- ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(getActivity(),
+ ArrayAdapter<Integer> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_dropdown_item, lengths);
spinner.setAdapter(adapter);
@@ -59,7 +63,6 @@ public class SshKeyGen extends AppCompatActivity {
File file = new File(getActivity().getFilesDir() + "/.ssh_key.pub");
try {
textView.setText(FileUtils.readFileToString(file));
- Toast.makeText(getActivity(), "SSH-key generated", Toast.LENGTH_LONG).show();
} catch (Exception e) {
System.out.println("Exception caught :(");
e.printStackTrace();
@@ -81,7 +84,8 @@ public class SshKeyGen extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ if (getSupportActionBar() != null)
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle("Generate SSH Key");
@@ -93,40 +97,76 @@ public class SshKeyGen extends AppCompatActivity {
}
}
- // Invoked when 'Generate' button of SshKeyGenFragment clicked. Generates a
- // private and public key, then replaces the SshKeyGenFragment with a
- // ShowSshKeyFragment which displays the public key.
- public void generate(View view) {
- InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ private class generateTask extends AsyncTask<View, Void, Exception> {
+ private ProgressDialog pd;
- Spinner spinner = (Spinner) findViewById(R.id.length);
- int length = (Integer) spinner.getSelectedItem();
+ protected Exception doInBackground(View... views) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(views[0].getWindowToken(), 0);
- TextView textView = (TextView) findViewById(R.id.passphrase);
- String passphrase = textView.getText().toString();
+ Spinner spinner = (Spinner) findViewById(R.id.length);
+ int length = (Integer) spinner.getSelectedItem();
- textView = (TextView) findViewById(R.id.comment);
- String comment = textView.getText().toString();
+ TextView textView = (TextView) findViewById(R.id.passphrase);
+ String passphrase = textView.getText().toString();
- JSch jsch = new JSch();
- try {
- KeyPair kp = KeyPair.genKeyPair(jsch, KeyPair.RSA, length);
+ textView = (TextView) findViewById(R.id.comment);
+ String comment = textView.getText().toString();
- File file = new File(getFilesDir() + "/.ssh_key");
- FileOutputStream out = new FileOutputStream(file, false);
- kp.writePrivateKey(out, passphrase.getBytes());
+ JSch jsch = new JSch();
+ try {
+ KeyPair kp = KeyPair.genKeyPair(jsch, KeyPair.RSA, length);
+
+ File file = new File(getFilesDir() + "/.ssh_key");
+ FileOutputStream out = new FileOutputStream(file, false);
+ kp.writePrivateKey(out, passphrase.getBytes());
- file = new File(getFilesDir() + "/.ssh_key.pub");
- out = new FileOutputStream(file, false);
- kp.writePublicKey(out, comment);
- } catch (Exception e) {
- System.out.println("Exception caught :(");
- e.printStackTrace();
- return;
+ file = new File(getFilesDir() + "/.ssh_key.pub");
+ out = new FileOutputStream(file, false);
+ kp.writePublicKey(out, comment);
+ return null;
+ } catch (Exception e) {
+ System.out.println("Exception caught :(");
+ e.printStackTrace();
+ return e;
+ }
}
- getFragmentManager().beginTransaction()
- .replace(android.R.id.content, new ShowSshKeyFragment()).commit();
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ pd = ProgressDialog.show(SshKeyGen.this, "", "Generating keys");
+
+ }
+
+ @Override
+ protected void onPostExecute(Exception e) {
+ super.onPostExecute(e);
+ pd.dismiss();
+ if (e == null) {
+ Toast.makeText(SshKeyGen.this, "SSH-key generated", Toast.LENGTH_LONG).show();
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, new ShowSshKeyFragment()).commit();
+ } else {
+ new AlertDialog.Builder(SshKeyGen.this)
+ .setTitle("Error while trying to generate the ssh-key")
+ .setMessage(getResources().getString(R.string.ssh_key_error_dialog_text) + e.getMessage())
+ .setPositiveButton(getResources().getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ // pass
+ }
+ }).show();
+ }
+
+ }
+ }
+
+ // Invoked when 'Generate' button of SshKeyGenFragment clicked. Generates a
+ // private and public key, then replaces the SshKeyGenFragment with a
+ // ShowSshKeyFragment which displays the public key.
+ public void generate(View view) {
+ new generateTask().execute(view);
}
// Invoked when 'Copy' button of ShowSshKeyFragment clicked. Copies the