summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-05 10:20:52 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-05 10:20:52 -0300
commit779e5267e3c03ff511c36518f0323347d675cce3 (patch)
tree76d3b576b1571ddaad3667b9875d5663f1b077fa /android
parent15f0704daff4ae1b33e6cf12770fcf65b4654714 (diff)
parent63af1cf84f93d009ef4c87eca69aa3d5b5aa952d (diff)
downloadmullvadvpn-779e5267e3c03ff511c36518f0323347d675cce3.tar.xz
mullvadvpn-779e5267e3c03ff511c36518f0323347d675cce3.zip
Merge branch 'refactor-payment-buttons'
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt19
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt26
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt21
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/Button.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/RedeemVoucherButton.kt37
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/SitePaymentButton.kt35
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt2
-rw-r--r--android/src/main/res/layout/account.xml20
-rw-r--r--android/src/main/res/layout/out_of_time.xml19
-rw-r--r--android/src/main/res/layout/payment_buttons.xml15
-rw-r--r--android/src/main/res/layout/welcome.xml16
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>