aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohamed Zenadi <mohamed@zenadi.com>2015-05-03 12:14:50 +0200
committerMohamed Zenadi <mohamed@zenadi.com>2015-05-17 18:51:28 +0200
commit62b4d78e93200ce46fa82dc00e0aa7a3083ff2f0 (patch)
tree1565d8cddfb04577dca682bbea33687abeb98535
parent994cb0272b104d5288c0d3e8c59bbb7e162044e8 (diff)
now possible to clone/create repository in a given external directory.
*issues*: - not possible to switch between external/local directory without closing the app. (PasswordRepository is a singleton, has to be cleaned when a change is made)
-rw-r--r--app/src/main/AndroidManifest.xml8
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordStore.java33
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java3
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java18
4 files changed, 34 insertions, 28 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e3e0837e..7a566d3e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zeapo.pwdstore">
-
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:allowBackup="true" android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name=".PasswordStore" android:label="@string/app_name">
@@ -34,8 +36,4 @@
<activity android:name="net.rdrei.android.dirchooser.DirectoryChooserActivity" />
</application>
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
</manifest>
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
index 5927ba83..146b9906 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
+++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
@@ -47,9 +47,31 @@ public class PasswordStore extends ActionBarActivity {
@Override
public void onResume(){
super.onResume();
- // create the repository static variable in PasswordRepository
- PasswordRepository.getRepository(new File(getFilesDir() + this.getResources().getString(R.string.store_git)));
+ File dir = null;
+
+ if (settings.getBoolean("git_external", false)) {
+ if (settings.getString("git_external_repo", null) == null)
+ {
+ // todo: show the main screen
+ } else {
+ dir = new File(settings.getString("git_external_repo", null));
+ }
+ } else {
+ dir = new File(getFilesDir() + "/store");
+ }
+ assert dir != null;
+
+ // uninitialize the repo if the dir does not exist or is absolutely empty
+ if (!dir.exists() || !dir.isDirectory()) {
+ settings.edit().putBoolean("repository_initialized", false).apply();
+ }
+ if (!PasswordRepository.getPasswords(dir).isEmpty()) {
+ settings.edit().putBoolean("repository_initialized", true).apply();
+ }
+
+ // create the repository static variable in PasswordRepository
+ PasswordRepository.getRepository(new File(dir.getAbsolutePath() + "/.git"));
checkLocalRepository();
}
@@ -192,7 +214,8 @@ public class PasswordStore extends ActionBarActivity {
private void createRepository() {
// final String keyId = settings.getString("openpgp_key_ids", "");
- File localDir = new File(getFilesDir() + "/store/");
+ File localDir = PasswordRepository.getWorkTree();
+
localDir.mkdir();
try {
PasswordRepository.createRepository(localDir);
@@ -239,8 +262,7 @@ public class PasswordStore extends ActionBarActivity {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
- // TODO: Remove the getpaswords() as it is a temporary fix until every user has the repository_initialized set
- if (settings.getBoolean("repository_initialized", false) || PasswordRepository.getPasswords(localDir).size() > 0) {
+ if (settings.getBoolean("repository_initialized", false)) {
// do not push the fragment if we already have it
if (fragmentManager.findFragmentByTag("PasswordsList") == null) {
@@ -249,7 +271,6 @@ public class PasswordStore extends ActionBarActivity {
fragmentManager.popBackStack();
}
- PasswordRepository.setInitialized(true);
plist = new PasswordFragment();
Bundle args = new Bundle();
args.putString("Path", PasswordRepository.getWorkTree().getAbsolutePath());
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java b/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java
index 9e8e97c5..b763a275 100644
--- a/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java
+++ b/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java
@@ -432,8 +432,7 @@ public class GitActivity extends ActionBarActivity {
* @param view
*/
public void cloneRepository(View view) {
- localDir = new File(getApplicationContext().getFilesDir().getAbsoluteFile() + "/store");
-
+ localDir = PasswordRepository.getWorkTree();
hostname = ((EditText) findViewById(R.id.clone_uri)).getText().toString();
port = ((EditText) findViewById(R.id.server_port)).getText().toString();
// don't ask the user, take off the protocol that he puts in
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java
index 6e7de7f1..9395fd68 100644
--- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java
@@ -5,8 +5,8 @@ import android.util.Log;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
@@ -49,11 +49,7 @@ public class PasswordRepository {
}
public static boolean isInitialized() {
- return initialized;
- }
-
- public static void setInitialized(boolean v) {
- initialized = v;
+ return repository != null;
}
public static void createRepository(File localDir) throws Exception{
@@ -112,6 +108,7 @@ public class PasswordRepository {
public static void closeRepository() {
repository.close();
+ repository = null;
}
public static ArrayList<File> getFilesList(){
@@ -131,15 +128,6 @@ public class PasswordRepository {
}
/**
- * Gets a file from the working tree
- * @param name the relative path of the file
- * @return the file in the repository
- */
- public static File getFile(String name) {
- return new File(repository.getWorkTree() + "/" + name);
- }
-
- /**
* Gets the .gpg files in a directory
* @param path the directory path
* @return the list of gpg files in that directory