diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt index 401a5b3b..d6638cff 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -73,7 +73,7 @@ class AnilistQueries { media.cameFromContinue = false val query = - """{Media(id:${media.id}){id favourites popularity mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role voiceActors { id name { first middle last full native userPreferred } image { large medium } languageV2 } node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}Page(page:1){pageInfo{total perPage currentPage lastPage hasNextPage}mediaList(isFollowing:true,sort:[STARTED_ON],mediaId:${media.id}){id status score progress progressVolumes user{id name avatar{large medium}}}}}""" + """{Media(id:${media.id}){id favourites popularity episodes chapters mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role voiceActors { id name { first middle last full native userPreferred } image { large medium } languageV2 } node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}Page(page:1){pageInfo{total perPage currentPage lastPage hasNextPage}mediaList(isFollowing:true,sort:[STATUS],mediaId:${media.id}){id status score(format: POINT_100) progress progressVolumes user{id name avatar{large medium}}}}}""" runBlocking { val anilist = async { var response = executeQuery(query, force = true, show = true) @@ -219,6 +219,9 @@ class AnilistQueries { user.avatar?.large, "", it.status?.toString(), + it.score, + it.progress, + fetchedMedia.episodes ?: fetchedMedia.chapters, ) } else null } diff --git a/app/src/main/java/ani/dantotsu/media/MediaSocialAdapter.kt b/app/src/main/java/ani/dantotsu/media/MediaSocialAdapter.kt index 8fd04e4b..e8be5019 100644 --- a/app/src/main/java/ani/dantotsu/media/MediaSocialAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/MediaSocialAdapter.kt @@ -1,5 +1,6 @@ package ani.dantotsu.media +import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.Intent @@ -8,6 +9,7 @@ import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView +import ani.dantotsu.R import ani.dantotsu.databinding.ItemFollowerGridBinding import ani.dantotsu.loadImage import ani.dantotsu.profile.ProfileActivity @@ -30,18 +32,39 @@ class MediaSocialAdapter(private val user: ArrayList) : ) } + @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: DeveloperViewHolder, position: Int) { - val b = holder.binding - setAnimation(b.root.context, b.root) - val user = user[position] - b.profileUserName.text = user.name - b.profileUserAvatar.loadImage(user.pfp) - b.profileInfo.text = user.info - b.profileInfo.visibility = View.VISIBLE - b.profileUserAvatar.setOnClickListener { - val intent = Intent(b.root.context, ProfileActivity::class.java) - intent.putExtra("userId", user.id) - ContextCompat.startActivity(b.root.context, intent, null) + holder.binding.apply { + val user = user[position] + val score = user.score?.div(10.0) ?: 0.0 + setAnimation(root.context, root) + profileUserName.text = user.name + profileInfo.apply { + text = when (user.status) { + "CURRENT" -> "WATCHING" + else -> user.status ?: "" + } + visibility = View.VISIBLE + } + profileCompactUserProgress.text = user.progress.toString() + profileCompactScore.text = score.toString() + profileCompactTotal.text = " | ${user.totalEpisodes ?: "~"}" + profileUserAvatar.loadImage(user.pfp) + + val scoreDrawable = if (score == 0.0) R.drawable.score else R.drawable.user_score + profileCompactScoreBG.apply { + visibility = View.VISIBLE + background = ContextCompat.getDrawable(root.context, scoreDrawable) + } + + profileCompactProgressContainer.visibility = View.VISIBLE + + profileUserAvatar.setOnClickListener { + val intent = Intent(root.context, ProfileActivity::class.java).apply { + putExtra("userId", user.id) + } + ContextCompat.startActivity(root.context, intent, null) + } } } diff --git a/app/src/main/java/ani/dantotsu/profile/User.kt b/app/src/main/java/ani/dantotsu/profile/User.kt index daa53b0f..565fc09b 100644 --- a/app/src/main/java/ani/dantotsu/profile/User.kt +++ b/app/src/main/java/ani/dantotsu/profile/User.kt @@ -5,5 +5,10 @@ data class User( val name: String, val pfp: String?, val banner: String?, - val info: String? = null, + // for media + val status: String? = null, + val score: Float? = null, + val progress: Int? = null, + val totalEpisodes : Int? = null, + val nextAiringEpisode : Int? = null, ) \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/profile/UsersAdapter.kt b/app/src/main/java/ani/dantotsu/profile/UsersAdapter.kt index 9f31d27b..9b4d23a1 100644 --- a/app/src/main/java/ani/dantotsu/profile/UsersAdapter.kt +++ b/app/src/main/java/ani/dantotsu/profile/UsersAdapter.kt @@ -40,7 +40,7 @@ class UsersAdapter(private val user: ArrayList) : RecyclerView.Adapter + + diff --git a/app/src/main/res/drawable/user_score.xml b/app/src/main/res/drawable/user_score.xml new file mode 100644 index 00000000..eceed98e --- /dev/null +++ b/app/src/main/res/drawable/user_score.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_author.xml b/app/src/main/res/layout/activity_author.xml index e58ebc73..e4dd731a 100644 --- a/app/src/main/res/layout/activity_author.xml +++ b/app/src/main/res/layout/activity_author.xml @@ -68,7 +68,7 @@ + + + + + + + + + + + android:textSize="14sp" /> - + tools:visibility="visible"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_media_compact.xml b/app/src/main/res/layout/item_media_compact.xml index 34b5fbe7..5a461a89 100644 --- a/app/src/main/res/layout/item_media_compact.xml +++ b/app/src/main/res/layout/item_media_compact.xml @@ -42,7 +42,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:background="@drawable/item_score" - android:backgroundTint="#BFFFFFFF" + android:backgroundTint="#FFFFFF" android:backgroundTintMode="multiply" android:orientation="horizontal" android:paddingStart="8dp" diff --git a/app/src/main/res/layout/item_media_large.xml b/app/src/main/res/layout/item_media_large.xml index 4c57323c..d8846861 100644 --- a/app/src/main/res/layout/item_media_large.xml +++ b/app/src/main/res/layout/item_media_large.xml @@ -60,7 +60,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:background="@drawable/item_score" - android:backgroundTint="#BFFFFFFF" + android:backgroundTint="#FFFFFF" android:backgroundTintMode="multiply" android:orientation="horizontal" android:paddingStart="8dp" diff --git a/app/src/main/res/layout/item_media_page.xml b/app/src/main/res/layout/item_media_page.xml index be00b0ad..a33d4685 100644 --- a/app/src/main/res/layout/item_media_page.xml +++ b/app/src/main/res/layout/item_media_page.xml @@ -61,7 +61,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:background="@drawable/item_score" - android:backgroundTint="#BFFFFFFF" + android:backgroundTint="#FFFFFF" android:backgroundTintMode="multiply" android:orientation="horizontal" android:paddingStart="8dp" diff --git a/app/src/main/res/layout/item_media_page_small.xml b/app/src/main/res/layout/item_media_page_small.xml index eaea6a71..f982bc38 100644 --- a/app/src/main/res/layout/item_media_page_small.xml +++ b/app/src/main/res/layout/item_media_page_small.xml @@ -80,7 +80,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:background="@drawable/item_score" - android:backgroundTint="#BFFFFFFF" + android:backgroundTint="#FFFFFF" android:backgroundTintMode="multiply" android:orientation="horizontal" android:paddingStart="8dp"