From 83b893bc8ca7359925c4be048aa149c59fbdb4af Mon Sep 17 00:00:00 2001 From: knuthy Date: Sun, 21 Sep 2014 18:29:37 +0200 Subject: [PATCH] took off duplicate code CloneAsyncTask into GitAsyncTask --- .../java/com/zeapo/pwdstore/GitAsyncTask.java | 73 +++++++----- .../java/com/zeapo/pwdstore/GitHandler.java | 110 +----------------- .../com/zeapo/pwdstore/PasswordStore.java | 5 +- .../com/zeapo/pwdstore/crypto/PgpHandler.java | 6 +- 4 files changed, 60 insertions(+), 134 deletions(-) diff --git a/app/src/main/java/com/zeapo/pwdstore/GitAsyncTask.java b/app/src/main/java/com/zeapo/pwdstore/GitAsyncTask.java index c2a6f28f..26ad8c7c 100644 --- a/app/src/main/java/com/zeapo/pwdstore/GitAsyncTask.java +++ b/app/src/main/java/com/zeapo/pwdstore/GitAsyncTask.java @@ -1,10 +1,15 @@ package com.zeapo.pwdstore; import android.app.Activity; +import android.app.AlertDialog; import android.app.ProgressDialog; +import android.content.DialogInterface; import android.os.AsyncTask; import android.util.Log; +import com.zeapo.pwdstore.utils.PasswordRepository; + +import org.apache.commons.io.FileUtils; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.GitCommand; @@ -13,16 +18,18 @@ import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.TransportException; -public class GitAsyncTask extends AsyncTask { +public class GitAsyncTask extends AsyncTask { private Activity activity; private boolean finishOnEnd; private boolean refreshListOnEnd; private ProgressDialog dialog; + private Class operation; - public GitAsyncTask(Activity activity, boolean finishOnEnd, boolean refreshListOnEnd) { + public GitAsyncTask(Activity activity, boolean finishOnEnd, boolean refreshListOnEnd, Class operation) { this.activity = activity; this.finishOnEnd = finishOnEnd; this.refreshListOnEnd = refreshListOnEnd; + this.operation = operation; dialog = new ProgressDialog(this.activity); } @@ -34,43 +41,55 @@ public class GitAsyncTask extends AsyncTask { } @Override - protected Integer doInBackground(GitCommand... cmd) { + protected String doInBackground(GitCommand... cmd) { int count = cmd.length; - Integer totalSize = 0; for (int i = 0; i < count; i++) { try { cmd[i].call(); - } catch (JGitInternalException e) { - e.printStackTrace(); - return -99; - } catch (InvalidRemoteException e) { - e.printStackTrace(); - return -1; - } catch (TransportException e) { - e.printStackTrace(); - return -2; } catch (Exception e) { e.printStackTrace(); - return -98; + return e.getMessage(); } - totalSize++; } - return totalSize; + return ""; } - protected void onPostExecute(Integer result) { - Log.i("GIT_ASYNC", result + ""); + protected void onPostExecute(String result) { this.dialog.dismiss(); - if (finishOnEnd) { - this.activity.setResult(Activity.RESULT_OK); - this.activity.finish(); - } - if (refreshListOnEnd) { - try { - ((PasswordStore) this.activity).refreshListAdapter(); - } catch (ClassCastException e){ - // oups, mistake + if (!result.isEmpty()) { + new AlertDialog.Builder(activity). + setTitle("Internal exception occurred"). + setMessage("Message from jgit:\n" + result). + setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + if (operation.equals(CloneCommand.class)) { + // if we were unable to finish the job + try { + FileUtils.deleteDirectory(PasswordRepository.getWorkTree()); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + activity.setResult(Activity.RESULT_CANCELED); + activity.finish(); + } + } + }).show(); + + } else { + if (finishOnEnd) { + this.activity.setResult(Activity.RESULT_OK); + this.activity.finish(); + } + + if (refreshListOnEnd) { + try { + ((PasswordStore) this.activity).refreshListAdapter(); + } catch (ClassCastException e) { + // oups, mistake + } } } } diff --git a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java index ba42f867..cbb816c1 100644 --- a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java @@ -32,6 +32,8 @@ import org.eclipse.jgit.api.Git; import org.apache.commons.io.FileUtils; import org.eclipse.jgit.api.GitCommand; +import org.eclipse.jgit.api.PullCommand; +import org.eclipse.jgit.api.PushCommand; import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.TransportException; @@ -200,99 +202,6 @@ public class GitHandler extends Activity { return super.onOptionsItemSelected(item); } - /* The clone process has to be on a different thread than the main one */ - private class CloneTask extends AsyncTask { - private ProgressDialog dialog; - - public CloneTask(Activity activity) { - context = activity; - dialog = new ProgressDialog(context); - } - - protected void onPreExecute() { - this.dialog.setMessage("Cloning..."); - this.dialog.setCancelable(false); - // TODO: Handle a dialog leak when there is no error - this.dialog.show(); - } - - protected void onPostExecute(Integer result) { - switch (result) { - case -1: - new AlertDialog.Builder(activity). - setTitle("Please check that the repository path is correct."). - setMessage("Did you forget to specify the path after the hostname?"). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - case -2: - new AlertDialog.Builder(activity). - setTitle("Communication error"). - setMessage("JGit said that the server didn't like our request. Either an authentication issue or the host is not reachable. Check the debug messages."). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - case -99: - new AlertDialog.Builder(activity). - setTitle("JGit raised an internal exception"). - setMessage("OUPS, JGit didn't like what you did... Check that you provided it with a correct URI. Check also debug messages."). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - default: - this.dialog.dismiss(); - setResult(RESULT_OK); - finish(); - return; - } - this.dialog.dismiss(); - - // if we were unable to finish the job - try { - FileUtils.deleteDirectory(localDir); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - protected Integer doInBackground(CloneCommand... cmd) { - int count = cmd.length; - Integer totalSize = 0; - for (int i = 0; i < count; i++) { - try { - cmd[i].call(); - } catch (JGitInternalException e) { - e.printStackTrace(); - return -99; - } catch (InvalidRemoteException e) { - e.printStackTrace(); - return -1; - } catch (TransportException e) { - e.printStackTrace(); - return -2; - } catch (Exception e) { - e.printStackTrace(); - return -99; - } - totalSize++; - } - return totalSize; - } - } - protected class GitConfigSessionFactory extends JschConfigSessionFactory { protected void configure(OpenSshConfig.Host hc, Session session) { @@ -452,7 +361,7 @@ public class GitHandler extends Activity { setDirectory(localDir). setURI(hostname); - new CloneTask(activity).execute(cmd); + new GitAsyncTask(activity, true, false, CloneCommand.class).execute(cmd); } public void pullOperation(UsernamePasswordCredentialsProvider provider) { @@ -500,7 +409,7 @@ public class GitHandler extends Activity { .setRebase(true) .setRemote("origin"); - new GitAsyncTask(activity, true, false).execute(cmd); + new GitAsyncTask(activity, true, false, PullCommand.class).execute(cmd); } } @@ -550,7 +459,7 @@ public class GitHandler extends Activity { .setRemote("origin"); - new GitAsyncTask(activity, true, false).execute(cmd); + new GitAsyncTask(activity, true, false, PushCommand.class).execute(cmd); } } @@ -661,14 +570,7 @@ public class GitHandler extends Activity { } }).show(); } else { - CloneCommand cmd = Git.cloneRepository() - .setDirectory(localDir) - .setURI(hostname) - .setBare(false) - .setNoCheckout(false) - .setCloneAllBranches(true); - - new CloneTask(activity).execute(cmd); + // BUG: we do not support HTTP yet... } } } diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java index 3234c1f6..71954859 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java @@ -28,6 +28,7 @@ import com.zeapo.pwdstore.utils.PasswordItem; import com.zeapo.pwdstore.utils.PasswordRepository; import org.apache.commons.io.FileUtils; +import org.eclipse.jgit.api.CommitCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.transport.JschConfigSessionFactory; @@ -323,7 +324,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI setResult(RESULT_CANCELED); Git git = new Git(PasswordRepository.getRepository(new File(""))); - GitAsyncTask tasks = new GitAsyncTask(activity, false, true); + GitAsyncTask tasks = new GitAsyncTask(activity, false, true, CommitCommand.class); System.out.println(tasks); tasks.execute( git.rm().addFilepattern(path.replace(PasswordRepository.getWorkTree() + "/", "")), @@ -366,7 +367,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI switch (requestCode) { case PgpHandler.REQUEST_CODE_ENCRYPT : Git git = new Git(PasswordRepository.getRepository(new File(""))); - GitAsyncTask tasks = new GitAsyncTask(this, false, false); + GitAsyncTask tasks = new GitAsyncTask(this, false, false, CommitCommand.class); tasks.execute( git.add().addFilepattern("."), git.commit().setMessage("[ANDROID PwdStore] Add " + data.getExtras().getString("NAME") + " from store.") diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java index f80893a4..cc4e2a4a 100644 --- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java @@ -119,7 +119,11 @@ public class PgpHandler extends Activity implements OpenPgpServiceConnection.OnB public void onStop(){ super.onStop(); if (this.mServiceConnection.isBound()) - this.mServiceConnection.unbindFromService(); + try { + this.mServiceConnection.unbindFromService(); + } catch (Exception e){ + + } } @Override