feat: activity clicking
This commit is contained in:
parent
b69e466853
commit
c5abfa15e0
6 changed files with 89 additions and 21 deletions
|
@ -133,6 +133,7 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
)
|
)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.action_view_followers -> {
|
R.id.action_view_followers -> {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
this@ProfileActivity,
|
this@ProfileActivity,
|
||||||
|
@ -143,10 +144,12 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
)
|
)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.action_view_on_anilist -> {
|
R.id.action_view_on_anilist -> {
|
||||||
openLinkInBrowser("https://anilist.co/user/${user.name}")
|
openLinkInBrowser("https://anilist.co/user/${user.name}")
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,7 +217,8 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
isCollapsed = false
|
isCollapsed = false
|
||||||
ObjectAnimator.ofFloat(binding.profileUserDataContainer, "translationX", 0f)
|
ObjectAnimator.ofFloat(binding.profileUserDataContainer, "translationX", 0f)
|
||||||
.setDuration(duration).start()
|
.setDuration(duration).start()
|
||||||
ObjectAnimator.ofFloat(binding.profileUserAvatarContainer, "translationX", 0f).setDuration(duration)
|
ObjectAnimator.ofFloat(binding.profileUserAvatarContainer, "translationX", 0f)
|
||||||
|
.setDuration(duration)
|
||||||
.start()
|
.start()
|
||||||
if (PrefManager.getVal(PrefName.BannerAnimations)) binding.profileBannerImage.resume()
|
if (PrefManager.getVal(PrefName.BannerAnimations)) binding.profileBannerImage.resume()
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,9 @@ class ActivityItem(
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
binding.activityUserName.text = activity.user?.name ?: activity.messenger?.name
|
binding.activityUserName.text = activity.user?.name ?: activity.messenger?.name
|
||||||
binding.activityUserAvatar.loadImage(activity.user?.avatar?.medium ?: activity.messenger?.avatar?.medium)
|
binding.activityUserAvatar.loadImage(
|
||||||
|
activity.user?.avatar?.medium ?: activity.messenger?.avatar?.medium
|
||||||
|
)
|
||||||
binding.activityTime.text = ActivityItemBuilder.getDateTime(activity.createdAt)
|
binding.activityTime.text = ActivityItemBuilder.getDateTime(activity.createdAt)
|
||||||
val likeColor = ContextCompat.getColor(binding.root.context, R.color.yt_red)
|
val likeColor = ContextCompat.getColor(binding.root.context, R.color.yt_red)
|
||||||
val notLikeColor = ContextCompat.getColor(binding.root.context, R.color.bg_opp)
|
val notLikeColor = ContextCompat.getColor(binding.root.context, R.color.bg_opp)
|
||||||
|
@ -56,12 +58,19 @@ class ActivityItem(
|
||||||
binding.commentRepliesContainer.setOnClickListener {
|
binding.commentRepliesContainer.setOnClickListener {
|
||||||
when (binding.activityReplies.visibility) {
|
when (binding.activityReplies.visibility) {
|
||||||
View.GONE -> {
|
View.GONE -> {
|
||||||
repliesAdapter.addAll(
|
val replyItems = activity.replies?.map {
|
||||||
activity.replies?.map { ActivityReplyItem(it) } ?: emptyList()
|
ActivityReplyItem(it) { id, type ->
|
||||||
|
clickCallback(
|
||||||
|
id,
|
||||||
|
type
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
} ?: emptyList()
|
||||||
|
repliesAdapter.addAll(replyItems)
|
||||||
binding.activityReplies.visibility = View.VISIBLE
|
binding.activityReplies.visibility = View.VISIBLE
|
||||||
binding.commentTotalReplies.text = "Hide replies"
|
binding.commentTotalReplies.text = "Hide replies"
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
repliesAdapter.clear()
|
repliesAdapter.clear()
|
||||||
binding.activityReplies.visibility = View.GONE
|
binding.activityReplies.visibility = View.GONE
|
||||||
|
@ -70,7 +79,7 @@ class ActivityItem(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.activityLikeCount.text = (activity.likeCount?:0).toString()
|
binding.activityLikeCount.text = (activity.likeCount ?: 0).toString()
|
||||||
binding.activityLike.setOnClickListener {
|
binding.activityLike.setOnClickListener {
|
||||||
val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
||||||
scope.launch {
|
scope.launch {
|
||||||
|
@ -83,7 +92,7 @@ class ActivityItem(
|
||||||
} else {
|
} else {
|
||||||
activity.likeCount = activity.likeCount?.plus(1)
|
activity.likeCount = activity.likeCount?.plus(1)
|
||||||
}
|
}
|
||||||
binding.activityLikeCount.text = (activity.likeCount?:0).toString()
|
binding.activityLikeCount.text = (activity.likeCount ?: 0).toString()
|
||||||
activity.isLiked = !activity.isLiked!!
|
activity.isLiked = !activity.isLiked!!
|
||||||
binding.activityLike.setColorFilter(if (activity.isLiked == true) likeColor else notLikeColor)
|
binding.activityLike.setColorFilter(if (activity.isLiked == true) likeColor else notLikeColor)
|
||||||
|
|
||||||
|
@ -107,7 +116,18 @@ class ActivityItem(
|
||||||
"""${activity.user!!.name} ${activity.status} ${activity.progress ?: ""}"""
|
"""${activity.user!!.name} ${activity.status} ${activity.progress ?: ""}"""
|
||||||
binding.activityCover.loadImage(cover)
|
binding.activityCover.loadImage(cover)
|
||||||
blurImage(binding.activityBannerImage, banner ?: cover)
|
blurImage(binding.activityBannerImage, banner ?: cover)
|
||||||
|
binding.activityAvatarContainer.setOnClickListener {
|
||||||
|
clickCallback(activity.userId ?: -1, "USER")
|
||||||
|
}
|
||||||
|
binding.activityUserName.setOnClickListener {
|
||||||
|
clickCallback(activity.userId ?: -1, "USER")
|
||||||
|
}
|
||||||
|
binding.activityCoverContainer.setOnClickListener {
|
||||||
|
clickCallback(activity.media?.id ?: -1, "MEDIA")
|
||||||
|
}
|
||||||
|
binding.activityMediaName.setOnClickListener {
|
||||||
|
clickCallback(activity.media?.id ?: -1, "MEDIA")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"TextActivity" -> {
|
"TextActivity" -> {
|
||||||
|
@ -115,7 +135,16 @@ class ActivityItem(
|
||||||
binding.activityContent.visibility = View.VISIBLE
|
binding.activityContent.visibility = View.VISIBLE
|
||||||
if (!(context as android.app.Activity).isDestroyed) {
|
if (!(context as android.app.Activity).isDestroyed) {
|
||||||
val markwon = buildMarkwon(context, false)
|
val markwon = buildMarkwon(context, false)
|
||||||
markwon.setMarkdown(binding.activityContent, getBasicAniHTML(activity.text ?: ""))
|
markwon.setMarkdown(
|
||||||
|
binding.activityContent,
|
||||||
|
getBasicAniHTML(activity.text ?: "")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
binding.activityAvatarContainer.setOnClickListener {
|
||||||
|
clickCallback(activity.userId ?: -1, "USER")
|
||||||
|
}
|
||||||
|
binding.activityUserName.setOnClickListener {
|
||||||
|
clickCallback(activity.userId ?: -1, "USER")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +153,16 @@ class ActivityItem(
|
||||||
binding.activityContent.visibility = View.VISIBLE
|
binding.activityContent.visibility = View.VISIBLE
|
||||||
if (!(context as android.app.Activity).isDestroyed) {
|
if (!(context as android.app.Activity).isDestroyed) {
|
||||||
val markwon = buildMarkwon(context, false)
|
val markwon = buildMarkwon(context, false)
|
||||||
markwon.setMarkdown(binding.activityContent, getBasicAniHTML(activity.message ?: ""))
|
markwon.setMarkdown(
|
||||||
|
binding.activityContent,
|
||||||
|
getBasicAniHTML(activity.message ?: "")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
binding.activityAvatarContainer.setOnClickListener {
|
||||||
|
clickCallback(activity.messengerId ?: -1, "USER")
|
||||||
|
}
|
||||||
|
binding.activityUserName.setOnClickListener {
|
||||||
|
clickCallback(activity.messengerId ?: -1, "USER")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@ import ani.dantotsu.util.AniMarkdown.Companion.getBasicAniHTML
|
||||||
import com.xwray.groupie.viewbinding.BindableItem
|
import com.xwray.groupie.viewbinding.BindableItem
|
||||||
|
|
||||||
class ActivityReplyItem(
|
class ActivityReplyItem(
|
||||||
private val reply: ActivityReply
|
private val reply: ActivityReply,
|
||||||
|
private val clickCallback: (Int, type: String) -> Unit
|
||||||
) : BindableItem<ItemActivityReplyBinding>() {
|
) : BindableItem<ItemActivityReplyBinding>() {
|
||||||
private lateinit var binding: ItemActivityReplyBinding
|
private lateinit var binding: ItemActivityReplyBinding
|
||||||
|
|
||||||
|
@ -27,7 +28,12 @@ class ActivityReplyItem(
|
||||||
binding.activityLike.setColorFilter(if (reply.isLiked) likeColor else notLikeColor)
|
binding.activityLike.setColorFilter(if (reply.isLiked) likeColor else notLikeColor)
|
||||||
val markwon = buildMarkwon(binding.root.context)
|
val markwon = buildMarkwon(binding.root.context)
|
||||||
markwon.setMarkdown(binding.activityContent, getBasicAniHTML(reply.text))
|
markwon.setMarkdown(binding.activityContent, getBasicAniHTML(reply.text))
|
||||||
|
binding.activityAvatarContainer.setOnClickListener {
|
||||||
|
clickCallback(reply.userId, "USER")
|
||||||
|
}
|
||||||
|
binding.activityUserName.setOnClickListener {
|
||||||
|
clickCallback(reply.userId, "USER")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLayout(): Int {
|
override fun getLayout(): Int {
|
||||||
|
|
|
@ -16,7 +16,7 @@ import ani.dantotsu.statusBarHeight
|
||||||
import ani.dantotsu.themes.ThemeManager
|
import ani.dantotsu.themes.ThemeManager
|
||||||
import nl.joery.animatedbottombar.AnimatedBottomBar
|
import nl.joery.animatedbottombar.AnimatedBottomBar
|
||||||
|
|
||||||
class FeedActivity: AppCompatActivity() {
|
class FeedActivity : AppCompatActivity() {
|
||||||
private lateinit var binding: ActivityFeedBinding
|
private lateinit var binding: ActivityFeedBinding
|
||||||
private var selected: Int = 0
|
private var selected: Int = 0
|
||||||
private lateinit var navBar: AnimatedBottomBar
|
private lateinit var navBar: AnimatedBottomBar
|
||||||
|
@ -33,14 +33,15 @@ class FeedActivity: AppCompatActivity() {
|
||||||
val globalTab = navBar.createTab(R.drawable.ic_globe_24, "Global")
|
val globalTab = navBar.createTab(R.drawable.ic_globe_24, "Global")
|
||||||
navBar.addTab(personalTab)
|
navBar.addTab(personalTab)
|
||||||
navBar.addTab(globalTab)
|
navBar.addTab(globalTab)
|
||||||
binding.listTitle.text = "Activities"
|
binding.listTitle.text = getString(R.string.activities)
|
||||||
binding.feedViewPager.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
binding.feedViewPager.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||||
bottomMargin += navBarHeight
|
bottomMargin += navBarHeight
|
||||||
topMargin += statusBarHeight
|
topMargin += statusBarHeight
|
||||||
}
|
}
|
||||||
binding.listToolbar.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
binding.listToolbar.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
||||||
val activityId = intent.getIntExtra("activityId", -1)
|
val activityId = intent.getIntExtra("activityId", -1)
|
||||||
binding.feedViewPager.adapter = ViewPagerAdapter(supportFragmentManager, lifecycle, activityId)
|
binding.feedViewPager.adapter =
|
||||||
|
ViewPagerAdapter(supportFragmentManager, lifecycle, activityId)
|
||||||
binding.feedViewPager.setCurrentItem(selected, false)
|
binding.feedViewPager.setCurrentItem(selected, false)
|
||||||
binding.feedViewPager.isUserInputEnabled = false
|
binding.feedViewPager.isUserInputEnabled = false
|
||||||
navBar.selectTabAt(selected)
|
navBar.selectTabAt(selected)
|
||||||
|
@ -65,7 +66,6 @@ class FeedActivity: AppCompatActivity() {
|
||||||
navBar.selectTabAt(selected)
|
navBar.selectTabAt(selected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class ViewPagerAdapter(
|
private class ViewPagerAdapter(
|
||||||
fragmentManager: FragmentManager,
|
fragmentManager: FragmentManager,
|
||||||
lifecycle: Lifecycle,
|
lifecycle: Lifecycle,
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package ani.dantotsu.profile.activity
|
package ani.dantotsu.profile.activity
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
@ -14,7 +16,7 @@ import ani.dantotsu.connections.anilist.Anilist
|
||||||
import ani.dantotsu.connections.anilist.AnilistQueries
|
import ani.dantotsu.connections.anilist.AnilistQueries
|
||||||
import ani.dantotsu.connections.anilist.api.Activity
|
import ani.dantotsu.connections.anilist.api.Activity
|
||||||
import ani.dantotsu.databinding.FragmentFeedBinding
|
import ani.dantotsu.databinding.FragmentFeedBinding
|
||||||
import ani.dantotsu.util.Logger
|
import ani.dantotsu.media.MediaDetailsActivity
|
||||||
import ani.dantotsu.profile.ProfileActivity
|
import ani.dantotsu.profile.ProfileActivity
|
||||||
import ani.dantotsu.snackString
|
import ani.dantotsu.snackString
|
||||||
import com.xwray.groupie.GroupieAdapter
|
import com.xwray.groupie.GroupieAdapter
|
||||||
|
@ -70,7 +72,7 @@ class FeedFragment : Fragment() {
|
||||||
val filtered = activityList.filterNot { //filter out messages that are not directed to the user
|
val filtered = activityList.filterNot { //filter out messages that are not directed to the user
|
||||||
it.recipient?.id != null && it.recipient.id != Anilist.userid
|
it.recipient?.id != null && it.recipient.id != Anilist.userid
|
||||||
}
|
}
|
||||||
adapter.update(filtered.map { ActivityItem(it) { _, _ -> } })
|
adapter.update(filtered.map { ActivityItem(it, ::onActivityClick) })
|
||||||
}
|
}
|
||||||
binding.listProgressBar.visibility = ViewGroup.GONE
|
binding.listProgressBar.visibility = ViewGroup.GONE
|
||||||
val scrollView = binding.listRecyclerView
|
val scrollView = binding.listRecyclerView
|
||||||
|
@ -86,14 +88,14 @@ class FeedFragment : Fragment() {
|
||||||
page++
|
page++
|
||||||
binding.feedRefresh.visibility = ViewGroup.VISIBLE
|
binding.feedRefresh.visibility = ViewGroup.VISIBLE
|
||||||
activity.lifecycleScope.launch(Dispatchers.IO) {
|
activity.lifecycleScope.launch(Dispatchers.IO) {
|
||||||
val res = Anilist.query.getFeed(userId, global, page)
|
val newRes = Anilist.query.getFeed(userId, global, page)
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
res?.data?.page?.activities?.let { activities ->
|
newRes?.data?.page?.activities?.let { activities ->
|
||||||
activityList += activities
|
activityList += activities
|
||||||
val filtered = activities.filterNot {
|
val filtered = activities.filterNot {
|
||||||
it.recipient?.id != null && it.recipient.id != Anilist.userid
|
it.recipient?.id != null && it.recipient.id != Anilist.userid
|
||||||
}
|
}
|
||||||
adapter.addAll(filtered.map { ActivityItem(it) { _, _ -> } })
|
adapter.addAll(filtered.map { ActivityItem(it, ::onActivityClick) })
|
||||||
}
|
}
|
||||||
binding.feedRefresh.visibility = ViewGroup.GONE
|
binding.feedRefresh.visibility = ViewGroup.GONE
|
||||||
}
|
}
|
||||||
|
@ -109,6 +111,23 @@ class FeedFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onActivityClick(id: Int, type: String) {
|
||||||
|
when (type) {
|
||||||
|
"USER" -> {
|
||||||
|
ContextCompat.startActivity(
|
||||||
|
activity, Intent(activity, ProfileActivity::class.java)
|
||||||
|
.putExtra("userId", id), null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
"MEDIA" -> {
|
||||||
|
ContextCompat.startActivity(
|
||||||
|
activity, Intent(activity, MediaDetailsActivity::class.java)
|
||||||
|
.putExtra("mediaId", id), null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun newInstance(userId: Int?, global: Boolean, activityId: Int): FeedFragment {
|
fun newInstance(userId: Int?, global: Boolean, activityId: Int): FeedFragment {
|
||||||
val fragment = FeedFragment()
|
val fragment = FeedFragment()
|
||||||
|
|
|
@ -703,4 +703,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
|
||||||
<string name="anilist_notification_filters">Anilist Notification Filters</string>
|
<string name="anilist_notification_filters">Anilist Notification Filters</string>
|
||||||
<string name="anilist_notifications_checking_time">Anilist notifications update frequency : %1$s</string>
|
<string name="anilist_notifications_checking_time">Anilist notifications update frequency : %1$s</string>
|
||||||
<string name="comment_notification_checking_time">Comment notifications update frequency : %1$s</string>
|
<string name="comment_notification_checking_time">Comment notifications update frequency : %1$s</string>
|
||||||
|
<string name="activities">Activities</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue