From 749103cd09c6247a95e555a5093dc6b81fc61608 Mon Sep 17 00:00:00 2001 From: geeksville Date: Wed, 8 Apr 2020 17:50:23 -0700 Subject: [PATCH] message sending kinda works again --- .../geeksville/mesh/ui/MessagesFragment.kt | 28 ++++++++++++++++++- .../res/layout/adapter_message_layout.xml | 3 +- app/src/main/res/layout/messages_fragment.xml | 27 ++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt index e24a11d8e..56a2b324f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt @@ -4,6 +4,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.inputmethod.EditorInfo +import android.widget.EditText import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager @@ -15,6 +17,17 @@ import com.geeksville.mesh.model.UIViewModel import kotlinx.android.synthetic.main.adapter_message_layout.view.* import kotlinx.android.synthetic.main.messages_fragment.* +// Allows usage like email.on(EditorInfo.IME_ACTION_NEXT, { confirm() }) +fun EditText.on(actionId: Int, func: () -> Unit) { + setOnEditorActionListener { _, receivedActionId, _ -> + + if (actionId == receivedActionId) { + func() + } + + true + } +} class MessagesFragment : ScreenFragment("Messages"), Logging { @@ -116,6 +129,9 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { fun onMessagesChanged(nodesIn: Collection) { messages = nodesIn.toTypedArray() notifyDataSetChanged() // FIXME, this is super expensive and redraws all messages + + // scroll to the last line + messageListView.scrollToPosition(this.itemCount - 1) } } @@ -129,8 +145,18 @@ class MessagesFragment : ScreenFragment("Messages"), Logging { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + messageInputText.on(EditorInfo.IME_ACTION_DONE) { + debug("did IME action") + + val str = messageInputText.text.toString() + model.messagesState.sendMessage(str) + messageInputText.setText("") // blow away the string the user just entered + } + messageListView.adapter = messagesAdapter - messageListView.layoutManager = LinearLayoutManager(requireContext()) + val layoutManager = LinearLayoutManager(requireContext()) + layoutManager.stackFromEnd = true // We want the last rows to always be shown + messageListView.layoutManager = layoutManager model.messagesState.messages.observe(viewLifecycleOwner, Observer { it -> messagesAdapter.onMessagesChanged(it) diff --git a/app/src/main/res/layout/adapter_message_layout.xml b/app/src/main/res/layout/adapter_message_layout.xml index 4b5d90e92..1010e0ddc 100644 --- a/app/src/main/res/layout/adapter_message_layout.xml +++ b/app/src/main/res/layout/adapter_message_layout.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="8dp" + android:layout_margin="4dp" android:clipToPadding="false"> + \ No newline at end of file diff --git a/app/src/main/res/layout/messages_fragment.xml b/app/src/main/res/layout/messages_fragment.xml index cd2569869..33a271e3f 100644 --- a/app/src/main/res/layout/messages_fragment.xml +++ b/app/src/main/res/layout/messages_fragment.xml @@ -6,14 +6,35 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1320300f3..c506e4cc2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,4 +13,5 @@ 2.13 km hey I found the cache, it is over here next to the big tiger. I\'m kinda scared. Some Username + Send Text