diff --git a/app/src/main/java/ani/dantotsu/home/StatusActivity.kt b/app/src/main/java/ani/dantotsu/home/StatusActivity.kt index 7da5211d..3c665fbd 100644 --- a/app/src/main/java/ani/dantotsu/home/StatusActivity.kt +++ b/app/src/main/java/ani/dantotsu/home/StatusActivity.kt @@ -1,5 +1,6 @@ package ani.dantotsu.home +import android.content.Intent import android.os.Bundle import android.view.ViewGroup import android.view.animation.Animation @@ -14,6 +15,7 @@ import ani.dantotsu.themes.ThemeManager import ani.dantotsu.home.status.listener.StoriesCallback import ani.dantotsu.navBarHeight import ani.dantotsu.profile.User +import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.statusBarHeight class StatusActivity : AppCompatActivity(), StoriesCallback { @@ -42,6 +44,7 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { slideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right) binding.stories.setStoriesList(activity[position].activity, this) + } override fun onPause() { diff --git a/app/src/main/java/ani/dantotsu/home/UserStatus.kt b/app/src/main/java/ani/dantotsu/home/UserStatus.kt index 325c4dda..1f6282a8 100644 --- a/app/src/main/java/ani/dantotsu/home/UserStatus.kt +++ b/app/src/main/java/ani/dantotsu/home/UserStatus.kt @@ -7,8 +7,10 @@ import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import ani.dantotsu.databinding.ItemUserStatusBinding import ani.dantotsu.loadImage +import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.User import ani.dantotsu.setAnimation +import ani.dantotsu.settings.saving.PrefManager import java.io.Serializable class UserStatus(private val user: ArrayList) : @@ -28,6 +30,17 @@ class UserStatus(private val user: ArrayList) : null ) } + itemView.setOnLongClickListener { + ContextCompat.startActivity( + itemView.context, + Intent( + itemView.context, + ProfileActivity::class.java + ).putExtra("userId", user[bindingAdapterPosition].id), + null + ) + true + } } } @@ -48,6 +61,10 @@ class UserStatus(private val user: ArrayList) : b.profileUserAvatar.loadImage(user.pfp) b.profileUserName.text = user.name + val watchedActivityIds = PrefManager.getCustomVal>("${user.id}_activities", setOf()) + val activityIdToStatusList = user.activity.map { watchedActivityIds.contains(it.id) } + b.profileUserStatusIndicator.setParts(user.activity.size, activityIdToStatusList) + } override fun getItemCount(): Int = user.size diff --git a/app/src/main/java/ani/dantotsu/home/status/CircleView.kt b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt new file mode 100644 index 00000000..d8b5e28e --- /dev/null +++ b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt @@ -0,0 +1,82 @@ +package ani.dantotsu.home.status + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Path +import android.util.AttributeSet +import android.util.TypedValue +import android.view.View + +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 booleanList = listOf() + private val paint: Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Paint.Style.STROKE + strokeWidth = 4f + } + + @SuppressLint("DrawAllocation") + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val centerX = width / 2f + val centerY = height / 2f + val radius = centerX.coerceAtMost(centerY) - paint.strokeWidth / 2 + + val totalGapAngle = gapAngle * (parts) + val totalAngle = 360f - totalGapAngle + val typedValue = TypedValue() + context.theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue, true) + val primaryColor = typedValue.data + fun setColor(int: Int) { + if (int < booleanList.size && booleanList[int]) { + + paint.color = Color.GRAY + } else { + + paint.color = primaryColor + } + canvas.drawPath(path, paint) + } + + if (parts == 1) { + // Draw a single arc covering the entire circle + path.addArc( + centerX - radius, + centerY - radius, + centerX + radius, + centerY + radius, + 0f, + 360f + ) + setColor(0) + } else { + val effectiveAngle = totalAngle / parts + + for (i in 0 until parts) { + val startAngle = i * (effectiveAngle + gapAngle) + path.reset() + path.addArc( + centerX - radius, + centerY - radius, + centerX + radius, + centerY + radius, + startAngle, + effectiveAngle + ) + setColor(i) + } + } + + } + + fun setParts(parts: Int, list : List = mutableListOf()) { + this.parts = parts + this.booleanList = list + invalidate() + } +} \ No newline at end of file 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 0d3599f5..fae1c31f 100644 --- a/app/src/main/java/ani/dantotsu/home/status/Stories.kt +++ b/app/src/main/java/ani/dantotsu/home/status/Stories.kt @@ -30,6 +30,7 @@ import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.User import ani.dantotsu.profile.UsersDialogFragment import ani.dantotsu.profile.activity.ActivityItemBuilder +import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.snackString import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -432,5 +433,8 @@ constructor( } true } + val key = "${story.user?.id}_activities" + val set = PrefManager.getCustomVal>(key, setOf()).plus((story.id)) + PrefManager.setCustomVal(key, set) } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_user_status.xml b/app/src/main/res/layout/item_user_status.xml index 60bac258..efdcfe6b 100644 --- a/app/src/main/res/layout/item_user_status.xml +++ b/app/src/main/res/layout/item_user_status.xml @@ -7,31 +7,44 @@ android:orientation="vertical" android:padding="8dp"> - + android:layout_height="wrap_content"> - + - + + + + + + +