Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/src/main/java/to/bitkit/repositories/BackupsRepo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ class BackupsRepo @Inject constructor(
Logger.info("Full restore completed", context = TAG)
Result.success(Unit)
} catch (e: Throwable) {
Logger.warn("Full restore error", e = e, context = TAG)
Result.failure(e)
} finally {
isRestoring = false
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/java/to/bitkit/repositories/WalletRepo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,6 @@ class WalletRepo @Inject constructor(
}
}

fun setRestoringWalletState(isRestoring: Boolean) {
_walletState.update { it.copy(isRestoringWallet = isRestoring) }
}

suspend fun createWallet(bip39Passphrase: String?): Result<Unit> = withContext(bgDispatcher) {
try {
val mnemonic = generateEntropyMnemonic()
Expand Down Expand Up @@ -526,6 +522,5 @@ data class WalletState(
val selectedTags: List<String> = listOf(),
val receiveOnSpendingBalance: Boolean = true,
val walletExists: Boolean = false,
val isRestoringWallet: Boolean = false,
val balanceDetails: BalanceDetails? = null, // TODO KEEP ONLY BalanceState IF POSSIBLE
)
62 changes: 26 additions & 36 deletions app/src/main/java/to/bitkit/ui/ContentView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
Expand All @@ -26,7 +27,6 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation
import androidx.navigation.compose.rememberNavController
import androidx.navigation.toRoute
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.serialization.Serializable
Expand All @@ -37,8 +37,8 @@ import to.bitkit.ui.components.AuthCheckScreen
import to.bitkit.ui.components.BottomSheetType
import to.bitkit.ui.components.SheetHost
import to.bitkit.ui.onboarding.InitializingWalletView
import to.bitkit.ui.onboarding.WalletInitResult
import to.bitkit.ui.onboarding.WalletInitResultView
import to.bitkit.ui.onboarding.WalletRestoreErrorView
import to.bitkit.ui.onboarding.WalletRestoreSuccessView
import to.bitkit.ui.screens.profile.CreateProfileScreen
import to.bitkit.ui.screens.profile.ProfileIntroScreen
import to.bitkit.ui.screens.scanner.QrScanningScreen
Expand Down Expand Up @@ -167,7 +167,6 @@ fun ContentView(
val navController = rememberNavController()
val context = LocalContext.current
val lifecycle = LocalLifecycleOwner.current.lifecycle
val scope = rememberCoroutineScope()

// Effects on app entering fg (ON_START) / bg (ON_STOP)
DisposableEffect(lifecycle) {
Expand Down Expand Up @@ -251,24 +250,28 @@ fun ContentView(
}

val restoreState = walletViewModel.restoreState
val isRestoringBackups = walletViewModel.restoreState == RestoreState.RestoringBackups
var restoreRetryCount by remember { mutableIntStateOf(0) }

if (walletIsInitializing) {
// TODO ADAPT THIS LOGIC TO WORK WITH LightningNodeService
if (nodeLifecycleState is NodeLifecycleState.ErrorStarting) {
WalletInitResultView(
result = WalletInitResult.Failed(nodeLifecycleState.cause),
onButtonClick = {
scope.launch {
try {
walletViewModel.setInitNodeLifecycleState()
walletViewModel.start()
} catch (e: Exception) {
Logger.error("Failed to start wallet on retry", e)
WalletRestoreErrorView(
retryCount = restoreRetryCount,
onRetry = {
restoreRetryCount++
walletViewModel.setInitNodeLifecycleState()
walletViewModel.start()
},
onProceedWithoutRestore = {
walletViewModel.proceedWithoutRestore(
onDone = {
walletIsInitializing = false
}
}
}
)
},
)
} else {
// wallet is being created or restored
InitializingWalletView(
shouldFinish = walletInitShouldFinish,
onComplete = {
Expand All @@ -277,26 +280,13 @@ fun ContentView(
if (nodeLifecycleState == NodeLifecycleState.Running) {
walletIsInitializing = false
}
}
},
isRestoring = restoreState.isRestoring(),
)
}
} else if (walletViewModel.isRestoringWallet || isRestoringBackups) {
InitializingWalletView(
shouldFinish = false,
onComplete = { /* Loading state, no completion */ },
isRestoringBackups = isRestoringBackups
)
} else if (restoreState is RestoreState.BackupRestoreCompleted) {
val result = restoreState.result
WalletInitResultView(
result = result,
onButtonClick = {
when (result) {
is WalletInitResult.Restored -> walletViewModel.onBackupRestoreSuccess()
is WalletInitResult.Failed -> walletViewModel.onBackupRestoreRetry()
}
},
onProceedWithoutRestore = { walletViewModel.proceedWithoutRestore() }
WalletRestoreSuccessView(
onContinue = { walletViewModel.onRestoreContinue() },
)
} else {
val balance by walletViewModel.balanceState.collectAsStateWithLifecycle()
Expand Down Expand Up @@ -388,7 +378,6 @@ fun ContentView(
settingsViewModel = settingsViewModel,
currencyViewModel = currencyViewModel,
transferViewModel = transferViewModel,
scope = scope,
)
}
}
Expand All @@ -404,8 +393,9 @@ private fun RootNavHost(
settingsViewModel: SettingsViewModel,
currencyViewModel: CurrencyViewModel,
transferViewModel: TransferViewModel,
scope: CoroutineScope,
) {
val scope = rememberCoroutineScope()

NavHost(navController, startDestination = Routes.Home) {
home(walletViewModel, appViewModel, activityListViewModel, settingsViewModel, navController)
settings(navController, settingsViewModel)
Expand Down Expand Up @@ -740,7 +730,7 @@ private fun NavGraphBuilder.shop(
)
}
composableWithDefaultTransitions<Routes.ShopWebView> {
ShopWebViewScreen (
ShopWebViewScreen(
onClose = { navController.navigateToHome() },
onBack = { navController.popBackStack() },
page = it.toRoute<Routes.ShopWebView>().page,
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/to/bitkit/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class MainActivity : FragmentActivity() {
try {
appViewModel.resetIsAuthenticatedState()
walletViewModel.setInitNodeLifecycleState()
walletViewModel.setRestoringWalletState(isRestoringWallet = true)
walletViewModel.setRestoringWalletState()
walletViewModel.restoreWallet(mnemonic, passphrase)
} catch (e: Throwable) {
appViewModel.toast(e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,23 @@ import to.bitkit.ui.theme.Colors
import to.bitkit.ui.utils.withAccent
import kotlin.math.roundToInt

const val LOADING_MS = 2000
const val RESTORING_MS = 8000

@SuppressLint("UnusedBoxWithConstraintsScope")
@Composable
fun InitializingWalletView(
shouldFinish: Boolean,
onComplete: () -> Unit,
isRestoringBackups: Boolean = false,
isRestoring: Boolean = false,
) {
BoxWithConstraints(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
val percentage = remember { Animatable(0f) }

val animationDuration = if (isRestoringBackups) 8000 else 2000
val animationDuration = if (isRestoring) RESTORING_MS else LOADING_MS

// Progress to 100%
LaunchedEffect(animationDuration) {
Expand Down
167 changes: 0 additions & 167 deletions app/src/main/java/to/bitkit/ui/onboarding/WalletInitResultView.kt

This file was deleted.

Loading
Loading