diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
index 9513ab978..3b70b5c61 100644
--- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt
+++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt
@@ -77,7 +77,7 @@ import com.geeksville.mesh.ui.SettingsFragment
import com.geeksville.mesh.ui.UsersFragment
import com.geeksville.mesh.ui.components.ScannedQrCodeDialog
import com.geeksville.mesh.ui.map.MapFragment
-import com.geeksville.mesh.ui.navigateToMessages
+import com.geeksville.mesh.ui.message.navigateToMessages
import com.geeksville.mesh.ui.navigateToNavGraph
import com.geeksville.mesh.ui.navigateToShareMessage
import com.geeksville.mesh.ui.theme.AppTheme
diff --git a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
index 06cc1fca1..6a79884da 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
@@ -46,6 +46,7 @@ import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.R
import com.geeksville.mesh.model.Contact
import com.geeksville.mesh.model.UIViewModel
+import com.geeksville.mesh.ui.message.navigateToMessages
import com.geeksville.mesh.ui.theme.AppTheme
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
diff --git a/app/src/main/java/com/geeksville/mesh/ui/ShareFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ShareFragment.kt
index 529cf388e..999db49f4 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ShareFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ShareFragment.kt
@@ -22,6 +22,7 @@ import com.geeksville.mesh.R
import com.geeksville.mesh.databinding.ShareFragmentBinding
import com.geeksville.mesh.model.Contact
import com.geeksville.mesh.model.UIViewModel
+import com.geeksville.mesh.ui.message.navigateToMessages
import com.geeksville.mesh.ui.theme.AppTheme
import dagger.hilt.android.AndroidEntryPoint
diff --git a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt
index 41ba2a0d9..de2290a8c 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt
@@ -44,6 +44,7 @@ import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.ui.components.MenuItemAction
import com.geeksville.mesh.ui.components.NodeFilterTextField
import com.geeksville.mesh.ui.components.rememberTimeTickWithLifecycle
+import com.geeksville.mesh.ui.message.navigateToMessages
import com.geeksville.mesh.ui.theme.AppTheme
import dagger.hilt.android.AndroidEntryPoint
diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
rename to app/src/main/java/com/geeksville/mesh/ui/message/Message.kt
index f021191c9..fa25f799f 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui
+package com.geeksville.mesh.ui.message
import android.os.Bundle
import android.view.LayoutInflater
@@ -90,6 +90,7 @@ import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.database.entity.QuickChatAction
import com.geeksville.mesh.model.UIViewModel
import com.geeksville.mesh.model.getChannel
+import com.geeksville.mesh.ui.message.components.MessageList
import com.geeksville.mesh.ui.components.NodeKeyStatusIcon
import com.geeksville.mesh.ui.theme.AppTheme
import dagger.hilt.android.AndroidEntryPoint
@@ -247,7 +248,7 @@ internal fun MessageScreen(
}
) { innerPadding ->
if (messages.isNotEmpty()) {
- MessageListView(
+ MessageList(
messages = messages,
selectedIds = selectedIds,
onUnreadChanged = { viewModel.clearUnreadCount(contactKey, it) },
diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessageItem.kt b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/ui/MessageItem.kt
rename to app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt
index 1f11cd020..d26bf570d 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MessageItem.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui
+package com.geeksville.mesh.ui.message.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.ExperimentalFoundationApi
diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessageListView.kt b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageList.kt
similarity index 97%
rename from app/src/main/java/com/geeksville/mesh/ui/MessageListView.kt
rename to app/src/main/java/com/geeksville/mesh/ui/message/components/MessageList.kt
index 08c58f16d..299a951b2 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MessageListView.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageList.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui
+package com.geeksville.mesh.ui.message.components
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
@@ -35,14 +35,13 @@ import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.model.Message
-import com.geeksville.mesh.ui.components.ReactionRow
import com.geeksville.mesh.ui.components.SimpleAlertDialog
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.debounce
@Composable
-internal fun MessageListView(
+internal fun MessageList(
messages: List,
selectedIds: MutableState>,
onUnreadChanged: (Long) -> Unit,
diff --git a/app/src/main/java/com/geeksville/mesh/ui/components/Reaction.kt b/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt
similarity index 98%
rename from app/src/main/java/com/geeksville/mesh/ui/components/Reaction.kt
rename to app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt
index b6deecebe..648b3dbdc 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/components/Reaction.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package com.geeksville.mesh.ui.components
+package com.geeksville.mesh.ui.message.components
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -51,6 +51,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import com.geeksville.mesh.MeshProtos
import com.geeksville.mesh.database.entity.Reaction
+import com.geeksville.mesh.ui.components.EmojiPicker
import com.geeksville.mesh.ui.theme.AppTheme
@Composable