mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-11 20:51:53 +00:00
Add icons and respect nullability
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package org.thoughtcrime.securesms.conversation.v2
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -11,12 +10,15 @@ import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.Divider
|
||||
import androidx.compose.material.LocalTextStyle
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
@@ -24,6 +26,9 @@ import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import network.loki.messenger.R
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
||||
@@ -60,71 +65,101 @@ class MessageDetailActivity: PassphraseRequiredActionBarActivity() {
|
||||
|
||||
title = resources.getString(R.string.conversation_context__menu_message_details)
|
||||
|
||||
setContentView(createComposeView())
|
||||
setContentView(ComposeView(this).apply {
|
||||
setContent {
|
||||
MessageDetailsScreen()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun createComposeView(): ComposeView = ComposeView(this).apply {
|
||||
id = View.generateViewId()
|
||||
setContent {
|
||||
MessageDetails()
|
||||
}
|
||||
class MessageDetailsViewModel: ViewModel() {
|
||||
private val _details = MutableLiveData(MessageDetails())
|
||||
val details: LiveData<MessageDetails> = _details
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun MessageDetailsScreen(viewModel: MessageDetailsViewModel = MessageDetailsViewModel()) {
|
||||
val details by viewModel.details.observeAsState(MessageDetails())
|
||||
MessageDetails(details)
|
||||
}
|
||||
|
||||
data class TitledText(val title: String, val value: String)
|
||||
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
data class MessageDetails(
|
||||
val fileDetails: List<TitledText>? = null,
|
||||
val sent: TitledText? = null,
|
||||
val received: TitledText? = null,
|
||||
val user: TitledText? = null,
|
||||
)
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun MessageDetails() {
|
||||
val fileDetails = listOf(
|
||||
TitledText("File Id:", "1237896548514214124235985214"),
|
||||
TitledText("File Type:", ".PNG"),
|
||||
TitledText("File Size:", "6mb"),
|
||||
TitledText("Resolution:", "550x550"),
|
||||
TitledText("Duration:", "N/A"),
|
||||
fun PreviewMessageDetails() {
|
||||
MessageDetails(
|
||||
fileDetails = listOf(
|
||||
TitledText("File Id:", "1237896548514214124235985214"),
|
||||
TitledText("File Type:", ".PNG"),
|
||||
TitledText("File Size:", "6mb"),
|
||||
TitledText("Resolution:", "550x550"),
|
||||
TitledText("Duration:", "N/A"),
|
||||
),
|
||||
sent = TitledText("Sent:", "6:12 AM Tue, 09/08/2022"),
|
||||
received = TitledText("Received:", "6:12 AM Tue, 09/08/2022"),
|
||||
user = TitledText("Connor", "d4f1g54sdf5g1d5f4g65ds4564df65f4g65d54gdfsg")
|
||||
)
|
||||
}
|
||||
|
||||
val sent = TitledText("Sent:", "6:12 AM Tue, 09/08/2022")
|
||||
val received = TitledText("Received:", "6:12 AM Tue, 09/08/2022")
|
||||
val user = TitledText("Connor", "d4f1g54sdf5g1d5f4g65ds4564df65f4g65d54gdfsg")
|
||||
|
||||
AppTheme {
|
||||
Column(
|
||||
modifier = Modifier.verticalScroll(rememberScrollState()),
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
||||
CellWithPadding {
|
||||
FlowRow(
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||
maxItemsInEachRow = 2
|
||||
) {
|
||||
fileDetails.forEach {
|
||||
titledText(it, Modifier.weight(1f))
|
||||
}
|
||||
}
|
||||
}
|
||||
CellWithPadding {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
||||
titledText(sent)
|
||||
titledText(received)
|
||||
titledView("From:") {
|
||||
Row {
|
||||
Box(modifier = Modifier
|
||||
.width(60.dp)
|
||||
.height(60.dp))
|
||||
Column {
|
||||
titledText(user, valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace))
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun MessageDetails(messageDetails: MessageDetails) {
|
||||
messageDetails.apply {
|
||||
AppTheme {
|
||||
Column(
|
||||
modifier = Modifier.verticalScroll(rememberScrollState()),
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||
) {
|
||||
fileDetails?.takeIf { it.isNotEmpty() }?.let {
|
||||
CellWithPadding {
|
||||
FlowRow(
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||
maxItemsInEachRow = 2
|
||||
) {
|
||||
it.forEach {
|
||||
titledText(it, Modifier.weight(1f))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Cell {
|
||||
Column {
|
||||
ItemButton("Reply", R.drawable.ic_reply)
|
||||
Divider()
|
||||
ItemButton("Resend", R.drawable.ic_reply)
|
||||
Divider()
|
||||
ItemButton("Delete", R.drawable.ic_delete_24 , colors = destructiveButtonColors())
|
||||
if (sent != null || received != null || user != null) CellWithPadding {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
||||
sent?.let { titledText(it) }
|
||||
received?.let { titledText(it) }
|
||||
user?.let {
|
||||
titledView("From:") {
|
||||
Row {
|
||||
Box(modifier = Modifier
|
||||
.width(60.dp)
|
||||
.height(60.dp))
|
||||
Column {
|
||||
titledText(it, valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Cell {
|
||||
Column {
|
||||
ItemButton("Reply", R.drawable.ic_message_details__reply)
|
||||
Divider()
|
||||
ItemButton("Resend", R.drawable.ic_message_details__refresh)
|
||||
Divider()
|
||||
ItemButton(
|
||||
"Delete",
|
||||
R.drawable.ic_message_details__trash,
|
||||
colors = destructiveButtonColors()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user