From 91bcacc9786c8b2214d936a7eb2df3a396cd698f Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Fri, 15 Mar 2024 18:05:23 -0500 Subject: [PATCH] feat: swipe refresh activity/notifications --- .../ani/dantotsu/profile/FollowActivity.kt | 3 ++ .../dantotsu/profile/activity/FeedFragment.kt | 38 +++++++++++++------ .../profile/activity/NotificationActivity.kt | 37 +++++++++++------- app/src/main/res/layout/activity_follow.xml | 20 +++++++--- app/src/main/res/layout/fragment_feed.xml | 25 ++++++++---- 5 files changed, 84 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt b/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt index daa984bc..70368ea3 100644 --- a/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/FollowActivity.kt @@ -79,6 +79,9 @@ class FollowActivity : AppCompatActivity(){ PrefManager.setVal(PrefName.FollowerLayout, 1) fillList() } + binding.followSwipeRefresh.setOnRefreshListener { + binding.followSwipeRefresh.isRefreshing = false + } } private fun fillList() { diff --git a/app/src/main/java/ani/dantotsu/profile/activity/FeedFragment.kt b/app/src/main/java/ani/dantotsu/profile/activity/FeedFragment.kt index c0463590..f13d93e1 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/FeedFragment.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/FeedFragment.kt @@ -87,23 +87,20 @@ class FeedFragment : Fragment() { ) { page++ binding.feedRefresh.visibility = ViewGroup.VISIBLE - activity.lifecycleScope.launch(Dispatchers.IO) { - val newRes = Anilist.query.getFeed(userId, global, page) - withContext(Dispatchers.Main) { - newRes?.data?.page?.activities?.let { activities -> - activityList += activities - val filtered = activities.filterNot { - it.recipient?.id != null && it.recipient.id != Anilist.userid - } - adapter.addAll(filtered.map { ActivityItem(it, ::onActivityClick,requireActivity()) }) - } - binding.feedRefresh.visibility = ViewGroup.GONE - } + loadPage { + binding.feedRefresh.visibility = ViewGroup.GONE } } } false } + + binding.feedSwipeRefresh.setOnRefreshListener { + page = 1 + adapter.clear() + activityList = emptyList() + loadPage() + } } } loadedFirstTime = true @@ -111,6 +108,23 @@ class FeedFragment : Fragment() { } } + private fun loadPage(onFinish: () -> Unit = {}) { + activity.lifecycleScope.launch(Dispatchers.IO) { + val newRes = Anilist.query.getFeed(userId, global, page) + withContext(Dispatchers.Main) { + newRes?.data?.page?.activities?.let { activities -> + activityList += activities + val filtered = activities.filterNot { + it.recipient?.id != null && it.recipient.id != Anilist.userid + } + adapter.addAll(filtered.map { ActivityItem(it, ::onActivityClick,requireActivity()) }) + } + binding.feedSwipeRefresh.isRefreshing = false + onFinish() + } + } + } + private fun onActivityClick(id: Int, type: String) { when (type) { "USER" -> { diff --git a/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt b/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt index f655c5b8..01dac01f 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/NotificationActivity.kt @@ -88,25 +88,34 @@ class NotificationActivity : AppCompatActivity() { ) { page++ binding.followRefresh.visibility = ViewGroup.VISIBLE - lifecycleScope.launch(Dispatchers.IO) { - val res = Anilist.query.getNotifications(Anilist.userid ?: 0, page) - withContext(Dispatchers.Main) { - res?.data?.page?.notifications?.let { notifications -> - notificationList += notifications - adapter.addAll(notifications.map { - NotificationItem( - it, - ::onNotificationClick - ) - }) - } - binding.followRefresh.visibility = ViewGroup.GONE - } + loadPage { + binding.followRefresh.visibility = ViewGroup.GONE } } } false } + + binding.followSwipeRefresh.setOnRefreshListener { + page = 1 + adapter.clear() + notificationList = emptyList() + loadPage() + } + } + } + } + + private fun loadPage(onFinish: () -> Unit = {}) { + lifecycleScope.launch(Dispatchers.IO) { + val res = Anilist.query.getNotifications(Anilist.userid ?: 0, page) + withContext(Dispatchers.Main) { + res?.data?.page?.notifications?.let { notifications -> + notificationList += notifications + adapter.addAll(notifications.map { NotificationItem(it, ::onNotificationClick) }) + } + binding.followSwipeRefresh.isRefreshing = false + onFinish() } } } diff --git a/app/src/main/res/layout/activity_follow.xml b/app/src/main/res/layout/activity_follow.xml index 9dfe9846..4f7bd80a 100644 --- a/app/src/main/res/layout/activity_follow.xml +++ b/app/src/main/res/layout/activity_follow.xml @@ -98,13 +98,23 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + android:clipChildren="false" + android:clipToPadding="false"> + + + + - - + android:clipChildren="false" + android:clipToPadding="false"> + + + +