diff options
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt')
| -rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/SelectFolderFragment.kt | 84 |
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) |
