Id/android navigation edits (#325)

* add ids to terminalitems and work with these

* remove unnecessary logging
This commit is contained in:
IanRDavies
2022-02-17 10:52:56 +00:00
committed by GitHub
parent e7e777ec7b
commit e8ff6f509b
3 changed files with 32 additions and 19 deletions
@@ -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
}
@@ -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>(
TerminalItem.Cmd(CC.ShowActiveUser()),
TerminalItem.Resp(CR.ActiveUser(User.sampleData))
TerminalItem.Cmd(0, CC.ShowActiveUser()),
TerminalItem.Resp(1, CR.ActiveUser(User.sampleData))
)
}
}
@@ -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<TerminalItem>, 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<TerminalItem>, navController: NavController){
Column(
modifier=Modifier.verticalScroll(rememberScrollState())
) {
Text((terminalItems.filter {it.id == identifier}).first().details)
Button(onClick = { navController.popBackStack() }) {
Text("Back")
}