From 93632c36db6590506b514885cd2f3b4d4085f85d Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sat, 7 Apr 2018 00:28:18 +0200
Subject: [PATCH] Minor cleanup

---
 .../quasseldroid/ui/chat/ChatActivity.kt      | 51 +++++-----
 .../quasseldroid/ui/chat/input/Editor.kt      | 33 ++++---
 .../ui/chat/input/MessageHistoryAdapter.kt    | 12 ++-
 .../ui/chat/messages/MessageAdapter.kt        | 29 ++++--
 .../ui/chat/messages/MessageListFragment.kt   | 96 +++++++++----------
 .../ui}/RipplePassthroughTextView.kt          |  2 +-
 .../res/layout/widget_chatmessage_action.xml  |  2 +-
 .../layout/widget_chatmessage_daychange.xml   |  2 +-
 .../res/layout/widget_chatmessage_error.xml   |  2 +-
 .../res/layout/widget_chatmessage_info.xml    |  2 +-
 .../res/layout/widget_chatmessage_notice.xml  |  2 +-
 .../res/layout/widget_chatmessage_plain.xml   |  4 +-
 .../res/layout/widget_chatmessage_server.xml  |  2 +-
 13 files changed, 131 insertions(+), 108 deletions(-)
 rename app/src/main/java/de/kuschku/quasseldroid/{ui/chat/messages => util/ui}/RipplePassthroughTextView.kt (94%)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index 938998a31..ad38ab225 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -115,9 +115,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
 
     editor = Editor(
       this,
-      viewModel.rawAutoCompleteData,
-      viewModel.autoCompleteData,
-      viewModel.lastWord,
+      viewModel,
       findViewById(R.id.chatline),
       findViewById(R.id.send),
       findViewById(R.id.tab_complete),
@@ -129,35 +127,38 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       ircFormatDeserializer,
       appearanceSettings,
       autoCompleteSettings,
-      messageSettings,
-      { lines ->
-        viewModel.session { sessionOptional ->
-          val session = sessionOptional.orNull()
-          viewModel.buffer { bufferId ->
-            session?.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
-              val output = mutableListOf<IAliasManager.Command>()
-              for ((stripped, formatted) in lines) {
-                viewModel.addRecentlySentMessage(stripped)
-                session.aliasManager?.processInput(bufferInfo, formatted, output)
-              }
-              for (command in output) {
-                session.rpcHandler?.sendInput(command.buffer, command.message)
-              }
+      messageSettings
+    )
+
+    editor.setOnSendListener { lines ->
+      viewModel.session { sessionOptional ->
+        val session = sessionOptional.orNull()
+        viewModel.buffer { bufferId ->
+          session?.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
+            val output = mutableListOf<IAliasManager.Command>()
+            for ((stripped, formatted) in lines) {
+              viewModel.addRecentlySentMessage(stripped)
+              session.aliasManager?.processInput(bufferInfo, formatted, output)
+            }
+            for (command in output) {
+              session.rpcHandler?.sendInput(command.buffer, command.message)
             }
           }
         }
-      },
-      { expanded ->
-        historyPanel.panelState = if (expanded)
-          SlidingUpPanelLayout.PanelState.EXPANDED
-        else
-          SlidingUpPanelLayout.PanelState.COLLAPSED
       }
-    )
+    }
+
+    editor.setOnPanelStateListener { expanded ->
+      historyPanel.panelState = if (expanded)
+        SlidingUpPanelLayout.PanelState.EXPANDED
+      else
+        SlidingUpPanelLayout.PanelState.COLLAPSED
+    }
 
     msgHistory.itemAnimator = DefaultItemAnimator()
     msgHistory.layoutManager = LinearLayoutManager(this)
-    val messageHistoryAdapter = MessageHistoryAdapter { text ->
+    val messageHistoryAdapter = MessageHistoryAdapter()
+    messageHistoryAdapter.setOnItemClickListener { text ->
       editor.formatHandler.replace(text)
       historyPanel.panelState = SlidingUpPanelLayout.PanelState.COLLAPSED
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
index cbb03c826..cbcbd45ec 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
@@ -19,9 +19,7 @@ import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.libquassel.protocol.Buffer_Type
 import de.kuschku.libquassel.quassel.syncables.IrcChannel
-import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.util.IrcUserUtils
-import de.kuschku.libquassel.util.Optional
 import de.kuschku.libquassel.util.flag.hasFlag
 import de.kuschku.libquassel.util.helpers.value
 import de.kuschku.quasseldroid.R
@@ -34,18 +32,16 @@ import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.ui.ColorChooserDialog
 import de.kuschku.quasseldroid.util.ui.EditTextSelectionChange
 import de.kuschku.quasseldroid.util.ui.TextDrawable
+import de.kuschku.quasseldroid.viewmodel.QuasselViewModel
 import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferStatus
-import io.reactivex.Observable
 import io.reactivex.subjects.BehaviorSubject
 
 class Editor(
   // Contexts
   activity: AppCompatActivity,
   // LiveData
-  private val autoCompleteDataRaw: Observable<Triple<Optional<ISession>, Int, Pair<String, IntRange>>>,
-  private val autoCompleteData: Observable<Pair<String, List<AutoCompleteItem>>>,
-  lastWordContainer: BehaviorSubject<Observable<Pair<String, IntRange>>>,
+  private val viewModel: QuasselViewModel,
   // Views
   val chatline: EditTextSelectionChange,
   send: AppCompatImageButton,
@@ -57,14 +53,23 @@ class Editor(
   // Settings
   private val appearanceSettings: AppearanceSettings,
   private val autoCompleteSettings: AutoCompleteSettings,
-  private val messageSettings: MessageSettings,
+  private val messageSettings: MessageSettings
   // Listeners
-  private val sendCallback: (Sequence<Pair<CharSequence, String>>) -> Unit,
-  private val panelStateCallback: (Boolean) -> Unit
 ) : ActionMenuView.OnMenuItemClickListener, Toolbar.OnMenuItemClickListener {
+  private var sendListener: ((Sequence<Pair<CharSequence, String>>) -> Unit)? = null
+  private var panelStateListener: ((Boolean) -> Unit)? = null
+
+  fun setOnSendListener(listener: (Sequence<Pair<CharSequence, String>>) -> Unit) {
+    this.sendListener = listener
+  }
+
+  fun setOnPanelStateListener(listener: (Boolean) -> Unit) {
+    this.panelStateListener = listener
+  }
+
   override fun onMenuItemClick(item: MenuItem?) = when (item?.itemId) {
     R.id.action_input_history -> {
-      panelStateCallback(true)
+      panelStateListener?.invoke(true)
       true
     }
     else                      -> false
@@ -171,7 +176,7 @@ class Editor(
       formatHandler::autoComplete
     )
 
-    autoCompleteData.toLiveData().observe(activity, Observer {
+    viewModel.autoCompleteData.toLiveData().observe(activity, Observer {
       val query = it?.first ?: ""
       val shouldShowResults = (autoCompleteSettings.auto && query.length >= 3) ||
                               (autoCompleteSettings.prefix && query.startsWith('@')) ||
@@ -262,7 +267,7 @@ class Editor(
       autoComplete()
     }
 
-    lastWordContainer.onNext(lastWord)
+    viewModel.lastWord.onNext(lastWord)
 
     activity.menuInflater.inflate(R.menu.editor, formattingToolbar.menu)
     formattingToolbar.menu.retint(activity)
@@ -465,7 +470,7 @@ class Editor(
 
   private fun send() {
     if (rawText.isNotBlank()) {
-      sendCallback(strippedText.lineSequence().zip(formattedText))
+      sendListener?.invoke(strippedText.lineSequence().zip(formattedText))
     }
     chatline.setText("")
   }
@@ -484,7 +489,7 @@ class Editor(
   }
 
   private fun autoCompleteDataFull(): List<AutoCompleteItem> {
-    return autoCompleteDataRaw.value?.let { (sessionOptional, id, lastWord) ->
+    return viewModel.rawAutoCompleteData.value?.let { (sessionOptional, id, lastWord) ->
       val session = sessionOptional.orNull()
       val bufferInfo = session?.bufferSyncer?.bufferInfo(id)
       session?.networks?.let { networks ->
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/MessageHistoryAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/MessageHistoryAdapter.kt
index 7163ee05e..68a1653c3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/MessageHistoryAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/MessageHistoryAdapter.kt
@@ -11,9 +11,7 @@ import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.quasseldroid.R
 
-class MessageHistoryAdapter(
-  private val clickListener: ((CharSequence) -> Unit)? = null
-) : ListAdapter<CharSequence, MessageHistoryAdapter.MessageViewHolder>(
+class MessageHistoryAdapter : ListAdapter<CharSequence, MessageHistoryAdapter.MessageViewHolder>(
   object : DiffUtil.ItemCallback<CharSequence>() {
     override fun areItemsTheSame(oldItem: CharSequence?, newItem: CharSequence?) =
       oldItem === newItem
@@ -21,6 +19,12 @@ class MessageHistoryAdapter(
     override fun areContentsTheSame(oldItem: CharSequence?, newItem: CharSequence?) =
       oldItem == newItem
   }) {
+  private var clickListener: ((CharSequence) -> Unit)? = null
+
+  fun setOnItemClickListener(listener: (CharSequence) -> Unit) {
+    this.clickListener = listener
+  }
+
   override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
     MessageViewHolder(
       LayoutInflater.from(parent.context).inflate(R.layout.widget_history_message, parent, false),
@@ -54,4 +58,4 @@ class MessageHistoryAdapter(
       content.text = data
     }
   }
-}
\ No newline at end of file
+}
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 c52c8e00f..c3ed188c9 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
@@ -24,13 +24,10 @@ import de.kuschku.quasseldroid.persistence.QuasselDatabase
 import de.kuschku.quasseldroid.util.helper.getOrPut
 import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage
 import me.saket.bettermovementmethod.BetterLinkMovementMethod
+import javax.inject.Inject
 
-class MessageAdapter(
-  private val messageRenderer: MessageRenderer,
-  private val clickListener: ((FormattedMessage) -> Unit)? = null,
-  private val selectionListener: ((FormattedMessage) -> Unit)? = null,
-  private val expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null,
-  private val urlLongClickListener: ((TextView, String) -> Boolean)? = null
+class MessageAdapter @Inject constructor(
+  private val messageRenderer: MessageRenderer
 ) : PagedListAdapter<DisplayMessage, MessageAdapter.QuasselMessageViewHolder>(
   object : DiffUtil.ItemCallback<DisplayMessage>() {
     override fun areItemsTheSame(oldItem: DisplayMessage, newItem: DisplayMessage) =
@@ -40,6 +37,26 @@ class MessageAdapter(
       oldItem == newItem
   }) {
   private val movementMethod = BetterLinkMovementMethod.newInstance()
+  private var clickListener: ((FormattedMessage) -> Unit)? = null
+  private var selectionListener: ((FormattedMessage) -> Unit)? = null
+  private var expansionListener: ((QuasselDatabase.DatabaseMessage) -> Unit)? = null
+  private var urlLongClickListener: ((TextView, String) -> Boolean)? = null
+
+  fun setOnClickListener(listener: (FormattedMessage) -> Unit) {
+    this.clickListener = listener
+  }
+
+  fun setOnSelectionListener(listener: (FormattedMessage) -> Unit) {
+    this.selectionListener = listener
+  }
+
+  fun setOnExpansionListener(listener: (QuasselDatabase.DatabaseMessage) -> Unit) {
+    this.expansionListener = listener
+  }
+
+  fun setOnUrlLongClickListener(listener: (TextView, String) -> Boolean) {
+    this.urlLongClickListener = listener
+  }
 
   init {
     movementMethod.setOnLinkLongClickListener { textView, url ->
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 b8a983601..014abbacb 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
@@ -63,10 +63,9 @@ class MessageListFragment : ServiceBoundFragment() {
   lateinit var database: QuasselDatabase
 
   @Inject
-  lateinit var messageRenderer: QuasselMessageRenderer
+  lateinit var adapter: MessageAdapter
 
   private lateinit var linearLayoutManager: LinearLayoutManager
-  private lateinit var adapter: MessageAdapter
 
   private var lastBuffer: BufferId? = null
   private var previousMessageId: MsgId? = null
@@ -176,62 +175,59 @@ class MessageListFragment : ServiceBoundFragment() {
     linearLayoutManager.reverseLayout = true
 
     var linkMenu: PopupMenu? = null
-    adapter = MessageAdapter(
-      messageRenderer,
-      { msg ->
-        if (actionMode != null) {
-          if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
-            actionMode?.finish()
-          }
-        }
-      },
-      { msg ->
-        if (actionMode == null) {
-          activity?.startActionMode(actionModeCallback)
-        }
+    adapter.setOnClickListener { msg ->
+      if (actionMode != null) {
         if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
           actionMode?.finish()
         }
-      },
-      null,
-      { textView, url ->
-        if (linkMenu == null) {
-          linkMenu = PopupMenu(requireContext(), textView).also { menu ->
-            linkMenu?.dismiss()
-            menu.menuInflater.inflate(R.menu.context_link, menu.menu)
-            menu.setOnMenuItemClickListener {
-              when (it.itemId) {
-                R.id.action_copy  -> {
-                  val clipboard = requireContext().systemService<ClipboardManager>()
-                  val clip = ClipData.newPlainText(null, url)
-                  clipboard.primaryClip = clip
-                  menu.dismiss()
-                  linkMenu = null
-                  true
-                }
-                R.id.action_share -> {
-                  val intent = Intent(Intent.ACTION_SEND)
-                  intent.type = "text/plain"
-                  intent.putExtra(Intent.EXTRA_TEXT, url)
-                  requireContext().startActivity(
-                    Intent.createChooser(intent, requireContext().getString(R.string.label_share))
-                  )
-                  menu.dismiss()
-                  linkMenu = null
-                  true
-                }
-                else              -> false
+      }
+    }
+    adapter.setOnSelectionListener { msg ->
+      if (actionMode == null) {
+        activity?.startActionMode(actionModeCallback)
+      }
+      if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
+        actionMode?.finish()
+      }
+    }
+    adapter.setOnUrlLongClickListener { textView, url ->
+      if (linkMenu == null) {
+        linkMenu = PopupMenu(requireContext(), textView).also { menu ->
+          linkMenu?.dismiss()
+          menu.menuInflater.inflate(R.menu.context_link, menu.menu)
+          menu.setOnMenuItemClickListener {
+            when (it.itemId) {
+              R.id.action_copy  -> {
+                val clipboard = requireContext().systemService<ClipboardManager>()
+                val clip = ClipData.newPlainText(null, url)
+                clipboard.primaryClip = clip
+                menu.dismiss()
+                linkMenu = null
+                true
               }
+              R.id.action_share -> {
+                val intent = Intent(Intent.ACTION_SEND)
+                intent.type = "text/plain"
+                intent.putExtra(Intent.EXTRA_TEXT, url)
+                requireContext().startActivity(
+                  Intent.createChooser(intent, requireContext().getString(R.string.label_share))
+                )
+                menu.dismiss()
+                linkMenu = null
+                true
+              }
+              else              -> false
             }
-            menu.setOnDismissListener {
-              linkMenu = null
-            }
-            menu.show()
           }
+          menu.setOnDismissListener {
+            linkMenu = null
+          }
+          menu.show()
         }
-        true
       }
-    )
+      true
+    }
+
     messageList.adapter = adapter
     messageList.layoutManager = linearLayoutManager
     messageList.itemAnimator = null
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/RipplePassthroughTextView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt
similarity index 94%
rename from app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/RipplePassthroughTextView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt
index 02ebfaae3..fbc35dbe7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/RipplePassthroughTextView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt
@@ -1,4 +1,4 @@
-package de.kuschku.quasseldroid.ui.chat.messages
+package de.kuschku.quasseldroid.util.ui
 
 import android.content.Context
 import android.text.Spannable
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index 357b871db..bc5a3db82 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -32,7 +32,7 @@
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone" />
 
-  <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+  <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_daychange.xml b/app/src/main/res/layout/widget_chatmessage_daychange.xml
index a8a5bee40..2fd710fd3 100644
--- a/app/src/main/res/layout/widget_chatmessage_daychange.xml
+++ b/app/src/main/res/layout/widget_chatmessage_daychange.xml
@@ -23,7 +23,7 @@
     android:paddingStart="@dimen/message_horizontal"
     android:paddingTop="@dimen/message_vertical_daychange">
 
-    <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
       android:id="@+id/combined"
       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 12d904c15..57221c0b7 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -32,7 +32,7 @@
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone" />
 
-  <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+  <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml
index bb275b6f8..74062d298 100644
--- a/app/src/main/res/layout/widget_chatmessage_info.xml
+++ b/app/src/main/res/layout/widget_chatmessage_info.xml
@@ -32,7 +32,7 @@
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone" />
 
-  <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+  <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml
index d3e0e2760..2b830570b 100644
--- a/app/src/main/res/layout/widget_chatmessage_notice.xml
+++ b/app/src/main/res/layout/widget_chatmessage_notice.xml
@@ -32,7 +32,7 @@
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone" />
 
-  <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+  <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 03709e314..21d345076 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -73,7 +73,7 @@
         android:layout_weight="1"
         android:orientation="vertical">
 
-        <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+        <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
           android:id="@+id/content"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -82,7 +82,7 @@
           tools:text="@sample/messages.json/data/content"
           tools:visibility="visible" />
 
-        <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+        <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
           android:id="@+id/combined"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index 9bcccdfb2..3b136eb8d 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -32,7 +32,7 @@
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone" />
 
-  <de.kuschku.quasseldroid.ui.chat.messages.RipplePassthroughTextView
+  <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
-- 
GitLab