summaryrefslogtreecommitdiff
path: root/app/src/main/java/net/taler/wallet/PromptWithdraw.kt
blob: 57965f5d86d64b84be73a106ef744166db3f15fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package net.taler.wallet

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.navigation.findNavController
import com.google.android.material.snackbar.Snackbar
import me.zhanghai.android.materialprogressbar.MaterialProgressBar


class PromptWithdraw : Fragment() {

    private lateinit var model: WalletViewModel

    private fun triggerLoading() {
        val loading =
            model.withdrawStatus.value is WithdrawStatus.Loading || model.withdrawStatus.value is WithdrawStatus.Withdrawing
        val myActivity = activity!!
        val progressBar = myActivity.findViewById<MaterialProgressBar>(R.id.progress_bar)
        if (loading) {
            progressBar.visibility = View.VISIBLE
        } else {
            progressBar.visibility = View.INVISIBLE
        }
    }

    private fun showWithdrawStatus(view: View, status: WithdrawStatus) {
        val confirmButton = view.findViewById<Button>(R.id.button_confirm_withdraw)
        val promptWithdraw = view.findViewById<View>(R.id.prompt_withdraw)
        when (status) {
            is WithdrawStatus.ReceivedDetails -> {
                promptWithdraw.visibility = View.VISIBLE
                confirmButton.isEnabled = true
                val promptWithdraw = view.findViewById<View>(R.id.prompt_withdraw)
                promptWithdraw.visibility = View.VISIBLE
                val amountView = view.findViewById<TextView>(R.id.withdraw_amount)
                val exchangeView = view.findViewById<TextView>(R.id.withdraw_exchange)
                exchangeView.text = status.suggestedExchange
                @SuppressLint("SetTextI18n")
                amountView.text = "${status.amount.amount} ${status.amount.currency}"
            }
            is WithdrawStatus.Success -> {
                this.model.withdrawStatus.value = WithdrawStatus.None()
                activity!!.findNavController(R.id.nav_host_fragment)
                    .navigate(R.id.action_promptWithdraw_to_withdrawSuccessful)
            }
            is WithdrawStatus.Loading -> {
                promptWithdraw.visibility = View.INVISIBLE
                // Wait
            }
            is WithdrawStatus.Withdrawing -> {
                confirmButton.isEnabled = false

            }
            is WithdrawStatus.None -> {

            }
            is WithdrawStatus.TermsOfServiceReviewRequired -> {
                val navController = requireActivity().findNavController(R.id.nav_host_fragment)
                navController.navigate(R.id.action_promptWithdraw_to_reviewExchangeTOS)
            }
            else -> {
                val bar = Snackbar.make(view, "Bug: Unexpected result", Snackbar.LENGTH_SHORT)
                bar.show()
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        model = activity?.run {
            ViewModelProviders.of(this)[WalletViewModel::class.java]
        } ?: throw Exception("Invalid Activity")
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_prompt_withdraw, container, false)

        this.model.withdrawStatus.observe(this, Observer {
            triggerLoading()
            showWithdrawStatus(view, it)
        })

        view.findViewById<Button>(R.id.button_cancel_withdraw).setOnClickListener {
            val navController = requireActivity().findNavController(R.id.nav_host_fragment)
            model.cancelCurrentWithdraw()
            navController.navigateUp()
        }

        view.findViewById<Button>(R.id.button_confirm_withdraw).setOnClickListener {
            val status = this.model.withdrawStatus.value
            if (status !is WithdrawStatus.ReceivedDetails) {
                return@setOnClickListener
            }
            model.acceptWithdrawal(status.talerWithdrawUri, status.suggestedExchange)
        }

        return view
    }
}