diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 85d3b9c6..2514f4f7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -140,7 +140,7 @@ android:name=".settings.SettingsAboutActivity" android:parentActivityName=".MainActivity" /> (query(), force = true)?.data?.let { data -> val activities = listOf(data.page1.activities, data.page2.activities).flatten() - .filterNot { it.userId == Anilist.userid } + .sortedByDescending { it.createdAt } .filter { it.createdAt < threeDaysAgo } + val anilistActivities = mutableListOf() val groupedActivities = activities.groupBy { it.userId } groupedActivities.forEach { (_, userActivities) -> val user = userActivities.firstOrNull()?.user if (user != null) { - list.add( - User( - user.id, - user.name ?: "", - user.avatar?.medium, - user.bannerImage, - activity = userActivities.toList() - ) + val userToAdd = User( + user.id, + user.name ?: "", + user.avatar?.medium, + user.bannerImage, + activity = userActivities.toList() ) + if (user.id == Anilist.userid) { + anilistActivities.add(0, userToAdd) + } else { + list.add(userToAdd) + } } } + + + list.addAll(0, anilistActivities) } return list } diff --git a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt index fff29e79..4a1ee20b 100644 --- a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt @@ -30,6 +30,7 @@ import ani.dantotsu.connections.anilist.AnilistHomeViewModel import ani.dantotsu.connections.anilist.getUserId import ani.dantotsu.currContext import ani.dantotsu.databinding.FragmentHomeBinding +import ani.dantotsu.home.status.UserStatusAdapter import ani.dantotsu.loadImage import ani.dantotsu.media.Media import ani.dantotsu.media.MediaAdaptor @@ -321,7 +322,7 @@ class HomeFragment : Fragment() { binding.homeUserStatusRecyclerView.visibility = View.GONE if (it != null) { if (it.isNotEmpty()) { - binding.homeUserStatusRecyclerView.adapter = UserStatus(it) + binding.homeUserStatusRecyclerView.adapter = UserStatusAdapter(it) binding.homeUserStatusRecyclerView.layoutManager = LinearLayoutManager( requireContext(), LinearLayoutManager.HORIZONTAL, diff --git a/app/src/main/java/ani/dantotsu/home/status/CircleView.kt b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt index 1bd979d7..c9c57e63 100644 --- a/app/src/main/java/ani/dantotsu/home/status/CircleView.kt +++ b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt @@ -14,6 +14,7 @@ class CircleView(context: Context, attrs: AttributeSet?) : View(context, attrs) private var parts: Int = 3 private var gapAngle: Float = 9f private val path = Path() + private var isUser = false private var booleanList = listOf() private val paint: Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { style = Paint.Style.STROKE @@ -32,13 +33,14 @@ class CircleView(context: Context, attrs: AttributeSet?) : View(context, attrs) val typedValue = TypedValue() context.theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue, true) val primaryColor = typedValue.data + val typedValue1 = TypedValue() + context.theme.resolveAttribute(com.google.android.material.R.attr.colorOnPrimary, typedValue1, true) + val secondColor = typedValue1.data fun setColor(int: Int) { - if (int < booleanList.size && booleanList[int]) { - - paint.color = Color.GRAY + paint.color = if (int < booleanList.size && booleanList[int]) { + if (isUser) secondColor else Color.GRAY } else { - - paint.color = primaryColor + if (isUser) secondColor else primaryColor } canvas.drawPath(path, paint) } @@ -74,9 +76,10 @@ class CircleView(context: Context, attrs: AttributeSet?) : View(context, attrs) } - fun setParts(parts: Int, list : List = mutableListOf()) { + fun setParts(parts: Int, list : List = mutableListOf(), isUser: Boolean) { this.parts = parts this.booleanList = list + this.isUser = isUser invalidate() } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/home/StatusActivity.kt b/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt similarity index 70% rename from app/src/main/java/ani/dantotsu/home/StatusActivity.kt rename to app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt index bb872def..0fe55cb1 100644 --- a/app/src/main/java/ani/dantotsu/home/StatusActivity.kt +++ b/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt @@ -1,6 +1,5 @@ -package ani.dantotsu.home +package ani.dantotsu.home.status -import android.content.Intent import android.os.Bundle import android.view.ViewGroup import android.view.animation.Animation @@ -8,12 +7,11 @@ import android.view.animation.AnimationUtils import androidx.appcompat.app.AppCompatActivity import androidx.core.view.updateLayoutParams import ani.dantotsu.R +import ani.dantotsu.connections.anilist.api.Activity import ani.dantotsu.databinding.ActivityStatusBinding import ani.dantotsu.initActivity -import ani.dantotsu.others.getSerialized import ani.dantotsu.themes.ThemeManager import ani.dantotsu.home.status.listener.StoriesCallback -import ani.dantotsu.media.Media import ani.dantotsu.navBarHeight import ani.dantotsu.profile.User import ani.dantotsu.settings.saving.PrefManager @@ -44,10 +42,21 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { slideOutLeft = AnimationUtils.loadAnimation(this, R.anim.slide_out_left) slideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right) - binding.stories.setStoriesList(activity[position].activity, this) + val watchedActivity = PrefManager.getCustomVal>("${activity[position].id}_activities", setOf()) + val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) + val startIndex = if ( startFrom > 0) startFrom else 0 + binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1) + } - + private fun findFirstNonMatch(watchedActivity: Set, activity: List): Int { + for (activityItem in activity) { + if (activityItem.id !in watchedActivity) { + return activity.indexOf(activityItem) + } + } + return -1 + } override fun onPause() { super.onPause() binding.stories.pause() @@ -68,8 +77,11 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { override fun onStoriesEnd() { position += 1 if (position < activity.size - 1) { + val watchedActivity = PrefManager.getCustomVal>("${activity[position].id}_activities", setOf()) + val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) + val startIndex= if ( startFrom > 0) startFrom else 0 binding.stories.startAnimation(slideOutLeft) - binding.stories.setStoriesList(activity[position].activity, this) + binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1) binding.stories.startAnimation(slideInRight) } else { finish() @@ -79,8 +91,11 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { override fun onStoriesStart() { position -= 1 if (position >= 0) { + val watchedActivity = PrefManager.getCustomVal>("${activity[position].id}_activities", setOf()) + val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) + val startIndex = if ( startFrom > 0) startFrom else 0 binding.stories.startAnimation(slideOutRight) - binding.stories.setStoriesList(activity[position].activity, this) + binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1) binding.stories.startAnimation(slideInLeft) } else { finish() diff --git a/app/src/main/java/ani/dantotsu/home/status/Stories.kt b/app/src/main/java/ani/dantotsu/home/status/Stories.kt index e4cba460..4fb40f1c 100644 --- a/app/src/main/java/ani/dantotsu/home/status/Stories.kt +++ b/app/src/main/java/ani/dantotsu/home/status/Stories.kt @@ -67,7 +67,7 @@ constructor( private lateinit var time: TextView private lateinit var infoText: TextView private lateinit var coverImage: ImageView - private var storyDuration: String = "4" + private var storyDuration: String = "6" private lateinit var animation: ObjectAnimator private var storyIndex: Int = 1 private var userClicked: Boolean = false @@ -110,9 +110,10 @@ constructor( } - fun setStoriesList(activityList: List, activity: FragmentActivity) { + fun setStoriesList(activityList: List, activity: FragmentActivity, startIndex : Int = 1) { this.activityList = activityList this.activ = activity + this.storyIndex = startIndex addLoadingViews(activityList) } @@ -234,6 +235,9 @@ constructor( } private fun showStory() { + if (storyIndex > 1) { + completeProgressBar(storyIndex - 1) + } val progressBar = findViewWithTag("story${storyIndex}") loadingView.visibility = View.VISIBLE animation = ObjectAnimator.ofInt(progressBar, "progress", 0, 100) @@ -292,9 +296,11 @@ constructor( } private fun completeProgressBar(storyIndex: Int) { - val lastProgressBar = findViewWithTag("story${storyIndex}") - lastProgressBar?.let { - it.progress = 100 + for (i in 1 until storyIndex + 1) { + val progressBar = findViewWithTag("story${i}") + progressBar?.let { + it.progress = 100 + } } } diff --git a/app/src/main/java/ani/dantotsu/home/UserStatus.kt b/app/src/main/java/ani/dantotsu/home/status/UserStatusAdapter.kt similarity index 82% rename from app/src/main/java/ani/dantotsu/home/UserStatus.kt rename to app/src/main/java/ani/dantotsu/home/status/UserStatusAdapter.kt index 7601f851..31ec069e 100644 --- a/app/src/main/java/ani/dantotsu/home/UserStatus.kt +++ b/app/src/main/java/ani/dantotsu/home/status/UserStatusAdapter.kt @@ -1,10 +1,11 @@ -package ani.dantotsu.home +package ani.dantotsu.home.status import android.content.Intent import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView +import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.databinding.ItemUserStatusBinding import ani.dantotsu.loadImage import ani.dantotsu.profile.ProfileActivity @@ -12,8 +13,8 @@ import ani.dantotsu.profile.User import ani.dantotsu.setAnimation import ani.dantotsu.settings.saving.PrefManager -class UserStatus(private val user: ArrayList) : - RecyclerView.Adapter() { +class UserStatusAdapter(private val user: ArrayList) : + RecyclerView.Adapter() { inner class UsersViewHolder(val binding: ItemUserStatusBinding) : RecyclerView.ViewHolder(binding.root) { @@ -58,12 +59,12 @@ class UserStatus(private val user: ArrayList) : setAnimation(b.root.context, b.root) val user = user[position] b.profileUserAvatar.loadImage(user.pfp) - b.profileUserName.text = user.name + b.profileUserName.text = if (Anilist.userid == user.id) "You" else user.name - val watchedActivityIds = + val watchedActivity = PrefManager.getCustomVal>("${user.id}_activities", setOf()) - val activityIdToStatusList = user.activity.map { watchedActivityIds.contains(it.id) } - b.profileUserStatusIndicator.setParts(user.activity.size, activityIdToStatusList) + val booleanList = user.activity.map { watchedActivity.contains(it.id) } + b.profileUserStatusIndicator.setParts(user.activity.size, booleanList, user.id == Anilist.userid) } diff --git a/app/src/main/res/layout/fragment_status.xml b/app/src/main/res/layout/fragment_status.xml index 2fdd3685..492bdbdb 100644 --- a/app/src/main/res/layout/fragment_status.xml +++ b/app/src/main/res/layout/fragment_status.xml @@ -195,7 +195,6 @@ android:ellipsize="marquee" android:fontFamily="@font/poppins_semi_bold" android:gravity="start" - android:lineSpacingExtra="-8sp" android:maxLines="3" android:paddingHorizontal="12dp" android:textAlignment="textStart"