diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt deleted file mode 100644 index a94a594e4784676cc58446f8106fc6a219f008f8..0000000000000000000000000000000000000000 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Quasseldroid - Quassel client for Android - * - * Copyright (c) 2018 Janne Koschinski - * Copyright (c) 2018 The Quassel Project - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 3 as published - * by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.quasseldroid.ui.chat.messages - -import android.graphics.Canvas -import android.graphics.Rect -import android.support.v7.widget.RecyclerView -import android.util.TypedValue -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import de.kuschku.quasseldroid.R -import org.threeten.bp.ZoneId -import org.threeten.bp.format.DateTimeFormatter -import org.threeten.bp.format.FormatStyle -import org.threeten.bp.temporal.ChronoUnit - -class DayChangeItemDecoration( - private val adapter: MessageAdapter, - private val textSize: Int -) : - RecyclerView.ItemDecoration() { - private val dayChangeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM) - private val bounds = Rect() - - override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { - c.save() - val left: Int - val right: Int - if (parent.clipToPadding) { - left = parent.paddingLeft - right = parent.width - parent.paddingRight - c.clipRect(left, parent.paddingTop, right, parent.height - parent.paddingBottom) - } else { - left = 0 - right = parent.width - } - - val childCount = parent.childCount - for (i in 0 until childCount) { - val child = parent.getChildAt(i) - if (child.getTag(R.id.tag_daychange) == true) { - parent.getDecoratedBoundsWithMargins(child, bounds) - val bottom = bounds.bottom + Math.round(child.translationY) - val top = bounds.top + Math.round(child.translationY) - val layout = child.getTag(R.id.tag_daychange_layout) as View - c.save() - c.clipRect(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat()) - c.translate(left.toFloat(), top.toFloat()) - layout.draw(c) - c.restore() - } - } - c.restore() - } - - private fun fixLayoutSize(view: View, parent: ViewGroup) { - val widthSpec = View.MeasureSpec.makeMeasureSpec( - parent.width, - View.MeasureSpec.EXACTLY - ) - val heightSpec = View.MeasureSpec.makeMeasureSpec( - parent.height, - View.MeasureSpec.UNSPECIFIED - ) - - val childWidthSpec = ViewGroup.getChildMeasureSpec( - widthSpec, - parent.paddingLeft + parent.paddingRight, - view.layoutParams.width - ) - val childHeightSpec = ViewGroup.getChildMeasureSpec( - heightSpec, - parent.paddingTop + parent.paddingBottom, - view.layoutParams.height - ) - - view.measure(childWidthSpec, childHeightSpec) - view.layout(0, 0, view.measuredWidth, view.measuredHeight) - } - - override fun getItemOffsets(outRect: Rect, v: View, parent: RecyclerView, - state: RecyclerView.State) { - adapter[parent.getChildAdapterPosition(v)]?.let { - if (it.hasDayChange) { - if (v.getTag(R.id.tag_daychange_layout) == null) { - val layout = LayoutInflater.from(parent.context).inflate( - R.layout.widget_chatmessage_daychange, parent, false - ) - val content = layout.findViewById<TextView>(R.id.combined) - content?.text = dayChangeFormatter.format( - it.content.time.atZone(ZoneId.systemDefault()).truncatedTo(ChronoUnit.DAYS) - ) - content?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize.toFloat()) - fixLayoutSize(layout, parent) - - v.setTag(R.id.tag_daychange_layout, layout) - v.setTag(R.id.tag_daychange_content, content) - } - v.setTag(R.id.tag_daychange, true) - val layout = v.getTag(R.id.tag_daychange_layout) as View - outRect.set(0, layout.measuredHeight, 0, 0) - } else { - v.setTag(R.id.tag_daychange, false) - } - } - } -} diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt index 7e5716d4fd46d10d549f78092fb12d7ced180650..2593a6037a6974a3584a7570c40f221a4e91e418 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt @@ -19,6 +19,7 @@ package de.kuschku.quasseldroid.ui.chat.messages +import android.annotation.SuppressLint import android.arch.paging.PagedListAdapter import android.support.v7.util.DiffUtil import android.support.v7.widget.RecyclerView @@ -38,6 +39,7 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.util.helper.getOrPut import de.kuschku.quasseldroid.util.helper.loadAvatars +import de.kuschku.quasseldroid.util.helper.visibleIf import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod import de.kuschku.quasseldroid.util.ui.DoubleClickHelper import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage @@ -161,6 +163,7 @@ class MessageAdapter @Inject constructor( null } + @SuppressLint("ClickableViewAccessibility") class QuasselMessageViewHolder( itemView: View, clickListener: ((FormattedMessage) -> Unit)? = null, @@ -169,6 +172,18 @@ class MessageAdapter @Inject constructor( expansionListener: ((QuasselDatabase.MessageData) -> Unit)? = null, movementMethod: BetterLinkMovementMethod ) : RecyclerView.ViewHolder(itemView) { + @BindView(R.id.daychange_container) + @JvmField + var daychangeContainer: View? = null + + @BindView(R.id.daychange) + @JvmField + var daychange: TextView? = null + + @BindView(R.id.message_container) + @JvmField + var messageContainer: View? = null + @BindView(R.id.time_left) @JvmField var timeLeft: TextView? = null @@ -199,31 +214,23 @@ class MessageAdapter @Inject constructor( private var message: FormattedMessage? = null private var original: QuasselDatabase.MessageData? = null - private var selectable: Boolean = false - private var clickable: Boolean = false private val localClickListener = View.OnClickListener { - if (clickable) { - message?.let { - clickListener?.invoke(it) - } + message?.let { + clickListener?.invoke(it) } } private val localLongClickListener = View.OnLongClickListener { - if (selectable) { - message?.let { - longClickListener?.invoke(it) - } + message?.let { + longClickListener?.invoke(it) } true } - private val localDoubleClickListener = { - if (clickable) { - original?.let { - doubleClickListener?.invoke(it) - } + private val localDoubleClickListener: () -> Unit = { + original?.let { + doubleClickListener?.invoke(it) } } @@ -232,20 +239,17 @@ class MessageAdapter @Inject constructor( content?.movementMethod = movementMethod combined?.movementMethod = movementMethod - itemView.setOnClickListener(localClickListener) - itemView.setOnLongClickListener(localLongClickListener) - itemView.setOnTouchListener(DoubleClickHelper(itemView).apply { + messageContainer?.setOnClickListener(localClickListener) + messageContainer?.setOnLongClickListener(localLongClickListener) + messageContainer?.setOnTouchListener(DoubleClickHelper(itemView).apply { this.doubleClickListener = localDoubleClickListener }) } fun bind(message: FormattedMessage, original: QuasselDatabase.MessageData, - selectable: Boolean = true, clickable: Boolean = true, - messageSettings: MessageSettings) { + hasDayChange: Boolean, messageSettings: MessageSettings) { this.message = message this.original = original - this.selectable = selectable - this.clickable = clickable timeLeft?.text = message.time timeRight?.text = message.time @@ -254,7 +258,10 @@ class MessageAdapter @Inject constructor( content?.text = message.content combined?.text = message.combined - this.itemView.isSelected = message.isSelected + this.messageContainer?.isSelected = message.isSelected + + if (hasDayChange) daychange?.text = message.dayChange + daychangeContainer?.visibleIf(hasDayChange) avatar?.loadAvatars(message.avatarUrls, message.fallbackDrawable, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt index 13f2fd7873e313d1176b3f423655949828d013f0..465453b10004a260249a31e1daf6203db25c31af 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt @@ -420,7 +420,6 @@ class MessageListFragment : ServiceBoundFragment() { val preloader = RecyclerViewPreloader(Glide.with(this), preloadModelProvider, sizeProvider, 10) messageList.addOnScrollListener(preloader) - messageList.addItemDecoration(DayChangeItemDecoration(adapter, messageSettings.textSize)) messageList.addItemDecoration(MarkerLineItemDecoration( adapter, requireContext(), R.dimen.markerline_height, R.attr.colorMarkerLine )) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt index 4b80ab9b43376aa2516591749bdb810122f94b3b..c5805a0a141524be59f3ab29723502c8971d47e2 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt @@ -48,6 +48,7 @@ import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage import org.threeten.bp.ZoneId import org.threeten.bp.format.DateTimeFormatter import org.threeten.bp.format.FormatStyle +import org.threeten.bp.temporal.ChronoUnit import javax.inject.Inject import kotlin.math.roundToInt @@ -183,9 +184,10 @@ class QuasselMessageRenderer @Inject constructor( override fun bind(holder: MessageAdapter.QuasselMessageViewHolder, message: FormattedMessage, original: QuasselDatabase.MessageData) = - original.type.hasFlag(DayChange).let { isDayChange -> - holder.bind(message, original, !isDayChange, !isDayChange, messageSettings) - } + holder.bind(message, + original, + hasDayChange = message.hasDayChange, + messageSettings = messageSettings) override fun render(context: Context, message: DisplayMessage): FormattedMessage { val avatarSize = TypedValue.applyDimension( @@ -225,6 +227,7 @@ class QuasselMessageRenderer @Inject constructor( FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), name = nick, content = content, combined = SpannableStringBuilder().apply { @@ -238,6 +241,7 @@ class QuasselMessageRenderer @Inject constructor( if (messageSettings.squareAvatars) it.buildRect(initial, senderColor) else it.buildRound(initial, senderColor) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -246,12 +250,14 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Action -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = SpanFormatter.format( context.getString(R.string.message_format_action), contentFormatter.formatPrefix(message.content.senderPrefixes), contentFormatter.formatNick(message.content.sender, self, highlight, false), contentFormatter.formatContent(message.content.content, highlight) ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -259,12 +265,14 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Notice -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = SpanFormatter.format( context.getString(R.string.message_format_notice), contentFormatter.formatPrefix(message.content.senderPrefixes), contentFormatter.formatNick(message.content.sender, self, highlight, false), contentFormatter.formatContent(message.content.content, highlight) ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -274,6 +282,7 @@ class QuasselMessageRenderer @Inject constructor( FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = if (nickSelf) { SpanFormatter.format( context.getString(R.string.message_format_nick_self), @@ -289,6 +298,7 @@ class QuasselMessageRenderer @Inject constructor( contentFormatter.formatNick(message.content.content, nickSelf, highlight, false) ) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -297,12 +307,14 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Mode -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = SpanFormatter.format( context.getString(R.string.message_format_mode), message.content.content, contentFormatter.formatPrefix(message.content.senderPrefixes), contentFormatter.formatNick(message.content.sender, self, highlight, false) ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -310,6 +322,7 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Join -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = SpanFormatter.format( context.getString(R.string.message_format_join), contentFormatter.formatPrefix(message.content.senderPrefixes), @@ -319,6 +332,7 @@ class QuasselMessageRenderer @Inject constructor( messageSettings.showHostmaskActions), message.content.content ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -326,6 +340,7 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Part -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = if (message.content.content.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_part_1), @@ -346,6 +361,7 @@ class QuasselMessageRenderer @Inject constructor( contentFormatter.formatContent(message.content.content, highlight) ) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -353,6 +369,7 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Quit -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = if (message.content.content.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_quit_1), @@ -373,6 +390,7 @@ class QuasselMessageRenderer @Inject constructor( contentFormatter.formatContent(message.content.content, highlight) ) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -382,6 +400,7 @@ class QuasselMessageRenderer @Inject constructor( FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = if (reason.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_kick_1), @@ -404,6 +423,7 @@ class QuasselMessageRenderer @Inject constructor( contentFormatter.formatContent(reason, highlight) ) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -414,6 +434,7 @@ class QuasselMessageRenderer @Inject constructor( FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = if (reason.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_kill_1), @@ -436,6 +457,7 @@ class QuasselMessageRenderer @Inject constructor( contentFormatter.formatContent(reason, highlight) ) }, + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -448,9 +470,11 @@ class QuasselMessageRenderer @Inject constructor( FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = context.resources.getQuantityString( R.plurals.message_netsplit_join, usersAffected, server1, server2, usersAffected ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -460,25 +484,27 @@ class QuasselMessageRenderer @Inject constructor( val split = message.content.content.split("#:#") val (server1, server2) = split.last().split(' ') val usersAffected = split.size - 1 - val it = FormattedMessage( + FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = context.resources.getQuantityString( R.plurals.message_netsplit_quit, usersAffected, server1, server2, usersAffected ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected ) - println("hi") - it } Message_Type.Server, Message_Type.Info, Message_Type.Error -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = contentFormatter.formatContent(message.content.content, highlight), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -486,7 +512,9 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.Topic -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = contentFormatter.formatContent(message.content.content, highlight), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected @@ -494,7 +522,9 @@ class QuasselMessageRenderer @Inject constructor( Message_Type.DayChange -> FormattedMessage( id = message.content.messageId, time = "", + dayChange = formatDayChange(message), combined = dateFormatter.format(message.content.time.atZone(zoneId)), + hasDayChange = message.hasDayChange, isMarkerLine = false, isExpanded = false, isSelected = false @@ -503,6 +533,7 @@ class QuasselMessageRenderer @Inject constructor( else -> FormattedMessage( id = message.content.messageId, time = timeFormatter.format(message.content.time.atZone(zoneId)), + dayChange = formatDayChange(message), combined = SpanFormatter.format( "[%d] %s%s: %s", message.content.type.toInt(), @@ -513,10 +544,16 @@ class QuasselMessageRenderer @Inject constructor( messageSettings.showHostmaskActions), message.content.content ), + hasDayChange = message.hasDayChange, isMarkerLine = message.isMarkerLine, isExpanded = message.isExpanded, isSelected = message.isSelected ) } } + + private fun formatDayChange( + message: DisplayMessage) = + if (message.hasDayChange) dateFormatter.format(message.content.time.atZone(zoneId).truncatedTo( + ChronoUnit.DAYS)) else null } diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml index 273af4dee05972de41ef27658864064d31e1340d..19bfb06f2a49b2a5daa3ad557af87a2ef3c7d354 100644 --- a/app/src/main/res/layout/widget_chatmessage_action.xml +++ b/app/src/main/res/layout/widget_chatmessage_action.xml @@ -21,56 +21,66 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:orientation="vertical" + tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" + <include layout="@layout/widget_chatmessage_daychange" /> + + <LinearLayout + android:id="@+id/message_container" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" /> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <Space - android:id="@+id/avatar_placeholder" - android:layout_width="@dimen/avatar_size" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" /> + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" - style="@style/Widget.RtlConformTextView" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundAction" - android:textStyle="italic" - tools:text="@sample/messages.json/data/message" /> + <Space + android:id="@+id/avatar_placeholder" + android:layout_width="@dimen/avatar_size" + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" /> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundAction" + android:textStyle="italic" + tools:text="@sample/messages.json/data/message" /> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_daychange.xml b/app/src/main/res/layout/widget_chatmessage_daychange.xml index 810e18d5ebb889c19510798dd0fa534f35aa7cc1..4f79b695539827461d21ff01c962da6768312839 100644 --- a/app/src/main/res/layout/widget_chatmessage_daychange.xml +++ b/app/src/main/res/layout/widget_chatmessage_daychange.xml @@ -19,6 +19,7 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/daychange_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/backgroundMenuItem" @@ -42,7 +43,7 @@ android:paddingTop="@dimen/message_vertical_daychange"> <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" + android:id="@+id/daychange" style="@style/Widget.RtlConformTextView" android:layout_width="0dip" android:layout_height="wrap_content" diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml index 36d0a2c9bad685784bca9901c6c855d9eede9ccf..10e125844210c533f48f5938a6fe5ffb43411e2d 100644 --- a/app/src/main/res/layout/widget_chatmessage_error.xml +++ b/app/src/main/res/layout/widget_chatmessage_error.xml @@ -21,55 +21,65 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:orientation="vertical" + tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" + <include layout="@layout/widget_chatmessage_daychange" /> + + <LinearLayout + android:id="@+id/message_container" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" /> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <Space - android:id="@+id/avatar_placeholder" - android:layout_width="@dimen/avatar_size" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" /> + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" - style="@style/Widget.RtlConformTextView" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundError" - tools:text="@sample/messages.json/data/message" /> + <Space + android:id="@+id/avatar_placeholder" + android:layout_width="@dimen/avatar_size" + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" /> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundError" + tools:text="@sample/messages.json/data/message" /> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml index 29b60b282e07c977283e38ebd78ac18adf945a6d..6942d08c32a3ea3541135794923a99956280473c 100644 --- a/app/src/main/res/layout/widget_chatmessage_info.xml +++ b/app/src/main/res/layout/widget_chatmessage_info.xml @@ -21,56 +21,66 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:orientation="vertical" + tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" + <include layout="@layout/widget_chatmessage_daychange" /> + + <LinearLayout + android:id="@+id/message_container" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" /> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <Space - android:id="@+id/avatar_placeholder" - android:layout_width="@dimen/avatar_size" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" /> + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" - style="@style/Widget.RtlConformTextView" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - tools:text="@sample/messages.json/data/message" /> + <Space + android:id="@+id/avatar_placeholder" + android:layout_width="@dimen/avatar_size" + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" /> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + tools:text="@sample/messages.json/data/message" /> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml index 0e0f13bf1dc6c059f38daf2953c08013582c1a5b..f54b355181c2fd8c9d342dff90b4a3b73948cf69 100644 --- a/app/src/main/res/layout/widget_chatmessage_notice.xml +++ b/app/src/main/res/layout/widget_chatmessage_notice.xml @@ -21,55 +21,65 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:orientation="vertical" + tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" + <include layout="@layout/widget_chatmessage_daychange" /> + + <LinearLayout + android:id="@+id/message_container" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" /> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <Space - android:id="@+id/avatar_placeholder" - android:layout_width="@dimen/avatar_size" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" /> + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" - style="@style/Widget.RtlConformTextView" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundNotice" - tools:text="@sample/messages.json/data/message" /> + <Space + android:id="@+id/avatar_placeholder" + android:layout_width="@dimen/avatar_size" + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" /> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundNotice" + tools:text="@sample/messages.json/data/message" /> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml index 775c5a37535283a96e613dcfd49e46142eb73bd9..41e70526a9804595e3699d2e549a87c6a4047df7 100644 --- a/app/src/main/res/layout/widget_chatmessage_plain.xml +++ b/app/src/main/res/layout/widget_chatmessage_plain.xml @@ -21,133 +21,143 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall" + android:orientation="vertical" tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" - tools:visibility="gone" /> - - <FrameLayout - android:id="@+id/avatar_container" - android:layout_width="@dimen/avatar_size" - android:layout_height="@dimen/avatar_size" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" - tools:visibility="visible"> - - <ImageView - android:id="@+id/avatar" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:contentDescription="@string/label_avatar" - tools:src="@tools:sample/avatars" /> - </FrameLayout> + <include layout="@layout/widget_chatmessage_daychange" /> <LinearLayout + android:id="@+id/message_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="fill_vertical" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <TextView - android:id="@+id/name" - style="@style/Widget.RtlConformTextView" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:ellipsize="marquee" - android:singleLine="true" - android:textColor="?attr/colorForeground" - android:visibility="gone" - tools:text="@sample/messages.json/data/sender" - tools:visibility="visible" /> - - <Space - android:layout_width="4dp" - android:layout_height="0dip" /> - - <TextView - android:id="@+id/realname" - style="@style/Widget.RtlConformTextView" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:ellipsize="marquee" - android:singleLine="true" - android:textColor="?attr/colorForegroundSecondary" - android:visibility="gone" - tools:text="@sample/messages.json/data/sender" - tools:visibility="visible" /> - </LinearLayout> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> + + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" + tools:visibility="gone" /> + + <FrameLayout + android:id="@+id/avatar_container" + android:layout_width="@dimen/avatar_size" + android:layout_height="@dimen/avatar_size" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" + tools:visibility="visible"> + + <ImageView + android:id="@+id/avatar" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/label_avatar" + tools:src="@tools:sample/avatars" /> + </FrameLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center_vertical|fill_horizontal" - android:orientation="horizontal"> + android:layout_gravity="fill_vertical" + android:orientation="vertical"> <LinearLayout - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content"> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/content" + <TextView + android:id="@+id/name" style="@style/Widget.RtlConformTextView" - android:layout_width="match_parent" + android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:ellipsize="marquee" + android:singleLine="true" android:textColor="?attr/colorForeground" android:visibility="gone" - tools:text="@sample/messages.json/data/content" + tools:text="@sample/messages.json/data/sender" tools:visibility="visible" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" + <Space + android:layout_width="4dp" + android:layout_height="0dip" /> + + <TextView + android:id="@+id/realname" style="@style/Widget.RtlConformTextView" - android:layout_width="match_parent" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="?attr/colorForeground" - tools:text="@sample/messages.json/data/message" - tools:visibility="gone" /> - + android:layout_gravity="center_vertical" + android:ellipsize="marquee" + android:singleLine="true" + android:textColor="?attr/colorForegroundSecondary" + android:visibility="gone" + tools:text="@sample/messages.json/data/sender" + tools:visibility="visible" /> </LinearLayout> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + android:layout_gravity="center_vertical|fill_horizontal" + android:orientation="horizontal"> + + <LinearLayout + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical"> + + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/content" + style="@style/Widget.RtlConformTextView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="?attr/colorForeground" + android:visibility="gone" + tools:text="@sample/messages.json/data/content" + tools:visibility="visible" /> + + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textColor="?attr/colorForeground" + tools:text="@sample/messages.json/data/message" + tools:visibility="gone" /> + + </LinearLayout> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> </LinearLayout> + </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml index fb0ef16e226786d4529fb6ff64502ca6961e526e..bda613b2a35a80ef8e5cbdf377db51138582e9d1 100644 --- a/app/src/main/res/layout/widget_chatmessage_server.xml +++ b/app/src/main/res/layout/widget_chatmessage_server.xml @@ -21,55 +21,65 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/backgroundMenuItem" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:orientation="vertical" + tools:showIn="@layout/fragment_messages"> - <TextView - android:id="@+id/time_left" - android:layout_width="wrap_content" + <include layout="@layout/widget_chatmessage_daychange" /> + + <LinearLayout + android:id="@+id/message_container" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="@sample/messages.json/data/time" /> + android:background="?attr/backgroundMenuItem" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <Space - android:id="@+id/avatar_placeholder" - android:layout_width="@dimen/avatar_size" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:visibility="gone" /> + <TextView + android:id="@+id/time_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="@sample/messages.json/data/time" /> - <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView - android:id="@+id/combined" - style="@style/Widget.RtlConformTextView" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundSecondary" - tools:text="@sample/messages.json/data/message" /> + <Space + android:id="@+id/avatar_placeholder" + android:layout_width="@dimen/avatar_size" + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:visibility="gone" /> - <TextView - android:id="@+id/time_right" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top" - android:layout_marginLeft="@dimen/message_horizontal" - android:layout_marginStart="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:textStyle="italic" - android:visibility="gone" - tools:text="@sample/messages.json/data/time" - tools:textSize="11.9sp" - tools:visibility="visible" /> + <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView + android:id="@+id/combined" + style="@style/Widget.RtlConformTextView" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundSecondary" + tools:text="@sample/messages.json/data/message" /> + + <TextView + android:id="@+id/time_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginLeft="@dimen/message_horizontal" + android:layout_marginStart="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:text="@sample/messages.json/data/time" + tools:textSize="11.9sp" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt index 2a9088b19f339ec62ab24751dfdf417116c5dcb5..11f28b43c9ae06416bc7c95f067fad37566d60df 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt @@ -25,12 +25,14 @@ import de.kuschku.libquassel.protocol.MsgId class FormattedMessage( val id: MsgId, val time: CharSequence, + val dayChange: CharSequence? = null, val name: CharSequence? = null, val content: CharSequence? = null, val combined: CharSequence, val fallbackDrawable: Drawable? = null, val realName: CharSequence? = null, val avatarUrls: List<Avatar> = emptyList(), + val hasDayChange: Boolean, val isSelected: Boolean, val isExpanded: Boolean, val isMarkerLine: Boolean