From bbf0175d69dbfd3d4ac04fb13d8ca322f6c4f2fb Mon Sep 17 00:00:00 2001 From: Zeapo Date: Thu, 24 Jul 2014 01:15:11 +0100 Subject: initial commit --- app/.gitignore | 1 + app/app.iml | 70 +++++++ app/build.gradle | 26 +++ app/proguard-rules.pro | 17 ++ .../java/com/zeapo/pwdstore/ApplicationTest.java | 13 ++ app/src/main/AndroidManifest.xml | 42 ++++ app/src/main/java/com/zeapo/pwdstore/GitClone.java | 225 +++++++++++++++++++++ app/src/main/java/com/zeapo/pwdstore/pwdstore.java | 50 +++++ app/src/main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes app/src/main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes app/src/main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes app/src/main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes app/src/main/res/layout/activity_git_clone.xml | 40 ++++ app/src/main/res/layout/activity_pwdstore.xml | 17 ++ app/src/main/res/menu/git_clone.xml | 8 + app/src/main/res/menu/pwdstore.xml | 8 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/dimens.xml | 5 + app/src/main/res/values/strings.xml | 19 ++ .../main/res/values/strings_activity_git_clone.xml | 15 ++ app/src/main/res/values/styles.xml | 8 + 21 files changed, 570 insertions(+) create mode 100644 app/.gitignore create mode 100644 app/app.iml create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/zeapo/pwdstore/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/zeapo/pwdstore/GitClone.java create mode 100644 app/src/main/java/com/zeapo/pwdstore/pwdstore.java create mode 100644 app/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/layout/activity_git_clone.xml create mode 100644 app/src/main/res/layout/activity_pwdstore.xml create mode 100644 app/src/main/res/menu/git_clone.xml create mode 100644 app/src/main/res/menu/pwdstore.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/strings_activity_git_clone.xml create mode 100644 app/src/main/res/values/styles.xml (limited to 'app') diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 00000000..0c8026a9 --- /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 00000000..0c82ca2f --- /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 00000000..45dc58a5 --- /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 00000000..e0cf8c74 --- /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 00000000..b26aba3f --- /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 00000000..7e2102a6 --- /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 00000000..5bf9ca3c --- /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 00000000..96a442e5 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 00000000..359047df 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 00000000..71c6d760 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 00000000..4df18946 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 00000000..01b18d26 --- /dev/null +++ b/app/src/main/res/layout/activity_git_clone.xml @@ -0,0 +1,40 @@ + + + + + + + + +