diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/exchanges')
3 files changed, 48 insertions, 0 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeAdapter.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeAdapter.kt index fa35660..cb294ac 100644 --- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeAdapter.kt +++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeAdapter.kt @@ -33,6 +33,7 @@ interface ExchangeClickListener { fun onExchangeSelected(item: ExchangeItem) fun onManualWithdraw(item: ExchangeItem) fun onPeerReceive(item: ExchangeItem) + fun onExchangeDelete(item: ExchangeItem) } internal class ExchangeAdapter( @@ -98,6 +99,10 @@ internal class ExchangeAdapter( listener.onPeerReceive(item) true } + R.id.action_delete -> { + listener.onExchangeDelete(item) + true + } else -> false } } diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt index c622d65..494b187 100644 --- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt @@ -32,9 +32,11 @@ import androidx.lifecycle.Lifecycle.State.RESUMED import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL +import com.google.android.material.dialog.MaterialAlertDialogBuilder import net.taler.common.EventObserver import net.taler.common.fadeIn import net.taler.common.fadeOut +import net.taler.common.showError import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.databinding.FragmentExchangeListBinding @@ -101,6 +103,13 @@ open class ExchangeListFragment : Fragment(), ExchangeClickListener { showError(error) } }) + exchangeManager.deleteError.observe(viewLifecycleOwner, EventObserver { error -> + if (model.devMode.value == true) { + showError(error) + } else { + showError(error.userFacingMsg) + } + }) } protected open fun onExchangeUpdate(exchanges: List<ExchangeItem>) { @@ -136,4 +145,19 @@ open class ExchangeListFragment : Fragment(), ExchangeClickListener { findNavController().navigate(R.id.action_global_receiveFunds) } + override fun onExchangeDelete(item: ExchangeItem) { + val optionsArray = arrayOf(getString(R.string.exchange_delete_force)) + val checkedArray = BooleanArray(1) { false } + + MaterialAlertDialogBuilder(requireContext(), R.style.MaterialAlertDialog_Material3) + .setTitle(R.string.exchange_delete) + .setMultiChoiceItems(optionsArray, checkedArray) { _, which, isChecked -> + checkedArray[which] = isChecked + } + .setNegativeButton(R.string.transactions_delete) { _, _ -> + exchangeManager.delete(item.exchangeBaseUrl, checkedArray[0]) + } + .setPositiveButton(R.string.cancel) { _, _ -> } + .show() + } } diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt index 5d76885..eb01cab 100644 --- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt +++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt @@ -59,6 +59,9 @@ class ExchangeManager( private val mListError = MutableLiveData<Event<TalerErrorInfo>>() val listError: LiveData<Event<TalerErrorInfo>> = mListError + private val mDeleteError = MutableLiveData<Event<TalerErrorInfo>>() + val deleteError: LiveData<Event<TalerErrorInfo>> = mDeleteError + var withdrawalExchange: ExchangeItem? = null private fun list(): LiveData<List<ExchangeItem>> { @@ -92,6 +95,22 @@ class ExchangeManager( } } + fun delete(exchangeUrl: String, purge: Boolean = false) = scope.launch { + mProgress.value = true + api.request<Unit>("deleteExchange") { + put("exchangeBaseUrl", exchangeUrl) + put("purge", purge) + }.onError { + Log.e(TAG, "Error deleting exchange: $it") + mProgress.value = false + mDeleteError.value = it.toEvent() + }.onSuccess { + mProgress.value = false + Log.d(TAG, "Exchange $exchangeUrl deleted") + list() + } + } + fun findExchangeForCurrency(currency: String): Flow<ExchangeItem?> = flow { emit(findExchange(currency)) } |