diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts
index dc58cbf..954b656 100644
--- a/composeApp/build.gradle.kts
+++ b/composeApp/build.gradle.kts
@@ -28,6 +28,7 @@ kotlin {
implementation("su.reya:nostr-sdk-kmp:0.2.3")
implementation("io.github.kalinjul.easyqrscan:scanner:0.7.0")
implementation("androidx.lifecycle:lifecycle-process:2.8.0")
+ implementation("io.github.alexzhirkevich:qrose:1.1.2")
}
commonMain.dependencies {
implementation(libs.compose.runtime)
diff --git a/composeApp/src/androidMain/composeResources/drawable/ic_qr.xml b/composeApp/src/androidMain/composeResources/drawable/ic_qr.xml
new file mode 100644
index 0000000..221ce6e
--- /dev/null
+++ b/composeApp/src/androidMain/composeResources/drawable/ic_qr.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/App.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/App.kt
index 9d505f3..3dc0cc9 100644
--- a/composeApp/src/androidMain/kotlin/su/reya/coop/App.kt
+++ b/composeApp/src/androidMain/kotlin/su/reya/coop/App.kt
@@ -48,6 +48,7 @@ import su.reya.coop.coop.storage.SecretStore
import su.reya.coop.screens.ChatScreen
import su.reya.coop.screens.HomeScreen
import su.reya.coop.screens.ImportScreen
+import su.reya.coop.screens.MyQrScreen
import su.reya.coop.screens.NewChatScreen
import su.reya.coop.screens.NewIdentityScreen
import su.reya.coop.screens.OnboardingScreen
@@ -236,6 +237,11 @@ fun App() {
onBack = { navController.popBackStack() },
)
}
+ composable { backStackEntry ->
+ MyQrScreen(
+ onBack = { navController.popBackStack() },
+ )
+ }
}
}
}
diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/Navigation.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/Navigation.kt
index 676eb7d..15bf958 100644
--- a/composeApp/src/androidMain/kotlin/su/reya/coop/Navigation.kt
+++ b/composeApp/src/androidMain/kotlin/su/reya/coop/Navigation.kt
@@ -23,4 +23,7 @@ sealed interface Screen {
@Serializable
data object Scan : Screen
+
+ @Serializable
+ data object MyQr : Screen
}
diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/HomeScreen.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/HomeScreen.kt
index a05de92..4f26a3e 100644
--- a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/HomeScreen.kt
+++ b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/HomeScreen.kt
@@ -19,6 +19,7 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.ExtendedFloatingActionButton
+import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -64,6 +65,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import coop.composeapp.generated.resources.Res
import coop.composeapp.generated.resources.ic_new_chat
+import coop.composeapp.generated.resources.ic_qr
import coop.composeapp.generated.resources.ic_scanner
import kotlinx.coroutines.launch
import org.jetbrains.compose.resources.painterResource
@@ -304,8 +306,8 @@ fun HomeScreen(
)
}
Spacer(modifier = Modifier.size(8.dp))
- Box(
- contentAlignment = Alignment.Center
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
) {
OutlinedButton(
onClick = {
@@ -320,6 +322,21 @@ fun HomeScreen(
) {
Text(text = shortPubkey)
}
+ FilledIconButton(
+ onClick = {
+ scope.launch {
+ sheetState.hide()
+ showBottomSheet = false
+ navController.navigate(Screen.MyQr)
+ }
+ },
+ shape = MaterialShapes.Square.toShape()
+ ) {
+ Icon(
+ painter = painterResource(Res.drawable.ic_qr),
+ contentDescription = "My QR"
+ )
+ }
}
}
Spacer(modifier = Modifier.size(16.dp))
diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/MyQrScreen.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/MyQrScreen.kt
new file mode 100644
index 0000000..e8cd521
--- /dev/null
+++ b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/MyQrScreen.kt
@@ -0,0 +1,68 @@
+package su.reya.coop.screens
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SnackbarHost
+import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBar
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import coop.composeapp.generated.resources.Res
+import coop.composeapp.generated.resources.ic_arrow_back
+import io.github.alexzhirkevich.qrose.rememberQrCodePainter
+import org.jetbrains.compose.resources.painterResource
+import su.reya.coop.LocalNostrViewModel
+import su.reya.coop.LocalSnackbarHostState
+
+@Composable
+fun MyQrScreen(
+ onBack: () -> Unit
+) {
+ val snackbarHostState = LocalSnackbarHostState.current
+ val viewModel = LocalNostrViewModel.current
+ val currentUser = viewModel.currentUser() ?: return
+
+ Scaffold(
+ snackbarHost = { SnackbarHost(snackbarHostState) },
+ topBar = {
+ TopAppBar(
+ title = {
+ Text(
+ text = "My QR",
+ style = MaterialTheme.typography.titleMediumEmphasized
+ )
+ },
+ navigationIcon = {
+ IconButton(onClick = onBack) {
+ Icon(
+ painter = painterResource(Res.drawable.ic_arrow_back),
+ contentDescription = "Back"
+ )
+ }
+ }
+ )
+ },
+ content = { innerPadding ->
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(innerPadding),
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ painter = rememberQrCodePainter(currentUser.toBech32()),
+ contentDescription = "My QR"
+ )
+ }
+ }
+ )
+}
\ No newline at end of file
diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ScanScreen.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ScanScreen.kt
index 1386c22..b351b02 100644
--- a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ScanScreen.kt
+++ b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ScanScreen.kt
@@ -52,7 +52,8 @@ fun ScanScreen(
TopAppBar(
title = {
Text(
- text = "Scan QR", style = MaterialTheme.typography.titleMediumEmphasized
+ text = "Scan QR",
+ style = MaterialTheme.typography.titleMediumEmphasized
)
},
navigationIcon = {