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 1f8ed920..07090cc9 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -1354,7 +1354,7 @@ Page(page:$page,perPage:50) { suspend fun getFeed(userId: Int?, global: Boolean = false, page: Int = 1, activityId: Int? = null): FeedResponse? { val filter = if (activityId != null) "id:$activityId," else if (userId != null) "userId:$userId," - else if (global) "isFollowing:false,hasReplies:true," + else if (global) "isFollowing:false,hasRepliesOrTypeText:true," else "isFollowing:true,type_not:MESSAGE," return executeQuery( """{Page(page:$page,perPage:$ITEMS_PER_PAGE){activities(${filter}sort:ID_DESC){__typename ... on TextActivity{id userId type replyCount text(asHtml:true)siteUrl isLocked isSubscribed likeCount isLiked isPinned createdAt user{id name bannerImage avatar{medium large}}replies{id userId activityId text(asHtml:true)likeCount isLiked createdAt user{id name bannerImage avatar{medium large}}likes{id name bannerImage avatar{medium large}}}likes{id name bannerImage avatar{medium large}}}... on ListActivity{id userId type replyCount status progress siteUrl isLocked isSubscribed likeCount isLiked isPinned createdAt user{id name bannerImage avatar{medium large}}media{id title{english romaji native userPreferred}bannerImage coverImage{medium large}}replies{id userId activityId text(asHtml:true)likeCount isLiked createdAt user{id name bannerImage avatar{medium large}}likes{id name bannerImage avatar{medium large}}}likes{id name bannerImage avatar{medium large}}}... on MessageActivity{id recipientId messengerId type replyCount likeCount message(asHtml:true)isLocked isSubscribed isLiked isPrivate siteUrl createdAt recipient{id name bannerImage avatar{medium large}}messenger{id name bannerImage avatar{medium large}}replies{id userId activityId text(asHtml:true)likeCount isLiked createdAt user{id name bannerImage avatar{medium large}}likes{id name bannerImage avatar{medium large}}}likes{id name bannerImage avatar{medium large}}}}}}""" diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt index 8b53e9df..ded6a1f0 100644 --- a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt @@ -23,6 +23,7 @@ import ani.dantotsu.connections.anilist.api.Query import ani.dantotsu.databinding.ActivityProfileBinding import ani.dantotsu.initActivity import ani.dantotsu.loadImage +import ani.dantotsu.media.user.ListActivity import ani.dantotsu.navBarHeight import ani.dantotsu.openLinkInBrowser import ani.dantotsu.others.ImageViewDialog @@ -74,6 +75,8 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene finish() return@launch } + val following = Anilist.query.userFollowers(userid)?.data?.page?.followers + val followers = Anilist.query.userFollowing(userid)?.data?.page?.following withContext(Dispatchers.Main) { binding.profileViewPager.updateLayoutParams { bottomMargin = navBarHeight @@ -181,6 +184,52 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene mMaxScrollSize = binding.profileAppBar.totalScrollRange binding.profileAppBar.addOnOffsetChangedListener(this@ProfileActivity) + + followers?.count()?.let { + binding.profileFollowerCount.text = it.toString() + } + binding.profileFollowerCountContainer.setOnClickListener { + ContextCompat.startActivity( + this@ProfileActivity, + Intent(this@ProfileActivity, FollowActivity::class.java) + .putExtra("title", "Followers") + .putExtra("userId", user.id), + null + ) + } + + following?.count()?.let { + binding.profileFollowingCount.text = it.toString() + } + binding.profileFollowingCountContainer.setOnClickListener { + ContextCompat.startActivity( + this@ProfileActivity, + Intent(this@ProfileActivity, FollowActivity::class.java) + .putExtra("title", "Following") + .putExtra("userId", user.id), + null + ) + } + + binding.profileAnimeCount.text = user.statistics.anime.count.toString() + binding.profileAnimeCountContainer.setOnClickListener { + ContextCompat.startActivity( + this@ProfileActivity, Intent(this@ProfileActivity, ListActivity::class.java) + .putExtra("anime", true) + .putExtra("userId", user.id) + .putExtra("username", user.name), null + ) + } + + binding.profileMangaCount.text = user.statistics.manga.count.toString() + binding.profileMangaCountContainer.setOnClickListener { + ContextCompat.startActivity( + this@ProfileActivity, Intent(this@ProfileActivity, ListActivity::class.java) + .putExtra("anime", false) + .putExtra("userId", user.id) + .putExtra("username", user.name), null + ) + } } } } @@ -211,6 +260,9 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene .setDuration(duration).start() ObjectAnimator.ofFloat(binding.profileUserAvatarContainer, "translationX", screenWidth) .setDuration(duration).start() + ObjectAnimator.ofFloat(binding.profileButtonContainer, "translationX", screenWidth) + .setDuration(duration).start() + binding.profileButtonContainer.updateLayoutParams { height = 0 } binding.profileBannerImage.pause() } if (percentage <= percent && isCollapsed) { @@ -218,8 +270,11 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene ObjectAnimator.ofFloat(binding.profileUserDataContainer, "translationX", 0f) .setDuration(duration).start() ObjectAnimator.ofFloat(binding.profileUserAvatarContainer, "translationX", 0f) - .setDuration(duration) - .start() + .setDuration(duration).start() + ObjectAnimator.ofFloat(binding.profileButtonContainer, "translationX", 0f) + .setDuration(duration).start() + binding.profileButtonContainer.updateLayoutParams { height = ViewGroup.LayoutParams.WRAP_CONTENT } + if (PrefManager.getVal(PrefName.BannerAnimations)) binding.profileBannerImage.resume() } } diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileFragment.kt b/app/src/main/java/ani/dantotsu/profile/ProfileFragment.kt index 7fa463bd..9980bc12 100644 --- a/app/src/main/java/ani/dantotsu/profile/ProfileFragment.kt +++ b/app/src/main/java/ani/dantotsu/profile/ProfileFragment.kt @@ -87,37 +87,14 @@ class ProfileFragment : Fragment() { binding.userInfoContainer.visibility = if (user.about != null) View.VISIBLE else View.GONE - binding.profileAnimeList.setOnClickListener { - ContextCompat.startActivity( - activity, Intent(activity, ListActivity::class.java) - .putExtra("anime", true) - .putExtra("userId", user.id) - .putExtra("username", user.name), null - ) - } - binding.profileMangaList.setOnClickListener { - ContextCompat.startActivity( - activity, Intent(activity, ListActivity::class.java) - .putExtra("anime", false) - .putExtra("userId", user.id) - .putExtra("username", user.name), null - ) - } + binding.statsEpisodesWatched.text = user.statistics.anime.episodesWatched.toString() binding.statsDaysWatched.text = (user.statistics.anime.minutesWatched / (24 * 60)).toString() - binding.statsTotalAnime.text = user.statistics.anime.count.toString() binding.statsAnimeMeanScore.text = user.statistics.anime.meanScore.toString() binding.statsChaptersRead.text = user.statistics.manga.chaptersRead.toString() binding.statsVolumeRead.text = (user.statistics.manga.volumesRead).toString() - binding.statsTotalManga.text = user.statistics.manga.count.toString() binding.statsMangaMeanScore.text = user.statistics.manga.meanScore.toString() - model.getListImages().observe(viewLifecycleOwner) { - if (it.isNotEmpty()) { - binding.profileAnimeListImage.loadImage(it[0] ?: "https://bit.ly/31bsIHq") - binding.profileMangaListImage.loadImage(it[1] ?: "https://bit.ly/2ZGfcuG") - } - } initRecyclerView( model.getAnimeFav(), binding.profileFavAnimeContainer, diff --git a/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt b/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt index 0b475f89..c55e6a82 100644 --- a/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt +++ b/app/src/main/java/ani/dantotsu/profile/activity/ActivityItem.kt @@ -33,7 +33,7 @@ import kotlinx.coroutines.withContext class ActivityItem( private val activity: Activity, val clickCallback: (Int, type: String) -> Unit, - private val FragActivity: FragmentActivity + private val fragActivity: FragmentActivity ) : BindableItem() { private lateinit var binding: ItemActivityBinding private lateinit var repliesAdapter: GroupieAdapter @@ -114,7 +114,7 @@ class ActivityItem( } binding.activityLike.setOnLongClickListener{ UsersDialogFragment().apply { userList(userList) - show(FragActivity.supportFragmentManager, "dialog") + show(fragActivity.supportFragmentManager, "dialog") } true } @@ -127,8 +127,7 @@ class ActivityItem( binding.activityContent.visibility = View.GONE binding.activityBannerContainer.visibility = View.VISIBLE binding.activityMediaName.text = activity.media?.title?.userPreferred - binding.activityText.text = - """${activity.user!!.name} ${activity.status} ${activity.progress ?: ""}""" + binding.activityText.text = "${activity.user!!.name} ${activity.status} ${activity.progress ?: activity.media?.title?.userPreferred}" binding.activityCover.loadImage(cover) blurImage(binding.activityBannerImage, banner ?: cover) binding.activityAvatarContainer.setOnClickListener { diff --git a/app/src/main/res/layout/activity_follow.xml b/app/src/main/res/layout/activity_follow.xml index 4f7bd80a..7b8e8ac5 100644 --- a/app/src/main/res/layout/activity_follow.xml +++ b/app/src/main/res/layout/activity_follow.xml @@ -102,6 +102,8 @@ android:id="@+id/followSwipeRefresh" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" android:clipChildren="false" android:clipToPadding="false"> @@ -109,9 +111,8 @@ android:id="@+id/listRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" android:nestedScrollingEnabled="true" + tools:listitem="@layout/item_follower" android:requiresFadingEdge="vertical" /> diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index d0f5005b..e1920c54 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -130,6 +130,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index edf88ef5..09f441c9 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -11,129 +11,6 @@ android:nestedScrollingEnabled="true" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -