diff options
Diffstat (limited to 'app/src/main/java')
18 files changed, 115 insertions, 355 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java index 49d57e30..646e44c7 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java @@ -1,11 +1,11 @@ package com.zeapo.pwdstore; -import android.support.v4.app.Fragment; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -32,7 +32,7 @@ import java.util.Stack; public class PasswordFragment extends Fragment{ public interface OnFragmentInteractionListener { - public void onFragmentInteraction(PasswordItem item); + void onFragmentInteraction(PasswordItem item); } // store the pass files list in a stack @@ -41,7 +41,6 @@ public class PasswordFragment extends Fragment{ private Stack<Integer> scrollPosition; private PasswordRecyclerAdapter recyclerAdapter; private RecyclerView recyclerView; - private RecyclerView.LayoutManager mLayoutManager; private OnFragmentInteractionListener mListener; private SharedPreferences settings; @@ -57,9 +56,9 @@ public class PasswordFragment extends Fragment{ String path = getArguments().getString("Path"); settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); - passListStack = new Stack<ArrayList<PasswordItem>>(); - scrollPosition = new Stack<Integer>(); - pathStack = new Stack<File>(); + passListStack = new Stack<>(); + scrollPosition = new Stack<>(); + pathStack = new Stack<>(); recyclerAdapter = new PasswordRecyclerAdapter((PasswordStore) getActivity(), mListener, PasswordRepository.getPasswords(new File(path), PasswordRepository.getRepositoryDirectory(getActivity()))); } @@ -70,7 +69,7 @@ public class PasswordFragment extends Fragment{ View view = inflater.inflate(R.layout.password_recycler_view, container, false); // use a linear layout manager - mLayoutManager = new LinearLayoutManager(getActivity()); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); recyclerView = (RecyclerView) view.findViewById(R.id.pass_recycler); recyclerView.setLayoutManager(mLayoutManager); @@ -121,10 +120,6 @@ public class PasswordFragment extends Fragment{ } } } - - public void savePosition(Integer position) { - - } }; } catch (ClassCastException e) { throw new ClassCastException(context.toString() @@ -132,13 +127,6 @@ public class PasswordFragment extends Fragment{ } } - @Override - public void onPause() { - super.onPause(); -// mListener.savePosition(mListView.getFirstVisiblePosition()); -// mListView.closeOpenedItems(); - } - /** * clears the adapter content and sets it back to the root view */ diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java index 5b2a7624..f4ea9ec6 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java @@ -13,6 +13,7 @@ import android.graphics.drawable.Icon; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; @@ -52,11 +53,9 @@ import java.util.Set; public class PasswordStore extends AppCompatActivity { private static final String TAG = "PwdStrAct"; - private File currentDir; private SharedPreferences settings; private Activity activity; private PasswordFragment plist; - private AlertDialog selectDestinationDialog; private ShortcutManager shortcutManager; private final static int CLONE_REPO_BUTTON = 401; @@ -125,8 +124,7 @@ public class PasswordStore extends AppCompatActivity { } @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_EXTERNAL_STORAGE: { // If request is cancelled, the result arrays are empty. @@ -458,8 +456,8 @@ public class PasswordStore extends AppCompatActivity { return; } - this.currentDir = getCurrentDir(); - Log.i("PWDSTR", "Adding file to : " + this.currentDir.getAbsolutePath()); + File currentDir = getCurrentDir(); + Log.i("PWDSTR", "Adding file to : " + currentDir.getAbsolutePath()); Intent intent = new Intent(this, PgpHandler.class); intent.putExtra("FILE_PATH", getCurrentDir().getAbsolutePath()); diff --git a/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.java b/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.java index bf378153..e9c9bbab 100644 --- a/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.java @@ -1,15 +1,12 @@ package com.zeapo.pwdstore; import android.content.Context; -import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,7 +30,7 @@ import java.util.Stack; public class SelectFolderFragment extends Fragment{ public interface OnFragmentInteractionListener { - public void onFragmentInteraction(PasswordItem item); + void onFragmentInteraction(PasswordItem item); } // store the pass files list in a stack @@ -42,9 +39,7 @@ public class SelectFolderFragment extends Fragment{ private Stack<Integer> scrollPosition; private FolderRecyclerAdapter recyclerAdapter; private RecyclerView recyclerView; - private RecyclerView.LayoutManager mLayoutManager; private OnFragmentInteractionListener mListener; - private SharedPreferences settings; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -57,10 +52,9 @@ public class SelectFolderFragment extends Fragment{ super.onCreate(savedInstanceState); String path = getArguments().getString("Path"); - settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); - passListStack = new Stack<ArrayList<PasswordItem>>(); - scrollPosition = new Stack<Integer>(); - pathStack = new Stack<File>(); + passListStack = new Stack<>(); + scrollPosition = new Stack<>(); + pathStack = new Stack<>(); recyclerAdapter = new FolderRecyclerAdapter((PgpHandler) getActivity(), mListener, PasswordRepository.getPasswords(new File(path), PasswordRepository.getRepositoryDirectory(getActivity()))); } @@ -71,10 +65,8 @@ public class SelectFolderFragment extends Fragment{ View view = inflater.inflate(R.layout.password_recycler_view, container, false); // use a linear layout manager - mLayoutManager = new LinearLayoutManager(getActivity()); - recyclerView = (RecyclerView) view.findViewById(R.id.pass_recycler); - recyclerView.setLayoutManager(mLayoutManager); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); // use divider recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), R.drawable.divider)); @@ -116,10 +108,6 @@ public class SelectFolderFragment extends Fragment{ ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } - - public void savePosition(Integer position) { - - } }; } catch (ClassCastException e) { throw new ClassCastException(context.toString() @@ -127,89 +115,6 @@ public class SelectFolderFragment extends Fragment{ } } - @Override - public void onPause() { - super.onPause(); -// mListener.savePosition(mListView.getFirstVisiblePosition()); -// mListView.closeOpenedItems(); - } - - /** - * clears the adapter content and sets it back to the root view - */ - public void updateAdapter() { - passListStack.clear(); - pathStack.clear(); - scrollPosition.clear(); - recyclerAdapter.clear(); - recyclerAdapter.addAll(PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity()))); - - ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); - } - - /** - * refreshes the adapter with the latest opened category - */ - public void refreshAdapter() { - recyclerAdapter.clear(); - recyclerAdapter.addAll(pathStack.isEmpty() ? - PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity())) : - PasswordRepository.getPasswords(pathStack.peek(), PasswordRepository.getRepositoryDirectory(getActivity()))); - } - - /** - * filters the list adapter - * @param filter the filter to apply - */ - public void filterAdapter(String filter) { - Log.d("FRAG", "filter: " + filter); - - if (filter.isEmpty()) { - refreshAdapter(); - } else { - recursiveFilter(filter, pathStack.isEmpty() ? null : pathStack.peek()); - } - } - - /** - * recursively filters a directory and extract all the matching items - * @param filter the filter to apply - * @param dir the directory to filter - */ - private void recursiveFilter(String filter, File dir) { - // on the root the pathStack is empty - ArrayList<PasswordItem> passwordItems = dir == null ? - PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity())) : - PasswordRepository.getPasswords(dir, PasswordRepository.getRepositoryDirectory(getActivity())); - - boolean rec = settings.getBoolean("filter_recursively", true); - for (PasswordItem item : passwordItems) { - if (item.getType() == PasswordItem.TYPE_CATEGORY && rec) { - recursiveFilter(filter, item.getFile()); - } - boolean matches = item.toString().toLowerCase().contains(filter.toLowerCase()); - boolean inAdapter = recyclerAdapter.getValues().contains(item); - if (matches && !inAdapter) { - recyclerAdapter.add(item); - } else if (!matches && inAdapter) { - recyclerAdapter.remove(recyclerAdapter.getValues().indexOf(item)); - } - } - } - - /** - * Goes back one level back in the path - */ - public void popBack() { - if (passListStack.isEmpty()) - return; - - recyclerView.scrollToPosition(scrollPosition.pop()); - recyclerAdapter.clear(); - recyclerAdapter.addAll(passListStack.pop()); - pathStack.pop(); - } - /** * gets the current directory * @return the current directory @@ -220,8 +125,4 @@ public class SelectFolderFragment extends Fragment{ else return pathStack.peek(); } - - public boolean isNotEmpty() { - return !passListStack.isEmpty(); - } } diff --git a/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.java b/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.java index ab245746..fb3f4008 100644 --- a/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.java +++ b/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.java @@ -14,11 +14,6 @@ public class ToCloneOrNot extends Fragment { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment diff --git a/app/src/main/java/com/zeapo/pwdstore/UserPreference.java b/app/src/main/java/com/zeapo/pwdstore/UserPreference.java index 54e04b70..ad2a1ffe 100644 --- a/app/src/main/java/com/zeapo/pwdstore/UserPreference.java +++ b/app/src/main/java/com/zeapo/pwdstore/UserPreference.java @@ -18,6 +18,7 @@ import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.provider.Settings; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; @@ -547,7 +548,7 @@ public class UserPreference extends AppCompatActivity { } @Override - public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()); switch (requestCode) { case REQUEST_EXTERNAL_STORAGE: { diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java index 583b5064..4edfc3e3 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java @@ -1,16 +1,17 @@ package com.zeapo.pwdstore.autofill; import android.app.Activity; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -71,8 +72,9 @@ public class AutofillFragment extends DialogFragment { adapter = new ArrayAdapter<String>(getActivity().getApplicationContext() , android.R.layout.simple_list_item_1, android.R.id.text1) { // set text color to black because default is white... + @NonNull @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(int position, View convertView, @NonNull ViewGroup parent) { TextView textView = (TextView) super.getView(position, convertView, parent); textView.setTextColor(ContextCompat.getColor(getContext(), R.color.grey_black_1000)); return textView; diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java index b3991238..7696d82e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java @@ -13,6 +13,7 @@ import android.support.v4.app.NavUtils; import android.support.v4.app.TaskStackBuilder; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; @@ -30,7 +31,6 @@ public class AutofillPreferenceActivity extends AppCompatActivity { private RecyclerView recyclerView; AutofillRecyclerAdapter recyclerAdapter; // let fragment have access - private RecyclerView.LayoutManager layoutManager; private PackageManager pm; @@ -43,9 +43,9 @@ public class AutofillPreferenceActivity extends AppCompatActivity { setContentView(R.layout.autofill_recycler_view); recyclerView = (RecyclerView) findViewById(R.id.autofill_recycler); - layoutManager = new LinearLayoutManager(this); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); - recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); + recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); pm = getPackageManager(); diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java index 901ff903..80942c58 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java @@ -22,7 +22,6 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl private SortedList<AppInfo> apps; private ArrayList<AppInfo> allApps; // for filtering, maintain a list of all - private PackageManager pm; private AutofillPreferenceActivity activity; Drawable browserIcon = null; @@ -93,7 +92,7 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl this.apps = new SortedList<>(AppInfo.class, callback); this.apps.addAll(allApps); this.allApps = new ArrayList<>(allApps); - this.pm = pm; + PackageManager pm1 = pm; this.activity = activity; try { browserIcon = activity.getPackageManager().getApplicationIcon("com.android.browser"); diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/DividerItemDecoration.java b/app/src/main/java/com/zeapo/pwdstore/autofill/DividerItemDecoration.java deleted file mode 100644 index bd5ec9de..00000000 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/DividerItemDecoration.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.zeapo.pwdstore.autofill; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; - -/* - * Copyright (C) 2014 The Android Open Source Project - * - * 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. - */ -public class DividerItemDecoration extends RecyclerView.ItemDecoration { - - private static final int[] ATTRS = new int[]{ - android.R.attr.listDivider - }; - - public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; - - public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; - - private Drawable mDivider; - - private int mOrientation; - - public DividerItemDecoration(Context context, int orientation) { - final TypedArray a = context.obtainStyledAttributes(ATTRS); - mDivider = a.getDrawable(0); - a.recycle(); - setOrientation(orientation); - } - - public void setOrientation(int orientation) { - if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { - throw new IllegalArgumentException("invalid orientation"); - } - mOrientation = orientation; - } - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - if (mOrientation == VERTICAL_LIST) { - drawVertical(c, parent); - } else { - drawHorizontal(c, parent); - } - } - - public void drawVertical(Canvas c, RecyclerView parent) { - final int left = parent.getPaddingLeft(); - final int right = parent.getWidth() - parent.getPaddingRight(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child - .getLayoutParams(); - final int top = child.getBottom() + params.bottomMargin; - final int bottom = top + mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(c); - } - } - - public void drawHorizontal(Canvas c, RecyclerView parent) { - final int top = parent.getPaddingTop(); - final int bottom = parent.getHeight() - parent.getPaddingBottom(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child - .getLayoutParams(); - final int left = child.getRight() + params.rightMargin; - final int right = left + mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(c); - } - } - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { - if (mOrientation == VERTICAL_LIST) { - outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); - } else { - outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); - } - } -} - diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java index e938fdd4..12f2bcad 100644 --- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpHandler.java @@ -132,7 +132,7 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne try { this.mServiceConnection.unbindFromService(); } catch (Exception e) { - + // ignore any errors, we'll stop anyway. } } @@ -273,22 +273,12 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne public void handleClick(View view) { switch (view.getId()) { - case R.id.crypto_show_button: - decryptAndVerify(new Intent()); - break; - case R.id.crypto_delete_button: -// deletePassword(); - break; - case R.id.crypto_get_key_ids: - getKeyIds(new Intent()); - break; case R.id.generate_password: DialogFragment df = new pwgenDialogFragment(); df.show(getFragmentManager(), "generator"); default: Log.wtf(Constants.TAG,"This should not happen.... PgpHandler.java#handleClick(View) default reached."); // should not happen - } } @@ -571,7 +561,7 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne // get key ids if (result.hasExtra(OpenPgpApi.RESULT_KEY_IDS)) { long[] ids = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS); - Set<String> keys = new HashSet<String>(); + Set<String> keys = new HashSet<>(); for (long id : ids) keys.add(String.valueOf(id)); // use Long settings.edit().putStringSet("openpgp_key_ids_set", keys).apply(); @@ -734,44 +724,53 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne if (operation == null){ return; } - if (operation.equals("DECRYPT")) { - setContentView(R.layout.decrypt_layout); - ((TextView) findViewById(R.id.crypto_password_file)).setText(extra.getString("NAME")); - String path = extra - .getString("FILE_PATH") - .replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), ""); - String cat = new File(path).getParentFile().getName(); - - ((TextView) findViewById(R.id.crypto_password_category)).setText(cat + "/"); - decryptAndVerify(new Intent()); - } else if (operation.equals("ENCRYPT")) { - setContentView(R.layout.encrypt_layout); - Typeface monoTypeface = Typeface.createFromAsset(getAssets(), "fonts/sourcecodepro.ttf"); - ((EditText) findViewById(R.id.crypto_password_edit)).setTypeface(monoTypeface); - ((EditText) findViewById(R.id.crypto_extra_edit)).setTypeface(monoTypeface); - String cat = extra.getString("FILE_PATH"); - cat = cat.replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), ""); - cat = cat + "/"; - ((TextView) findViewById(R.id.crypto_password_category)).setText(cat); - } else if (operation.equals("GET_KEY_ID")) { - getKeyIds(new Intent()); - -// setContentView(R.layout.key_id); -// if (!keyIDs.isEmpty()) { -// String keys = keyIDs.split(",").length > 1 ? keyIDs : keyIDs.split(",")[0]; -// ((TextView) findViewById(R.id.crypto_key_ids)).setText(keys); -// } - } else if (operation.equals("EDIT")) { - setContentView(R.layout.decrypt_layout); - ((TextView) findViewById(R.id.crypto_password_file)).setText(extra.getString("NAME")); - String cat = new File(extra.getString("FILE_PATH").replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), "")) - .getParentFile().getName(); - - ((TextView) findViewById(R.id.crypto_password_category)).setText(cat + "/"); - edit(new Intent()); - } else if (operation.equals("SELECTFOLDER")){ - setContentView(R.layout.select_folder_layout); - selectFolder(getIntent()); + switch (operation) { + case "DECRYPT": { + setContentView(R.layout.decrypt_layout); + ((TextView) findViewById(R.id.crypto_password_file)).setText(extra.getString("NAME")); + String path = extra + .getString("FILE_PATH") + .replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), ""); + String cat = new File(path).getParentFile().getName(); + + ((TextView) findViewById(R.id.crypto_password_category)).setText(cat + "/"); + decryptAndVerify(new Intent()); + break; + } + case "ENCRYPT": { + setContentView(R.layout.encrypt_layout); + Typeface monoTypeface = Typeface.createFromAsset(getAssets(), "fonts/sourcecodepro.ttf"); + ((EditText) findViewById(R.id.crypto_password_edit)).setTypeface(monoTypeface); + ((EditText) findViewById(R.id.crypto_extra_edit)).setTypeface(monoTypeface); + String cat = extra.getString("FILE_PATH"); + cat = cat.replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), ""); + cat = cat + "/"; + ((TextView) findViewById(R.id.crypto_password_category)).setText(cat); + break; + } + case "GET_KEY_ID": + getKeyIds(new Intent()); + +// setContentView(R.layout.key_id); +// if (!keyIDs.isEmpty()) { +// String keys = keyIDs.split(",").length > 1 ? keyIDs : keyIDs.split(",")[0]; +// ((TextView) findViewById(R.id.crypto_key_ids)).setText(keys); +// } + break; + case "EDIT": { + setContentView(R.layout.decrypt_layout); + ((TextView) findViewById(R.id.crypto_password_file)).setText(extra.getString("NAME")); + String cat = new File(extra.getString("FILE_PATH").replace(PasswordRepository.getRepositoryDirectory(getApplicationContext()).getAbsolutePath(), "")) + .getParentFile().getName(); + + ((TextView) findViewById(R.id.crypto_password_category)).setText(cat + "/"); + edit(new Intent()); + break; + } + case "SELECTFOLDER": + setContentView(R.layout.select_folder_layout); + selectFolder(getIntent()); + break; } } diff --git a/app/src/main/java/com/zeapo/pwdstore/git/CloneOperation.java b/app/src/main/java/com/zeapo/pwdstore/git/CloneOperation.java index 25dba1fc..61e08dc2 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/CloneOperation.java +++ b/app/src/main/java/com/zeapo/pwdstore/git/CloneOperation.java @@ -12,8 +12,6 @@ import org.eclipse.jgit.api.Git; import java.io.File; public class CloneOperation extends GitOperation { - private static final String TAG = "CLONEOPT"; - /** * Creates a new clone operation * diff --git a/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java b/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java index 66e308b9..6314a4b3 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java +++ b/app/src/main/java/com/zeapo/pwdstore/git/GitActivity.java @@ -32,8 +32,6 @@ import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; -// TODO move the messages to strings.xml - public class GitActivity extends AppCompatActivity { private static final String TAG = "GitAct"; private static final String emailPattern = "^[^@]+@[^@]+$"; @@ -46,7 +44,6 @@ public class GitActivity extends AppCompatActivity { private File localDir; private String hostname; - private String port; private SharedPreferences settings; @@ -158,13 +155,6 @@ public class GitActivity extends AppCompatActivity { final EditText server_user = ((EditText) findViewById(R.id.server_user)); final EditText server_uri = ((EditText) findViewById(R.id.clone_uri)); - View.OnFocusChangeListener updateListener = new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View view, boolean b) { - updateURI(); - } - }; - server_url.setText(settings.getString("git_remote_server", "")); server_port.setText(settings.getString("git_remote_port", "")); server_user.setText(settings.getString("git_remote_username", "")); @@ -307,7 +297,7 @@ public class GitActivity extends AppCompatActivity { if (server_port.getText().toString().equals("22")) { hostname += server_path.getText().toString(); - ((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE); + findViewById(R.id.warn_url).setVisibility(View.GONE); } else { TextView warn_url = (TextView) findViewById(R.id.warn_url); if (!server_path.getText().toString().matches("/.*") && !server_port.getText().toString().isEmpty()) { @@ -329,7 +319,7 @@ public class GitActivity extends AppCompatActivity { if (server_port.getText().toString().equals("443")) { hostname.append(server_path.getText().toString()); - ((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE); + findViewById(R.id.warn_url).setVisibility(View.GONE); } else { hostname.append("/"); hostname.append(server_port.getText().toString()) @@ -417,6 +407,7 @@ public class GitActivity extends AppCompatActivity { /** * Saves the configuration found in the form */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean saveConfiguration() { // remember the settings SharedPreferences.Editor editor = settings.edit(); @@ -432,7 +423,7 @@ public class GitActivity extends AppCompatActivity { // 'save' hostname variable for use by addRemote() either here or later // in syncRepository() hostname = ((EditText) findViewById(R.id.clone_uri)).getText().toString(); - port = ((EditText) findViewById(R.id.server_port)).getText().toString(); + String port = ((EditText) findViewById(R.id.server_port)).getText().toString(); // don't ask the user, take off the protocol that he puts in hostname = hostname.replaceFirst("^.+://", ""); ((TextView) findViewById(R.id.clone_uri)).setText(hostname); diff --git a/app/src/main/java/com/zeapo/pwdstore/git/GitOperation.java b/app/src/main/java/com/zeapo/pwdstore/git/GitOperation.java index f6b05f4c..4002d24e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/GitOperation.java +++ b/app/src/main/java/com/zeapo/pwdstore/git/GitOperation.java @@ -27,7 +27,6 @@ import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import java.io.File; public abstract class GitOperation { - private static final String TAG = "GitOpt"; public static final int GET_SSH_KEY_FROM_CLONE = 201; protected final Repository repository; diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/SshConfigSessionFactory.java b/app/src/main/java/com/zeapo/pwdstore/git/config/SshConfigSessionFactory.java index e156ca4d..b958546e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/git/config/SshConfigSessionFactory.java +++ b/app/src/main/java/com/zeapo/pwdstore/git/config/SshConfigSessionFactory.java @@ -1,7 +1,5 @@ package com.zeapo.pwdstore.git.config; -import android.content.SharedPreferences; - import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; diff --git a/app/src/main/java/com/zeapo/pwdstore/pwgenDialogFragment.java b/app/src/main/java/com/zeapo/pwdstore/pwgenDialogFragment.java index 7d798a81..7b55dccf 100644 --- a/app/src/main/java/com/zeapo/pwdstore/pwgenDialogFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/pwgenDialogFragment.java @@ -103,7 +103,7 @@ public class pwgenDialogFragment extends DialogFragment { return ad; } - private boolean setPreferences () { + private void setPreferences () { ArrayList<String> preferences = new ArrayList<>(); if (!((CheckBox) getDialog().findViewById(R.id.numerals)).isChecked()) { preferences.add("0"); @@ -123,9 +123,9 @@ public class pwgenDialogFragment extends DialogFragment { EditText editText = (EditText) getDialog().findViewById(R.id.lengthNumber); try { int length = Integer.valueOf(editText.getText().toString()); - return pwgen.setPrefs(getActivity().getApplicationContext(), preferences, length); + pwgen.setPrefs(getActivity().getApplicationContext(), preferences, length); } catch(NumberFormatException e) { - return pwgen.setPrefs(getActivity().getApplicationContext(), preferences); + pwgen.setPrefs(getActivity().getApplicationContext(), preferences); } } } diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/EntryRecyclerAdapter.java b/app/src/main/java/com/zeapo/pwdstore/utils/EntryRecyclerAdapter.java index 5247c6a3..a36b1124 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/EntryRecyclerAdapter.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/EntryRecyclerAdapter.java @@ -19,10 +19,10 @@ import java.util.TreeSet; public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRecyclerAdapter.ViewHolder> { private final Activity activity; - protected final ArrayList<PasswordItem> values; - protected final Set<Integer> selectedItems = new TreeSet<>(); + private final ArrayList<PasswordItem> values; + final Set<Integer> selectedItems = new TreeSet<>(); - public EntryRecyclerAdapter(Activity activity, ArrayList<PasswordItem> values) { + EntryRecyclerAdapter(Activity activity, ArrayList<PasswordItem> values) { this.activity = activity; this.values = values; } @@ -52,7 +52,7 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec this.notifyItemInserted(getItemCount()); } - public void toggleSelection(int position) { + void toggleSelection(int position) { if (!selectedItems.remove(position)) { selectedItems.add(position); } @@ -106,11 +106,6 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec } holder.type.setText(pass.getFullPathToParent()); - if (pass.getType() == PasswordItem.TYPE_CATEGORY) { -// holder.card.setCardBackgroundColor(activity.getResources().getColor(R.color.blue_grey_200)); - } else { -// holder.card.setCardBackgroundColor(activity.getResources().getColor(R.color.blue_grey_50)); - } holder.view.setOnClickListener(getOnClickListener(holder, pass)); @@ -134,14 +129,14 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec // Provide a reference to the views for each data item // Complex data items may need more than one view per item, and // you provide access to all the views for a data item in a view holder - public static class ViewHolder extends RecyclerView.ViewHolder { + static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case - public View view; - public TextView name; - public TextView type; - public ImageView typeImage; + public final View view; + public final TextView name; + final TextView type; + final ImageView typeImage; - public ViewHolder(View v) { + ViewHolder(View v) { super(v); view = v; name = (TextView) view.findViewById(R.id.label); diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java index 404091b2..cfdb829d 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java @@ -1,5 +1,7 @@ package com.zeapo.pwdstore.utils; +import android.support.annotation.NonNull; + import java.io.File; public class PasswordItem implements Comparable{ @@ -12,7 +14,6 @@ public class PasswordItem implements Comparable{ private PasswordItem parent; private File file; private String fullPathToParent; - public boolean selected = false; /** Create a password item * @@ -93,14 +94,15 @@ public class PasswordItem implements Comparable{ } @Override - public boolean equals(Object o){ - PasswordItem other = (PasswordItem) o; + public boolean equals(Object o) { // Makes it possible to have a category and a password with the same name - return (other.getFile().equals(this.getFile())); -} + return o != null + && o.getClass() == PasswordItem.class + && ((PasswordItem) o).getFile().equals(this.getFile()); + } @Override - public int compareTo(Object o) { + public int compareTo(@NonNull Object o) { PasswordItem other = (PasswordItem) o; // Appending the type will make the sort type dependent return (this.getType() + this.getName()) diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java index ab86d2e1..d97e3294 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java @@ -27,7 +27,6 @@ import static java.util.Collections.sort; public class PasswordRepository { private static Repository repository; - private static boolean initialized = false; protected PasswordRepository(){ } @@ -165,13 +164,13 @@ public class PasswordRepository { * @return the list of gpg files in that directory */ public static ArrayList<File> getFilesList(File path){ - if (!path.exists()) return new ArrayList<File>(); + if (!path.exists()) return new ArrayList<>(); Log.d("REPO", "current path: " + path.getPath()); - ArrayList<File> files = new ArrayList<File>(Arrays.asList(path.listFiles((FileFilter) FileFilterUtils.directoryFileFilter()))); - files.addAll( new ArrayList<File>((List<File>)FileUtils.listFiles(path, new String[] {"gpg"}, false))); + ArrayList<File> files = new ArrayList<>(Arrays.asList(path.listFiles((FileFilter) FileFilterUtils.directoryFileFilter()))); + files.addAll(new ArrayList<>((List<File>) FileUtils.listFiles(path, new String[]{"gpg"}, false))); - return new ArrayList<File>(files); + return new ArrayList<>(files); } /** @@ -183,9 +182,9 @@ public class PasswordRepository { //We need to recover the passwords then parse the files ArrayList<File> passList = getFilesList(path); - if (passList.size() == 0) return new ArrayList<PasswordItem>(); + if (passList.size() == 0) return new ArrayList<>(); - ArrayList<PasswordItem> passwordList = new ArrayList<PasswordItem>(); + ArrayList<PasswordItem> passwordList = new ArrayList<>(); for (File file : passList) { if (file.isFile()) { @@ -203,7 +202,7 @@ public class PasswordRepository { /** * Sets the git user name - * @param String username username + * @param username username */ public static void setUserName(String username) { setStringConfig("user", null, "name", username); @@ -211,7 +210,7 @@ public class PasswordRepository { /** * Sets the git user email - * @param String email email + * @param email email */ public static void setUserEmail(String email) { setStringConfig("user", null, "email", email); @@ -219,10 +218,10 @@ public class PasswordRepository { /** * Sets a git config value - * @param String section config section name - * @param String subsection config subsection name - * @param String name config name - * @param String value the value to be set + * @param section config section name + * @param subsection config subsection name + * @param name config name + * @param value the value to be set */ private static void setStringConfig(String section, String subsection, String name, String value) { if (isInitialized()) { |