diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt index 57419e43..fb676247 100644 --- a/app/src/main/java/ani/dantotsu/Functions.kt +++ b/app/src/main/java/ani/dantotsu/Functions.kt @@ -84,6 +84,7 @@ import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager import androidx.lifecycle.MutableLiveData import androidx.recyclerview.widget.RecyclerView @@ -96,6 +97,7 @@ import ani.dantotsu.connections.crashlytics.CrashlyticsInterface import ani.dantotsu.databinding.ItemCountDownBinding import ani.dantotsu.media.Media import ani.dantotsu.notifications.IncognitoNotificationClickReceiver +import ani.dantotsu.others.ImageViewDialog import ani.dantotsu.others.SpoilerPlugin import ani.dantotsu.parsers.ShowResponse import ani.dantotsu.settings.saving.PrefManager @@ -1392,6 +1394,13 @@ fun Context.getThemeColor(@AttrRes attribute: Int): Int { theme.resolveAttribute(attribute, typedValue, true) return typedValue.data } +fun ImageView.openImage(title: String, image: String) { + setOnLongClickListener{ + ImageViewDialog.newInstance( + context as FragmentActivity, title, image + ) + } +} /** * Builds the markwon instance with all the plugins * @return the markwon instance diff --git a/app/src/main/java/ani/dantotsu/connections/github/Forks.kt b/app/src/main/java/ani/dantotsu/connections/github/Forks.kt deleted file mode 100644 index 5e5301dc..00000000 --- a/app/src/main/java/ani/dantotsu/connections/github/Forks.kt +++ /dev/null @@ -1,55 +0,0 @@ -package ani.dantotsu.connections.github - -import ani.dantotsu.settings.Developer -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.runBlocking -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -class Forks { - - fun getForks(): Array { - var forks = arrayOf() - runBlocking(Dispatchers.IO) { - val trustedForks = arrayOf( - GithubResponse( - "Awery", - GithubResponse.Owner( - "MrBoomDeveloper", - "https://avatars.githubusercontent.com/u/92123190?v=4" - ), - "https://github.com/MrBoomDeveloper/Awery" - ), - ) - trustedForks.forEach { - forks = forks.plus( - Developer( - it.name, - it.owner.avatarUrl, - it.owner.login, - it.htmlUrl - ) - ) - } - } - return forks - } - - - @Serializable - data class GithubResponse( - @SerialName("name") - val name: String, - val owner: Owner, - @SerialName("html_url") - val htmlUrl: String, - ) { - @Serializable - data class Owner( - @SerialName("login") - val login: String, - @SerialName("avatar_url") - val avatarUrl: String - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt b/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt index 6cafbc05..216c937f 100644 --- a/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt @@ -528,26 +528,11 @@ class MediaInfoFragment : Fragment() { parent, false ).apply { - fun onUserClick(userId: Int) { - val review = media.review!!.find { i -> i.id == userId } - if (review != null) { - startActivity( - Intent(requireContext(), ReviewViewActivity::class.java) - .putExtra("review", review) - ) - } - } val adapter = GroupieAdapter() - media.review!!.forEach { - adapter.add(ReviewAdapter(it, ::onUserClick)) - } + media.review!!.forEach { adapter.add(ReviewAdapter(it)) } itemTitle.setText(R.string.reviews) itemRecycler.adapter = adapter - itemRecycler.layoutManager = LinearLayoutManager( - requireContext(), - LinearLayoutManager.VERTICAL, - false - ) + itemRecycler.layoutManager = LinearLayoutManager(requireContext()) itemMore.visibility = View.VISIBLE itemMore.setSafeOnClickListener { startActivity( diff --git a/app/src/main/java/ani/dantotsu/media/ReviewActivity.kt b/app/src/main/java/ani/dantotsu/media/ReviewActivity.kt index caefe07b..d3747765 100644 --- a/app/src/main/java/ani/dantotsu/media/ReviewActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/ReviewActivity.kt @@ -122,19 +122,7 @@ class ReviewActivity : AppCompatActivity() { private fun fillList() { adapter.clear() reviews.forEach { - adapter.add( - ReviewAdapter( - it, - this::onUserClick - ) - ) - } - } - - private fun onUserClick(userId: Int) { - val review = reviews.find { it.id == userId } - if (review != null) { - startActivity(Intent(this, ReviewViewActivity::class.java).putExtra("review", review)) + adapter.add(ReviewAdapter(it)) } } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/ReviewAdapter.kt b/app/src/main/java/ani/dantotsu/media/ReviewAdapter.kt index e88238c7..8bb0a138 100644 --- a/app/src/main/java/ani/dantotsu/media/ReviewAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/ReviewAdapter.kt @@ -1,12 +1,24 @@ package ani.dantotsu.media +import android.app.Activity +import android.content.Intent import android.view.View +import androidx.activity.ComponentActivity +import androidx.core.app.ActivityOptionsCompat +import androidx.core.content.ContextCompat +import androidx.core.util.Pair +import androidx.core.view.ViewCompat +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.api.Query import ani.dantotsu.databinding.ItemReviewsBinding import ani.dantotsu.loadImage +import ani.dantotsu.openImage +import ani.dantotsu.others.ImageViewDialog +import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.activity.ActivityItemBuilder import ani.dantotsu.toast import com.xwray.groupie.viewbinding.BindableItem @@ -18,19 +30,49 @@ import kotlinx.coroutines.withContext class ReviewAdapter( private var review: Query.Review, - val clickCallback: (Int) -> Unit ) : BindableItem() { private lateinit var binding: ItemReviewsBinding override fun bind(viewBinding: ItemReviewsBinding, position: Int) { binding = viewBinding + val context = binding.root.context binding.reviewUserName.text = review.user?.name binding.reviewUserAvatar.loadImage(review.user?.avatar?.medium) binding.reviewText.text = review.summary binding.reviewPostTime.text = ActivityItemBuilder.getDateTime(review.createdAt) val text = "[${review.score/ 10.0f}]" binding.reviewTag.text = text - binding.root.setOnClickListener { clickCallback(review.id) } + binding.root.setOnClickListener { + ContextCompat.startActivity( + context, + Intent(context, ReviewViewActivity::class.java) + .putExtra("review", review), + null + ) + } + binding.reviewUserName.setOnClickListener { + ContextCompat.startActivity( + context, + Intent(context, ProfileActivity::class.java) + .putExtra("userId", review.user?.id), + null + ) + } + binding.reviewUserAvatar.setOnClickListener { + ContextCompat.startActivity( + context, + Intent(context, ProfileActivity::class.java) + .putExtra("userId", review.user?.id), + null + ) + } + binding.reviewUserAvatar.openImage( + context.getString( + R.string.avatar, + review.user?.name + ), + review.user?.avatar?.medium ?: "" + ) userVote(review.userRating) enableVote() binding.reviewTotalVotes.text = review.rating.toString() diff --git a/app/src/main/java/ani/dantotsu/media/ReviewViewActivity.kt b/app/src/main/java/ani/dantotsu/media/ReviewViewActivity.kt index 7d33481b..5e64d33c 100644 --- a/app/src/main/java/ani/dantotsu/media/ReviewViewActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/ReviewViewActivity.kt @@ -1,5 +1,6 @@ package ani.dantotsu.media +import android.content.Intent import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -18,6 +19,9 @@ import ani.dantotsu.getThemeColor import ani.dantotsu.initActivity import ani.dantotsu.loadImage import ani.dantotsu.navBarHeight +import ani.dantotsu.openImage +import ani.dantotsu.others.ImageViewDialog +import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.activity.ActivityItemBuilder import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager @@ -47,6 +51,20 @@ class ReviewViewActivity : AppCompatActivity() { binding.userName.text = review.user?.name binding.userAvatar.loadImage(review.user?.avatar?.medium) binding.userTime.text = ActivityItemBuilder.getDateTime(review.createdAt) + binding.userContainer.setOnClickListener { + startActivity(Intent(this, ProfileActivity::class.java) + .putExtra("userId", review.user?.id) + ) + } + binding.userAvatar.openImage( + binding.root.context.getString(R.string.avatar, review.user?.name), + review.user?.avatar?.medium ?: "" + ) + binding.userAvatar.setOnClickListener { + startActivity(Intent(this, ProfileActivity::class.java) + .putExtra("userId", review.user?.id) + ) + } binding.profileUserBio.settings.loadWithOverviewMode = true binding.profileUserBio.settings.useWideViewPort = true binding.profileUserBio.setInitialScale(1) diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt index 643787fc..6c552090 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt @@ -14,6 +14,7 @@ import ani.dantotsu.copyToClipboard import ani.dantotsu.databinding.ItemCommentsBinding import ani.dantotsu.getAppString import ani.dantotsu.loadImage +import ani.dantotsu.openImage import ani.dantotsu.others.ImageViewDialog import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.setAnimation @@ -251,13 +252,10 @@ class CommentItem( } } commentTotalVotes.text = (comment.upvotes - comment.downvotes).toString() - commentUserAvatar.setOnLongClickListener { - ImageViewDialog.newInstance( - commentsFragment.activity, - commentsFragment.activity.getString(R.string.avatar, comment.username), - comment.profilePictureUrl - ) - } + commentUserAvatar.openImage( + commentsFragment.activity.getString(R.string.avatar, comment.username), + comment.profilePictureUrl ?: "" + ) comment.profilePictureUrl?.let { commentUserAvatar.loadImage(it) } commentUserName.text = comment.username val userColor = "[${levelColor.second}]" diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt index 578db054..5433df6a 100644 --- a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt @@ -28,6 +28,7 @@ import ani.dantotsu.initActivity import ani.dantotsu.loadImage import ani.dantotsu.media.user.ListActivity import ani.dantotsu.navBarHeight +import ani.dantotsu.openImage import ani.dantotsu.openLinkInBrowser import ani.dantotsu.others.ImageViewDialog import ani.dantotsu.profile.activity.FeedFragment @@ -171,13 +172,10 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene } profileUserAvatar.loadImage(user.avatar?.medium) - profileUserAvatar.setOnLongClickListener { - ImageViewDialog.newInstance( - context, - getString(R.string.avatar, user.name), - user.avatar?.medium - ) - } + profileUserAvatar.openImage( + context.getString(R.string.avatar, user.name), + user.avatar?.medium ?: "" + ) profileUserName.text = user.name val bannerAnimations: ImageView= if (PrefManager.getVal(PrefName.BannerAnimations)) profileBannerImage else profileBannerImageNoKen @@ -192,13 +190,10 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene profileMenuButton.updateLayoutParams { topMargin += statusBarHeight } profileButtonContainer.updateLayoutParams { topMargin += statusBarHeight } - profileBannerImage.setOnLongClickListener { - ImageViewDialog.newInstance( - context, - getString(R.string.banner, user.name), - user.bannerImage - ) - } + profileBannerImage.openImage( + context.getString(R.string.banner, user.name), + user.bannerImage ?: user.avatar?.medium ?: "" + ) mMaxScrollSize = profileAppBar.totalScrollRange profileAppBar.addOnOffsetChangedListener(context) diff --git a/app/src/main/java/ani/dantotsu/settings/ForksDialogFragment.kt b/app/src/main/java/ani/dantotsu/settings/ForksDialogFragment.kt index 74d00972..7485c7e6 100644 --- a/app/src/main/java/ani/dantotsu/settings/ForksDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/ForksDialogFragment.kt @@ -7,7 +7,6 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.BottomSheetDialogFragment import ani.dantotsu.R -import ani.dantotsu.connections.github.Forks import ani.dantotsu.databinding.BottomSheetDevelopersBinding class ForksDialogFragment : BottomSheetDialogFragment() { @@ -26,7 +25,16 @@ class ForksDialogFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.devsTitle.setText(R.string.forks) - binding.devsRecyclerView.adapter = DevelopersAdapter(Forks().getForks()) + binding.devsRecyclerView.adapter = DevelopersAdapter( + arrayOf( + Developer( + "Awery", + "https://avatars.githubusercontent.com/u/92123190?v=4", + "MrBoomDeveloper", + "https://github.com/MrBoomDeveloper/Awery" + ), + ) + ) binding.devsRecyclerView.layoutManager = LinearLayoutManager(requireContext()) }