Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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