From 7ddc23ee839c8648b60217101862b739df4018c3 Mon Sep 17 00:00:00 2001 From: zeapo Date: Wed, 29 Oct 2014 22:09:40 +0100 Subject: corrected some issues with filtering and categories --- .../java/com/zeapo/pwdstore/PasswordFragment.java | 38 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java') diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java index 6058d169..1dcce1b8 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.java @@ -23,6 +23,7 @@ import com.zeapo.pwdstore.utils.PasswordRepository; import java.io.File; import java.util.ArrayList; +import java.util.List; import java.util.Stack; /** @@ -40,6 +41,7 @@ public class PasswordFragment extends Fragment{ // store the pass files list in a stack private Stack> passListStack; + private Stack pathStack; private Stack scrollPosition; private PasswordRecyclerAdapter recyclerAdapter; private RecyclerView recyclerView; @@ -60,6 +62,7 @@ public class PasswordFragment extends Fragment{ passListStack = new Stack>(); scrollPosition = new Stack(); + pathStack = new Stack(); recyclerAdapter = new PasswordRecyclerAdapter((PasswordStore) getActivity(), mListener, PasswordRepository.getPasswords(new File(path))); } @@ -89,6 +92,7 @@ public class PasswordFragment extends Fragment{ public void onFragmentInteraction(PasswordItem item) { if (item.getType() == PasswordItem.TYPE_CATEGORY) { passListStack.push((ArrayList) recyclerAdapter.getValues().clone()); + pathStack.push(item.getFile()); scrollPosition.push(recyclerView.getVerticalScrollbarPosition()); recyclerView.scrollToPosition(0); recyclerAdapter.clear(); @@ -117,8 +121,12 @@ public class PasswordFragment extends Fragment{ // 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()); @@ -126,12 +134,29 @@ public class PasswordFragment extends Fragment{ ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); } + /** + * refreshes the adapter with the latest opened category + */ + public void refreshAdapter() { + recyclerAdapter.clear(); + recyclerAdapter.addAll(pathStack.isEmpty() ? + PasswordRepository.getPasswords() : + PasswordRepository.getPasswords(pathStack.peek())); + } + public void filterAdapter(String filter) { + Log.d("FRAG", "filter: " + filter); + if (filter.isEmpty()) { - updateAdapter(); + refreshAdapter(); } else { - for (PasswordItem item : PasswordRepository.getPasswords()) { - boolean matches = item.getName().toLowerCase().contains(filter); + // on the root the pathStack is empty + List passwordItems = pathStack.isEmpty() ? + PasswordRepository.getPasswords() : + PasswordRepository.getPasswords(pathStack.peek()); + + for (PasswordItem item : passwordItems) { + boolean matches = item.toString().toLowerCase().contains(filter.toLowerCase()); boolean inAdapter = recyclerAdapter.getValues().contains(item); if (matches && !inAdapter) { recyclerAdapter.add(item); @@ -142,10 +167,17 @@ public class PasswordFragment extends Fragment{ } } + /** + * 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(); } public boolean isNotEmpty() { -- cgit v1.2.3