11package to.bitkit.ui.screens.settings
22
3- import androidx.compose.animation.AnimatedVisibility
4- import androidx.compose.animation.expandVertically
5- import androidx.compose.animation.fadeIn
6- import androidx.compose.animation.fadeOut
7- import androidx.compose.animation.shrinkVertically
83import androidx.compose.foundation.layout.Arrangement
94import androidx.compose.foundation.layout.Column
105import androidx.compose.foundation.layout.PaddingValues
@@ -15,39 +10,33 @@ import androidx.compose.foundation.layout.height
1510import androidx.compose.foundation.layout.padding
1611import androidx.compose.foundation.rememberScrollState
1712import androidx.compose.foundation.verticalScroll
18- import androidx.compose.material3.Icon
1913import androidx.compose.runtime.Composable
2014import androidx.compose.runtime.getValue
2115import androidx.compose.runtime.mutableStateOf
2216import androidx.compose.runtime.remember
2317import androidx.compose.runtime.setValue
2418import androidx.compose.ui.Modifier
2519import androidx.compose.ui.platform.LocalContext
26- import androidx.compose.ui.res.painterResource
2720import androidx.compose.ui.tooling.preview.Preview
2821import androidx.compose.ui.unit.dp
2922import androidx.core.content.FileProvider
3023import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
3124import androidx.lifecycle.compose.collectAsStateWithLifecycle
3225import androidx.navigation.NavController
33- import com.synonym.vssclient.KeyVersion
3426import to.bitkit.R
3527import to.bitkit.env.Env
36- import to.bitkit.models.BackupCategory
3728import to.bitkit.ui.components.ButtonSize
3829import to.bitkit.ui.components.PrimaryButton
3930import to.bitkit.ui.components.SecondaryButton
4031import to.bitkit.ui.components.TextInput
4132import to.bitkit.ui.components.settings.SectionFooter
4233import to.bitkit.ui.components.settings.SectionHeader
4334import to.bitkit.ui.components.settings.SettingsTextButtonRow
44- import to.bitkit.ui.scaffold.AppAlertDialog
4535import to.bitkit.ui.scaffold.AppTopBar
4636import to.bitkit.ui.scaffold.DrawerNavIcon
4737import to.bitkit.ui.scaffold.ScreenColumn
4838import to.bitkit.ui.shared.util.shareFile
4939import to.bitkit.ui.theme.AppThemeSurface
50- import to.bitkit.ui.theme.Colors
5140import to.bitkit.viewmodels.LdkDebugUiState
5241import to.bitkit.viewmodels.LdkDebugViewModel
5342import java.io.File
@@ -67,9 +56,6 @@ fun LdkDebugScreen(
6756 onPasteAndAddPeer = viewModel::pasteAndAddPeer,
6857 onLogNetworkGraphInfo = viewModel::logNetworkGraphInfo,
6958 onExportNetworkGraph = viewModel::exportNetworkGraph,
70- onListVssKeys = viewModel::listVssKeys,
71- onDeleteVssKey = viewModel::deleteVssKey,
72- onDeleteAllVssKeys = viewModel::deleteAllVssKeys,
7359 onRestartNode = viewModel::restartNode,
7460 )
7561}
@@ -83,13 +69,9 @@ private fun LdkDebugContent(
8369 onPasteAndAddPeer : () -> Unit ,
8470 onLogNetworkGraphInfo : () -> Unit ,
8571 onExportNetworkGraph : (onFileReady: (File ) -> Unit ) -> Unit ,
86- onListVssKeys : () -> Unit ,
87- onDeleteVssKey : (String ) -> Unit ,
88- onDeleteAllVssKeys : () -> Unit ,
8972 onRestartNode : () -> Unit ,
9073) {
9174 val context = LocalContext .current
92- var showDeleteAllConfirmation by remember { mutableStateOf(false ) }
9375
9476 ScreenColumn {
9577 AppTopBar (
@@ -136,6 +118,7 @@ private fun LdkDebugContent(
136118 SettingsTextButtonRow (
137119 title = " Log Graph Info" ,
138120 iconRes = R .drawable.ic_list,
121+ iconSize = 24 .dp,
139122 enabled = ! uiState.isLoading,
140123 onClick = onLogNetworkGraphInfo,
141124 )
@@ -148,6 +131,7 @@ private fun LdkDebugContent(
148131 SettingsTextButtonRow (
149132 title = " Export to File" ,
150133 iconRes = R .drawable.ic_share,
134+ iconSize = 24 .dp,
151135 enabled = ! uiState.isLoading,
152136 onClick = {
153137 onExportNetworkGraph { file ->
@@ -157,113 +141,34 @@ private fun LdkDebugContent(
157141 },
158142 )
159143
160- SectionHeader (" VSS" )
161- SettingsTextButtonRow (
162- title = " List Keys" ,
163- iconRes = R .drawable.ic_stack,
164- value = if (uiState.vssKeys.isNotEmpty()) " ${uiState.vssKeys.size} found" else " " ,
165- enabled = ! uiState.isLoading,
166- onClick = onListVssKeys,
167- )
168- AnimatedVisibility (
169- visible = uiState.vssKeys.isNotEmpty(),
170- enter = fadeIn() + expandVertically(),
171- exit = fadeOut() + shrinkVertically(),
172- ) {
173- Column {
174- uiState.vssKeys.take(MAX_VSS_KEYS_DISPLAY ).forEach { keyVersion ->
175- SettingsTextButtonRow (
176- title = keyVersion.key,
177- iconRes = R .drawable.ic_tag,
178- value = " v${keyVersion.version} " ,
179- enabled = ! uiState.isLoading,
180- height = 44 .dp,
181- trailingContent = {
182- SecondaryButton (
183- text = null ,
184- onClick = { onDeleteVssKey(keyVersion.key) },
185- enabled = ! uiState.isLoading,
186- size = ButtonSize .Small ,
187- fullWidth = false ,
188- icon = {
189- Icon (
190- painter = painterResource(R .drawable.ic_trash),
191- contentDescription = " Delete key" ,
192- tint = Colors .Red ,
193- )
194- },
195- )
196- },
197- )
198- }
199- if (uiState.vssKeys.size > MAX_VSS_KEYS_DISPLAY ) {
200- SectionFooter (" …and ${uiState.vssKeys.size - MAX_VSS_KEYS_DISPLAY } more" )
201- }
202- }
203- }
204- SettingsTextButtonRow (
205- title = " Delete All" ,
206- iconRes = R .drawable.ic_trash,
207- enabled = ! uiState.isLoading && uiState.vssKeys.isNotEmpty(),
208- onClick = { showDeleteAllConfirmation = true },
209- )
210-
211144 SectionHeader (" NODE" )
212145 SettingsTextButtonRow (
213146 title = " Restart" ,
214147 iconRes = R .drawable.ic_arrow_clockwise,
148+ iconSize = 24 .dp,
215149 enabled = ! uiState.isLoading,
216150 onClick = onRestartNode,
217151 )
218152
219153 Spacer (modifier = Modifier .height(32 .dp))
220154 }
221155 }
222-
223- if (showDeleteAllConfirmation) {
224- AppAlertDialog (
225- title = " Delete All VSS Keys?" ,
226- text = " This will permanently delete all ${uiState.vssKeys.size} VSS key(s). This action cannot be undone." ,
227- confirmText = " Delete All" ,
228- onConfirm = {
229- showDeleteAllConfirmation = false
230- onDeleteAllVssKeys()
231- },
232- onDismiss = { showDeleteAllConfirmation = false },
233- )
234- }
235156}
236157
237- private const val MAX_VSS_KEYS_DISPLAY = 10
238-
239158@Preview(showSystemUi = true )
240159@Composable
241160private fun Preview () {
242- val vssKeys = BackupCategory .entries.mapIndexed { i, key -> KeyVersion (key.name, (i + 1 ).toLong()) }
243- var uiState by remember {
244- mutableStateOf(
245- LdkDebugUiState (
246- // vssKeys = vssKeys,
247- )
248- )
249- }
250-
251- fun listVssKeys () {
252- uiState = uiState.copy(vssKeys = vssKeys)
253- }
161+ var uiState by remember { mutableStateOf(LdkDebugUiState ()) }
254162
255163 AppThemeSurface {
256164 LdkDebugContent (
257165 uiState = uiState,
258166 onBackClick = {},
259- onNodeUriChange = {},
167+ onNodeUriChange = { uiState = uiState.copy(nodeUri = it) },
260168 onAddPeer = {},
261169 onPasteAndAddPeer = {},
262170 onLogNetworkGraphInfo = {},
263171 onExportNetworkGraph = {},
264- onListVssKeys = ::listVssKeys,
265- onDeleteVssKey = {},
266- onDeleteAllVssKeys = {},
267172 onRestartNode = {},
268173 )
269174 }
0 commit comments