chore: merge the develop branch into master #1

Merged
reya merged 43 commits from develop into master 2026-05-23 00:50:13 +00:00
3 changed files with 71 additions and 1 deletions
Showing only changes of commit eb2f543f53 - Show all commits

View File

@@ -10,21 +10,28 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem
import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
@@ -45,6 +52,9 @@ fun HomeScreen(onOpenChat: (Long) -> Unit) {
val userProfile by viewModel.getUserProfile().collectAsState(initial = null)
val chatRooms by viewModel.chatRooms.collectAsState(initial = emptyList())
val sheetState = rememberModalBottomSheetState()
var showBottomSheet by remember { mutableStateOf(false) }
Scaffold(
containerColor = MaterialTheme.colorScheme.surfaceContainer,
topBar = {
@@ -67,7 +77,7 @@ fun HomeScreen(onOpenChat: (Long) -> Unit) {
)
}
// User
IconButton(onClick = { /* TODO: Open profile */ }) {
IconButton(onClick = { showBottomSheet = true }) {
if (userProfile?.asRecord()?.picture != null) {
AsyncImage(
model = userProfile?.asRecord()?.picture,
@@ -125,6 +135,51 @@ fun HomeScreen(onOpenChat: (Long) -> Unit) {
}
}
}
if (showBottomSheet) {
ModalBottomSheet(
onDismissRequest = { showBottomSheet = false },
sheetState = sheetState,
) {
val userName =
userProfile?.asRecord()?.displayName
?: userProfile?.asRecord()?.name
?: "No name"
Column(modifier = Modifier.padding(16.dp)) {
ListItem(
headlineContent = {
Text(
text = userName,
style = MaterialTheme.typography.titleMediumEmphasized
)
},
leadingContent = {
if (userProfile?.asRecord()?.picture != null) {
AsyncImage(
model = userProfile?.asRecord()?.picture,
contentDescription = "User Avatar",
modifier = Modifier
.size(32.dp)
.clip(CircleShape),
contentScale = ContentScale.Crop
)
} else {
Icon(
painter = painterResource(Res.drawable.ic_avatar),
contentDescription = "User"
)
}
}
)
HorizontalDivider()
Button(
onClick = { viewModel.logout() },
content = { Text("Logout") }
)
}
}
}
}
},
)

View File

@@ -83,6 +83,13 @@ class Nostr {
client?.shutdown()
}
fun exit() {
signer = null
deviceSigner = null
userPubkey = null
contactList = emptyList()
}
suspend fun setKeySigner(keys: Keys) {
try {
signer = NostrSigner.keys(keys)

View File

@@ -187,6 +187,14 @@ class NostrViewModel(
// TODO: Implement import
}
fun logout() {
viewModelScope.launch {
_hasSecret.value = false
_chatRooms.value = emptySet()
secretStore.clear("user_signer")
nostr.exit()
}
}
fun getChatRooms() {
viewModelScope.launch {