Skip to content

Commit ecaa49e

Browse files
committed
Add peer detail page
1 parent 9017750 commit ecaa49e

File tree

19 files changed

+110
-43
lines changed

19 files changed

+110
-43
lines changed

app/src/main/java/com/ismartcoding/plain/db/DPeer.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import androidx.room.PrimaryKey
88
import androidx.room.Query
99
import androidx.room.Update
1010
import com.ismartcoding.lib.extensions.urlEncode
11-
import com.ismartcoding.lib.helpers.StringHelper
11+
import com.ismartcoding.plain.R
12+
import com.ismartcoding.plain.features.locale.LocaleHelper.getString
1213

1314
@Entity(tableName = "peers")
1415
data class DPeer(
@@ -46,6 +47,14 @@ data class DPeer(
4647
fun getFileUrl(fileId: String): String {
4748
return "${getBaseUrl()}/fs?id=${fileId.urlEncode()}"
4849
}
50+
51+
fun getStatusText(): String {
52+
return when (status) {
53+
"paired" -> getString(R.string.paired)
54+
"unpaired" -> getString(R.string.unpaired)
55+
else -> getString(R.string.unknown)
56+
}
57+
}
4958
}
5059

5160
@Dao

app/src/main/java/com/ismartcoding/plain/ui/base/PDialogListItem.kt

Lines changed: 13 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,20 @@ import androidx.compose.material3.VerticalDivider
1717
import androidx.compose.runtime.Composable
1818
import androidx.compose.ui.Alignment
1919
import androidx.compose.ui.Modifier
20-
import androidx.compose.ui.graphics.painter.Painter
21-
import androidx.compose.ui.graphics.vector.ImageVector
22-
import androidx.compose.ui.platform.LocalContext
20+
import androidx.compose.ui.graphics.ColorFilter
2321
import androidx.compose.ui.res.painterResource
2422
import androidx.compose.ui.unit.dp
2523
import androidx.compose.ui.unit.sp
26-
import coil3.compose.AsyncImage
2724
import com.ismartcoding.plain.R
28-
import com.ismartcoding.plain.ui.theme.palette.onDark
2925

3026
@OptIn(ExperimentalFoundationApi::class)
3127
@Composable
3228
fun PDialogListItem(
3329
modifier: Modifier = Modifier,
3430
title: String,
35-
desc: String? = null,
31+
subtitle: String? = null,
3632
value: String? = null,
37-
icon: Any? = null,
33+
icon: Int? = null,
3834
separatedActions: Boolean = false,
3935
showMore: Boolean = false,
4036
action: (@Composable () -> Unit)? = null,
@@ -47,37 +43,15 @@ fun PDialogListItem(
4743
verticalAlignment = Alignment.CenterVertically,
4844
) {
4945
if (icon != null) {
50-
when (icon) {
51-
is ImageVector -> {
52-
Icon(
53-
modifier = Modifier.padding(end = 16.dp),
54-
imageVector = icon,
55-
contentDescription = title,
56-
tint = MaterialTheme.colorScheme.onSurfaceVariant,
57-
)
58-
}
59-
60-
is Painter -> {
61-
Image(
62-
modifier =
63-
Modifier
64-
.padding(end = 16.dp)
65-
.size(24.dp),
66-
painter = icon,
67-
contentDescription = title,
68-
)
69-
}
70-
71-
is String -> {
72-
AsyncImage(
73-
model = icon,
74-
contentDescription = title,
75-
modifier = Modifier
76-
.size(24.dp),
77-
)
78-
HorizontalSpace(dp = 16.dp)
79-
}
80-
}
46+
Image(
47+
modifier =
48+
Modifier
49+
.padding(end = 16.dp)
50+
.size(24.dp),
51+
painter = painterResource(icon),
52+
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary),
53+
contentDescription = title,
54+
)
8155
}
8256
Column(
8357
modifier = Modifier
@@ -88,7 +62,7 @@ fun PDialogListItem(
8862
text = title,
8963
style = MaterialTheme.typography.titleLarge.copy(fontSize = 18.sp),
9064
)
91-
desc?.let {
65+
subtitle?.let {
9266
VerticalSpace(dp = 8.dp)
9367
SelectionContainer {
9468
Text(

app/src/main/java/com/ismartcoding/plain/ui/page/chat/ChatPage.kt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ import androidx.compose.foundation.lazy.LazyColumn
1616
import androidx.compose.foundation.lazy.LazyListState
1717
import androidx.compose.foundation.lazy.itemsIndexed
1818
import androidx.compose.foundation.lazy.rememberLazyListState
19+
import androidx.compose.material3.AlertDialog
20+
import androidx.compose.material3.Button
1921
import androidx.compose.material3.ExperimentalMaterial3Api
22+
import androidx.compose.material3.Text
23+
import androidx.compose.material3.TextButton
2024
import androidx.compose.runtime.Composable
2125
import androidx.compose.runtime.LaunchedEffect
2226
import androidx.compose.runtime.collectAsState
@@ -46,6 +50,7 @@ import com.ismartcoding.lib.helpers.CoroutinesHelper.withIO
4650
import com.ismartcoding.lib.helpers.StringHelper
4751
import com.ismartcoding.plain.R
4852
import com.ismartcoding.plain.db.DMessageFile
53+
import com.ismartcoding.plain.enums.DeviceType
4954
import com.ismartcoding.plain.enums.PickFileTag
5055
import com.ismartcoding.plain.enums.PickFileType
5156
import com.ismartcoding.plain.events.DeleteChatItemViewEvent
@@ -62,6 +67,9 @@ import com.ismartcoding.plain.ui.base.AnimatedBottomAction
6267
import com.ismartcoding.plain.ui.base.HorizontalSpace
6368
import com.ismartcoding.plain.ui.base.NavigationBackIcon
6469
import com.ismartcoding.plain.ui.base.NavigationCloseIcon
70+
import com.ismartcoding.plain.ui.base.PDialogListItem
71+
import com.ismartcoding.plain.ui.base.PIconButton
72+
import com.ismartcoding.plain.ui.base.PListItem
6573
import com.ismartcoding.plain.ui.base.PScaffold
6674
import com.ismartcoding.plain.ui.base.PTopAppBar
6775
import com.ismartcoding.plain.ui.base.PTopRightButton
@@ -106,6 +114,7 @@ fun ChatPage(
106114
val scope = rememberCoroutineScope()
107115
var inputValue by remember { mutableStateOf("") }
108116
var showForwardDialog by remember { mutableStateOf(false) }
117+
var showPeerInfoDialog by remember { mutableStateOf(false) }
109118
var messageToForward by remember { mutableStateOf<VChat?>(null) }
110119
val configuration = LocalConfiguration.current
111120
val density = LocalDensity.current
@@ -213,6 +222,14 @@ fun ChatPage(
213222
},
214223
)
215224
HorizontalSpace(dp = 8.dp)
225+
} else if (chatState.value.peer != null) {
226+
PIconButton(
227+
icon = R.drawable.ellipsis,
228+
contentDescription = stringResource(R.string.more),
229+
click = {
230+
showPeerInfoDialog = true
231+
}
232+
)
216233
}
217234
},
218235
)
@@ -317,6 +334,44 @@ fun ChatPage(
317334
}
318335

319336
MediaPreviewer(state = previewerState)
337+
338+
if (showPeerInfoDialog) {
339+
AlertDialog(
340+
onDismissRequest = { showPeerInfoDialog = false },
341+
title = { Text(chatState.value.peer?.name ?: "") },
342+
text = {
343+
Column {
344+
chatState.value.peer?.let { peer ->
345+
PDialogListItem(
346+
title = stringResource(R.string.ip_address),
347+
subtitle = peer.ip,
348+
)
349+
PDialogListItem(
350+
title = stringResource(R.string.port),
351+
subtitle = peer.port.toString(),
352+
)
353+
PDialogListItem(
354+
title = stringResource(R.string.device_type),
355+
subtitle = DeviceType.fromValue(peer.deviceType).getText(),
356+
)
357+
PDialogListItem(
358+
title = stringResource(R.string.status),
359+
subtitle = peer.getStatusText(),
360+
)
361+
}
362+
}
363+
},
364+
confirmButton = {
365+
Button(
366+
onClick = {
367+
showPeerInfoDialog = false
368+
}
369+
) {
370+
Text(stringResource(id = R.string.close))
371+
}
372+
}
373+
)
374+
}
320375
}
321376

322377
private fun handleFileSelection(

app/src/main/java/com/ismartcoding/plain/ui/page/chat/components/ForwardTargetDialog.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.ismartcoding.plain.ui.page.chat.components
22

33
import androidx.compose.foundation.clickable
4-
import androidx.compose.foundation.layout.PaddingValues
54
import androidx.compose.foundation.layout.defaultMinSize
65
import androidx.compose.foundation.layout.fillMaxWidth
76
import androidx.compose.foundation.lazy.LazyColumn
@@ -51,7 +50,7 @@ fun ForwardTargetDialog(
5150
onDismiss()
5251
},
5352
title = stringResource(id = R.string.local_chat),
54-
desc = stringResource(id = R.string.local_chat_desc),
53+
subtitle = stringResource(id = R.string.local_chat_desc),
5554
showMore = true
5655
)
5756
}
@@ -64,7 +63,7 @@ fun ForwardTargetDialog(
6463
onDismiss()
6564
},
6665
title = peer.name,
67-
desc = peer.ip,
66+
subtitle = peer.ip,
6867
showMore = true
6968
)
7069
}

app/src/main/res/values-de/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">Das Löschen dieses Geräts wird auch alle zugehörigen Chat-Nachrichten löschen. Diese Aktion kann nicht rückgängig gemacht werden.</string>
673673
<string name="forward">Weiterleiten</string>
674674
<string name="sent">Gesendet</string>
675+
<string name="device_type">Gerätetyp</string>
676+
<string name="port">Port</string>
675677
</resources>

app/src/main/res/values-es/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">Eliminar este dispositivo también eliminará todos los mensajes de chat. Esta acción no se puede deshacer.</string>
673673
<string name="forward">Reenviar</string>
674674
<string name="sent">Enviado</string>
675+
<string name="device_type">Tipo de dispositivo</string>
676+
<string name="port">Puerto</string>
675677
</resources>

app/src/main/res/values-fr/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">Supprimer cet appareil supprimera également tous les messages de chat. Cette action ne peut pas être annulée.</string>
673673
<string name="forward">Transférer</string>
674674
<string name="sent">Envoyé</string>
675+
<string name="device_type">Type d\'appareil</string>
676+
<string name="port">Port</string>
675677
</resources>

app/src/main/res/values-hi/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">इस उपकरण को हटाने से संबंधित सभी चैट संदेश भी हटा दिए जाएंगे। यह क्रिया पूर्ववत नहीं की जा सकती।</string>
673673
<string name="forward">आगे</string>
674674
<string name="sent">भेजा गया</string>
675+
<string name="device_type">डिवाइस प्रकार</string>
676+
<string name="port">पोर्ट</string>
675677
</resources>

app/src/main/res/values-it/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">Eliminare questo dispositivo eliminerà anche tutti i messaggi di chat. Questa azione non può essere annullata.</string>
673673
<string name="forward">Inoltra</string>
674674
<string name="sent">Inviato</string>
675+
<string name="device_type">Tipo di dispositivo</string>
676+
<string name="port">Porta</string>
675677
</resources>

app/src/main/res/values-ja/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,4 +672,6 @@
672672
<string name="delete_peer_warning">このデバイスを削除すると、関連するすべてのチャットメッセージも削除されます。この操作は元に戻せません。</string>
673673
<string name="forward">転送</string>
674674
<string name="sent">送信済み</string>
675+
<string name="device_type">デバイスタイプ</string>
676+
<string name="port">ポート</string>
675677
</resources>

0 commit comments

Comments
 (0)