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