From 09005f804335ee86fdcedd50221f1bb5984646da Mon Sep 17 00:00:00 2001 From: glowinthedark <48893368+glowinthedark@users.noreply.github.com> Date: Sat, 29 Feb 2020 21:50:09 +0100 Subject: [PATCH] swipe to refresh using androidx SwipeRefreshLayout (#645) Signed-off-by: Harsh Shandilya --- CHANGELOG.md | 1 + app/build.gradle | 1 + .../com/zeapo/pwdstore/PasswordFragment.kt | 27 +++++++++++++++++++ .../res/layout/password_recycler_view.xml | 18 ++++++++----- dependencies.gradle | 3 ++- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db099303..8b6f4c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. ### Added - Copy implicit username (password filename) by long pressing - Create xkpasswd style passwords +- Swipe on password list to synchronize repository ### Fixed - Can't delete folders containing a password diff --git a/app/build.gradle b/app/build.gradle index 78557cc1..adf9e3f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,6 +84,7 @@ dependencies { implementation deps.androidx.constraint_layout implementation deps.androidx.documentfile implementation deps.androidx.preference + implementation deps.androidx.swiperefreshlayout constraints { implementation(deps.androidx.recycler_view) { because 'versions above 1.0.0 have an accessibility related bug that causes crashes' diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt index ad01000c..744191b7 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt @@ -4,7 +4,9 @@ */ package com.zeapo.pwdstore +import android.app.Activity import android.content.Context +import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.view.LayoutInflater @@ -16,7 +18,10 @@ import androidx.preference.PreferenceManager import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.zeapo.pwdstore.git.GitActivity import com.zeapo.pwdstore.ui.adapters.PasswordRecyclerAdapter import com.zeapo.pwdstore.utils.PasswordItem import com.zeapo.pwdstore.utils.PasswordRepository @@ -44,6 +49,7 @@ class PasswordFragment : Fragment() { private lateinit var recyclerView: RecyclerView private lateinit var listener: OnFragmentInteractionListener private lateinit var settings: SharedPreferences + private lateinit var swipe_refresher: SwipeRefreshLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -61,6 +67,19 @@ class PasswordFragment : Fragment() { val view = inflater.inflate(R.layout.password_recycler_view, container, false) // use a linear layout manager val layoutManager = LinearLayoutManager(requireContext()) + swipe_refresher = view.findViewById(R.id.swipe_refresher) + swipe_refresher.setOnRefreshListener { + if (!PasswordRepository.isInitialized) { + MaterialAlertDialogBuilder(requireContext()) + .setMessage(getString(R.string.creation_dialog_text)) + .setPositiveButton(getString(R.string.dialog_ok), null).show() + swipe_refresher.isRefreshing = false + } else { + val intent = Intent(context, GitActivity::class.java) + intent.putExtra("Operation", GitActivity.REQUEST_SYNC) + startActivityForResult(intent, GitActivity.REQUEST_SYNC) + } + } recyclerView = view.findViewById(R.id.pass_recycler) recyclerView.layoutManager = layoutManager // use divider @@ -126,6 +145,14 @@ class PasswordFragment : Fragment() { } } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (resultCode == Activity.RESULT_OK) { + when (requestCode) { + GitActivity.REQUEST_SYNC -> swipe_refresher.isRefreshing = false + } + } + } + /** clears the adapter content and sets it back to the root view */ fun updateAdapter() { passListStack.clear() diff --git a/app/src/main/res/layout/password_recycler_view.xml b/app/src/main/res/layout/password_recycler_view.xml index f58543ac..dd6b00c1 100644 --- a/app/src/main/res/layout/password_recycler_view.xml +++ b/app/src/main/res/layout/password_recycler_view.xml @@ -10,13 +10,19 @@ android:clipToPadding="false" tools:context="com.zeapo.pwdstore.PasswordFragment"> - + android:layout_height="match_parent"> + + +