feat(socials): ratings and progress
This commit is contained in:
parent
e49f0dbf32
commit
3666758e6e
12 changed files with 137 additions and 33 deletions
|
@ -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.Media>(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
|
||||
}
|
||||
|
|
|
@ -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<User>) :
|
|||
)
|
||||
}
|
||||
|
||||
@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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
)
|
|
@ -40,7 +40,7 @@ class UsersAdapter(private val user: ArrayList<User>) : RecyclerView.Adapter<Use
|
|||
setAnimation(b.root.context, b.root)
|
||||
val user = user[position]
|
||||
b.profileUserAvatar.loadImage(user.pfp)
|
||||
blurImage(b.profileBannerImage, user.banner ?: user.pfp)
|
||||
b.profileBannerImage.loadImage(user.banner ?: user.pfp)
|
||||
b.profileUserName.text = user.name
|
||||
}
|
||||
|
||||
|
|
4
app/src/main/res/drawable/score.xml
Normal file
4
app/src/main/res/drawable/score.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<solid android:color="?attr/colorTertiary" />
|
||||
</shape>
|
4
app/src/main/res/drawable/user_score.xml
Normal file
4
app/src/main/res/drawable/user_score.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<solid android:color="?attr/colorPrimary" />
|
||||
</shape>
|
|
@ -68,7 +68,7 @@
|
|||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/studioRecycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:paddingTop="16dp"
|
||||
|
|
|
@ -21,32 +21,97 @@
|
|||
android:layout_height="100dp"
|
||||
tools:ignore="ContentDescription,ImageContrastCheck"
|
||||
tools:tint="@color/transparent" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/profileCompactScoreBG"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|center"
|
||||
android:background="@drawable/user_score"
|
||||
android:backgroundTint="#FFFFFF"
|
||||
android:backgroundTintMode="multiply"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="6dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileCompactScore"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:fontFamily="@font/poppins_bold"
|
||||
android:paddingTop="2dp"
|
||||
android:textColor="?attr/colorOnPrimary"
|
||||
android:textSize="12sp"
|
||||
tools:ignore="TextContrastCheck"
|
||||
tools:text="0.0" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView2"
|
||||
android:layout_width="12dp"
|
||||
android:layout_height="match_parent"
|
||||
app:srcCompat="@drawable/ic_round_star_24"
|
||||
app:tint="?attr/colorOnPrimary"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
</LinearLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileInfo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|center_vertical"
|
||||
android:alpha="0.58"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="@font/poppins_semi_bold"
|
||||
android:gravity="center"
|
||||
android:singleLine="true"
|
||||
android:text="@string/slogan"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="italic"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileUserName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="@font/poppins_semi_bold"
|
||||
android:text="@string/username"
|
||||
android:textColor="?attr/colorOnBackground"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold" />
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileInfo"
|
||||
<LinearLayout
|
||||
android:id="@+id/profileCompactProgressContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="@font/poppins_semi_bold"
|
||||
android:singleLine="true"
|
||||
android:text="@string/video_info_info"
|
||||
android:textSize="12sp"
|
||||
android:alpha="0.58"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileCompactUserProgress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?attr/colorSecondary"
|
||||
android:textSize="14dp"
|
||||
tools:ignore="SpUsage,TextContrastCheck"
|
||||
tools:text="0" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileCompactTotal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha="0.58"
|
||||
android:textSize="14dp"
|
||||
tools:ignore="SpUsage,TextContrastCheck"
|
||||
tools:text="/??" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue