added temp (10sec) password visibility and extra content
This commit is contained in:
parent
c19191a3d5
commit
280e662fc3
5 changed files with 190 additions and 64 deletions
|
@ -3,12 +3,16 @@ package com.zeapo.pwdstore;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.FragmentManager;
|
import android.app.FragmentManager;
|
||||||
import android.app.FragmentTransaction;
|
import android.app.FragmentTransaction;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
|
|
||||||
import com.zeapo.pwdstore.crypto.PgpHandler;
|
import com.zeapo.pwdstore.crypto.PgpHandler;
|
||||||
import com.zeapo.pwdstore.utils.PasswordItem;
|
import com.zeapo.pwdstore.utils.PasswordItem;
|
||||||
|
@ -25,6 +29,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
|
||||||
private Stack<Integer> scrollPositions;
|
private Stack<Integer> scrollPositions;
|
||||||
/** if we leave the activity to do something, do not add any other fragment */
|
/** if we leave the activity to do something, do not add any other fragment */
|
||||||
private boolean leftActivity = false;
|
private boolean leftActivity = false;
|
||||||
|
private File currentDir;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -148,6 +153,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
|
||||||
}
|
}
|
||||||
|
|
||||||
this.leftActivity = false;
|
this.leftActivity = false;
|
||||||
|
this.currentDir = localDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stack the positions the different fragments were at */
|
/** Stack the positions the different fragments were at */
|
||||||
|
@ -184,4 +190,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void createPassword(View v) {
|
||||||
|
System.out.println("Adding file to : " + this.currentDir.getAbsolutePath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,17 +5,23 @@ import android.app.PendingIntent;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentSender;
|
import android.content.IntentSender;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.graphics.Typeface;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.zeapo.pwdstore.R;
|
import com.zeapo.pwdstore.R;
|
||||||
|
import com.zeapo.pwdstore.UserPreference;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.openintents.openpgp.OpenPgpError;
|
import org.openintents.openpgp.OpenPgpError;
|
||||||
|
@ -52,31 +58,24 @@ public class PgpHandler extends Activity {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_pgp_handler);
|
setContentView(R.layout.activity_pgp_handler);
|
||||||
|
|
||||||
// Setup action buttons
|
|
||||||
getActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
getActionBar().setHomeButtonEnabled(true);
|
|
||||||
|
|
||||||
Bundle extra = getIntent().getExtras();
|
Bundle extra = getIntent().getExtras();
|
||||||
((TextView) findViewById(R.id.crypto_handler_name)).setText(extra.getString("NAME"));
|
((TextView) findViewById(R.id.crypto_password_file)).setText(extra.getString("NAME"));
|
||||||
|
|
||||||
// some persistance
|
// some persistance
|
||||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
|
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
String providerPackageName = settings.getString("openpgp_provider_list", "");
|
String providerPackageName = settings.getString("openpgp_provider_list", "");
|
||||||
String accountName = settings.getString("openpgp_account_name", "");
|
String accountName = settings.getString("openpgp_account_name", "");
|
||||||
|
|
||||||
if (accountName.isEmpty()) {
|
|
||||||
((TextView) findViewById(R.id.crypto_account_name)).setText("No account selected");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TextUtils.isEmpty(providerPackageName)) {
|
if (TextUtils.isEmpty(providerPackageName)) {
|
||||||
Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show();
|
Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show();
|
||||||
finish();
|
Intent intent = new Intent(this, UserPreference.class);
|
||||||
} else {
|
startActivity(intent);
|
||||||
// bind to service
|
|
||||||
mServiceConnection = new OpenPgpServiceConnection(
|
|
||||||
PgpHandler.this, providerPackageName);
|
|
||||||
mServiceConnection.bindToService();
|
|
||||||
}
|
}
|
||||||
|
// bind to service
|
||||||
|
mServiceConnection = new OpenPgpServiceConnection(
|
||||||
|
PgpHandler.this, providerPackageName);
|
||||||
|
mServiceConnection.bindToService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,6 +129,52 @@ public class PgpHandler extends Activity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DelayShow extends AsyncTask<Void, Integer, Boolean> {
|
||||||
|
int count = 0;
|
||||||
|
final int SHOW_TIME = 10;
|
||||||
|
ProgressBar pb;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
((LinearLayout) findViewById(R.id.crypto_password_show_layout)).setVisibility(View.VISIBLE);
|
||||||
|
TextView extraText = (TextView) findViewById(R.id.crypto_extra_show);
|
||||||
|
|
||||||
|
if (extraText.getText().length() != 0)
|
||||||
|
((LinearLayout) findViewById(R.id.crypto_extra_show_layout)).setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
this.pb = (ProgressBar) findViewById(R.id.pbLoading);
|
||||||
|
this.pb.setVisibility(ProgressBar.VISIBLE);
|
||||||
|
this.pb.setMax(SHOW_TIME);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Boolean doInBackground(Void... params) {
|
||||||
|
while (this.count < SHOW_TIME) {
|
||||||
|
SystemClock.sleep(1000); this.count++;
|
||||||
|
publishProgress(this.count);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Boolean b) {
|
||||||
|
//clear password
|
||||||
|
((TextView) findViewById(R.id.crypto_password_show)).setText("");
|
||||||
|
((LinearLayout) findViewById(R.id.crypto_password_show_layout)).setVisibility(View.INVISIBLE);
|
||||||
|
((LinearLayout) findViewById(R.id.crypto_extra_show_layout)).setVisibility(View.INVISIBLE);
|
||||||
|
// run a background job and once complete
|
||||||
|
this.pb.setVisibility(ProgressBar.INVISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(Integer... values) {
|
||||||
|
this.pb.setProgress(values[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private class MyCallback implements OpenPgpApi.IOpenPgpCallback {
|
private class MyCallback implements OpenPgpApi.IOpenPgpCallback {
|
||||||
boolean returnToCiphertextField;
|
boolean returnToCiphertextField;
|
||||||
ByteArrayOutputStream os;
|
ByteArrayOutputStream os;
|
||||||
|
@ -152,11 +197,19 @@ public class PgpHandler extends Activity {
|
||||||
try {
|
try {
|
||||||
Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
|
Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
|
||||||
+ " str=" + os.toString("UTF-8"));
|
+ " str=" + os.toString("UTF-8"));
|
||||||
showToast(os.toString("UTF-8"));
|
|
||||||
if (returnToCiphertextField) {
|
if (returnToCiphertextField) {
|
||||||
// mCiphertext.setText(os.toString("UTF-8"));
|
String[] passContent = os.toString("UTF-8").split("\n");
|
||||||
|
((TextView) findViewById(R.id.crypto_password_show))
|
||||||
|
.setText(passContent[0]);
|
||||||
|
|
||||||
|
String extraContent = os.toString("UTF-8").replaceFirst(".*\n","");
|
||||||
|
if (extraContent.length() != 0) {
|
||||||
|
((TextView) findViewById(R.id.crypto_extra_show))
|
||||||
|
.setText(extraContent);
|
||||||
|
}
|
||||||
|
new DelayShow().execute();
|
||||||
} else {
|
} else {
|
||||||
// mMessage.setText(os.toString("UTF-8"));
|
showToast(os.toString());
|
||||||
}
|
}
|
||||||
} catch (UnsupportedEncodingException e) {
|
} catch (UnsupportedEncodingException e) {
|
||||||
Log.e(Constants.TAG, "UnsupportedEncodingException", e);
|
Log.e(Constants.TAG, "UnsupportedEncodingException", e);
|
||||||
|
@ -216,7 +269,7 @@ public class PgpHandler extends Activity {
|
||||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||||
|
|
||||||
OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
|
OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
|
||||||
api.executeApiAsync(data, is, os, new MyCallback(false, os, REQUEST_CODE_DECRYPT_AND_VERIFY));
|
api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_DECRYPT_AND_VERIFY));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -6,58 +6,90 @@
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
tools:context="com.zeapo.pwdstore.crypto.PgpHandler">
|
tools:context="com.zeapo.pwdstore.crypto.PgpHandler"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="#eee">
|
||||||
|
|
||||||
|
<GridLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/rectangle"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@android:color/holo_orange_dark"
|
||||||
|
android:text="Large Text"
|
||||||
|
android:id="@+id/crypto_password_file"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_column="0"/>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:src="@android:drawable/ic_input_get"
|
||||||
|
android:background="@android:drawable/screen_background_light_transparent"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:onClick="decrypt"/>
|
||||||
|
|
||||||
|
</GridLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/crypto_password_show_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:visibility="invisible"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@drawable/rectangle">
|
||||||
|
|
||||||
<GridLayout
|
<GridLayout
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textStyle="bold"
|
||||||
android:text="Large Text"
|
android:text="Password: "/>
|
||||||
android:id="@+id/crypto_account_name"
|
<TextView
|
||||||
android:layout_row="0"
|
android:id="@+id/crypto_password_show"
|
||||||
android:layout_column="0" />
|
android:layout_width="match_parent"
|
||||||
|
|
||||||
<Button
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Change account"
|
android:typeface="monospace"
|
||||||
android:id="@+id/button"
|
android:layout_column="2"/>
|
||||||
android:layout_row="0"
|
|
||||||
android:layout_column="2" />
|
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
|
||||||
<View
|
<ProgressBar
|
||||||
android:layout_width="fill_parent"
|
android:id="@+id/pbLoading"
|
||||||
android:layout_marginBottom="4dp"
|
android:visibility="invisible"
|
||||||
android:layout_height="1dp"
|
android:layout_width="match_parent"
|
||||||
android:background="@android:color/darker_gray"/>
|
android:layout_height="2dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
style="?android:attr/progressBarStyleHorizontal"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/crypto_extra_show_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/rectangle"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="invisible">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:text="Extra content: "/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/crypto_extra_show"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="New Text"
|
android:typeface="monospace"/>
|
||||||
android:id="@+id/crypto_handler_name"/>
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
<Button
|
</LinearLayout>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Select Key-id"
|
|
||||||
android:onClick="getKeyID"/>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Show password"
|
|
||||||
android:onClick="decrypt"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -7,12 +7,42 @@
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:background="#eee"
|
android:background="#eee"
|
||||||
tools:context=".pwdstore">
|
tools:context=".pwdstore"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/main_layout"
|
android:id="@+id/main_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"></LinearLayout>
|
android:orientation="vertical"
|
||||||
|
android:layout_row="0"></LinearLayout>
|
||||||
|
|
||||||
</RelativeLayout>
|
<GridLayout
|
||||||
|
android:id="@+id/bottom_layout"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_row="2">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@android:color/holo_orange_dark"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="Large Text"
|
||||||
|
android:id="@+id/crypto_password_file"
|
||||||
|
android:background="#fff"
|
||||||
|
android:layout_marginBottom="@dimen/activity_vertical_margin"/>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@android:drawable/ic_input_add"
|
||||||
|
android:background="@drawable/rectangle"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:onClick="createPassword"
|
||||||
|
android:layout_column="2"/>
|
||||||
|
|
||||||
|
</GridLayout>
|
||||||
|
|
||||||
|
</GridLayout>
|
||||||
|
|
|
@ -13,11 +13,13 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="8dp"
|
android:padding="8dp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/label"
|
android:id="@+id/label"
|
||||||
android:text="FILE_NAME"
|
android:text="FILE_NAME"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
android:padding="8dp"/>
|
android:padding="8dp"/>
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
|
Loading…
Reference in a new issue