commit bbf0175d69dbfd3d4ac04fb13d8ca322f6c4f2fb Author: Zeapo Date: Thu Jul 24 01:15:11 2014 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0f885ac89 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.gradle +/local.properties +/.idea/workspace.xml +.DS_Store +/build diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 000000000..511e585d4 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +PwdStore \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 000000000..217af471a --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000..e7bedf337 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 000000000..e206d70d8 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 000000000..736c7b5cf --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/.idea/libraries/JavaEWAH_0_7_9.xml b/.idea/libraries/JavaEWAH_0_7_9.xml new file mode 100644 index 000000000..ba30d37ac --- /dev/null +++ b/.idea/libraries/JavaEWAH_0_7_9.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/commons_io_1_3_2.xml b/.idea/libraries/commons_io_1_3_2.xml new file mode 100644 index 000000000..c243ddedc --- /dev/null +++ b/.idea/libraries/commons_io_1_3_2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/jsch_0_1_50.xml b/.idea/libraries/jsch_0_1_50.xml new file mode 100644 index 000000000..7ad80e87c --- /dev/null +++ b/.idea/libraries/jsch_0_1_50.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/org_eclipse_jgit_3_4_1_201406201815_r.xml b/.idea/libraries/org_eclipse_jgit_3_4_1_201406201815_r.xml new file mode 100644 index 000000000..2c398e158 --- /dev/null +++ b/.idea/libraries/org_eclipse_jgit_3_4_1_201406201815_r.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..66ef82696 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..d9a6a2e40 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..922003b84 --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..def6a6a18 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PwdStore.iml b/PwdStore.iml new file mode 100644 index 000000000..0bb6048ae --- /dev/null +++ b/PwdStore.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 000000000..0c8026a96 --- /dev/null +++ b/app/app.iml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 000000000..0c82ca2fb --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 19 + buildToolsVersion "20.0.0" + + defaultConfig { + applicationId "com.zeapo.pwdstore" + minSdkVersion 15 + targetSdkVersion 19 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + runProguard false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'org.eclipse.jgit:org.eclipse.jgit:3.4.+' + compile 'org.apache.commons:commons-io:1.3.2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 000000000..45dc58a59 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /opt/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/zeapo/pwdstore/ApplicationTest.java b/app/src/androidTest/java/com/zeapo/pwdstore/ApplicationTest.java new file mode 100644 index 000000000..e0cf8c749 --- /dev/null +++ b/app/src/androidTest/java/com/zeapo/pwdstore/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.zeapo.pwdstore; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..b26aba3f6 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/zeapo/pwdstore/GitClone.java b/app/src/main/java/com/zeapo/pwdstore/GitClone.java new file mode 100644 index 000000000..7e2102a6c --- /dev/null +++ b/app/src/main/java/com/zeapo/pwdstore/GitClone.java @@ -0,0 +1,225 @@ +package com.zeapo.pwdstore; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.ListActivity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Message; +import android.text.InputType; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.zeapo.pwdstore.R; + +import org.eclipse.jgit.api.Git; + +import org.apache.commons.io.FileUtils; +import org.eclipse.jgit.diff.Edit; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + + +public class GitClone extends Activity implements AdapterView.OnItemSelectedListener { + + + /* The clone process has to be on a different thread than the main one */ + private class CloneTask extends AsyncTask { + private ProgressDialog dialog; + private Activity activity; + private Context context; + + public CloneTask(Activity activity) { + this.activity = activity; + context = activity; + dialog = new ProgressDialog(context); + } + + protected void onPreExecute() { + this.dialog.setMessage("Cloning..."); + this.dialog.setCancelable(false); + this.dialog.show(); + } + + protected void onPostExecute(Long result) { + this.dialog.dismiss(); + } + + + protected Long doInBackground(File... remote) { + int count = remote.length; + long totalSize = 0; + for (int i = 0; i < count; i++) { + try { + Git.cloneRepository(). + setCloneAllBranches(true). + setDirectory(remote[i]). + setURI(((TextView) findViewById(R.id.clone_uri)).getText().toString()) + .call(); + totalSize++; + } catch (Exception e) { + e.printStackTrace(); + totalSize++; + } + } + return totalSize; + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_git_clone); + + // init the spinner + Spinner connection_mode_spinner = (Spinner) findViewById(R.id.connection_mode); + ArrayAdapter connection_mode_adapter = ArrayAdapter.createFromResource(this, + R.array.connection_modes, android.R.layout.simple_spinner_item); + connection_mode_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + connection_mode_spinner.setAdapter(connection_mode_adapter); + connection_mode_spinner.setOnItemSelectedListener(this); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.git_clone, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + public void cloneRepository(View view) { + + final File localDir = new File(getApplicationContext().getCacheDir().getAbsoluteFile() + "/store"); + + if (localDir.exists()) { + AlertDialog.Builder builder1 = new AlertDialog.Builder(this); + builder1.setMessage(R.string.dialog_delete_msg); + builder1.setCancelable(true); + builder1.setPositiveButton(R.string.dialog_delete, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + try { + FileUtils.deleteDirectory(localDir); + } catch (IOException e) { + //TODO Handle the exception correctly + e.printStackTrace(); + } + + dialog.cancel(); + } + } + ); + builder1.setNegativeButton(R.string.dialog_do_not_delete, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + } + ); + + AlertDialog alert11 = builder1.create(); + alert11.show(); + } + + + String connectionMode = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString(); + if (connectionMode.equalsIgnoreCase("ssh-key")) { + + } else { + // Set an EditText view to get user input + final LinearLayout layout = new LinearLayout(this); + layout.setOrientation(LinearLayout.VERTICAL); + + final EditText username = new EditText(this); + username.setHint("Username"); + username.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); + + final EditText password = new EditText(this); + password.setHint("Password"); + password.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); + password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + + layout.addView(username); + layout.addView(password); + + + new AlertDialog.Builder(this) + .setTitle("Authenticate") + .setMessage("Please provide your usename and password for this repository") + .setView(layout) + .setPositiveButton("Ok", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + //TODO use Jsch to set the authentication method + + } + }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + // Do nothing. + } + }).show(); + } + + new CloneTask(this).execute(localDir); + } + + + public void selectConnectionMode(View view) { + + } + + /* when the connection mode is selected */ + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + String selection = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString(); + + if (selection.equalsIgnoreCase("ssh-key")) { + new AlertDialog.Builder(this) + .setMessage("Authentication method not implemented yet") + .setPositiveButton("OK", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + } + ).show(); + ((Button) findViewById(R.id.clone_button)).setEnabled(false); + } else { + ((Button) findViewById(R.id.clone_button)).setEnabled(true); + } + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } +} diff --git a/app/src/main/java/com/zeapo/pwdstore/pwdstore.java b/app/src/main/java/com/zeapo/pwdstore/pwdstore.java new file mode 100644 index 000000000..5bf9ca3c2 --- /dev/null +++ b/app/src/main/java/com/zeapo/pwdstore/pwdstore.java @@ -0,0 +1,50 @@ +package com.zeapo.pwdstore; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.hardware.display.DisplayManager; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import java.io.FileInputStream; +import java.io.FileOutputStream; + + +public class pwdstore extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_pwdstore); + System.out.println("HEE"); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.pwdstore, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + public void getClone(View view){ + Intent intent = new Intent(this, GitClone.class); + startActivity(intent); + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 000000000..96a442e5b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 000000000..359047dfa Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 000000000..71c6d760f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..4df189464 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/layout/activity_git_clone.xml b/app/src/main/res/layout/activity_git_clone.xml new file mode 100644 index 000000000..01b18d26b --- /dev/null +++ b/app/src/main/res/layout/activity_git_clone.xml @@ -0,0 +1,40 @@ + + + + + + + + +