aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt84
1 files changed, 32 insertions, 52 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt b/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt
index e60cb286..a7489893 100644
--- a/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt
@@ -11,40 +11,22 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
-import androidx.preference.PreferenceManager
-import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.observe
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
-import com.zeapo.pwdstore.ui.adapters.FolderRecyclerAdapter
+import com.zeapo.pwdstore.ui.adapters.PasswordItemRecyclerAdapter
import com.zeapo.pwdstore.utils.PasswordItem
-import com.zeapo.pwdstore.utils.PasswordRepository
-import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getPasswords
-import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
-import com.zeapo.pwdstore.utils.PasswordRepository.PasswordSortOrder.Companion.getSortOrder
import java.io.File
-import java.util.Stack
-
-/**
- * A fragment representing a list of Items.
- *
- * Large screen devices (such as tablets) are supported by replacing the ListView with a
- * GridView.
- *
- */
+import me.zhanghai.android.fastscroll.FastScrollerBuilder
class SelectFolderFragment : Fragment() {
- // store the pass files list in a stack
- private var pathStack: Stack<File> = Stack()
- private lateinit var recyclerAdapter: FolderRecyclerAdapter
+ private lateinit var recyclerAdapter: PasswordItemRecyclerAdapter
private lateinit var recyclerView: RecyclerView
private lateinit var listener: OnFragmentInteractionListener
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val path = requireNotNull(requireArguments().getString("Path"))
- recyclerAdapter = FolderRecyclerAdapter(listener, getPasswords(File(path), getRepositoryDirectory(requireActivity()), sortOrder))
- }
+ private val model: SearchableRepositoryViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
@@ -52,35 +34,41 @@ class SelectFolderFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.password_recycler_view, container, false)
- // use a linear layout manager
- recyclerView = view.findViewById(R.id.pass_recycler)
- recyclerView.layoutManager = LinearLayoutManager(requireContext())
- // use divider
- recyclerView.addItemDecoration(
- DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL))
- // Set the adapter
- recyclerView.adapter = recyclerAdapter
+ initializePasswordList(view)
val fab: FloatingActionButton = view.findViewById(R.id.fab)
fab.hide()
- registerForContextMenu(recyclerView)
return view
}
+ private fun initializePasswordList(rootView: View) {
+ recyclerAdapter = PasswordItemRecyclerAdapter()
+ .onItemClicked { _, item ->
+ listener.onFragmentInteraction(item)
+ }
+ recyclerView = rootView.findViewById(R.id.pass_recycler)
+ recyclerView.apply {
+ layoutManager = LinearLayoutManager(requireContext())
+ itemAnimator = null
+ adapter = recyclerAdapter
+ }
+
+ FastScrollerBuilder(recyclerView).build()
+ registerForContextMenu(recyclerView)
+
+ val path = requireNotNull(requireArguments().getString(PasswordStore.REQUEST_ARG_PATH))
+ model.navigateTo(File(path), listMode = ListMode.DirectoriesOnly, pushPreviousLocation = false)
+ model.searchResult.observe(this) { result ->
+ recyclerAdapter.submitList(result.passwordItems)
+ }
+ }
+
override fun onAttach(context: Context) {
super.onAttach(context)
try {
listener = object : OnFragmentInteractionListener {
override fun onFragmentInteraction(item: PasswordItem) {
if (item.type == PasswordItem.TYPE_CATEGORY) {
- // push the category were we're going
- pathStack.push(item.file)
- recyclerView.scrollToPosition(0)
- recyclerAdapter.clear()
- recyclerAdapter.addAll(getPasswords(
- item.file,
- getRepositoryDirectory(context),
- sortOrder)
- )
+ model.navigateTo(item.file, listMode = ListMode.DirectoriesOnly)
(requireActivity() as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}
@@ -91,16 +79,8 @@ class SelectFolderFragment : Fragment() {
}
}
- /**
- * gets the current directory
- *
- * @return the current directory
- */
- val currentDir: File?
- get() = if (pathStack.isEmpty()) getRepositoryDirectory(requireContext()) else pathStack.peek()
-
- private val sortOrder: PasswordRepository.PasswordSortOrder
- get() = getSortOrder(PreferenceManager.getDefaultSharedPreferences(requireContext()))
+ val currentDir: File
+ get() = model.currentDir.value!!
interface OnFragmentInteractionListener {
fun onFragmentInteraction(item: PasswordItem)