diff --git a/zcash-android-wallet-app/app/libs/zcash-android-wallet-sdk-1.7.3.aar b/zcash-android-wallet-app/app/libs/zcash-android-wallet-sdk-1.7.3.aar index b77fee1..355eff9 100644 Binary files a/zcash-android-wallet-app/app/libs/zcash-android-wallet-sdk-1.7.3.aar and b/zcash-android-wallet-app/app/libs/zcash-android-wallet-sdk-1.7.3.aar differ diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/extention/Context.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/extention/Context.kt index 5094d7c..3d830d5 100644 --- a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/extention/Context.kt +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/extention/Context.kt @@ -4,15 +4,49 @@ import android.content.Context import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog -internal inline fun Context.alert(@StringRes messageResId: Int, crossinline block: () -> Unit = {}) { - AlertDialog.Builder(this) - .setMessage(messageResId) - .setPositiveButton(android.R.string.ok) { dialog, _ -> +internal val NO_ACTION = {} + +/** + * Calls context.alert with the given string. + */ +internal fun Context.alert( + @StringRes messageResId: Int, + @StringRes positiveButtonResId: Int = android.R.string.ok, + @StringRes negativeButtonResId: Int = android.R.string.cancel, + positiveAction: () -> Unit = NO_ACTION, + negativeAction: () -> Unit = NO_ACTION +) { + alert( + message = getString(messageResId), + positiveButtonResId = positiveButtonResId, + negativeButtonResId = negativeButtonResId, + positiveAction = positiveAction, + negativeAction = negativeAction + ) +} + +/** + * Show an alert with the given message, if the block exists, it will execute after the user clicks the positive button, + * while clicking the negative button will abort the block. If no block exists, there will only be a positive button. + */ +internal fun Context.alert( + message: String, + @StringRes positiveButtonResId: Int = android.R.string.ok, + @StringRes negativeButtonResId: Int = android.R.string.cancel, + positiveAction: (() -> Unit) = NO_ACTION, + negativeAction: (() -> Unit) = NO_ACTION +) { + val builder = AlertDialog.Builder(this) + .setMessage(message) + .setPositiveButton(positiveButtonResId) { dialog, _ -> dialog.dismiss() - block() + positiveAction() } - .setNegativeButton(android.R.string.cancel) { dialog, _ -> + if (positiveAction !== NO_ACTION || negativeAction !== NO_ACTION) { + builder.setNegativeButton(negativeButtonResId) { dialog, _ -> dialog.dismiss() + negativeAction() } - .show() + } + builder.show() } \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/HomeFragment.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/HomeFragment.kt index ee36003..32cce7c 100644 --- a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/HomeFragment.kt +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/HomeFragment.kt @@ -180,6 +180,16 @@ class HomeFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, HomeP snackbar = snackbar.showOk(view!!, "Oops! It was too late to cancel!") } + override fun onSynchronizerError(error: Throwable?): Boolean { + context?.alert( + message = "WARNING: A critical error has occurred and " + + "this app will not function properly until that is corrected!", + positiveButtonResId = R.string.ignore, + negativeButtonResId = R.string.details, + negativeAction = { context?.alert("Synchronization error:\n\n$error") } + ) + return false + } // // View API diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/ReceiveFragment.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/ReceiveFragment.kt index 055fa8a..6a028de 100644 --- a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/ReceiveFragment.kt +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/ReceiveFragment.kt @@ -90,7 +90,7 @@ class ReceiveFragment : BaseFragment() { // TODO: replace with tiered load. First check memory reference (textview contents?) then check DB, then load from JNI and write to DB private fun loadAddress(): String { - return synchronizer.getAddress() + return synchronizer.address } } diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/SyncFragment.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/SyncFragment.kt index 4081ac1..d60998f 100644 --- a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/SyncFragment.kt +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/fragment/SyncFragment.kt @@ -10,8 +10,13 @@ import androidx.navigation.NavOptions import androidx.transition.TransitionInflater import cash.z.android.wallet.R import cash.z.android.wallet.databinding.FragmentSyncBinding +import cash.z.android.wallet.extention.alert +import cash.z.android.wallet.extention.showOk import cash.z.android.wallet.ui.presenter.Presenter import cash.z.android.wallet.ui.presenter.ProgressPresenter +import cash.z.wallet.sdk.data.Synchronizer +import cash.z.wallet.sdk.data.twig +import com.google.android.material.snackbar.Snackbar import dagger.Binds import dagger.Module import dagger.android.ContributesAndroidInjector @@ -21,6 +26,7 @@ import javax.inject.Singleton class SyncFragment : ProgressFragment(R.id.progress_sync) { + private lateinit var binding: FragmentSyncBinding // @@ -59,6 +65,7 @@ class SyncFragment : ProgressFragment(R.id.progress_sync) { (view?.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() } + synchronizer.onSynchronizerErrorListener = ::onSynchronizerError } override fun onResume() { @@ -93,6 +100,17 @@ class SyncFragment : ProgressFragment(R.id.progress_sync) { } } + fun onSynchronizerError(error: Throwable?): Boolean { + context?.alert( + message = "WARNING: A critical error has occurred and " + + "this app will not function properly until that is corrected!", + positiveButtonResId = R.string.ignore, + negativeButtonResId = R.string.details, + negativeAction = { context?.alert("Synchronization error:\n\n$error") } + ) + return false + } + } @Module diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/presenter/HomePresenter.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/presenter/HomePresenter.kt index fb9fbc5..7ad5cf5 100644 --- a/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/presenter/HomePresenter.kt +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/presenter/HomePresenter.kt @@ -1,15 +1,17 @@ package cash.z.android.wallet.ui.presenter import cash.z.android.wallet.di.annotation.FragmentScope +import cash.z.android.wallet.extention.alert import cash.z.android.wallet.ui.fragment.HomeFragment import cash.z.android.wallet.ui.presenter.Presenter.PresenterView import cash.z.wallet.sdk.dao.WalletTransaction import cash.z.wallet.sdk.data.* import dagger.Binds import dagger.Module -import kotlinx.coroutines.* -import kotlinx.coroutines.Dispatchers.Main +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job import kotlinx.coroutines.channels.ReceiveChannel +import kotlinx.coroutines.launch import javax.inject.Inject class HomePresenter @Inject constructor( @@ -24,6 +26,7 @@ class HomePresenter @Inject constructor( fun updateBalance(old: Long, new: Long) fun setActiveTransactions(activeTransactionMap: Map) fun onCancelledTooLate() + fun onSynchronizerError(error: Throwable?): Boolean } override suspend fun start() { @@ -35,6 +38,7 @@ class HomePresenter @Inject constructor( launchTransactionBinder(synchronizer.allTransactions()) launchActiveTransactionMonitor(synchronizer.activeTransactions()) } + synchronizer.onSynchronizerErrorListener = view::onSynchronizerError } override fun stop() { diff --git a/zcash-android-wallet-app/app/src/main/res/values/strings.xml b/zcash-android-wallet-app/app/src/main/res/values/strings.xml index 2ad140c..7d975c9 100644 --- a/zcash-android-wallet-app/app/src/main/res/values/strings.xml +++ b/zcash-android-wallet-app/app/src/main/res/values/strings.xml @@ -10,6 +10,8 @@ Settings + ignore + details cancel cancelled OK