summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/com/zeapo/pwdstore/ApplicationTest.java13
-rw-r--r--app/src/main/AndroidManifest.xml42
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/GitClone.java225
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/pwdstore.java50
-rw-r--r--app/src/main/res/drawable-hdpi/ic_launcher.pngbin0 -> 9397 bytes
-rw-r--r--app/src/main/res/drawable-mdpi/ic_launcher.pngbin0 -> 5237 bytes
-rw-r--r--app/src/main/res/drawable-xhdpi/ic_launcher.pngbin0 -> 14383 bytes
-rw-r--r--app/src/main/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 19388 bytes
-rw-r--r--app/src/main/res/layout/activity_git_clone.xml40
-rw-r--r--app/src/main/res/layout/activity_pwdstore.xml17
-rw-r--r--app/src/main/res/menu/git_clone.xml8
-rw-r--r--app/src/main/res/menu/pwdstore.xml8
-rw-r--r--app/src/main/res/values-w820dp/dimens.xml6
-rw-r--r--app/src/main/res/values/dimens.xml5
-rw-r--r--app/src/main/res/values/strings.xml19
-rw-r--r--app/src/main/res/values/strings_activity_git_clone.xml15
-rw-r--r--app/src/main/res/values/styles.xml8
17 files changed, 456 insertions, 0 deletions
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;
+
+/**
+ * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
+ */
+public class ApplicationTest extends ApplicationTestCase<Application> {
+ 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 @@
+<?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.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name=".pwdstore"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name=".GitClone"
+ android:label="@string/title_activity_git_clone" >
+ </activity>
+ </application>
+
+ <!--
+ To retrieve OAuth 2.0 tokens or invalidate tokens to disconnect a user. This disconnect
+ option is required to comply with the Google+ Sign-In developer policies
+ -->
+ <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+
+ <!-- To retrieve the account name (email) as part of sign-in: -->
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+
+ <!-- To auto-complete the email text field in the login form with the user's emails -->
+ <uses-permission android:name="android.permission.READ_PROFILE" />
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+
+</manifest>
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<File, Integer, Long> {
+ 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<CharSequence> 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
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_launcher.png
Binary files 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
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_launcher.png
Binary files 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
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files 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
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files 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 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ tools:context="com.zeapo.pwdstore.GitClone">
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layoutDirection="ltr"
+ android:layout_width="fill_parent"
+ android:layout_height="match_parent">
+ <EditText
+ android:hint="Repository"
+ android:id="@+id/clone_uri"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ <Spinner
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/connection_mode"></Spinner>
+
+ <LinearLayout
+ android:id="@+id/config_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"></LinearLayout>
+
+ <Button
+ android:id="@+id/clone_button"
+ android:text="Clone!"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:onClick="cloneRepository"/>
+ </LinearLayout>
+
+
+</RelativeLayout>
diff --git a/app/src/main/res/layout/activity_pwdstore.xml b/app/src/main/res/layout/activity_pwdstore.xml
new file mode 100644
index 00000000..1420c906
--- /dev/null
+++ b/app/src/main/res/layout/activity_pwdstore.xml
@@ -0,0 +1,17 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ tools:context=".pwdstore">
+
+ <Button
+ android:text="@string/clone"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:onClick="getClone"/>
+
+</RelativeLayout>
diff --git a/app/src/main/res/menu/git_clone.xml b/app/src/main/res/menu/git_clone.xml
new file mode 100644
index 00000000..2227d87d
--- /dev/null
+++ b/app/src/main/res/menu/git_clone.xml
@@ -0,0 +1,8 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="com.zeapo.pwdstore.GitClone" >
+ <item android:id="@+id/action_settings"
+ android:title="@string/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never" />
+</menu>
diff --git a/app/src/main/res/menu/pwdstore.xml b/app/src/main/res/menu/pwdstore.xml
new file mode 100644
index 00000000..db164db6
--- /dev/null
+++ b/app/src/main/res/menu/pwdstore.xml
@@ -0,0 +1,8 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".pwdstore" >
+ <item android:id="@+id/action_settings"
+ android:title="@string/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never" />
+</menu>
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 00000000..63fc8164
--- /dev/null
+++ b/app/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+<resources>
+ <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+ (such as screen margins) for screens with more than 820dp of available width. This
+ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+ <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..47c82246
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..43246df8
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">PwdStore</string>
+ <string name="clone">Clone!</string>
+ <string name="action_settings">Settings</string>
+ <string name="hello_world">Hello world!</string>
+
+ <string name="dialog_delete_title">Remove dir</string>
+ <string name="dialog_delete_msg">Target directory already exist. Current version support only a single store. Do you want to delete the current password store directory?</string>
+ <string name="dialog_delete">Delete directory</string>
+ <string name="dialog_do_not_delete">Cancel</string>
+
+ <string-array name="connection_modes">
+ <item>username/password</item>
+ <item>ssh-key</item>
+ </string-array>
+
+</resources>
diff --git a/app/src/main/res/values/strings_activity_git_clone.xml b/app/src/main/res/values/strings_activity_git_clone.xml
new file mode 100644
index 00000000..bde00dba
--- /dev/null
+++ b/app/src/main/res/values/strings_activity_git_clone.xml
@@ -0,0 +1,15 @@
+<resources>
+ <string name="title_activity_git_clone">Clone Repository</string>
+
+ <!-- Strings related to login -->
+ <string name="prompt_email">Email</string>
+ <string name="prompt_password">Password (optional)</string>
+ <string name="action_sign_in">Sign in or register</string>
+ <string name="action_sign_in_short">Sign in</string>
+ <string name="plus_sign_out">Switch Google+ account</string>
+ <string name="plus_disconnect">Disconnect from Google+</string>
+ <string name="error_invalid_email">This email address is invalid</string>
+ <string name="error_invalid_password">This password is too short</string>
+ <string name="error_incorrect_password">This password is incorrect</string>
+ <string name="error_field_required">This field is required</string>
+</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..ff6c9d2c
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- Customize your theme here. -->
+ </style>
+
+</resources>