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