From 1616b27816e3b4ba07a28eb9e9d4c1b4a45e8e29 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Sun, 14 Nov 2021 16:48:50 -0500 Subject: [PATCH] Swipe to refresh detail view --- .../java/io/heckel/ntfy/ui/DetailActivity.kt | 23 ++++++++++++------- .../java/io/heckel/ntfy/ui/MainActivity.kt | 4 ++-- app/src/main/res/layout/detail_activity.xml | 19 ++++++++++----- app/src/main/res/layout/main_activity.xml | 2 +- .../main/res/menu/detail_action_bar_menu.xml | 1 - app/src/main/res/values/strings.xml | 1 - 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt index 488bfed..578ce3c 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt @@ -19,6 +19,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import io.heckel.ntfy.R import io.heckel.ntfy.app.Application import io.heckel.ntfy.data.Notification @@ -48,6 +49,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { // UI elements private lateinit var adapter: DetailAdapter private lateinit var mainList: RecyclerView + private lateinit var mainListContainer: SwipeRefreshLayout private lateinit var menu: Menu // Action mode stuff @@ -87,6 +89,11 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { howToExample.text = Html.fromHtml(howToText) } + // Swipe to refresh + mainListContainer = findViewById(R.id.detail_notification_list_container) + mainListContainer.setOnRefreshListener { refresh() } + mainListContainer.setColorSchemeResources(R.color.primaryColor) + // Update main list based on viewModel (& its datasource/livedata) val noEntriesText: View = findViewById(R.id.detail_no_notifications) val onNotificationClick = { n: Notification -> onNotificationClick(n) } @@ -100,10 +107,10 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { it?.let { adapter.submitList(it as MutableList) if (it.isEmpty()) { - mainList.visibility = View.GONE + mainListContainer.visibility = View.GONE noEntriesText.visibility = View.VISIBLE } else { - mainList.visibility = View.VISIBLE + mainListContainer.visibility = View.VISIBLE noEntriesText.visibility = View.GONE } } @@ -128,10 +135,6 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { onTestClick() true } - R.id.detail_menu_refresh -> { - onRefreshClick() - true - } R.id.detail_menu_enable_instant -> { onInstantEnableClick(enable = true) true @@ -181,7 +184,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { .show() } - private fun onRefreshClick() { + private fun refresh() { Log.d(TAG, "Fetching cached notifications for ${topicShortUrl(subscriptionBaseUrl, subscriptionTopic)}") lifecycleScope.launch(Dispatchers.IO) { @@ -194,12 +197,16 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback { getString(R.string.refresh_message_result, newNotifications.size) } newNotifications.forEach { notification -> repository.addNotification(notification) } - runOnUiThread { Toast.makeText(this@DetailActivity, toastMessage, Toast.LENGTH_LONG).show() } + runOnUiThread { + Toast.makeText(this@DetailActivity, toastMessage, Toast.LENGTH_LONG).show() + mainListContainer.isRefreshing = false + } } catch (e: Exception) { runOnUiThread { Toast .makeText(this@DetailActivity, getString(R.string.refresh_message_error, e.message), Toast.LENGTH_LONG) .show() + mainListContainer.isRefreshing = false } } } diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt index d9183ca..d618840 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt @@ -71,8 +71,8 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback { onSubscribeButtonClick() } - // Swipewn to refresh - mainListContainer = findViewById(R.id.main_subscriptions_list_swipe_container) + // Swipe to refresh + mainListContainer = findViewById(R.id.main_subscriptions_list_container) mainListContainer.setOnRefreshListener { refreshAllSubscriptions() } mainListContainer.setColorSchemeResources(R.color.primaryColor) diff --git a/app/src/main/res/layout/detail_activity.xml b/app/src/main/res/layout/detail_activity.xml index f2be1a6..57ed976 100644 --- a/app/src/main/res/layout/detail_activity.xml +++ b/app/src/main/res/layout/detail_activity.xml @@ -7,15 +7,22 @@ android:layout_height="match_parent" tools:context=".ui.DetailActivity"> - + android:visibility="gone"> + + - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a21cfe2..d22335f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,7 +68,6 @@ Send test notification Copy topic address - Force refresh Enable fast delivery Disable fast delivery Unsubscribe