From 3a48a2876b29d4519276de9fdd3ba08b80320c9c Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 20 Dec 2024 14:57:55 -0300 Subject: [PATCH] Fix loading screen when no internet --- .../nostrsigner/ui/IncomingRequestScreen.kt | 13 +- .../greenart7c3/nostrsigner/ui/MainScreen.kt | 906 +++++++++--------- 2 files changed, 463 insertions(+), 456 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/IncomingRequestScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/IncomingRequestScreen.kt index cebf069e..3ed1d041 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/IncomingRequestScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/IncomingRequestScreen.kt @@ -46,9 +46,10 @@ fun IncomingRequestScreen( database: AppDatabase, navController: NavController, onRemoveIntentData: (IntentData, IntentResultType) -> Unit, + onLoading: (Boolean) -> Unit, ) { - var loading by remember { mutableStateOf(false) } val context = LocalContext.current + var loading by remember { mutableStateOf(false) } LaunchedEffect(Unit) { launch(Dispatchers.IO) { @@ -96,9 +97,8 @@ fun IncomingRequestScreen( account, database, onRemoveIntentData, - ) { - loading = it - } + onLoading, + ) } else { MultiEventHomeScreen( paddingValues = paddingValues, @@ -107,9 +107,8 @@ fun IncomingRequestScreen( account, navController, onRemoveIntentData, - ) { - loading = it - } + onLoading, + ) } } } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt index fff9ec66..8314ee87 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt @@ -793,499 +793,507 @@ fun MainScreen( } }, ) { padding -> - NavHost( - navController, - startDestination = localRoute, - enterTransition = { fadeIn(animationSpec = tween(200)) }, - exitTransition = { fadeOut(animationSpec = tween(200)) }, - ) { - composable( - "login", - content = { - MainPage( - scope = scope, - navController = navController, - ) - }, - ) - - composable( - "create", - content = { - SignUpPage( - accountViewModel = accountStateViewModel, - scope = scope, - navController = navController, - storageHelper = storageHelper, - onFinish = { - navController.navigate(Route.Applications.route) { - popUpTo(0) - } - }, - ) - }, - ) - - composable( - "loginPage", - content = { - LoginPage( - accountViewModel = accountStateViewModel, - navController = navController, - onFinish = { - navController.navigate(Route.Applications.route) { - popUpTo(0) - } - }, - ) - }, - ) - - composable( - Route.IncomingRequest.route, - content = { - IncomingRequestScreen( - Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - paddingValues = PaddingValues( - top = padding.calculateTopPadding() + (verticalPadding * 1.5f), - bottom = padding.calculateBottomPadding(), - start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, - end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, - ), - intents, - packageName, - appName, - account, - database, - navController, - onRemoveIntentData, - ) - }, - ) - - composable( - Route.Applications.route, - content = { - PermissionsScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account = account, - navController = navController, - database = database, - ) - }, - ) - - composable( - Route.Settings.route, - content = { - SettingsScreen( - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - accountStateViewModel, - account, - navController, - ) - }, - ) - - composable( - Route.AccountBackup.route, - content = { - AccountBackupScreen( - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account, - ) - }, - ) - - composable( - Route.Permission.route, - arguments = listOf(navArgument("packageName") { type = NavType.StringType }), - content = { - it.arguments?.getString("packageName")?.let { packageName -> - EditPermission( - modifier = - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account = account, - selectedPackage = packageName, + var isLoading by remember { mutableStateOf(false) } + if (isLoading) { + CenterCircularProgressIndicator(Modifier.padding(padding)) + } else { + NavHost( + navController, + startDestination = localRoute, + enterTransition = { fadeIn(animationSpec = tween(200)) }, + exitTransition = { fadeOut(animationSpec = tween(200)) }, + ) { + composable( + "login", + content = { + MainPage( + scope = scope, navController = navController, - database = database, ) - } - }, - ) + }, + ) - composable( - Route.Logs.route, - content = { - LogsScreen( - PaddingValues( - top = padding.calculateTopPadding() + (verticalPadding * 1.5f), - bottom = padding.calculateBottomPadding(), - start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, - end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, - ), - account = account, - ) - }, - ) + composable( + "create", + content = { + SignUpPage( + accountViewModel = accountStateViewModel, + scope = scope, + navController = navController, + storageHelper = storageHelper, + onFinish = { + navController.navigate(Route.Applications.route) { + popUpTo(0) + } + }, + ) + }, + ) - composable( - Route.ActiveRelays.route, - content = { - ActiveRelaysScreen( - navController = navController, - modifier = - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - ) - }, - ) + composable( + "loginPage", + content = { + LoginPage( + accountViewModel = accountStateViewModel, + navController = navController, + onFinish = { + navController.navigate(Route.Applications.route) { + popUpTo(0) + } + }, + ) + }, + ) - composable( - Route.Language.route, - content = { - LanguageScreen( - modifier = - Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account = account, - ) - }, - ) - - composable( - Route.DefaultRelays.route, - content = { - DefaultRelaysScreen( - modifier = - Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - accountStateViewModel = accountStateViewModel, - account = account, - ) - }, - ) - - composable( - Route.SignPolicy.route, - content = { - SignPolicySettingsScreen( - modifier = - Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account = account, - navController = navController, - ) - }, - ) - - composable( - Route.Security.route, - content = { - SecurityScreen( - modifier = - Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - navController = navController, - ) - }, - ) - - composable( - Route.NewApplication.route, - content = { - NewApplicationScreen( - account = account, - accountStateViewModel = accountStateViewModel, - navController = navController, - modifier = - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - ) - }, - ) - - composable( - Route.NewNsecBunker.route, - content = { - NewNsecBunkerScreen( - database = database, - account = account, - accountStateViewModel = accountStateViewModel, - navController = navController, - modifier = - Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - ) - }, - ) - - composable( - Route.NSecBunkerCreated.route, - arguments = listOf(navArgument("key") { type = NavType.StringType }), - content = { - it.arguments?.getString("key")?.let { key -> - NewNsecBunkerCreatedScreen( - database = database, - account = account, - key = key, - modifier = + composable( + Route.IncomingRequest.route, + content = { + IncomingRequestScreen( Modifier .fillMaxSize() - .verticalScroll(rememberScrollState()) .padding(padding) .padding(horizontal = verticalPadding) .padding(top = verticalPadding * 1.5f), - ) - } - }, - ) - - composable( - Route.Activity.route, - arguments = listOf(navArgument("key") { type = NavType.StringType }), - content = { - it.arguments?.getString("key")?.let { key -> - ActivityScreen( - database = database, - key = key, paddingValues = PaddingValues( top = padding.calculateTopPadding() + (verticalPadding * 1.5f), bottom = padding.calculateBottomPadding(), start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, ), - modifier = - Modifier - .fillMaxSize(), + intents, + packageName, + appName, + account, + database, + navController, + onRemoveIntentData, + onLoading = { + isLoading = it + }, ) - } - }, - ) + }, + ) - composable( - Route.RelayLogScreen.route, - arguments = listOf(navArgument("url") { type = NavType.StringType }), - content = { - it.arguments?.getString("url")?.let { url -> - val localUrl = Base64.getDecoder().decode(url).toString(Charsets.UTF_8) - RelayLogScreen( - url = localUrl, - paddingValues = PaddingValues( - top = padding.calculateTopPadding() + (verticalPadding * 1.5f), - bottom = padding.calculateBottomPadding(), - start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, - end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, - ), - ) - } - }, - ) - - composable( - Route.EditConfiguration.route, - arguments = listOf(navArgument("key") { type = NavType.StringType }), - content = { - it.arguments?.getString("key")?.let { key -> - EditConfigurationScreen( + composable( + Route.Applications.route, + content = { + PermissionsScreen( modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()) .padding(padding) .padding(horizontal = verticalPadding) .padding(top = verticalPadding * 1.5f), - database = database, - key = key, - accountStateViewModel = accountStateViewModel, account = account, navController = navController, + database = database, ) - } - }, - ) + }, + ) - composable( - Route.SetupPin.route, - content = { - SetupPinScreen( - modifier = Modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - navController = navController, - ) - }, - ) + composable( + Route.Settings.route, + content = { + SettingsScreen( + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + accountStateViewModel, + account, + navController, + ) + }, + ) - composable( - Route.ConfirmPin.route, - arguments = listOf(navArgument("pin") { type = NavType.StringType }), - content = { - it.arguments?.getString("pin")?.let { pin -> - ConfirmPinScreen( - modifier = Modifier + composable( + Route.AccountBackup.route, + content = { + AccountBackupScreen( + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account, + ) + }, + ) + + composable( + Route.Permission.route, + arguments = listOf(navArgument("packageName") { type = NavType.StringType }), + content = { + it.arguments?.getString("packageName")?.let { packageName -> + EditPermission( + modifier = + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account = account, + selectedPackage = packageName, + navController = navController, + database = database, + ) + } + }, + ) + + composable( + Route.Logs.route, + content = { + LogsScreen( + PaddingValues( + top = padding.calculateTopPadding() + (verticalPadding * 1.5f), + bottom = padding.calculateBottomPadding(), + start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, + end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, + ), + account = account, + ) + }, + ) + + composable( + Route.ActiveRelays.route, + content = { + ActiveRelaysScreen( + navController = navController, + modifier = + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + ) + }, + ) + + composable( + Route.Language.route, + content = { + LanguageScreen( + modifier = + Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account = account, + ) + }, + ) + + composable( + Route.DefaultRelays.route, + content = { + DefaultRelaysScreen( + modifier = + Modifier .fillMaxSize() .padding(padding) .padding(horizontal = verticalPadding) .padding(top = verticalPadding * 1.5f), accountStateViewModel = accountStateViewModel, - pin = pin, + account = account, + ) + }, + ) + + composable( + Route.SignPolicy.route, + content = { + SignPolicySettingsScreen( + modifier = + Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account = account, navController = navController, ) - } - }, - ) + }, + ) - composable( - Route.SeeDetails.route, - content = { - SeeDetailsScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - ) - }, - ) + composable( + Route.Security.route, + content = { + SecurityScreen( + modifier = + Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + navController = navController, + ) + }, + ) - composable( - Route.RelaysScreen.route, - content = { - RelaysScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - navController = navController, - ) - }, - ) + composable( + Route.NewApplication.route, + content = { + NewApplicationScreen( + account = account, + accountStateViewModel = accountStateViewModel, + navController = navController, + modifier = + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + ) + }, + ) - composable( - Route.DefaultProfileRelaysScreen.route, - content = { - DefaultProfileRelaysScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - account = account, - accountStateViewModel = accountStateViewModel, - ) - }, - ) + composable( + Route.NewNsecBunker.route, + content = { + NewNsecBunkerScreen( + database = database, + account = account, + accountStateViewModel = accountStateViewModel, + navController = navController, + modifier = + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + ) + }, + ) - composable( - Route.TorSettings.route, - content = { - ConnectOrbotScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), - onPost = { - LocalPreferences.updateProxy(context, true, it) - scope.launch(Dispatchers.IO) { - NotificationDataSource.stopSync() - NostrSigner.getInstance().checkForNewRelays() - NotificationDataSource.start() - scope.launch { - navController.navigate(Route.Settings.route) { - popUpTo(0) + composable( + Route.NSecBunkerCreated.route, + arguments = listOf(navArgument("key") { type = NavType.StringType }), + content = { + it.arguments?.getString("key")?.let { key -> + NewNsecBunkerCreatedScreen( + database = database, + account = account, + key = key, + modifier = + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + ) + } + }, + ) + + composable( + Route.Activity.route, + arguments = listOf(navArgument("key") { type = NavType.StringType }), + content = { + it.arguments?.getString("key")?.let { key -> + ActivityScreen( + database = database, + key = key, + paddingValues = PaddingValues( + top = padding.calculateTopPadding() + (verticalPadding * 1.5f), + bottom = padding.calculateBottomPadding(), + start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, + end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, + ), + modifier = + Modifier + .fillMaxSize(), + ) + } + }, + ) + + composable( + Route.RelayLogScreen.route, + arguments = listOf(navArgument("url") { type = NavType.StringType }), + content = { + it.arguments?.getString("url")?.let { url -> + val localUrl = Base64.getDecoder().decode(url).toString(Charsets.UTF_8) + RelayLogScreen( + url = localUrl, + paddingValues = PaddingValues( + top = padding.calculateTopPadding() + (verticalPadding * 1.5f), + bottom = padding.calculateBottomPadding(), + start = padding.calculateStartPadding(LayoutDirection.Ltr) + verticalPadding, + end = padding.calculateEndPadding(LayoutDirection.Ltr) + verticalPadding, + ), + ) + } + }, + ) + + composable( + Route.EditConfiguration.route, + arguments = listOf(navArgument("key") { type = NavType.StringType }), + content = { + it.arguments?.getString("key")?.let { key -> + EditConfigurationScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + database = database, + key = key, + accountStateViewModel = accountStateViewModel, + account = account, + navController = navController, + ) + } + }, + ) + + composable( + Route.SetupPin.route, + content = { + SetupPinScreen( + modifier = Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + navController = navController, + ) + }, + ) + + composable( + Route.ConfirmPin.route, + arguments = listOf(navArgument("pin") { type = NavType.StringType }), + content = { + it.arguments?.getString("pin")?.let { pin -> + ConfirmPinScreen( + modifier = Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + accountStateViewModel = accountStateViewModel, + pin = pin, + navController = navController, + ) + } + }, + ) + + composable( + Route.SeeDetails.route, + content = { + SeeDetailsScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + ) + }, + ) + + composable( + Route.RelaysScreen.route, + content = { + RelaysScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + navController = navController, + ) + }, + ) + + composable( + Route.DefaultProfileRelaysScreen.route, + content = { + DefaultProfileRelaysScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account = account, + accountStateViewModel = accountStateViewModel, + ) + }, + ) + + composable( + Route.TorSettings.route, + content = { + ConnectOrbotScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + onPost = { + LocalPreferences.updateProxy(context, true, it) + scope.launch(Dispatchers.IO) { + NotificationDataSource.stopSync() + NostrSigner.getInstance().checkForNewRelays() + NotificationDataSource.start() + scope.launch { + navController.navigate(Route.Settings.route) { + popUpTo(0) + } } } - } - }, - onError = { - scope.launch { - Toast.makeText( - context, - context.getString(R.string.could_not_connect_to_tor), - Toast.LENGTH_SHORT, - ).show() - } - }, - account = account, - ) - }, - ) - - composable( - Route.EditProfile.route, - arguments = listOf(navArgument("key") { type = NavType.StringType }), - content = { - it.arguments?.getString("key")?.let { key -> - EditProfileScreen( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - .padding(horizontal = verticalPadding) - .padding(top = verticalPadding * 1.5f), + }, + onError = { + scope.launch { + Toast.makeText( + context, + context.getString(R.string.could_not_connect_to_tor), + Toast.LENGTH_SHORT, + ).show() + } + }, account = account, - accountStateViewModel = accountStateViewModel, - npub = key, ) - } - }, - ) + }, + ) + + composable( + Route.EditProfile.route, + arguments = listOf(navArgument("key") { type = NavType.StringType }), + content = { + it.arguments?.getString("key")?.let { key -> + EditProfileScreen( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(padding) + .padding(horizontal = verticalPadding) + .padding(top = verticalPadding * 1.5f), + account = account, + accountStateViewModel = accountStateViewModel, + npub = key, + ) + } + }, + ) + } } } }