diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-05 10:20:52 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-05 10:20:52 -0300 |
| commit | 779e5267e3c03ff511c36518f0323347d675cce3 (patch) | |
| tree | 76d3b576b1571ddaad3667b9875d5663f1b077fa | |
| parent | 15f0704daff4ae1b33e6cf12770fcf65b4654714 (diff) | |
| parent | 63af1cf84f93d009ef4c87eca69aa3d5b5aa952d (diff) | |
| download | mullvadvpn-779e5267e3c03ff511c36518f0323347d675cce3.tar.xz mullvadvpn-779e5267e3c03ff511c36518f0323347d675cce3.zip | |
Merge branch 'refactor-payment-buttons'
11 files changed, 126 insertions, 88 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt index d24478cb98..d5644ae72f 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt @@ -11,7 +11,8 @@ import net.mullvad.mullvadvpn.model.TunnelState import net.mullvad.mullvadvpn.ui.widget.Button import net.mullvad.mullvadvpn.ui.widget.CopyableInformationView import net.mullvad.mullvadvpn.ui.widget.InformationView -import net.mullvad.mullvadvpn.ui.widget.UrlButton +import net.mullvad.mullvadvpn.ui.widget.RedeemVoucherButton +import net.mullvad.mullvadvpn.ui.widget.SitePaymentButton import org.joda.time.DateTime class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) { @@ -37,14 +38,14 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) { private var hasConnectivity = true set(value) { field = value - buyCreditButton.setEnabled(value) + sitePaymentButton.setEnabled(value) redeemVoucherButton.setEnabled(value) } private lateinit var accountExpiryView: InformationView private lateinit var accountNumberView: CopyableInformationView - private lateinit var buyCreditButton: Button - private lateinit var redeemVoucherButton: Button + private lateinit var sitePaymentButton: SitePaymentButton + private lateinit var redeemVoucherButton: RedeemVoucherButton private lateinit var titleController: CollapsibleTitleController override fun onSafelyCreateView( @@ -58,16 +59,16 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) { parentActivity.onBackPressed() } - buyCreditButton = view.findViewById<UrlButton>(R.id.buy_credit).apply { + sitePaymentButton = view.findViewById<SitePaymentButton>(R.id.site_payment).apply { + newAccount = false + prepare(daemon, jobTracker) { checkForAddedTime() } } - redeemVoucherButton = view.findViewById<Button>(R.id.redeem_voucher).apply { - setOnClickAction("redeem", jobTracker) { - showRedeemVoucherDialog() - } + redeemVoucherButton = view.findViewById<RedeemVoucherButton>(R.id.redeem_voucher).apply { + prepare(fragmentManager, jobTracker) } view.findViewById<Button>(R.id.logout).setOnClickAction("logout", jobTracker) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt index 5fd14b5cd6..cec00f842b 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt @@ -11,16 +11,17 @@ import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.model.TunnelState import net.mullvad.mullvadvpn.ui.widget.Button import net.mullvad.mullvadvpn.ui.widget.HeaderBar -import net.mullvad.mullvadvpn.ui.widget.UrlButton +import net.mullvad.mullvadvpn.ui.widget.RedeemVoucherButton +import net.mullvad.mullvadvpn.ui.widget.SitePaymentButton import net.mullvad.talpid.tunnel.ActionAfterDisconnect import org.joda.time.DateTime class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { private lateinit var headerBar: HeaderBar - private lateinit var buyCreditButton: UrlButton + private lateinit var sitePaymentButton: SitePaymentButton private lateinit var disconnectButton: Button - private lateinit var redeemButton: Button + private lateinit var redeemButton: RedeemVoucherButton private var tunnelState by observable<TunnelState>(TunnelState.Disconnected()) { _, _, state -> updateDisconnectButton() @@ -49,14 +50,13 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) } } - buyCreditButton = view.findViewById<UrlButton>(R.id.buy_credit).apply { + sitePaymentButton = view.findViewById<SitePaymentButton>(R.id.site_payment).apply { + newAccount = false prepare(daemon, jobTracker) } - redeemButton = view.findViewById<Button>(R.id.redeem_voucher).apply { - setOnClickAction("openRedeemVoucherDialog", jobTracker) { - showRedeemVoucherDialog() - } + redeemButton = view.findViewById<RedeemVoucherButton>(R.id.redeem_voucher).apply { + prepare(fragmentManager, jobTracker) } connectionProxy.onStateChange.subscribe(this) { newState -> @@ -90,14 +90,6 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) connectionProxy.onStateChange.unsubscribe(this) } - private fun showRedeemVoucherDialog() { - val transaction = fragmentManager?.beginTransaction() - - transaction?.addToBackStack(null) - - RedeemVoucherDialogFragment().show(transaction, null) - } - private fun updateDisconnectButton() { val state = tunnelState @@ -124,7 +116,7 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) private fun updateBuyButtons() { val hasConnectivity = tunnelState is TunnelState.Disconnected - buyCreditButton.setEnabled(hasConnectivity) + sitePaymentButton.setEnabled(hasConnectivity) redeemButton.setEnabled(hasConnectivity) } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt index 28851a8641..e357be1f68 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt @@ -12,9 +12,9 @@ import android.widget.Toast import kotlinx.coroutines.delay import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.model.TunnelState -import net.mullvad.mullvadvpn.ui.widget.Button import net.mullvad.mullvadvpn.ui.widget.HeaderBar -import net.mullvad.mullvadvpn.ui.widget.UrlButton +import net.mullvad.mullvadvpn.ui.widget.RedeemVoucherButton +import net.mullvad.mullvadvpn.ui.widget.SitePaymentButton import org.joda.time.DateTime val POLL_INTERVAL: Long = 15 /* s */ * 1000 /* ms */ @@ -41,14 +41,13 @@ class WelcomeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { parentActivity.getString(R.string.pay_to_start_using) + " " + parentActivity.getString(R.string.add_time_to_account) - view.findViewById<UrlButton>(R.id.buy_credit).apply { + view.findViewById<SitePaymentButton>(R.id.site_payment).apply { + newAccount = true prepare(daemon, jobTracker) } - view.findViewById<Button>(R.id.redeem_voucher).apply { - setOnClickAction("openRedeemVoucherDialog", jobTracker) { - showRedeemVoucherDialog() - } + view.findViewById<RedeemVoucherButton>(R.id.redeem_voucher).apply { + prepare(fragmentManager, jobTracker) } return view @@ -139,12 +138,4 @@ class WelcomeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show() } - - private fun showRedeemVoucherDialog() { - val transaction = fragmentManager?.beginTransaction() - - transaction?.addToBackStack(null) - - RedeemVoucherDialogFragment().show(transaction, null) - } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/Button.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/Button.kt index 791b8caaa5..307a2c65a4 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/Button.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/Button.kt @@ -71,6 +71,10 @@ open class Button : FrameLayout { } } + var label: CharSequence + get() = button.text + set(value) { button.text = value } + var showSpinner = false constructor(context: Context) : super(context) {} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/RedeemVoucherButton.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/RedeemVoucherButton.kt new file mode 100644 index 0000000000..308eff37df --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/RedeemVoucherButton.kt @@ -0,0 +1,37 @@ +package net.mullvad.mullvadvpn.ui.widget + +import android.content.Context +import android.support.v4.app.FragmentManager +import android.util.AttributeSet +import net.mullvad.mullvadvpn.ui.RedeemVoucherDialogFragment +import net.mullvad.mullvadvpn.util.JobTracker + +class RedeemVoucherButton : Button { + constructor(context: Context) : super(context) {} + + constructor(context: Context, attributes: AttributeSet) : super(context, attributes) {} + + constructor(context: Context, attributes: AttributeSet, defaultStyleAttribute: Int) : + super(context, attributes, defaultStyleAttribute) {} + + constructor( + context: Context, + attributes: AttributeSet, + defaultStyleAttribute: Int, + defaultStyleResource: Int + ) : super(context, attributes, defaultStyleAttribute, defaultStyleResource) {} + + fun prepare( + fragmentManager: FragmentManager?, + jobTracker: JobTracker, + jobName: String = "openRedeemVoucherDialog" + ) { + setOnClickAction(jobName, jobTracker) { + fragmentManager?.beginTransaction()?.let { transaction -> + transaction.addToBackStack(null) + + RedeemVoucherDialogFragment().show(transaction, null) + } + } + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/SitePaymentButton.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/SitePaymentButton.kt new file mode 100644 index 0000000000..0f377013d6 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/SitePaymentButton.kt @@ -0,0 +1,35 @@ +package net.mullvad.mullvadvpn.ui.widget + +import android.content.Context +import android.util.AttributeSet +import kotlin.properties.Delegates.observable +import net.mullvad.mullvadvpn.R + +class SitePaymentButton : UrlButton { + constructor(context: Context) : super(context) {} + + constructor(context: Context, attributes: AttributeSet) : super(context, attributes) {} + + constructor(context: Context, attributes: AttributeSet, defaultStyleAttribute: Int) : + super(context, attributes, defaultStyleAttribute) {} + + constructor( + context: Context, + attributes: AttributeSet, + defaultStyleAttribute: Int, + defaultStyleResource: Int + ) : super(context, attributes, defaultStyleAttribute, defaultStyleResource) {} + + var newAccount by observable(false) { _, _, isNewAccount -> + if (isNewAccount) { + label = context.getString(R.string.buy_credit) + } else { + label = context.getString(R.string.buy_more_credit) + } + } + + init { + url = context.getString(R.string.account_url) + withToken = true + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt index a929488880..36b77ce134 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt @@ -11,7 +11,7 @@ import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.mullvadvpn.util.JobTracker -class UrlButton : Button { +open class UrlButton : Button { private lateinit var daemon: MullvadDaemon private var shouldEnable = true diff --git a/android/src/main/res/layout/account.xml b/android/src/main/res/layout/account.xml index d6e9819e6a..87cea450b4 100644 --- a/android/src/main/res/layout/account.xml +++ b/android/src/main/res/layout/account.xml @@ -54,31 +54,17 @@ <net.mullvad.mullvadvpn.ui.widget.InformationView android:id="@+id/account_expiry" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/half_vertical_space" android:paddingHorizontal="@dimen/side_margin" android:paddingVertical="@dimen/half_vertical_space" mullvad:description="@string/paid_until" mullvad:whenMissing="hide" /> - <net.mullvad.mullvadvpn.ui.widget.UrlButton android:id="@+id/buy_credit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/half_vertical_space" - android:layout_marginHorizontal="@dimen/side_margin" - mullvad:showSpinner="true" - mullvad:url="@string/account_url" - mullvad:withToken="true" - mullvad:text="@string/buy_more_credit" - mullvad:buttonColor="green" /> - <net.mullvad.mullvadvpn.ui.widget.Button android:id="@+id/redeem_voucher" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginVertical="@dimen/button_separation" - android:layout_marginHorizontal="@dimen/side_margin" - mullvad:text="@string/redeem_voucher" - mullvad:buttonColor="green" /> + <include layout="@layout/payment_buttons" /> <net.mullvad.mullvadvpn.ui.widget.Button android:id="@+id/logout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/side_margin" + android:layout_marginTop="@dimen/button_separation" android:layout_marginBottom="@dimen/screen_vertical_margin" mullvad:text="@string/log_out" mullvad:buttonColor="red" /> diff --git a/android/src/main/res/layout/out_of_time.xml b/android/src/main/res/layout/out_of_time.xml index cc5cb1af5e..791b2d8a77 100644 --- a/android/src/main/res/layout/out_of_time.xml +++ b/android/src/main/res/layout/out_of_time.xml @@ -41,29 +41,18 @@ android:layout_height="wrap_content" android:layout_weight="0" android:orientation="vertical" - android:paddingHorizontal="@dimen/side_margin" + android:paddingTop="@dimen/button_separation" android:paddingBottom="@dimen/screen_vertical_margin" android:background="@color/darkBlue"> <net.mullvad.mullvadvpn.ui.widget.Button android:id="@+id/disconnect" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/button_separation" + android:layout_marginHorizontal="@dimen/side_margin" + android:layout_marginBottom="@dimen/button_separation" android:visibility="gone" mullvad:buttonColor="red" mullvad:text="@string/disconnect" /> - <net.mullvad.mullvadvpn.ui.widget.UrlButton android:id="@+id/buy_credit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginVertical="@dimen/button_separation" - mullvad:buttonColor="green" - mullvad:text="@string/buy_more_credit" - mullvad:url="@string/account_url" - mullvad:withToken="true" /> - <net.mullvad.mullvadvpn.ui.widget.Button android:id="@+id/redeem_voucher" - android:layout_width="match_parent" - android:layout_height="wrap_content" - mullvad:buttonColor="green" - mullvad:text="@string/redeem_voucher" /> + <include layout="@layout/payment_buttons" /> </LinearLayout> </LinearLayout> </ScrollView> diff --git a/android/src/main/res/layout/payment_buttons.xml b/android/src/main/res/layout/payment_buttons.xml new file mode 100644 index 0000000000..c617bb1571 --- /dev/null +++ b/android/src/main/res/layout/payment_buttons.xml @@ -0,0 +1,15 @@ +<merge xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:mullvad="http://schemas.android.com/apk/res-auto"> + <net.mullvad.mullvadvpn.ui.widget.SitePaymentButton android:id="@+id/site_payment" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="@dimen/side_margin" + mullvad:buttonColor="green" /> + <net.mullvad.mullvadvpn.ui.widget.RedeemVoucherButton android:id="@+id/redeem_voucher" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/button_separation" + android:layout_marginHorizontal="@dimen/side_margin" + mullvad:buttonColor="green" + mullvad:text="@string/redeem_voucher" /> +</merge> diff --git a/android/src/main/res/layout/welcome.xml b/android/src/main/res/layout/welcome.xml index 359ecb88c3..43348fd11d 100644 --- a/android/src/main/res/layout/welcome.xml +++ b/android/src/main/res/layout/welcome.xml @@ -55,22 +55,10 @@ android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="vertical" - android:paddingHorizontal="@dimen/side_margin" + android:paddingTop="@dimen/button_separation" android:paddingBottom="@dimen/screen_vertical_margin" android:background="@color/darkBlue"> - <net.mullvad.mullvadvpn.ui.widget.UrlButton android:id="@+id/buy_credit" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginVertical="@dimen/button_separation" - mullvad:buttonColor="green" - mullvad:text="@string/buy_credit" - mullvad:url="@string/account_url" - mullvad:withToken="true" /> - <net.mullvad.mullvadvpn.ui.widget.Button android:id="@+id/redeem_voucher" - android:layout_width="match_parent" - android:layout_height="wrap_content" - mullvad:buttonColor="green" - mullvad:text="@string/redeem_voucher" /> + <include layout="@layout/payment_buttons" /> </LinearLayout> </LinearLayout> </ScrollView> |
