From 590f4dc1bf051c53337402833fdbad275e1f0393 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 8 Apr 2018 16:52:23 +0200
Subject: [PATCH] Fix minor rendering issues, reformat source

---
 .../chat/messages/DayChangeItemDecoration.kt  |  9 +++--
 .../ui/chat/messages/MessageAdapter.kt        |  9 -----
 .../ui/chat/messages/MessageListFragment.kt   | 22 ++++++++----
 .../chat/messages/QuasselMessageRenderer.kt   | 35 +++++++++++++++++--
 app/src/main/res/layout/fragment_messages.xml |  2 +-
 .../res/layout/widget_chatmessage_plain.xml   | 10 +++---
 app/src/main/res/values/dimens.xml            |  2 +-
 .../quassel/syncables/IrcChannel.kt           |  2 ++
 8 files changed, 64 insertions(+), 27 deletions(-)

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
index e889eb159..8a1e46e04 100644
--- 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
@@ -3,6 +3,7 @@ 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
@@ -13,7 +14,10 @@ import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
 import org.threeten.bp.temporal.ChronoUnit
 
-class DayChangeItemDecoration(private val adapter: MessageAdapter) :
+class DayChangeItemDecoration(
+  private val adapter: MessageAdapter,
+  private val textSize: Int
+) :
   RecyclerView.ItemDecoration() {
   private val dayChangeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
   private val bounds = Rect()
@@ -86,6 +90,7 @@ class DayChangeItemDecoration(private val adapter: MessageAdapter) :
           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)
@@ -93,7 +98,7 @@ class DayChangeItemDecoration(private val adapter: MessageAdapter) :
         }
         v.setTag(R.id.tag_daychange, true)
         val layout = v.getTag(R.id.tag_daychange_layout) as View
-        outRect.set(0, layout.measuredHeight, 0, 10)
+        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 c3ed188c9..bdeb76b0d 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
@@ -8,7 +8,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ImageView
-import android.widget.Space
 import android.widget.TextView
 import butterknife.BindView
 import butterknife.ButterKnife
@@ -156,14 +155,6 @@ class MessageAdapter @Inject constructor(
     @JvmField
     var avatar: ImageView? = null
 
-    @BindView(R.id.avatar_container)
-    @JvmField
-    var avatarContainer: View? = null
-
-    @BindView(R.id.avatar_placeholder)
-    @JvmField
-    var avatarPlaceholder: Space? = null
-
     @BindView(R.id.name)
     @JvmField
     var name: TextView? = null
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 014abbacb..7b16060cc 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
@@ -13,6 +13,7 @@ import android.support.v7.widget.LinearLayoutManager
 import android.support.v7.widget.PopupMenu
 import android.support.v7.widget.RecyclerView
 import android.text.SpannableStringBuilder
+import android.util.TypedValue
 import android.view.*
 import butterknife.BindView
 import butterknife.ButterKnife
@@ -39,6 +40,7 @@ import org.threeten.bp.ZonedDateTime
 import org.threeten.bp.temporal.ChronoUnit
 import java.util.concurrent.TimeUnit
 import javax.inject.Inject
+import kotlin.math.roundToInt
 
 class MessageListFragment : ServiceBoundFragment() {
   @BindView(R.id.messages)
@@ -255,7 +257,6 @@ class MessageListFragment : ServiceBoundFragment() {
           val canScrollDown = recyclerView.canScrollVertically(1)
           val isScrollingDown = dy > 0
 
-          scrollDown.visibility = View.VISIBLE
           scrollDown.toggle(canScrollDown && isScrollingDown)
         }
 
@@ -388,16 +389,25 @@ class MessageListFragment : ServiceBoundFragment() {
         }
       }
     })
-    scrollDown.hide()
+
+    scrollDown.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
+      override fun onHidden(fab: FloatingActionButton) {
+        fab.visibility = View.VISIBLE
+      }
+    })
     scrollDown.setOnClickListener { messageList.scrollToPosition(0) }
 
     savedInstanceState?.run {
       messageList.layoutManager.onRestoreInstanceState(getParcelable(KEY_STATE_LIST))
     }
 
-    val avatar_size = resources.getDimensionPixelSize(R.dimen.avatar_size)
+    val avatarSize = TypedValue.applyDimension(
+      TypedValue.COMPLEX_UNIT_SP,
+      messageSettings.textSize * 2.5f,
+      requireContext().resources.displayMetrics
+    ).roundToInt()
 
-    val sizeProvider = FixedPreloadSizeProvider<String>(avatar_size, avatar_size)
+    val sizeProvider = FixedPreloadSizeProvider<String>(avatarSize, avatarSize)
 
     val preloadModelProvider = object : ListPreloader.PreloadModelProvider<String> {
       override fun getPreloadItems(position: Int) = adapter[position]?.avatarUrl?.let {
@@ -405,13 +415,13 @@ class MessageListFragment : ServiceBoundFragment() {
       } ?: mutableListOf()
 
       override fun getPreloadRequestBuilder(item: String) =
-        GlideApp.with(this@MessageListFragment).load(item).override(avatar_size)
+        GlideApp.with(this@MessageListFragment).load(item).override(avatarSize)
     }
 
     val preloader = RecyclerViewPreloader(Glide.with(this), preloadModelProvider, sizeProvider, 10)
 
     messageList.addOnScrollListener(preloader)
-    messageList.addItemDecoration(DayChangeItemDecoration(adapter))
+    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 0e585f94f..c9f61c45f 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
@@ -4,10 +4,14 @@ import android.content.Context
 import android.graphics.Typeface
 import android.graphics.drawable.ColorDrawable
 import android.graphics.drawable.LayerDrawable
+import android.os.Build
 import android.text.SpannableString
 import android.text.style.ForegroundColorSpan
 import android.text.style.StyleSpan
 import android.util.TypedValue
+import android.view.View
+import android.widget.FrameLayout
+import android.widget.LinearLayout
 import de.kuschku.libquassel.protocol.Message.MessageType.*
 import de.kuschku.libquassel.protocol.Message_Flag
 import de.kuschku.libquassel.protocol.Message_Type
@@ -29,6 +33,7 @@ import org.threeten.bp.ZoneId
 import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
 import javax.inject.Inject
+import kotlin.math.roundToInt
 
 class QuasselMessageRenderer @Inject constructor(
   private val messageSettings: MessageSettings,
@@ -92,14 +97,17 @@ class QuasselMessageRenderer @Inject constructor(
       }
     }
 
+    val avatarContainer = viewHolder.itemView.findViewById<View>(R.id.avatar_container)
+    val avatarPlaceholder = viewHolder.itemView.findViewById<View>(R.id.avatar_placeholder)
+
     if (messageSettings.useMonospace) {
       viewHolder.content?.typeface = if (viewHolder.content?.typeface?.isItalic == true) monospaceItalic else Typeface.MONOSPACE
       viewHolder.combined?.typeface = if (viewHolder.combined?.typeface?.isItalic == true) monospaceItalic else Typeface.MONOSPACE
     }
 
     viewHolder.avatar?.visibleIf(!isFollowUp)
-    viewHolder.avatarContainer?.visibleIf(messageSettings.showAvatars)
-    viewHolder.avatarPlaceholder?.visibleIf(messageSettings.showAvatars)
+    avatarContainer?.visibleIf(messageSettings.showAvatars)
+    avatarPlaceholder?.visibleIf(messageSettings.showAvatars)
     val separateLine = viewHolder.content != null && viewHolder.name != null && messageSettings.nicksOnNewLine
     viewHolder.name?.visibleIf(separateLine && !isFollowUp)
     viewHolder.content?.visibleIf(separateLine)
@@ -114,6 +122,29 @@ class QuasselMessageRenderer @Inject constructor(
     viewHolder.content?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     viewHolder.combined?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     viewHolder.name?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
+    val avatarSize = TypedValue.applyDimension(
+      TypedValue.COMPLEX_UNIT_SP,
+      textSize * 2.5f,
+      viewHolder.itemView.context.resources.displayMetrics
+    ).roundToInt()
+    viewHolder.avatar?.layoutParams =
+      FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, avatarSize)
+    avatarContainer?.layoutParams =
+      LinearLayout.LayoutParams(avatarSize, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
+        val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
+        setMargins(0, 0, margin, 0)
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+          marginEnd = margin
+        }
+      }
+    avatarPlaceholder?.layoutParams =
+      LinearLayout.LayoutParams(avatarSize, LinearLayout.LayoutParams.MATCH_PARENT).apply {
+        val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
+        setMargins(0, 0, margin, 0)
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+          marginEnd = margin
+        }
+      }
   }
 
   override fun bind(holder: MessageAdapter.QuasselMessageViewHolder, message: FormattedMessage,
diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml
index 2605c1812..ea9613948 100644
--- a/app/src/main/res/layout/fragment_messages.xml
+++ b/app/src/main/res/layout/fragment_messages.xml
@@ -38,4 +38,4 @@
     app:pressedTranslationZ="0dip"
     app:srcCompat="@drawable/ic_scroll_down" />
 
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 21d345076..4a9172a20 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -29,7 +29,7 @@
   <FrameLayout
     android:id="@+id/avatar_container"
     android:layout_width="@dimen/avatar_size"
-    android:layout_height="wrap_content"
+    android:layout_height="@dimen/avatar_size"
     android:layout_marginEnd="@dimen/message_horizontal"
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone"
@@ -37,12 +37,10 @@
 
     <ImageView
       android:id="@+id/avatar"
-      android:layout_width="@dimen/avatar_size"
-      android:layout_height="@dimen/avatar_size"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
       android:contentDescription="@string/label_avatar"
-      android:visibility="gone"
-      tools:src="@tools:sample/avatars"
-      tools:visibility="visible" />
+      tools:src="@tools:sample/avatars" />
   </FrameLayout>
 
   <LinearLayout
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index c185448bb..f998f14e0 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -14,5 +14,5 @@
   <dimen name="button_corner_radius">2dp</dimen>
 
   <dimen name="colorchooser_circlesize">56dp</dimen>
-  <dimen name="avatar_size">36sp</dimen>
+  <dimen name="avatar_size">35sp</dimen>
 </resources>
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
index 052d84618..6f3f03d39 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
@@ -173,6 +173,7 @@ class IrcChannel(
       setCodecForEncoding(charset)
     }
   }
+
   fun setCodecForEncoding(codec: Charset) {
     _codecForEncoding = codec
   }
@@ -183,6 +184,7 @@ class IrcChannel(
       setCodecForDecoding(charset)
     }
   }
+
   fun setCodecForDecoding(codec: Charset) {
     _codecForDecoding = codec
   }
-- 
GitLab