Skip to content

Commit fc03738

Browse files
committed
fix: Initialize default QuickChat action in MessageViewModel
Move default location action initialization from QuickChatViewModel to MessageViewModel. MessageViewModel is instantiated when opening a channel, ensuring the default action appears immediately without needing to first open QuickChat settings.
1 parent c7b5177 commit fc03738

File tree

5 files changed

+49
-23
lines changed

5 files changed

+49
-23
lines changed

.claude/settings.local.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(dir)",
5+
"Bash(git clone https://github.com/meshtastic/Meshtastic-Android.git .)",
6+
"Bash(git submodule update --init --recursive)",
7+
"Bash(where sdkmanager)",
8+
"Bash(echo $ANDROID_HOME)",
9+
"Bash(./gradlew --version)",
10+
"Bash(./gradlew assembleDebug)",
11+
"Bash(where java)",
12+
"Bash(\"C:\\Program Files\\Android\\Android Studio\\jbr\\bin\\java.exe\" -version)",
13+
"Bash($env:JAVA_HOME=\"C:\\Program Files\\Android\\Android Studio\\jbr\")",
14+
"Bash(export JAVA_HOME=\"C:/Program Files/Android/Android Studio/jbr\")",
15+
"Read(//c/Users/**)",
16+
"Bash(./gradlew :feature:messaging:assembleDebug)",
17+
"Bash(./gradlew assembleFdroidDebug)",
18+
"Bash(./gradlew assembleGoogleDebug)",
19+
"Bash(./gradlew clean)",
20+
"Bash(./gradlew :app:assembleFdroidDebug)",
21+
"Bash(./gradlew clean assembleFdroidDebug)",
22+
"Bash(./gradlew :app:assembleFdroidDebug --rerun-tasks)",
23+
"Bash(./gradlew :app:assembleGoogleDebug)"
24+
],
25+
"deny": [],
26+
"ask": []
27+
}
28+
}

appid-change-error.png

18.4 KB
Loading

feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/Message.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,6 @@ private fun handleQuickChatAction(
437437
userLongitude: Double?,
438438
onSendMessage: (String) -> Unit,
439439
) {
440-
// Replace %GPS with actual coordinates if available
441440
val processedMessage = if (userLatitude != null && userLongitude != null) {
442441
val gpsString = "%.7f,%.7f".format(userLatitude, userLongitude)
443442
action.message.replace("%GPS", gpsString, ignoreCase = true)

feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/MessageViewModel.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class MessageViewModel
5555
constructor(
5656
private val nodeRepository: NodeRepository,
5757
radioConfigRepository: RadioConfigRepository,
58-
quickChatActionRepository: QuickChatActionRepository,
58+
private val quickChatActionRepository: QuickChatActionRepository,
5959
private val serviceRepository: ServiceRepository,
6060
private val packetRepository: PacketRepository,
6161
private val uiPrefs: UiPrefs,
@@ -77,6 +77,26 @@ constructor(
7777

7878
val quickChatActions = quickChatActionRepository.getAllActions().stateInWhileSubscribed(initialValue = emptyList())
7979

80+
init {
81+
viewModelScope.launch(Dispatchers.IO) {
82+
val actions = quickChatActionRepository.getAllActions()
83+
var isEmpty = true
84+
actions.collect { list ->
85+
if (isEmpty && list.isEmpty()) {
86+
quickChatActionRepository.upsert(
87+
org.meshtastic.core.database.entity.QuickChatAction(
88+
name = "📍",
89+
message = "https://maps.google.com/?q=%GPS",
90+
mode = org.meshtastic.core.database.entity.QuickChatAction.Mode.Append,
91+
position = 0,
92+
)
93+
)
94+
}
95+
isEmpty = false
96+
}
97+
}
98+
}
99+
80100
private val contactKeyForMessages: MutableStateFlow<String?> = MutableStateFlow(null)
81101
private val messagesForContactKey: StateFlow<List<Message>> =
82102
contactKeyForMessages

feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/QuickChatViewModel.kt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,6 @@ class QuickChatViewModel @Inject constructor(private val quickChatActionReposito
3333
val quickChatActions
3434
get() = quickChatActionRepository.getAllActions().stateInWhileSubscribed(initialValue = emptyList())
3535

36-
init {
37-
// Initialize default location action if database is empty
38-
viewModelScope.launch(Dispatchers.IO) {
39-
val actions = quickChatActionRepository.getAllActions()
40-
var isEmpty = true
41-
actions.collect { list ->
42-
if (isEmpty && list.isEmpty()) {
43-
quickChatActionRepository.upsert(
44-
QuickChatAction(
45-
name = "📍",
46-
message = "https://maps.google.com/?q=%GPS",
47-
mode = QuickChatAction.Mode.Append,
48-
position = 0,
49-
)
50-
)
51-
}
52-
isEmpty = false
53-
}
54-
}
55-
}
56-
5736
fun updateActionPositions(actions: List<QuickChatAction>) {
5837
viewModelScope.launch(Dispatchers.IO) {
5938
for (position in actions.indices) {

0 commit comments

Comments
 (0)