Skip to content
Snippets Groups Projects
Commit 93632c36 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Minor cleanup

parent 65a763be
Branches
Tags
No related merge requests found
Showing
with 131 additions and 108 deletions
......@@ -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,8 +127,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
ircFormatDeserializer,
appearanceSettings,
autoCompleteSettings,
messageSettings,
{ lines ->
messageSettings
)
editor.setOnSendListener { lines ->
viewModel.session { sessionOptional ->
val session = sessionOptional.orNull()
viewModel.buffer { bufferId ->
......@@ -146,18 +146,19 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
}
}
}
},
{ expanded ->
}
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
}
......
......@@ -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 ->
......
......@@ -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),
......
......@@ -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 ->
......
......@@ -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,25 +175,22 @@ class MessageListFragment : ServiceBoundFragment() {
linearLayoutManager.reverseLayout = true
var linkMenu: PopupMenu? = null
adapter = MessageAdapter(
messageRenderer,
{ msg ->
adapter.setOnClickListener { msg ->
if (actionMode != null) {
if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
actionMode?.finish()
}
}
},
{ msg ->
}
adapter.setOnSelectionListener { msg ->
if (actionMode == null) {
activity?.startActionMode(actionModeCallback)
}
if (!viewModel.selectedMessagesToggle(msg.id, msg)) {
actionMode?.finish()
}
},
null,
{ textView, url ->
}
adapter.setOnUrlLongClickListener { textView, url ->
if (linkMenu == null) {
linkMenu = PopupMenu(requireContext(), textView).also { menu ->
linkMenu?.dismiss()
......@@ -231,7 +227,7 @@ class MessageListFragment : ServiceBoundFragment() {
}
true
}
)
messageList.adapter = adapter
messageList.layoutManager = linearLayoutManager
messageList.itemAnimator = null
......
package de.kuschku.quasseldroid.ui.chat.messages
package de.kuschku.quasseldroid.util.ui
import android.content.Context
import android.text.Spannable
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
......@@ -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"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment