From e8ff6f509b9691b553f72c259837442a5615a842 Mon Sep 17 00:00:00 2001 From: IanRDavies Date: Thu, 17 Feb 2022 10:52:56 +0000 Subject: [PATCH] Id/android navigation edits (#325) * add ids to terminalitems and work with these * remove unnecessary logging --- .../java/chat/simplex/app/model/ChatModel.kt | 4 +-- .../java/chat/simplex/app/model/SimpleXAPI.kt | 17 ++++++----- .../chat/simplex/app/views/TerminalView.kt | 30 ++++++++++++------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index 0ecab183ad..d5e2eb65c2 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -12,8 +12,8 @@ class ChatModel(val controller: ChatController) { val sampleData: ChatModel get() { val m = ChatModel(ChatController.Mock()) m.terminalItems = mutableStateListOf( - TerminalItem.Cmd(CC.ShowActiveUser()), - TerminalItem.Resp(CR.ActiveUser(User.sampleData)) + TerminalItem.Cmd(0, CC.ShowActiveUser()), + TerminalItem.Resp(1, CR.ActiveUser(User.sampleData)) ) return m } diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index 82a514221e..c5449969ec 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -33,7 +33,7 @@ open class ChatController(val ctrl: ChatCtrl) { val cb = callbacks[r.corr] if (cb != null) cb(null, r.resp) } - chatModel?.terminalItems?.add(TerminalItem.Resp(r.resp)) + chatModel?.terminalItems?.add(TerminalItem.Resp(System.currentTimeMillis(), r.resp)) } } } @@ -41,12 +41,12 @@ open class ChatController(val ctrl: ChatCtrl) { suspend fun sendCmd(cmd: CC): CR { return withContext(Dispatchers.IO) { val c = cmd.cmdString - chatModel?.terminalItems?.add(TerminalItem.Cmd(cmd)) + chatModel?.terminalItems?.add(TerminalItem.Cmd(System.currentTimeMillis(), cmd)) val json = chatSendCmd(ctrl, c) Log.d("SIMPLEX", "sendCmd: $c") Log.d("SIMPLEX", "sendCmd response $json") val r = APIResponse.decodeStr(json) - chatModel?.terminalItems?.add(TerminalItem.Resp(r.resp)) + chatModel?.terminalItems?.add(TerminalItem.Resp(System.currentTimeMillis(), r.resp)) r.resp } } @@ -187,24 +187,27 @@ sealed class CR { } abstract class TerminalItem { + abstract val id: Long val date = Date() abstract val label: String abstract val details: String - class Cmd(val cmd: CC): TerminalItem() { + class Cmd(id: Long, val cmd: CC): TerminalItem() { + override val id = id override val label get() = "> ${cmd.cmdString}" override val details get() = cmd.cmdString } - class Resp(val resp: CR): TerminalItem() { + class Resp(id: Long, val resp: CR): TerminalItem() { + override val id = id override val label get() = "< ${resp.responseType}" override val details get() = resp.details } companion object { val sampleData = listOf( - TerminalItem.Cmd(CC.ShowActiveUser()), - TerminalItem.Resp(CR.ActiveUser(User.sampleData)) + TerminalItem.Cmd(0, CC.ShowActiveUser()), + TerminalItem.Resp(1, CR.ActiveUser(User.sampleData)) ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt index 8f9fcf916e..6169cc09b8 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/TerminalView.kt @@ -3,16 +3,24 @@ package chat.simplex.app.views import androidx.compose.foundation.layout.Column import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.ClickableText +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Text import androidx.compose.material.Button import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.text.AnnotatedString import androidx.navigation.* import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import chat.simplex.app.model.* +import androidx.navigation.navArgument +import chat.simplex.app.Pages +import chat.simplex.app.model.ChatModel +import chat.simplex.app.model.TerminalItem +import chat.simplex.app.ui.theme.SimpleXTheme import chat.simplex.app.views.chat.SendMsgView import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -22,16 +30,16 @@ import kotlinx.coroutines.withContext @Composable fun TerminalPage(chatModel: ChatModel) { val navController = rememberNavController() - NavHost(navController = navController, startDestination = "terminalView"){ - composable("terminalView") { TerminalView(chatModel, navController) } + NavHost(navController = navController, startDestination = Pages.Terminal.route){ + composable(Pages.Terminal.route) { TerminalView(chatModel, navController) } composable( - "details" + "/{_details}", + "details" + "/{identifier}", arguments=listOf( - navArgument("_details"){ - type = NavType.StringType + navArgument("identifier"){ + type = NavType.LongType } ) - ) { entry -> DetailView( entry.arguments?.getString("_details"), navController) } + ) { entry -> DetailView( entry.arguments!!.getLong("identifier"), chatModel.terminalItems, navController) } } } @@ -57,16 +65,18 @@ fun TerminalLog(terminalItems: List, navController: NavController) items(terminalItems) { item -> ClickableText( AnnotatedString(item.label), - onClick = { navController.navigate("details/${item.details}") } + onClick = { navController.navigate("details/${item.id}") } ) } } } @Composable -fun DetailView(details: String?, navController: NavController){ - Column { - Text("$details") +fun DetailView(identifier: Long, terminalItems: List, navController: NavController){ + Column( + modifier=Modifier.verticalScroll(rememberScrollState()) + ) { + Text((terminalItems.filter {it.id == identifier}).first().details) Button(onClick = { navController.popBackStack() }) { Text("Back") }