chore: cleanup
This commit is contained in:
parent
e81773f2b5
commit
55ad8dccad
7 changed files with 249 additions and 274 deletions
|
@ -172,7 +172,7 @@ class MediaDetailsActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedLi
|
||||||
|
|
||||||
binding.mediaCoverImage.loadImage(media.cover)
|
binding.mediaCoverImage.loadImage(media.cover)
|
||||||
binding.mediaCoverImage.setOnLongClickListener {
|
binding.mediaCoverImage.setOnLongClickListener {
|
||||||
val coverTitle = "${media.userPreferredName}[Cover]"
|
val coverTitle = getString(R.string.cover, media.userPreferredName)
|
||||||
ImageViewDialog.newInstance(
|
ImageViewDialog.newInstance(
|
||||||
this,
|
this,
|
||||||
coverTitle,
|
coverTitle,
|
||||||
|
@ -192,7 +192,7 @@ class MediaDetailsActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedLi
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLongClick(event: MotionEvent) {
|
override fun onLongClick(event: MotionEvent) {
|
||||||
val bannerTitle = "${media.userPreferredName}[Banner]"
|
val bannerTitle = getString(R.string.banner, media.userPreferredName)
|
||||||
ImageViewDialog.newInstance(
|
ImageViewDialog.newInstance(
|
||||||
this@MediaDetailsActivity,
|
this@MediaDetailsActivity,
|
||||||
bannerTitle,
|
bannerTitle,
|
||||||
|
|
|
@ -580,7 +580,7 @@ class MediaInfoFragment : Fragment() {
|
||||||
).apply {
|
).apply {
|
||||||
itemTitle.setText(R.string.social)
|
itemTitle.setText(R.string.social)
|
||||||
itemRecycler.adapter =
|
itemRecycler.adapter =
|
||||||
MediaSocialAdapter(media.users!!, type)
|
MediaSocialAdapter(media.users!!, type, requireActivity())
|
||||||
itemRecycler.layoutManager = LinearLayoutManager(
|
itemRecycler.layoutManager = LinearLayoutManager(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
LinearLayoutManager.HORIZONTAL,
|
LinearLayoutManager.HORIZONTAL,
|
||||||
|
|
|
@ -1,28 +1,32 @@
|
||||||
package ani.dantotsu.media
|
package ani.dantotsu.media
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import ani.dantotsu.R
|
import ani.dantotsu.R
|
||||||
import ani.dantotsu.databinding.ItemFollowerGridBinding
|
import ani.dantotsu.databinding.ItemFollowerGridBinding
|
||||||
import ani.dantotsu.getAppString
|
import ani.dantotsu.getAppString
|
||||||
import ani.dantotsu.loadImage
|
import ani.dantotsu.loadImage
|
||||||
|
import ani.dantotsu.others.ImageViewDialog
|
||||||
import ani.dantotsu.profile.ProfileActivity
|
import ani.dantotsu.profile.ProfileActivity
|
||||||
import ani.dantotsu.profile.User
|
import ani.dantotsu.profile.User
|
||||||
import ani.dantotsu.setAnimation
|
import ani.dantotsu.setAnimation
|
||||||
|
|
||||||
class MediaSocialAdapter(private val user: ArrayList<User>, private val type: String) :
|
class MediaSocialAdapter(
|
||||||
RecyclerView.Adapter<MediaSocialAdapter.DeveloperViewHolder>() {
|
val user: ArrayList<User>,
|
||||||
|
val type: String,
|
||||||
|
val activity: FragmentActivity
|
||||||
|
) : RecyclerView.Adapter<MediaSocialAdapter.FollowerGridViewHolder>() {
|
||||||
|
|
||||||
inner class DeveloperViewHolder(val binding: ItemFollowerGridBinding) :
|
inner class FollowerGridViewHolder(val binding: ItemFollowerGridBinding) :
|
||||||
RecyclerView.ViewHolder(binding.root)
|
RecyclerView.ViewHolder(binding.root)
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DeveloperViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FollowerGridViewHolder {
|
||||||
return DeveloperViewHolder(
|
return FollowerGridViewHolder(
|
||||||
ItemFollowerGridBinding.inflate(
|
ItemFollowerGridBinding.inflate(
|
||||||
LayoutInflater.from(parent.context),
|
LayoutInflater.from(parent.context),
|
||||||
parent,
|
parent,
|
||||||
|
@ -31,8 +35,8 @@ class MediaSocialAdapter(private val user: ArrayList<User>, private val type: St
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
|
||||||
override fun onBindViewHolder(holder: DeveloperViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: FollowerGridViewHolder, position: Int) {
|
||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
val user = user[position]
|
val user = user[position]
|
||||||
val score = user.score?.div(10.0) ?: 0.0
|
val score = user.score?.div(10.0) ?: 0.0
|
||||||
|
@ -47,7 +51,7 @@ class MediaSocialAdapter(private val user: ArrayList<User>, private val type: St
|
||||||
}
|
}
|
||||||
profileCompactUserProgress.text = user.progress.toString()
|
profileCompactUserProgress.text = user.progress.toString()
|
||||||
profileCompactScore.text = score.toString()
|
profileCompactScore.text = score.toString()
|
||||||
profileCompactTotal.text = " | ${user.totalEpisodes ?: "~"}"
|
" | ${user.totalEpisodes ?: "~"}".also { profileCompactTotal.text = it }
|
||||||
profileUserAvatar.loadImage(user.pfp)
|
profileUserAvatar.loadImage(user.pfp)
|
||||||
|
|
||||||
val scoreDrawable = if (score == 0.0) R.drawable.score else R.drawable.user_score
|
val scoreDrawable = if (score == 0.0) R.drawable.score else R.drawable.user_score
|
||||||
|
@ -59,10 +63,17 @@ class MediaSocialAdapter(private val user: ArrayList<User>, private val type: St
|
||||||
profileCompactProgressContainer.visibility = View.VISIBLE
|
profileCompactProgressContainer.visibility = View.VISIBLE
|
||||||
|
|
||||||
profileUserAvatar.setOnClickListener {
|
profileUserAvatar.setOnClickListener {
|
||||||
val intent = Intent(root.context, ProfileActivity::class.java).apply {
|
ContextCompat.startActivity(root.context,
|
||||||
putExtra("userId", user.id)
|
Intent(root.context, ProfileActivity::class.java)
|
||||||
}
|
.putExtra("userId", user.id),
|
||||||
ContextCompat.startActivity(root.context, intent, null)
|
null)
|
||||||
|
}
|
||||||
|
profileUserAvatarContainer.setOnLongClickListener {
|
||||||
|
ImageViewDialog.newInstance(
|
||||||
|
activity,
|
||||||
|
activity.getString(R.string.avatar, user.name),
|
||||||
|
user.pfp
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,211 +60,211 @@ class CommentItem(
|
||||||
override fun bind(viewBinding: ItemCommentsBinding, position: Int) {
|
override fun bind(viewBinding: ItemCommentsBinding, position: Int) {
|
||||||
binding = viewBinding
|
binding = viewBinding
|
||||||
setAnimation(binding.root.context, binding.root)
|
setAnimation(binding.root.context, binding.root)
|
||||||
viewBinding.commentRepliesList.layoutManager =
|
val item = this
|
||||||
LinearLayoutManager(commentsFragment.activity)
|
viewBinding.apply {
|
||||||
viewBinding.commentRepliesList.adapter = adapter
|
commentRepliesList.layoutManager =
|
||||||
val isUserComment = CommentsAPI.userId == comment.userId
|
LinearLayoutManager(commentsFragment.activity)
|
||||||
val levelColor = getAvatarColor(comment.totalVotes, backgroundColor)
|
commentRepliesList.adapter = adapter
|
||||||
markwon.setMarkdown(viewBinding.commentText, comment.content)
|
val isUserComment = CommentsAPI.userId == comment.userId
|
||||||
viewBinding.commentEdit.visibility = if (isUserComment) View.VISIBLE else View.GONE
|
val levelColor = getAvatarColor(comment.totalVotes, backgroundColor)
|
||||||
if (comment.tag == null) {
|
markwon.setMarkdown(commentText, comment.content)
|
||||||
viewBinding.commentUserTagLayout.visibility = View.GONE
|
commentEdit.visibility = if (isUserComment) View.VISIBLE else View.GONE
|
||||||
} else {
|
if (comment.tag == null) {
|
||||||
viewBinding.commentUserTagLayout.visibility = View.VISIBLE
|
commentUserTagLayout.visibility = View.GONE
|
||||||
viewBinding.commentUserTag.text = comment.tag.toString()
|
|
||||||
}
|
|
||||||
replying(isReplying) //sets default text
|
|
||||||
editing(isEditing)
|
|
||||||
if ((comment.replyCount ?: 0) > 0) {
|
|
||||||
viewBinding.commentTotalReplies.visibility = View.VISIBLE
|
|
||||||
viewBinding.commentRepliesDivider.visibility = View.VISIBLE
|
|
||||||
viewBinding.commentTotalReplies.context.run {
|
|
||||||
viewBinding.commentTotalReplies.text = if (repliesVisible)
|
|
||||||
getString(R.string.hide_replies)
|
|
||||||
else
|
|
||||||
if (comment.replyCount == 1)
|
|
||||||
getString(R.string.view_reply)
|
|
||||||
else
|
|
||||||
getString(R.string.view_replies_count, comment.replyCount)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
viewBinding.commentTotalReplies.visibility = View.GONE
|
|
||||||
viewBinding.commentRepliesDivider.visibility = View.GONE
|
|
||||||
}
|
|
||||||
viewBinding.commentReply.visibility = View.VISIBLE
|
|
||||||
viewBinding.commentTotalReplies.setOnClickListener {
|
|
||||||
if (repliesVisible) {
|
|
||||||
repliesSection.clear()
|
|
||||||
removeSubCommentIds()
|
|
||||||
viewBinding.commentTotalReplies.context.run {
|
|
||||||
viewBinding.commentTotalReplies.text = if (comment.replyCount == 1)
|
|
||||||
getString(R.string.view_reply)
|
|
||||||
else
|
|
||||||
getString(R.string.view_replies_count, comment.replyCount)
|
|
||||||
}
|
|
||||||
repliesVisible = false
|
|
||||||
} else {
|
} else {
|
||||||
viewBinding.commentTotalReplies.setText(R.string.hide_replies)
|
commentUserTagLayout.visibility = View.VISIBLE
|
||||||
repliesSection.clear()
|
commentUserTag.text = comment.tag.toString()
|
||||||
commentsFragment.viewReplyCallback(this)
|
}
|
||||||
repliesVisible = true
|
replying(isReplying) //sets default text
|
||||||
|
editing(isEditing)
|
||||||
|
if ((comment.replyCount ?: 0) > 0) {
|
||||||
|
commentTotalReplies.visibility = View.VISIBLE
|
||||||
|
commentRepliesDivider.visibility = View.VISIBLE
|
||||||
|
commentTotalReplies.context.run {
|
||||||
|
commentTotalReplies.text = if (repliesVisible)
|
||||||
|
getString(R.string.hide_replies)
|
||||||
|
else
|
||||||
|
if (comment.replyCount == 1)
|
||||||
|
getString(R.string.view_reply)
|
||||||
|
else
|
||||||
|
getString(R.string.view_replies_count, comment.replyCount)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
commentTotalReplies.visibility = View.GONE
|
||||||
|
commentRepliesDivider.visibility = View.GONE
|
||||||
|
}
|
||||||
|
commentReply.visibility = View.VISIBLE
|
||||||
|
commentTotalReplies.setOnClickListener {
|
||||||
|
if (repliesVisible) {
|
||||||
|
repliesSection.clear()
|
||||||
|
removeSubCommentIds()
|
||||||
|
commentTotalReplies.context.run {
|
||||||
|
commentTotalReplies.text = if (comment.replyCount == 1)
|
||||||
|
getString(R.string.view_reply)
|
||||||
|
else
|
||||||
|
getString(R.string.view_replies_count, comment.replyCount)
|
||||||
|
}
|
||||||
|
repliesVisible = false
|
||||||
|
} else {
|
||||||
|
commentTotalReplies.setText(R.string.hide_replies)
|
||||||
|
repliesSection.clear()
|
||||||
|
commentsFragment.viewReplyCallback(item)
|
||||||
|
repliesVisible = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
viewBinding.commentUserName.setOnClickListener {
|
commentUserName.setOnClickListener {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
commentsFragment.activity,
|
commentsFragment.activity,
|
||||||
Intent(commentsFragment.activity, ProfileActivity::class.java)
|
Intent(commentsFragment.activity, ProfileActivity::class.java)
|
||||||
.putExtra("userId", comment.userId.toInt())
|
.putExtra("userId", comment.userId.toInt()),
|
||||||
.putExtra("userLVL", "[${levelColor.second}]"),
|
null
|
||||||
null
|
)
|
||||||
)
|
}
|
||||||
}
|
commentUserAvatar.setOnClickListener {
|
||||||
viewBinding.commentUserAvatar.setOnClickListener {
|
ContextCompat.startActivity(
|
||||||
ContextCompat.startActivity(
|
commentsFragment.activity,
|
||||||
commentsFragment.activity,
|
Intent(commentsFragment.activity, ProfileActivity::class.java)
|
||||||
Intent(commentsFragment.activity, ProfileActivity::class.java)
|
.putExtra("userId", comment.userId.toInt()),
|
||||||
.putExtra("userId", comment.userId.toInt())
|
null
|
||||||
.putExtra("userLVL", "[${levelColor.second}]"),
|
)
|
||||||
null
|
}
|
||||||
)
|
commentText.setOnLongClickListener {
|
||||||
}
|
copyToClipboard(comment.content)
|
||||||
viewBinding.commentText.setOnLongClickListener {
|
true
|
||||||
copyToClipboard(comment.content)
|
}
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
viewBinding.commentEdit.setOnClickListener {
|
commentEdit.setOnClickListener {
|
||||||
editing(!isEditing)
|
editing(!isEditing)
|
||||||
commentsFragment.editCallback(this)
|
commentsFragment.editCallback(item)
|
||||||
}
|
}
|
||||||
viewBinding.commentReply.setOnClickListener {
|
commentReply.setOnClickListener {
|
||||||
replying(!isReplying)
|
replying(!isReplying)
|
||||||
commentsFragment.replyTo(this, comment.username)
|
commentsFragment.replyTo(item, comment.username)
|
||||||
commentsFragment.replyCallback(this)
|
commentsFragment.replyCallback(item)
|
||||||
}
|
}
|
||||||
viewBinding.modBadge.visibility = if (comment.isMod == true) View.VISIBLE else View.GONE
|
modBadge.visibility = if (comment.isMod == true) View.VISIBLE else View.GONE
|
||||||
viewBinding.adminBadge.visibility = if (comment.isAdmin == true) View.VISIBLE else View.GONE
|
adminBadge.visibility =
|
||||||
viewBinding.commentInfo.setOnClickListener {
|
if (comment.isAdmin == true) View.VISIBLE else View.GONE
|
||||||
val popup = PopupMenu(commentsFragment.requireContext(), viewBinding.commentInfo)
|
commentInfo.setOnClickListener {
|
||||||
popup.menuInflater.inflate(R.menu.profile_details_menu, popup.menu)
|
val popup = PopupMenu(commentsFragment.requireContext(), commentInfo)
|
||||||
popup.menu.findItem(R.id.commentDelete)?.isVisible =
|
popup.menuInflater.inflate(R.menu.profile_details_menu, popup.menu)
|
||||||
isUserComment || CommentsAPI.isAdmin || CommentsAPI.isMod
|
popup.menu.findItem(R.id.commentDelete)?.isVisible =
|
||||||
popup.menu.findItem(R.id.commentBanUser)?.isVisible =
|
isUserComment || CommentsAPI.isAdmin || CommentsAPI.isMod
|
||||||
(CommentsAPI.isAdmin || CommentsAPI.isMod) && !isUserComment
|
popup.menu.findItem(R.id.commentBanUser)?.isVisible =
|
||||||
popup.menu.findItem(R.id.commentReport)?.isVisible = !isUserComment
|
(CommentsAPI.isAdmin || CommentsAPI.isMod) && !isUserComment
|
||||||
popup.setOnMenuItemClickListener { item ->
|
popup.menu.findItem(R.id.commentReport)?.isVisible = !isUserComment
|
||||||
when (item.itemId) {
|
popup.setOnMenuItemClickListener { item ->
|
||||||
R.id.commentReport -> {
|
when (item.itemId) {
|
||||||
dialogBuilder(
|
R.id.commentReport -> {
|
||||||
getAppString(R.string.report_comment),
|
dialogBuilder(
|
||||||
getAppString(R.string.report_comment_confirm)
|
getAppString(R.string.report_comment),
|
||||||
) {
|
getAppString(R.string.report_comment_confirm)
|
||||||
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
) {
|
||||||
val success = CommentsAPI.reportComment(
|
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
||||||
comment.commentId,
|
val success = CommentsAPI.reportComment(
|
||||||
comment.username,
|
comment.commentId,
|
||||||
commentsFragment.mediaName,
|
comment.username,
|
||||||
comment.userId
|
commentsFragment.mediaName,
|
||||||
)
|
comment.userId
|
||||||
if (success) {
|
)
|
||||||
snackString(R.string.comment_reported)
|
if (success) {
|
||||||
|
snackString(R.string.comment_reported)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
R.id.commentDelete -> {
|
R.id.commentDelete -> {
|
||||||
dialogBuilder(
|
dialogBuilder(
|
||||||
getAppString(R.string.delete_comment),
|
getAppString(R.string.delete_comment),
|
||||||
getAppString(R.string.delete_comment_confirm)
|
getAppString(R.string.delete_comment_confirm)
|
||||||
) {
|
) {
|
||||||
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
||||||
val success = CommentsAPI.deleteComment(comment.commentId)
|
val success = CommentsAPI.deleteComment(comment.commentId)
|
||||||
if (success) {
|
if (success) {
|
||||||
snackString(R.string.comment_deleted)
|
snackString(R.string.comment_deleted)
|
||||||
parentSection.remove(this@CommentItem)
|
parentSection.remove(this@CommentItem)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
R.id.commentBanUser -> {
|
R.id.commentBanUser -> {
|
||||||
dialogBuilder(
|
dialogBuilder(
|
||||||
getAppString(R.string.ban_user),
|
getAppString(R.string.ban_user),
|
||||||
getAppString(R.string.ban_user_confirm)
|
getAppString(R.string.ban_user_confirm)
|
||||||
) {
|
) {
|
||||||
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
|
||||||
val success = CommentsAPI.banUser(comment.userId)
|
val success = CommentsAPI.banUser(comment.userId)
|
||||||
if (success) {
|
if (success) {
|
||||||
snackString(R.string.user_banned)
|
snackString(R.string.user_banned)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
false
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
popup.show()
|
||||||
|
}
|
||||||
|
//fill the icon if the user has liked the comment
|
||||||
|
setVoteButtons(viewBinding)
|
||||||
|
commentUpVote.setOnClickListener {
|
||||||
|
val voteType = if (comment.userVoteType == 1) 0 else 1
|
||||||
|
val previousVoteType = comment.userVoteType
|
||||||
|
val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
||||||
|
scope.launch {
|
||||||
|
val success = CommentsAPI.vote(comment.commentId, voteType)
|
||||||
|
if (success) {
|
||||||
|
comment.userVoteType = voteType
|
||||||
|
|
||||||
|
if (previousVoteType == -1) {
|
||||||
|
comment.downvotes -= 1
|
||||||
|
}
|
||||||
|
comment.upvotes += if (voteType == 1) 1 else -1
|
||||||
|
notifyChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
popup.show()
|
|
||||||
}
|
|
||||||
//fill the icon if the user has liked the comment
|
|
||||||
setVoteButtons(viewBinding)
|
|
||||||
viewBinding.commentUpVote.setOnClickListener {
|
|
||||||
val voteType = if (comment.userVoteType == 1) 0 else 1
|
|
||||||
val previousVoteType = comment.userVoteType
|
|
||||||
val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
|
||||||
scope.launch {
|
|
||||||
val success = CommentsAPI.vote(comment.commentId, voteType)
|
|
||||||
if (success) {
|
|
||||||
comment.userVoteType = voteType
|
|
||||||
|
|
||||||
if (previousVoteType == -1) {
|
commentDownVote.setOnClickListener {
|
||||||
comment.downvotes -= 1
|
val voteType = if (comment.userVoteType == -1) 0 else -1
|
||||||
|
val previousVoteType = comment.userVoteType
|
||||||
|
val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
||||||
|
scope.launch {
|
||||||
|
val success = CommentsAPI.vote(comment.commentId, voteType)
|
||||||
|
if (success) {
|
||||||
|
comment.userVoteType = voteType
|
||||||
|
if (previousVoteType == 1) {
|
||||||
|
comment.upvotes -= 1
|
||||||
|
}
|
||||||
|
comment.downvotes += if (voteType == -1) 1 else -1
|
||||||
|
notifyChanged()
|
||||||
}
|
}
|
||||||
comment.upvotes += if (voteType == 1) 1 else -1
|
|
||||||
|
|
||||||
notifyChanged()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
commentTotalVotes.text = (comment.upvotes - comment.downvotes).toString()
|
||||||
|
commentUserAvatar.setOnLongClickListener {
|
||||||
viewBinding.commentDownVote.setOnClickListener {
|
ImageViewDialog.newInstance(
|
||||||
val voteType = if (comment.userVoteType == -1) 0 else -1
|
commentsFragment.activity,
|
||||||
val previousVoteType = comment.userVoteType
|
commentsFragment.activity.getString(R.string.avatar, comment.username),
|
||||||
val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
comment.profilePictureUrl
|
||||||
scope.launch {
|
)
|
||||||
val success = CommentsAPI.vote(comment.commentId, voteType)
|
|
||||||
if (success) {
|
|
||||||
comment.userVoteType = voteType
|
|
||||||
|
|
||||||
if (previousVoteType == 1) {
|
|
||||||
comment.upvotes -= 1
|
|
||||||
}
|
|
||||||
comment.downvotes += if (voteType == -1) 1 else -1
|
|
||||||
notifyChanged()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
comment.profilePictureUrl?.let { commentUserAvatar.loadImage(it) }
|
||||||
|
commentUserName.text = comment.username
|
||||||
|
val userColor = "[${levelColor.second}]"
|
||||||
|
commentUserLevel.text = userColor
|
||||||
|
commentUserLevel.setTextColor(levelColor.first)
|
||||||
|
commentUserTime.text = formatTimestamp(comment.timestamp)
|
||||||
}
|
}
|
||||||
viewBinding.commentTotalVotes.text = (comment.upvotes - comment.downvotes).toString()
|
|
||||||
viewBinding.commentUserAvatar.setOnLongClickListener {
|
|
||||||
ImageViewDialog.newInstance(
|
|
||||||
commentsFragment.activity,
|
|
||||||
"${comment.username}'s [Cover]",
|
|
||||||
comment.profilePictureUrl
|
|
||||||
)
|
|
||||||
}
|
|
||||||
comment.profilePictureUrl?.let { viewBinding.commentUserAvatar.loadImage(it) }
|
|
||||||
viewBinding.commentUserName.text = comment.username
|
|
||||||
val userColor = "[${levelColor.second}]"
|
|
||||||
viewBinding.commentUserLevel.text = userColor
|
|
||||||
viewBinding.commentUserLevel.setTextColor(levelColor.first)
|
|
||||||
viewBinding.commentUserTime.text = formatTimestamp(comment.timestamp)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLayout(): Int {
|
override fun getLayout(): Int {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ImageView
|
||||||
import android.widget.PopupMenu
|
import android.widget.PopupMenu
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -56,6 +57,7 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
initActivity(this)
|
initActivity(this)
|
||||||
binding = ActivityProfileBinding.inflate(layoutInflater)
|
binding = ActivityProfileBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
val context = this
|
||||||
screenWidth = resources.displayMetrics.widthPixels.toFloat()
|
screenWidth = resources.displayMetrics.widthPixels.toFloat()
|
||||||
navBar = binding.profileNavBar
|
navBar = binding.profileNavBar
|
||||||
val navBarRightMargin = if (resources.configuration.orientation ==
|
val navBarRightMargin = if (resources.configuration.orientation ==
|
||||||
|
@ -89,8 +91,7 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
finish()
|
finish()
|
||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
val following = respond.data.followingPage?.pageInfo?.total ?: 0
|
|
||||||
val followers = respond.data.followerPage?.pageInfo?.total ?: 0
|
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
binding.profileViewPager.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
binding.profileViewPager.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||||
bottomMargin = navBarHeight
|
bottomMargin = navBarHeight
|
||||||
|
@ -114,19 +115,23 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
})
|
})
|
||||||
|
|
||||||
bindingProfileAppBar = ItemProfileAppBarBinding.bind(binding.root).apply {
|
bindingProfileAppBar = ItemProfileAppBarBinding.bind(binding.root).apply {
|
||||||
|
binding.profileProgressBar.visibility = View.GONE
|
||||||
val userLevel = intent.getStringExtra("userLVL") ?: ""
|
|
||||||
followButton.isGone =
|
followButton.isGone =
|
||||||
user.id == Anilist.userid || Anilist.userid == null
|
user.id == Anilist.userid || Anilist.userid == null
|
||||||
followButton.text = getString(
|
|
||||||
when {
|
fun followText(): String {
|
||||||
user.isFollowing -> R.string.unfollow
|
return getString(
|
||||||
user.isFollower -> R.string.follows_you
|
when {
|
||||||
else -> R.string.follow
|
user.isFollowing && user.isFollower -> R.string.mutual
|
||||||
}
|
user.isFollowing -> R.string.unfollow
|
||||||
)
|
user.isFollower -> R.string.follows_you
|
||||||
if (user.isFollowing && user.isFollower) followButton.text =
|
else -> R.string.follow
|
||||||
getString(R.string.mutual)
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
followButton.text = followText()
|
||||||
|
|
||||||
followButton.setOnClickListener {
|
followButton.setOnClickListener {
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
val res = Anilist.query.toggleFollow(user.id)
|
val res = Anilist.query.toggleFollow(user.id)
|
||||||
|
@ -134,53 +139,21 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
snackString(R.string.success)
|
snackString(R.string.success)
|
||||||
user.isFollowing = res.data.toggleFollow.isFollowing
|
user.isFollowing = res.data.toggleFollow.isFollowing
|
||||||
followButton.text = getString(
|
followButton.text = followText()
|
||||||
when {
|
|
||||||
user.isFollowing -> R.string.unfollow
|
|
||||||
user.isFollower -> R.string.follows_you
|
|
||||||
else -> R.string.follow
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if (user.isFollowing && user.isFollower)
|
|
||||||
followButton.text = getString(R.string.mutual)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.profileProgressBar.visibility = View.GONE
|
|
||||||
profileAppBar.visibility = View.VISIBLE
|
profileAppBar.visibility = View.VISIBLE
|
||||||
profileMenuButton.setOnClickListener {
|
profileMenuButton.setOnClickListener {
|
||||||
val popup = PopupMenu(this@ProfileActivity, profileMenuButton)
|
val popup = PopupMenu(context, profileMenuButton)
|
||||||
popup.menuInflater.inflate(R.menu.menu_profile, popup.menu)
|
popup.menuInflater.inflate(R.menu.menu_profile, popup.menu)
|
||||||
popup.setOnMenuItemClickListener { item ->
|
popup.setOnMenuItemClickListener { item ->
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.action_view_following -> {
|
|
||||||
ContextCompat.startActivity(
|
|
||||||
this@ProfileActivity,
|
|
||||||
Intent(this@ProfileActivity, FollowActivity::class.java)
|
|
||||||
.putExtra("title", "Following")
|
|
||||||
.putExtra("userId", user.id),
|
|
||||||
null
|
|
||||||
)
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
R.id.action_view_followers -> {
|
|
||||||
ContextCompat.startActivity(
|
|
||||||
this@ProfileActivity,
|
|
||||||
Intent(this@ProfileActivity, FollowActivity::class.java)
|
|
||||||
.putExtra("title", "Followers")
|
|
||||||
.putExtra("userId", user.id),
|
|
||||||
null
|
|
||||||
)
|
|
||||||
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,18 +163,16 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
profileUserAvatar.loadImage(user.avatar?.medium)
|
profileUserAvatar.loadImage(user.avatar?.medium)
|
||||||
profileUserAvatar.setOnLongClickListener {
|
profileUserAvatar.setOnLongClickListener {
|
||||||
ImageViewDialog.newInstance(
|
ImageViewDialog.newInstance(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
"${user.name}'s [Avatar]",
|
getString(R.string.avatar, user.name),
|
||||||
user.avatar?.medium
|
user.avatar?.medium
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
profileUserName.text = user.name
|
||||||
val userLevelText = "${user.name} $userLevel"
|
val bannerAnimations: ImageView= if (PrefManager.getVal(PrefName.BannerAnimations)) profileBannerImage else profileBannerImageNoKen
|
||||||
profileUserName.text = userLevelText
|
|
||||||
val bannerAnimations: Boolean = PrefManager.getVal(PrefName.BannerAnimations)
|
|
||||||
|
|
||||||
blurImage(
|
blurImage(
|
||||||
if (bannerAnimations) profileBannerImage else profileBannerImageNoKen,
|
bannerAnimations,
|
||||||
user.bannerImage ?: user.avatar?.medium
|
user.bannerImage ?: user.avatar?.medium
|
||||||
)
|
)
|
||||||
profileBannerImage.updateLayoutParams { height += statusBarHeight }
|
profileBannerImage.updateLayoutParams { height += statusBarHeight }
|
||||||
|
@ -210,34 +181,34 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
profileCloseButton.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
profileCloseButton.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
||||||
profileMenuButton.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
profileMenuButton.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
||||||
profileButtonContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
profileButtonContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> { topMargin += statusBarHeight }
|
||||||
|
|
||||||
profileBannerImage.setOnLongClickListener {
|
profileBannerImage.setOnLongClickListener {
|
||||||
ImageViewDialog.newInstance(
|
ImageViewDialog.newInstance(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
user.name + " [Banner]",
|
getString(R.string.banner, user.name),
|
||||||
user.bannerImage
|
user.bannerImage
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
mMaxScrollSize = profileAppBar.totalScrollRange
|
mMaxScrollSize = profileAppBar.totalScrollRange
|
||||||
profileAppBar.addOnOffsetChangedListener(this@ProfileActivity)
|
profileAppBar.addOnOffsetChangedListener(context)
|
||||||
|
|
||||||
|
|
||||||
profileFollowerCount.text = followers.toString()
|
profileFollowerCount.text = (respond.data.followerPage?.pageInfo?.total ?: 0).toString()
|
||||||
profileFollowerCountContainer.setOnClickListener {
|
profileFollowerCountContainer.setOnClickListener {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
Intent(this@ProfileActivity, FollowActivity::class.java)
|
Intent(context, FollowActivity::class.java)
|
||||||
.putExtra("title", getString(R.string.followers))
|
.putExtra("title", getString(R.string.followers))
|
||||||
.putExtra("userId", user.id),
|
.putExtra("userId", user.id),
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
profileFollowingCount.text = (respond.data.followingPage?.pageInfo?.total ?: 0).toString()
|
||||||
profileFollowingCount.text = following.toString()
|
|
||||||
profileFollowingCountContainer.setOnClickListener {
|
profileFollowingCountContainer.setOnClickListener {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
Intent(this@ProfileActivity, FollowActivity::class.java)
|
Intent(context, FollowActivity::class.java)
|
||||||
.putExtra("title", "Following")
|
.putExtra("title", "Following")
|
||||||
.putExtra("userId", user.id),
|
.putExtra("userId", user.id),
|
||||||
null
|
null
|
||||||
|
@ -247,8 +218,8 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
profileAnimeCount.text = user.statistics.anime.count.toString()
|
profileAnimeCount.text = user.statistics.anime.count.toString()
|
||||||
profileAnimeCountContainer.setOnClickListener {
|
profileAnimeCountContainer.setOnClickListener {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
Intent(this@ProfileActivity, ListActivity::class.java)
|
Intent(context, ListActivity::class.java)
|
||||||
.putExtra("anime", true)
|
.putExtra("anime", true)
|
||||||
.putExtra("userId", user.id)
|
.putExtra("userId", user.id)
|
||||||
.putExtra("username", user.name),
|
.putExtra("username", user.name),
|
||||||
|
@ -259,8 +230,8 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
|
||||||
profileMangaCount.text = user.statistics.manga.count.toString()
|
profileMangaCount.text = user.statistics.manga.count.toString()
|
||||||
profileMangaCountContainer.setOnClickListener {
|
profileMangaCountContainer.setOnClickListener {
|
||||||
ContextCompat.startActivity(
|
ContextCompat.startActivity(
|
||||||
this@ProfileActivity,
|
context,
|
||||||
Intent(this@ProfileActivity, ListActivity::class.java)
|
Intent(context, ListActivity::class.java)
|
||||||
.putExtra("anime", false)
|
.putExtra("anime", false)
|
||||||
.putExtra("userId", user.id)
|
.putExtra("userId", user.id)
|
||||||
.putExtra("username", user.name),
|
.putExtra("username", user.name),
|
||||||
|
|
|
@ -2,16 +2,6 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_view_following"
|
|
||||||
android:title="@string/view_following"
|
|
||||||
app:showAsAction="never" />
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_view_followers"
|
|
||||||
android:title="@string/view_followers"
|
|
||||||
app:showAsAction="never" />
|
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_view_on_anilist"
|
android:id="@+id/action_view_on_anilist"
|
||||||
android:title="@string/view_on_anilist"
|
android:title="@string/view_on_anilist"
|
||||||
|
|
|
@ -960,4 +960,7 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
|
||||||
<string name="failed_ext_install_conflict">Failed to install extension due to conflict</string>
|
<string name="failed_ext_install_conflict">Failed to install extension due to conflict</string>
|
||||||
<string name="reading">READING</string>
|
<string name="reading">READING</string>
|
||||||
<string name="watching">WATCHING</string>
|
<string name="watching">WATCHING</string>
|
||||||
|
<string name="avatar">%1$s\ [Avatar]</string>
|
||||||
|
<string name="cover">%1$s\ [Cover]</string>
|
||||||
|
<string name="banner">%1$s\ [Banner]</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue