diff options
author | glowinthedark <48893368+glowinthedark@users.noreply.github.com> | 2020-02-29 21:50:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-01 02:20:09 +0530 |
commit | 09005f804335ee86fdcedd50221f1bb5984646da (patch) | |
tree | bce6e459c9237a7f2e8331285df389149c940674 | |
parent | 947e41105b3fdfb7ce9734fb25119c46695f7bba (diff) |
swipe to refresh using androidx SwipeRefreshLayout (#645)
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | app/build.gradle | 1 | ||||
-rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt | 27 | ||||
-rw-r--r-- | app/src/main/res/layout/password_recycler_view.xml | 18 | ||||
-rw-r--r-- | 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"> - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/pass_recycler" - android:scrollbars="none" + <androidx.swiperefreshlayout.widget.SwipeRefreshLayout + android:id="@+id/swipe_refresher" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:listitem="@layout/password_row_layout" - tools:itemCount="20" /> + android:layout_height="match_parent"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/pass_recycler" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="none" + tools:itemCount="20" + tools:listitem="@layout/password_row_layout" /> + </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> <LinearLayout android:id="@+id/create_options" diff --git a/dependencies.gradle b/dependencies.gradle index ea3fe1d8..3647ccbb 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,7 +36,8 @@ ext.deps = [ documentfile: 'androidx.documentfile:documentfile:1.0.1', material: 'com.google.android.material:material:1.2.0-alpha05', preference: 'androidx.preference:preference:1.1.0', - recycler_view: 'androidx.recyclerview:recyclerview:1.0.0' + recycler_view: 'androidx.recyclerview:recyclerview:1.0.0', + swiperefreshlayout: 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha03' ], third_party: [ |