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">
+
+
+