diff --git a/app/src/main/java/com/dcrandroid/activities/WalletSettings.kt b/app/src/main/java/com/dcrandroid/activities/WalletSettings.kt index 273cfcf0f..d1985d5bf 100644 --- a/app/src/main/java/com/dcrandroid/activities/WalletSettings.kt +++ b/app/src/main/java/com/dcrandroid/activities/WalletSettings.kt @@ -54,6 +54,27 @@ class WalletSettings : BaseActivity() { change_spending_pass.setOnClickListener { ChangePassUtil(this, walletID).begin() } + + rescan_blockchain.setOnClickListener { + if (multiWallet!!.isSyncing) { + SnackBar.showError(this, R.string.err_sync_in_progress) + } else if (!multiWallet!!.isSynced) { + SnackBar.showError(this, R.string.not_connected) + } else if (multiWallet!!.isRescanning) { + SnackBar.showError(this, R.string.err_rescan_in_progress) + } else { + InfoDialog(this) + .setDialogTitle(getString(R.string.rescan_blockchain)) + .setMessage(getString(R.string.rescan_blockchain_warning)) + .setPositiveButton(getString(R.string.yes), DialogInterface.OnClickListener { _, _ -> + multiWallet!!.rescanBlocks(walletID) + SnackBar.showText(this, R.string.rescan_progress_notification) + }) + .setNegativeButton(getString(R.string.no)) + .show() + } + + } remove_wallet.setOnClickListener { if (multiWallet!!.isSyncing || multiWallet!!.isSynced) { diff --git a/app/src/main/java/com/dcrandroid/util/SyncLayoutUtil.kt b/app/src/main/java/com/dcrandroid/util/SyncLayoutUtil.kt index 4d1e736a2..8093d45a8 100644 --- a/app/src/main/java/com/dcrandroid/util/SyncLayoutUtil.kt +++ b/app/src/main/java/com/dcrandroid/util/SyncLayoutUtil.kt @@ -27,7 +27,7 @@ import kotlinx.android.synthetic.main.synced_unsynced_layout.view.* import kotlinx.android.synthetic.main.syncing_layout.view.* import kotlinx.coroutines.* -class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: () -> Unit, scrollToBottom: () -> Unit) : SyncProgressListener { +class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: () -> Unit, scrollToBottom: () -> Unit) : SyncProgressListener, BlocksRescanProgressListener { private val context: Context get() = syncLayout.context @@ -51,6 +51,8 @@ class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: ( multiWallet.removeSyncProgressListener(this.javaClass.name) multiWallet.addSyncProgressListener(this, this.javaClass.name) + multiWallet.setBlocksRescanProgressListener(this) + if (multiWallet.isSyncing) { displaySyncingLayout() multiWallet.publishLastSyncProgress(this.javaClass.name) @@ -71,7 +73,13 @@ class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: ( syncLayout.syncing_cancel_layout.setOnClickListener { GlobalScope.launch(Dispatchers.Main) { it.isEnabled = false - launch(Dispatchers.Default) { multiWallet.cancelSync() } + launch(Dispatchers.Default) { + if (multiWallet.isSyncing) { + multiWallet.cancelSync() + } else if (multiWallet.isRescanning) { + multiWallet.cancelRescan() + } + } it.isEnabled = true } } @@ -224,6 +232,12 @@ class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: ( syncLayout.tv_online_offline_status.setText(R.string.online) syncLayout.view_online_offline_status.setBackgroundResource(R.drawable.online_dot) + + syncLayout.syncing_layout.syncing_layout_status.text = if (multiWallet.isRescanning) { + context.getString(R.string.rescanning_blocks_ellipsis) + } else { + context.getString(R.string.syncing_state) + } } private fun showSyncVerboseExtras() { @@ -371,9 +385,53 @@ class SyncLayoutUtil(private val syncLayout: LinearLayout, restartSyncProcess: ( syncLayout.connected_peers.text = HtmlCompat.fromHtml(context.getString(R.string.connected_peers, multiWallet.connectedPeers()), 0) } else if (multiWallet.isSyncing) { syncLayout.tv_syncing_layout_connected_peer.text = numberOfConnectedPeers.toString() + } else if (multiWallet.isRescanning) { + syncLayout.tv_steps_title.setText(R.string.connected_peers_count) + syncLayout.tv_steps.text = multiWallet.connectedPeers().toString() } } } override fun debug(debugInfo: DebugInfo?) {} + + override fun onBlocksRescanStarted(walletID: Long) { + displaySyncingLayout() + } + + override fun onBlocksRescanEnded(walletID: Long, e: java.lang.Exception?) { + displaySyncedUnsynced() + } + + override fun onBlocksRescanProgress(report: HeadersRescanProgressReport) { + GlobalScope.launch(Dispatchers.Main) { + // connected peers + syncLayout.tv_steps.setText(R.string.connected_peers_count) + syncLayout.tv_steps_title.text = multiWallet.connectedPeers().toString() + + syncLayout.syncing_layout_connected_peers_row.hide() + + showSyncVerboseExtras() + + // blocks scanned + syncLayout.tv_block_header_fetched.setText(R.string.scanned_blocks) + syncLayout.tv_fetch_discover_scan_count.text = report.currentRescanHeight.toString() + + // scan progress + syncLayout.tv_progress.setText(R.string.syncing_progress) + syncLayout.tv_days.text = context.getString(R.string.blocks_left, + report.totalHeadersToScan - report.currentRescanHeight) + + if (multiWallet.openedWalletsCount() > 1) { + syncLayout.syncing_layout_wallet_name.show() + + val wallet = multiWallet.walletWithID(report.walletID) + syncLayout.tv_syncing_layout_wallet_name.text = wallet.name + } else { + syncLayout.syncing_layout_wallet_name.hide() + } + } + + publishSyncProgress(report.generalSyncProgress) + displaySyncingLayoutIfNotShowing() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_debug.xml b/app/src/main/res/layout/activity_debug.xml index 20428d4ab..bb366ff7b 100644 --- a/app/src/main/res/layout/activity_debug.xml +++ b/app/src/main/res/layout/activity_debug.xml @@ -112,6 +112,27 @@ + + + + + + + + + - - - - + android:layout_marginStart="@dimen/margin_padding_size_8" + android:gravity="center_vertical" + android:orientation="vertical"> - - - + - + + + + android:id="@+id/wallet_settings_scroll_view"> + android:background="@drawable/card_bg"> + android:textSize="@dimen/edit_text_size_16" /> @@ -154,7 +153,7 @@ android:text="@string/use_fingerprint" android:textColor="@color/darkBlueTextColor" android:fontFamily="@font/source_sans_pro" - android:textSize="@dimen/edit_text_size_16"/> + android:textSize="@dimen/edit_text_size_16" /> @@ -176,7 +175,7 @@ android:orientation="vertical" android:paddingTop="@dimen/margin_padding_size_16" android:paddingBottom="@dimen/margin_padding_size_8" - android:background="@drawable/card_bg" > + android:background="@drawable/card_bg"> + android:textSize="@dimen/edit_text_size_16" /> + android:textSize="@dimen/edit_text_size_14" /> + + + + + + + + + + + + @@ -232,7 +276,7 @@ android:orientation="vertical" android:paddingTop="@dimen/margin_padding_size_8" android:paddingBottom="@dimen/margin_padding_size_8" - android:background="@drawable/card_bg" > + android:background="@drawable/card_bg"> + android:textSize="@dimen/edit_text_size_16" /> diff --git a/app/src/main/res/layout/syncing_layout.xml b/app/src/main/res/layout/syncing_layout.xml index 117f1995c..c705e52aa 100644 --- a/app/src/main/res/layout/syncing_layout.xml +++ b/app/src/main/res/layout/syncing_layout.xml @@ -11,7 +11,7 @@ android:id="@+id/syncing_layout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:visibility="gone" + android:visibility="visible" android:orientation="vertical"> + app:fontFamily="@font/source_sans_pro" /> @@ -226,7 +226,7 @@ - + EXIT Delete No + Yes Confirm USD Settings @@ -201,7 +202,7 @@ Not enough funds. Empty Seed - Not Connected To Decred Network + Not connected to Decred network Private Passphrase is required Wallet Not Loaded Decred network is unreachable due to a lack of peers. @@ -316,6 +317,7 @@ Step 3/3 · %1$d%%]]> · %1$d%%]]> + · %1$d%%]]> · %1$d%%]]> Syncing progress %1$d%% @@ -482,11 +484,18 @@ Spending PIN/password changed Wallets log Write down seed phrase - Step 1/2 + Step 1/2 Your 33-word seed phrase I have wrote down all 33 words Security Tools Various tools that help in different aspects of crypto currency security will be located here. Wallet removed + Rescanning Blocks… + Check statistics + Rescan blockchain + Check progress in Overview! + Are you sure? This could take some time. + Sync is in progress + A rescan is in progress \ No newline at end of file