mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Id/android navigation edits (#325)
* add ids to terminalitems and work with these * remove unnecessary logging
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user