diff options
author | zeapo <mohamed@zenadi.com> | 2014-10-22 23:15:24 +0200 |
---|---|---|
committer | zeapo <mohamed@zenadi.com> | 2014-10-22 23:15:24 +0200 |
commit | 9aea6560b0b66285c7c1c47fed828c22514d9e2b (patch) | |
tree | 2e24fc1f75a7f47459d9955cc4c96a4b935b5420 | |
parent | 2e7f55034cc9d89a2fe7359c16a09b64fc8de24e (diff) |
Corrects issue where list was stacked again and again + clean up
-rw-r--r-- | .travis.yml | 7 | ||||
-rw-r--r-- | app/app-release.apk | bin | 2015372 -> 2013339 bytes | |||
-rw-r--r-- | app/build.gradle | 2 | ||||
-rw-r--r-- | app/src/main/AndroidManifest.xml | 13 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/GitHandler.java | 3 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java | 7 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/PasswordStore.java | 5 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/crypto/OpenPgpProviderActivity.java | 383 |
8 files changed, 14 insertions, 406 deletions
diff --git a/.travis.yml b/.travis.yml index 278d7a93..d53e56a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,10 +7,10 @@ android: # - tools # The BuildTools version used by your project - - build-tools-19.1.0 + - build-tools-21.0.1 # The SDK version used to compile your project - - android-19 + - android-21 # Additional components - extra-google-m2repository @@ -18,5 +18,4 @@ android: # Specify at least one system image, # if you need to run emulator(s) during your tests - - sys-img-armeabi-v7a-android-19 - - sys-img-x86-android-17 + # - sys-img-x86-android-21 diff --git a/app/app-release.apk b/app/app-release.apk Binary files differindex e5dadb75..d4500633 100644 --- a/app/app-release.apk +++ b/app/app-release.apk diff --git a/app/build.gradle b/app/build.gradle index 7b6d263b..5c4dd0c7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { minSdkVersion 15 targetSdkVersion 21 versionCode 20 - versionName "1.2-a1" + versionName "1.2-a2" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b42dd278..9c9383cc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.zeapo.pwdstore" android:versionCode="11" - android:versionName="1.1-b5"> + package="com.zeapo.pwdstore"> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> @@ -12,21 +11,20 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - <activity android:name=".GitHandler" android:label="@string/title_activity_git_clone" + <activity android:name=".GitHandler" android:parentActivityName=".PasswordStore"> <meta-data android:name="android.PARENT_ACTIVITY1" android:value="com.zeapo.pwdstore.PasswordStore" /> </activity> - <activity android:name=".crypto.OpenPgpProviderActivity" /> - <activity android:name=".UserPreference" + <activity android:name=".UserPreference" android:parentActivityName=".PasswordStore"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.zeapo.pwdstore.PasswordStore" /> </activity> - <activity android:name=".crypto.PgpHandler" android:label="@string/title_activity_pgp_handler" + <activity android:name=".crypto.PgpHandler" android:parentActivityName=".PasswordStore"> <meta-data android:name="android.support.PARENT_ACTIVITY" @@ -34,9 +32,6 @@ </activity> </application> - <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" /> - <uses-sdk android:targetSdkVersion="19" android:minSdkVersion="15" /> </manifest> diff --git a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java index 8dd56364..6003cd73 100644 --- a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java @@ -299,7 +299,6 @@ public class GitHandler extends ActionBarActivity { Matcher matcher = pattern.matcher(uri); if (matcher.find()) { int count = matcher.groupCount(); - Log.i("GIT", ">> " + count); if (count > 1) { server_user.setText(matcher.group(1)); server_url.setText(matcher.group(2)); @@ -627,7 +626,7 @@ public class GitHandler extends ActionBarActivity { /** Finds the method and provides it with authentication paramters via invokeWithAuthentication */ private void authenticateAndRun(String operation) { try { - invokeWithAuthentication(this, this.getClass().getMethod(operation, UsernamePasswordCredentialsProvider.class)); + invokeWithAuthentication(this, GitHandler.class.getMethod(operation, UsernamePasswordCredentialsProvider.class)); } catch (Exception e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java index 3d93fe6c..4e8ef5ef 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java @@ -94,7 +94,6 @@ public class PasswordFragment extends Fragment{ recyclerAdapter.clear(); recyclerAdapter.addAll(PasswordRepository.getPasswords(item.getFile())); - ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { ((PasswordStore) getActivity()).decryptPassword(item); @@ -119,8 +118,12 @@ public class PasswordFragment extends Fragment{ } public void updateAdapter() { + passListStack.clear(); + scrollPosition.clear(); recyclerAdapter.clear(); - recyclerAdapter.addAll(PasswordRepository.getPasswords(new File(getArguments().getString("Path")))); + recyclerAdapter.addAll(PasswordRepository.getPasswords()); + + ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); } public void popBack() { diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java index 83681a06..025435f4 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java @@ -382,14 +382,9 @@ public class PasswordStore extends ActionBarActivity { protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode == RESULT_CANCELED) - refreshListAdapter(); - if (resultCode == RESULT_OK) { if (requestCode == GitHandler.REQUEST_CLONE) checkLocalRepository(); - else - refreshListAdapter(); switch (requestCode) { case PgpHandler.REQUEST_CODE_ENCRYPT : diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/OpenPgpProviderActivity.java b/app/src/main/java/com/zeapo/pwdstore/crypto/OpenPgpProviderActivity.java deleted file mode 100644 index 8bc4b9d3..00000000 --- a/app/src/main/java/com/zeapo/pwdstore/crypto/OpenPgpProviderActivity.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (C) 2013-2014 Dominik Schürmann <dominik@dominikschuermann.de> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.zeapo.pwdstore.crypto; - -import android.app.Activity; -import android.app.PendingIntent; -import android.content.Intent; -import android.content.IntentSender; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.TextUtils; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -import com.zeapo.pwdstore.R; - -import org.openintents.openpgp.OpenPgpError; -import org.openintents.openpgp.OpenPgpSignatureResult; -import org.openintents.openpgp.util.OpenPgpApi; -import org.openintents.openpgp.util.OpenPgpServiceConnection; -import org.openintents.openpgp.util.OpenPgpUtils; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; - -public class OpenPgpProviderActivity extends Activity { - private EditText mMessage; - private EditText mCiphertext; - private EditText mEncryptUserIds; - private Button mSign; - private Button mEncrypt; - private Button mSignAndEncrypt; - private Button mDecryptAndVerify; - private EditText mAccount; - private EditText mGetKeyEdit; - private EditText mGetKeyIdsEdit; - private Button mGetKey; - private Button mGetKeyIds; - - private OpenPgpServiceConnection mServiceConnection; - - public static final int REQUEST_CODE_SIGN = 9910; - public static final int REQUEST_CODE_ENCRYPT = 9911; - public static final int REQUEST_CODE_SIGN_AND_ENCRYPT = 9912; - public static final int REQUEST_CODE_DECRYPT_AND_VERIFY = 9913; - public static final int REQUEST_CODE_GET_KEY = 9914; - public static final int REQUEST_CODE_GET_KEY_IDS = 9915; - - public final class Constants { - public static final String TAG = "Keychain"; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.openpgp_provider); - - mMessage = (EditText) findViewById(R.id.crypto_provider_demo_message); - mCiphertext = (EditText) findViewById(R.id.crypto_provider_demo_ciphertext); - mEncryptUserIds = (EditText) findViewById(R.id.crypto_provider_demo_encrypt_user_id); - mSign = (Button) findViewById(R.id.crypto_provider_demo_sign); - mEncrypt = (Button) findViewById(R.id.crypto_provider_demo_encrypt); - mSignAndEncrypt = (Button) findViewById(R.id.crypto_provider_demo_sign_and_encrypt); - mDecryptAndVerify = (Button) findViewById(R.id.crypto_provider_demo_decrypt_and_verify); - mAccount = (EditText) findViewById(R.id.crypto_provider_demo_account); - mGetKeyEdit = (EditText) findViewById(R.id.crypto_provider_demo_get_key_edit); - mGetKeyIdsEdit = (EditText) findViewById(R.id.crypto_provider_demo_get_key_ids_edit); - mGetKey = (Button) findViewById(R.id.crypto_provider_demo_get_key); - mGetKeyIds = (Button) findViewById(R.id.crypto_provider_demo_get_key_ids); - - mSign.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - sign(new Intent()); - } - }); - mEncrypt.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - encrypt(new Intent()); - } - }); - mSignAndEncrypt.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - signAndEncrypt(new Intent()); - } - }); - mDecryptAndVerify.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - decryptAndVerify(new Intent()); - } - }); - mGetKey.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getKey(new Intent()); - } - }); - mGetKeyIds.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getKeyIds(new Intent()); - } - }); - - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); - String providerPackageName = settings.getString("openpgp_provider_list", ""); - if (TextUtils.isEmpty(providerPackageName)) { - Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show(); - finish(); - } else { - // bind to service - mServiceConnection = new OpenPgpServiceConnection( - OpenPgpProviderActivity.this, providerPackageName); - mServiceConnection.bindToService(); - } - } - - private void handleError(final OpenPgpError error) { - runOnUiThread(new Runnable() { - - @Override - public void run() { - Toast.makeText(OpenPgpProviderActivity.this, - "onError id:" + error.getErrorId() + "\n\n" + error.getMessage(), - Toast.LENGTH_LONG).show(); - Log.e(Constants.TAG, "onError getErrorId:" + error.getErrorId()); - Log.e(Constants.TAG, "onError getMessage:" + error.getMessage()); - } - }); - } - - private void showToast(final String message) { - runOnUiThread(new Runnable() { - - @Override - public void run() { - Toast.makeText(OpenPgpProviderActivity.this, - message, - Toast.LENGTH_SHORT).show(); - } - }); - } - - /** - * Takes input from message or ciphertext EditText and turns it into a ByteArrayInputStream - * - * @param ciphertext - * @return - */ - private InputStream getInputstream(boolean ciphertext) { - InputStream is = null; - try { - String inputStr; - if (ciphertext) { - inputStr = mCiphertext.getText().toString(); - } else { - inputStr = mMessage.getText().toString(); - } - is = new ByteArrayInputStream(inputStr.getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - Log.e(Constants.TAG, "UnsupportedEncodingException", e); - } - - return is; - } - - private class MyCallback implements OpenPgpApi.IOpenPgpCallback { - boolean returnToCiphertextField; - ByteArrayOutputStream os; - int requestCode; - - private MyCallback(boolean returnToCiphertextField, ByteArrayOutputStream os, int requestCode) { - this.returnToCiphertextField = returnToCiphertextField; - this.os = os; - this.requestCode = requestCode; - } - - @Override - public void onReturn(Intent result) { - switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) { - case OpenPgpApi.RESULT_CODE_SUCCESS: { - showToast("RESULT_CODE_SUCCESS"); - - // encrypt/decrypt/sign/verify - if (os != null) { - try { - Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length - + " str=" + os.toString("UTF-8")); - - if (returnToCiphertextField) { - mCiphertext.setText(os.toString("UTF-8")); - } else { - mMessage.setText(os.toString("UTF-8")); - } - } catch (UnsupportedEncodingException e) { - Log.e(Constants.TAG, "UnsupportedEncodingException", e); - } - } - - // verify - if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) { - OpenPgpSignatureResult sigResult - = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE); - showToast(sigResult.toString()); - } - - // get key ids - if (result.hasExtra(OpenPgpApi.RESULT_KEY_IDS)) { - long[] keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS); - String out = "keyIds: "; - for (int i = 0; i < keyIds.length; i++) { - out += OpenPgpUtils.convertKeyIdToHex(keyIds[i]) + ", "; - } - - showToast(out); - } - break; - } - case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: { - showToast("RESULT_CODE_USER_INTERACTION_REQUIRED"); - - PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT); - try { - OpenPgpProviderActivity.this.startIntentSenderForResult(pi.getIntentSender(), - requestCode, null, 0, 0, 0); - } catch (IntentSender.SendIntentException e) { - Log.e(Constants.TAG, "SendIntentException", e); - } - break; - } - case OpenPgpApi.RESULT_CODE_ERROR: { - showToast("RESULT_CODE_ERROR"); - - OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR); - handleError(error); - break; - } - } - } - } - - public void sign(Intent data) { - data.setAction(OpenPgpApi.ACTION_SIGN); - data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - - InputStream is = getInputstream(false); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_SIGN)); - } - - public void encrypt(Intent data) { - data.setAction(OpenPgpApi.ACTION_ENCRYPT); - data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mEncryptUserIds.getText().toString().split(",")); - data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - - InputStream is = getInputstream(false); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_ENCRYPT)); - } - - public void signAndEncrypt(Intent data) { - data.setAction(OpenPgpApi.ACTION_SIGN_AND_ENCRYPT); - data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mEncryptUserIds.getText().toString().split(",")); - data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - - InputStream is = getInputstream(false); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, is, os, new MyCallback(true, os, REQUEST_CODE_SIGN_AND_ENCRYPT)); - } - - public void decryptAndVerify(Intent data) { - data.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY); - data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - - InputStream is = getInputstream(true); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, is, os, new MyCallback(false, os, REQUEST_CODE_DECRYPT_AND_VERIFY)); - } - - public void getKey(Intent data) { - data.setAction(OpenPgpApi.ACTION_GET_KEY); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - data.putExtra(OpenPgpApi.EXTRA_KEY_ID, Long.decode(mGetKeyEdit.getText().toString())); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, null, null, new MyCallback(false, null, REQUEST_CODE_GET_KEY)); - } - - public void getKeyIds(Intent data) { - data.setAction(OpenPgpApi.ACTION_GET_KEY_IDS); - data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, mAccount.getText().toString()); - data.putExtra(OpenPgpApi.EXTRA_USER_IDS, mGetKeyIdsEdit.getText().toString().split(",")); - - OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService()); - api.executeApiAsync(data, null, null, new MyCallback(false, null, REQUEST_CODE_GET_KEY_IDS)); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - Log.d(Constants.TAG, "onActivityResult resultCode: " + resultCode); - - // try again after user interaction - if (resultCode == RESULT_OK) { - /* - * The data originally given to one of the methods above, is again - * returned here to be used when calling the method again after user - * interaction. The Intent now also contains results from the user - * interaction, for example selected key ids. - */ - switch (requestCode) { - case REQUEST_CODE_SIGN: { - sign(data); - break; - } - case REQUEST_CODE_ENCRYPT: { - encrypt(data); - break; - } - case REQUEST_CODE_SIGN_AND_ENCRYPT: { - signAndEncrypt(data); - break; - } - case REQUEST_CODE_DECRYPT_AND_VERIFY: { - decryptAndVerify(data); - break; - } - case REQUEST_CODE_GET_KEY: { - getKey(data); - break; - } - case REQUEST_CODE_GET_KEY_IDS: { - getKeyIds(data); - break; - } - } - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - - if (mServiceConnection != null) { - mServiceConnection.unbindFromService(); - } - } - -}
\ No newline at end of file |