diff options
Diffstat (limited to 'app/src/main')
9 files changed, 79 insertions, 70 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java index fed557fa..72636043 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java @@ -60,7 +60,8 @@ public class PasswordFragment extends Fragment{ passListStack = new Stack<ArrayList<PasswordItem>>(); scrollPosition = new Stack<Integer>(); pathStack = new Stack<File>(); - recyclerAdapter = new PasswordRecyclerAdapter((PasswordStore) getActivity(), mListener, PasswordRepository.getPasswords(new File(path))); + recyclerAdapter = new PasswordRecyclerAdapter((PasswordStore) getActivity(), mListener, + PasswordRepository.getPasswords(new File(path), PasswordRepository.getRepositoryDirectory(getActivity()))); } @Override @@ -98,8 +99,8 @@ public class PasswordFragment extends Fragment{ if (item.getType() == PasswordItem.TYPE_CATEGORY) { // push the current password list (non filtered plz!) passListStack.push(pathStack.isEmpty() ? - PasswordRepository.getPasswords() : - PasswordRepository.getPasswords(pathStack.peek())); + PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(activity)) : + PasswordRepository.getPasswords(pathStack.peek(), PasswordRepository.getRepositoryDirectory(activity))); //push the category were we're going pathStack.push(item.getFile()); @@ -107,7 +108,7 @@ public class PasswordFragment extends Fragment{ recyclerView.scrollToPosition(0); recyclerAdapter.clear(); - recyclerAdapter.addAll(PasswordRepository.getPasswords(item.getFile())); + recyclerAdapter.addAll(PasswordRepository.getPasswords(item.getFile(), PasswordRepository.getRepositoryDirectory(activity))); ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { @@ -140,7 +141,7 @@ public class PasswordFragment extends Fragment{ pathStack.clear(); scrollPosition.clear(); recyclerAdapter.clear(); - recyclerAdapter.addAll(PasswordRepository.getPasswords()); + recyclerAdapter.addAll(PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity()))); ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); } @@ -151,8 +152,8 @@ public class PasswordFragment extends Fragment{ public void refreshAdapter() { recyclerAdapter.clear(); recyclerAdapter.addAll(pathStack.isEmpty() ? - PasswordRepository.getPasswords() : - PasswordRepository.getPasswords(pathStack.peek())); + PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity())) : + PasswordRepository.getPasswords(pathStack.peek(), PasswordRepository.getRepositoryDirectory(getActivity()))); } /** @@ -177,8 +178,8 @@ public class PasswordFragment extends Fragment{ private void recursiveFilter(String filter, File dir) { // on the root the pathStack is empty ArrayList<PasswordItem> passwordItems = dir == null ? - PasswordRepository.getPasswords() : - PasswordRepository.getPasswords(dir); + PasswordRepository.getPasswords(PasswordRepository.getRepositoryDirectory(getActivity())) : + PasswordRepository.getPasswords(dir, PasswordRepository.getRepositoryDirectory(getActivity())); boolean rec = settings.getBoolean("filter_recursively", true); for (PasswordItem item : passwordItems) { diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java index 3d17ce10..e51ef201 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java @@ -34,7 +34,6 @@ import java.io.File; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.TreeSet; public class PasswordStore extends AppCompatActivity { private static final String TAG = "PwdStrAct"; @@ -226,7 +225,7 @@ public class PasswordStore extends AppCompatActivity { File dir = new File(settings.getString("git_external_repo", null)); if (dir.exists() && dir.isDirectory() && !FileUtils.listFiles(dir, null, true).isEmpty() && - !PasswordRepository.getPasswords(dir).isEmpty()) { + !PasswordRepository.getPasswords(dir, PasswordRepository.getRepositoryDirectory(this)).isEmpty()) { PasswordRepository.closeRepository(); checkLocalRepository(); return; // if not empty, just show me the passwords! @@ -468,7 +467,7 @@ public class PasswordStore extends AppCompatActivity { dir.exists() && dir.isDirectory() && !FileUtils.listFiles(dir, null, true).isEmpty() && - !PasswordRepository.getPasswords(dir).isEmpty()) { + !PasswordRepository.getPasswords(dir, PasswordRepository.getRepositoryDirectory(this)).isEmpty()) { PasswordRepository.closeRepository(); checkLocalRepository(); return; // if not empty, just show me the passwords! 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 4f129851..7fa88085 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordItem.java @@ -11,6 +11,7 @@ public class PasswordItem implements Comparable{ private String name; private PasswordItem parent; private File file; + private String fullPathName; public boolean selected = false; /** Create a password item @@ -20,11 +21,12 @@ public class PasswordItem implements Comparable{ * @param parent * @param type */ - protected PasswordItem(String name, PasswordItem parent, char type, File file) { + protected PasswordItem(String name, PasswordItem parent, char type, File file, File rootDir) { this.name = name; this.parent = parent; this.type = type; this.file = file; + this.fullPathName = file.getAbsolutePath().replace(rootDir.getAbsolutePath(), "").replace(file.getName(), ""); } /** Create a new Category item @@ -33,8 +35,8 @@ public class PasswordItem implements Comparable{ * @param parent * @return */ - public static PasswordItem newCategory(String name, File file, PasswordItem parent) { - return new PasswordItem(name, parent, TYPE_CATEGORY, file); + public static PasswordItem newCategory(String name, File file, PasswordItem parent, File rootDir) { + return new PasswordItem(name, parent, TYPE_CATEGORY, file, rootDir); } /** Create a new parentless category item @@ -42,8 +44,8 @@ public class PasswordItem implements Comparable{ * @param name * @return */ - public static PasswordItem newCategory(String name, File file) { - return new PasswordItem(name, null, TYPE_CATEGORY, file); + public static PasswordItem newCategory(String name, File file, File rootDir) { + return new PasswordItem(name, null, TYPE_CATEGORY, file, rootDir); } /** Create a new password item @@ -52,8 +54,8 @@ public class PasswordItem implements Comparable{ * @param parent * @return */ - public static PasswordItem newPassword(String name, File file, PasswordItem parent) { - return new PasswordItem(name, parent, TYPE_PASSWORD, file); + public static PasswordItem newPassword(String name, File file, PasswordItem parent, File rootDir) { + return new PasswordItem(name, parent, TYPE_PASSWORD, file, rootDir); } /** Create a new parentless password item @@ -61,8 +63,8 @@ public class PasswordItem implements Comparable{ * @param name * @return */ - public static PasswordItem newPassword(String name, File file) { - return new PasswordItem(name, null, TYPE_PASSWORD, file); + public static PasswordItem newPassword(String name, File file, File rootDir) { + return new PasswordItem(name, null, TYPE_PASSWORD, file, rootDir); } public char getType(){ @@ -81,6 +83,10 @@ public class PasswordItem implements Comparable{ return this.file; } + public String getFullPathName() { + return this.fullPathName; + } + @Override public String toString(){ return this.getName().replace(".gpg", ""); diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRecyclerAdapter.java b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRecyclerAdapter.java index 4bf9cb98..208ec2eb 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRecyclerAdapter.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRecyclerAdapter.java @@ -1,6 +1,7 @@ package com.zeapo.pwdstore.utils; import android.support.v7.view.ActionMode; +import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; @@ -31,12 +32,14 @@ public class PasswordRecyclerAdapter extends RecyclerView.Adapter<PasswordRecycl public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public View view; + public CardView card; public TextView name; public TextView type; public ViewHolder(View v) { super(v); view = v; + card = (CardView) view.findViewById(R.id.password_card); name = (TextView) view.findViewById(R.id.label); type = (TextView) view.findViewById(R.id.type); } @@ -68,23 +71,11 @@ public class PasswordRecyclerAdapter extends RecyclerView.Adapter<PasswordRecycl int sdk = android.os.Build.VERSION.SDK_INT; if (pass.getType() == PasswordItem.TYPE_CATEGORY) { - holder.type.setText("C"); - if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { - holder.type.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.category_rectangle)); - } else { - holder.type.setBackground(activity.getResources().getDrawable(R.drawable.category_rectangle)); - } - - holder.type.setTextColor(activity.getResources().getColor(R.color.deep_orange_50)); + holder.type.setText(pass.getFullPathName()); + holder.card.setCardBackgroundColor(activity.getResources().getColor(R.color.deep_orange_400)); } else { - holder.type.setText("P"); - if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { - holder.type.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.password_rectangle)); - } else { - holder.type.setBackground(activity.getResources().getDrawable(R.drawable.password_rectangle)); - } - - holder.type.setTextColor(activity.getResources().getColor(R.color.blue_grey_50)); + holder.type.setText(pass.getFullPathName()); + holder.card.setCardBackgroundColor(activity.getResources().getColor(R.color.light_blue_600)); } holder.view.setOnClickListener(new View.OnClickListener() { 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 a2ca8824..c571e5a5 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java @@ -155,8 +155,8 @@ public class PasswordRepository { * Gets the password items in the root directory * @return a list of passwords in the root direcotyr */ - public static ArrayList<PasswordItem> getPasswords() { - return getPasswords(repository.getWorkTree()); + public static ArrayList<PasswordItem> getPasswords(File rootDir) { + return getPasswords(rootDir, rootDir); } public static File getWorkTree() { @@ -183,7 +183,7 @@ public class PasswordRepository { * @param path the directory path * @return a list of password items */ - public static ArrayList<PasswordItem> getPasswords(File path) { + public static ArrayList<PasswordItem> getPasswords(File path, File rootDir) { //We need to recover the passwords then parse the files ArrayList<File> passList = getFilesList(path); @@ -193,12 +193,12 @@ public class PasswordRepository { for (File file : passList) { if (file.isFile()) { - passwordList.add(PasswordItem.newPassword(file.getName(), file)); + passwordList.add(PasswordItem.newPassword(file.getName(), file, rootDir)); } else { // ignore .git directory if (file.getName().equals(".git")) continue; - passwordList.add(PasswordItem.newCategory(file.getName(), file)); + passwordList.add(PasswordItem.newCategory(file.getName(), file, rootDir)); } } sort(passwordList); diff --git a/app/src/main/res/layout/password_recycler_view.xml b/app/src/main/res/layout/password_recycler_view.xml index 1b922a17..c49e4e45 100644 --- a/app/src/main/res/layout/password_recycler_view.xml +++ b/app/src/main/res/layout/password_recycler_view.xml @@ -25,8 +25,8 @@ android:layout_gravity="bottom|end" app:elevation="6dp" app:pressedTranslationZ="12dp" - app:backgroundTint="@color/blue_grey_500" - app:rippleColor="@color/blue_grey_50" + app:backgroundTint="@color/indigo_A700" + app:rippleColor="@color/blue_500" app:borderWidth="0dp" android:layout_margin="@dimen/fab_compat_margin" android:layout_alignParentBottom="true" diff --git a/app/src/main/res/layout/password_row_layout.xml b/app/src/main/res/layout/password_row_layout.xml index 99ee58eb..1e694f87 100644 --- a/app/src/main/res/layout/password_row_layout.xml +++ b/app/src/main/res/layout/password_row_layout.xml @@ -1,30 +1,41 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/password_row_background" android:layout_marginTop="4dp" android:layout_marginBottom="4dp" android:layout_gravity="start|center_vertical"> - <TextView - android:id="@+id/type" - android:text="TYPE" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:textStyle="bold" - android:layout_gravity="center_horizontal|center_vertical" - /> - <TextView - android:id="@+id/label" - android:text="FILE_NAME" - android:layout_marginTop="8dp" - android:layout_marginBottom="8dp" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:padding="8dp"/> -</LinearLayout>
\ No newline at end of file + <android.support.v7.widget.CardView + xmlns:card_view="http://schemas.android.com/apk/res-auto" + android:id="@+id/password_card" + android:layout_gravity="center" + android:layout_width="match_parent" + android:layout_height="60dp" + card_view:contentPaddingTop="4dp" + card_view:contentPaddingLeft="4dp" + card_view:cardCornerRadius="4dp" + card_view:cardElevation="3dp" + card_view:cardBackgroundColor="@color/light_blue_600"> + + <TextView + android:id="@+id/type" + android:text="TYPE" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="@android:color/white" + android:textStyle="italic" + android:maxLines="1" /> + <TextView + android:id="@+id/label" + android:text="FILE_NAME" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:padding="8dp" + android:textColor="@android:color/white" + android:textStyle="bold" /> + </android.support.v7.widget.CardView> + </LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 75d5bb51..3a3d4061 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,5 +152,6 @@ <string name="show_password_pref_summary">Control the visibility of the passwords once decrypted, this does not disable the password copy</string> <string name="toast_password_copied">Password copied into the clipboard</string> <string name="pwd_generate_button">Generate</string> + <string name="category_string">"Category: "</string> </resources> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3fffef42..9f610b68 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,15 +2,15 @@ <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> - <item name="colorPrimary">@color/blue_grey_500</item> - <item name="colorPrimaryDark">@color/blue_grey_700</item> - <item name="android:windowBackground">@color/blue_grey_50</item> - <item name="android:textColorPrimary">@color/teal_900</item> + <item name="colorPrimary">@color/indigo_A400</item> + <item name="colorPrimaryDark">@color/indigo_A700</item> + <item name="android:windowBackground">@color/indigo_50</item> + <item name="android:textColorPrimary">@color/blue_500</item> <item name="android:textColor">@color/text_color</item> <item name="actionModeStyle">@style/ActionMode</item> </style> <style name="ActionMode" parent="@style/Widget.AppCompat.ActionMode"> - <item name="background">@color/blue_grey_700</item> + <item name="background">@color/indigo_A700</item> </style> </resources> |