Notifications: Show 'reply to' status text

This commit is contained in:
Karol Kosek 2020-10-11 20:43:58 +02:00 committed by fruye
parent fe83987f90
commit 4bddbb0d50
3 changed files with 43 additions and 1 deletions

View File

@ -95,6 +95,8 @@ interface NotificationActionListener {
* @param position The position of the status in the list.
*/
fun onNotificationContentCollapsedChange(isCollapsed: Boolean, position: Int)
fun onViewReplyTo(position: Int)
}
class NotificationsPagingAdapter(

View File

@ -18,6 +18,7 @@
package com.keylesspalace.tusky.components.notifications
import android.content.Context
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.Typeface
import android.graphics.drawable.Drawable
@ -147,6 +148,7 @@ internal class StatusNotificationViewHolder(
binding.notificationContent.visibility = if (show) View.VISIBLE else View.GONE
binding.notificationStatusAvatar.visibility = if (show) View.VISIBLE else View.GONE
binding.notificationNotificationAvatar.visibility = if (show) View.VISIBLE else View.GONE
binding.notificationReplyInfo.visibility = if (show) View.VISIBLE else View.GONE
}
private fun setDisplayName(name: String, emojis: List<Emoji>?, animateEmojis: Boolean) {
@ -324,6 +326,7 @@ internal class StatusNotificationViewHolder(
if (statusViewData.isExpanded) View.GONE else View.VISIBLE
}
setupContentAndSpoiler(listener, statusViewData, animateEmojis)
setupReplyInfo(statusViewData)
}
}
@ -388,6 +391,26 @@ internal class StatusNotificationViewHolder(
binding.notificationContentWarningDescription.text = emojifiedContentWarning
}
private fun setupReplyInfo(statusViewData: StatusViewData.Concrete) {
val replyToAccountAcct = statusViewData.inReplyToAccountAcct
if (replyToAccountAcct == null) {
binding.notificationReplyInfo.visibility = View.GONE
return
}
val context = binding.notificationReplyInfo.context
if (!statusViewData.parentVisible)
binding.notificationReplyInfo.paintFlags = binding.notificationReplyInfo.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
else
binding.notificationReplyInfo.paintFlags = binding.notificationReplyInfo.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
binding.notificationReplyInfo.text = context.getString(R.string.status_replied_to_format, replyToAccountAcct)
binding.notificationReplyInfo.setOnClickListener {
if (bindingAdapterPosition != RecyclerView.NO_POSITION) {
notificationActionListener.onViewReplyTo(bindingAdapterPosition)
}
}
binding.notificationReplyInfo.visibility = View.VISIBLE
}
companion object {
private val COLLAPSE_INPUT_FILTER = arrayOf<InputFilter>(SmartLengthInputFilter)
private val NO_INPUT_FILTER = arrayOfNulls<InputFilter>(0)

View File

@ -92,6 +92,23 @@
app:layout_constraintTop_toTopOf="@+id/status_username"
tools:text="13:37" />
<TextView
android:id="@+id/notification_reply_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:drawablePadding="6dp"
android:layout_marginTop="2dp"
android:layout_marginStart="14dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?android:textColorTertiary"
android:textSize="?attr/status_text_medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/notification_status_avatar"
app:layout_constraintTop_toBottomOf="@id/status_display_name"
app:drawableStartCompat="@drawable/ic_reply_18dp"
tools:text="Reply to a1batross" />
<com.keylesspalace.tusky.view.ClickableSpanTextView
android:id="@+id/notification_content_warning_description"
android:layout_width="0dp"
@ -103,7 +120,7 @@
android:textSize="?attr/status_text_medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/notification_status_avatar"
app:layout_constraintTop_toBottomOf="@id/status_display_name"
app:layout_constraintTop_toBottomOf="@id/notification_reply_info"
tools:text="Example CW text" />
<Button