diff --git a/app/src/java/java/co/omise/android/example/CheckoutActivity.java b/app/src/java/java/co/omise/android/example/CheckoutActivity.java index 7e48d4115..0ecd67116 100644 --- a/app/src/java/java/co/omise/android/example/CheckoutActivity.java +++ b/app/src/java/java/co/omise/android/example/CheckoutActivity.java @@ -17,15 +17,23 @@ import co.omise.android.api.Client; import co.omise.android.api.Request; import co.omise.android.api.RequestListener; -import co.omise.android.config.AuthorizingPaymentConfig; -import co.omise.android.config.ThreeDSConfig; +import co.omise.android.config.ButtonCustomization; +import co.omise.android.config.ButtonCustomizationBuilder; +import co.omise.android.config.ButtonType; +import co.omise.android.config.LabelCustomization; +import co.omise.android.config.LabelCustomizationBuilder; +import co.omise.android.config.TextBoxCustomization; +import co.omise.android.config.TextBoxCustomizationBuilder; +import co.omise.android.config.ToolbarCustomization; +import co.omise.android.config.ToolbarCustomizationBuilder; import co.omise.android.config.UiCustomization; +import co.omise.android.config.UiCustomizationBuilder; import co.omise.android.models.Amount; import co.omise.android.models.Capability; import co.omise.android.models.Source; import co.omise.android.models.Token; -import co.omise.android.ui.AuthorizingPaymentResult; import co.omise.android.ui.AuthorizingPaymentActivity; +import co.omise.android.ui.AuthorizingPaymentResult; import co.omise.android.ui.CreditCardActivity; import co.omise.android.ui.OmiseActivity; import co.omise.android.ui.PaymentCreatorActivity; @@ -34,6 +42,7 @@ import static co.omise.android.AuthorizingPaymentURLVerifier.EXTRA_AUTHORIZED_URLSTRING; import static co.omise.android.AuthorizingPaymentURLVerifier.EXTRA_EXPECTED_RETURN_URLSTRING_PATTERNS; +import static co.omise.android.ui.AuthorizingPaymentActivity.EXTRA_UI_CUSTOMIZATION; public class CheckoutActivity extends AppCompatActivity { @@ -61,8 +70,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_checkout); - initializeAuthoringPaymentConfig(); - ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setTitle(R.string.activity_checkout); @@ -129,66 +136,74 @@ private void payByCreditCard() { startActivityForResult(intent, CREDIT_CARD_REQUEST_CODE); } - /** - * Here's the sample of initializing 3D Secure 2. - * This should be call before start the {@link AuthorizingPaymentActivity}. - */ - private void initializeAuthoringPaymentConfig() { - UiCustomization uiCustomization = new UiCustomization.Builder() - .labelCustomization(new UiCustomization.LabelCustomization.Builder() - .textFontName("fonts/RobotoMono-Regular.ttf") - .textFontColor("#000000") - .textFontSize(16) - .headingTextColor("#000000") - .headingTextFontName("fonts/RobotoMono-Bold.ttf") - .headingTextFontSize(20) - .build()) - .textBoxCustomization(new UiCustomization.TextBoxCustomization.Builder() - .textFontName("fonts/RobotoMono-Regular.ttf") - .textFontColor("#000000") - .textFontSize(16) - .borderWidth(1) - .cornerRadius(4) - .borderColor("#1A56F0") - .build()) - .toolbarCustomization(new UiCustomization.ToolbarCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#000000") - .textFontSize(20) - .backgroundColor("#FFFFFF") - .headerText("Secure Checkout") - .buttonText("Close") - .build()) - .buttonCustomization(UiCustomization.ButtonType.SUBMIT_BUTTON, new UiCustomization.ButtonCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#FFFFFF") - .textFontSize(20) - .backgroundColor("#1A56F0") - .cornerRadius(4) - .build()) - .buttonCustomization(UiCustomization.ButtonType.RESEND_BUTTON, new UiCustomization.ButtonCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#000000") - .textFontSize(20) - .backgroundColor("#FFFFFF") - .cornerRadius(4) - .build()) + private Unit startAuthoringPaymentActivity(String authorizeUrl, String returnUrl) { + LabelCustomization labelCustomization = new LabelCustomizationBuilder() + .headingDarkTextColor("#FFFFFF") + .headingTextColor("#000000") + .headingTextFontName("roboto_mono") + .headingTextFontSize(20) + .textFontName("roboto_mono") + .textColor("#000000") + .textFontSize(16) .build(); - ThreeDSConfig threeDSConfig = new ThreeDSConfig.Builder() - .uiCustomization(uiCustomization) - .timeout(5) + TextBoxCustomization textBoxCustomization = new TextBoxCustomizationBuilder() + .textFontName("font/roboto_mono_regular.ttf") + .textColor("#000000") + .textFontSize(16) + .borderWidth(1) + .cornerRadius(4) + .borderColor("#1A56F0") .build(); - AuthorizingPaymentConfig authPaymentConfig = new AuthorizingPaymentConfig.Builder() - .threeDSConfig(threeDSConfig) + + ToolbarCustomization toolbarCustomization = new ToolbarCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textColor("#000000") + .textFontSize(20) + .backgroundColor("#FFFFFF") + .headerText("Secure Checkout") + .buttonText("Close") + .darkBackgroundColor("#262626") + .darkTextColor("#FFFFFF") + .build(); + + ButtonCustomization primaryButtonCustomization = new ButtonCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textFontSize(20) + .cornerRadius(4) + .textColor("#FFFFFF") + .backgroundColor("#1A56F0") + .darkTextColor("#FFFFFF") + .darkBackgroundColor("#4777F3") + .build(); + + ButtonCustomization secondaryButtonCustomization = new ButtonCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textFontSize(20) + .cornerRadius(4) + .textColor("#1A56F0") + .backgroundColor("#FFFFFF") + .darkTextColor("#1E1E1E") + .darkBackgroundColor("#FFFFFF") + .build(); + + UiCustomization uiCustomization = new UiCustomizationBuilder() + .supportDarkMode(true) + .labelCustomization(labelCustomization) + .textBoxCustomization(textBoxCustomization) + .toolbarCustomization(toolbarCustomization) + .buttonCustomization(ButtonType.SUBMIT, primaryButtonCustomization) + .buttonCustomization(ButtonType.CONTINUE, primaryButtonCustomization) + .buttonCustomization(ButtonType.NEXT, primaryButtonCustomization) + .buttonCustomization(ButtonType.OPEN_OOB_APP, primaryButtonCustomization) + .buttonCustomization(ButtonType.RESEND, primaryButtonCustomization) + .buttonCustomization(ButtonType.CANCEL, secondaryButtonCustomization) .build(); - AuthorizingPaymentConfig.initialize(authPaymentConfig); - } - private Unit startAuthoringPaymentActivity(String authorizeUrl, String returnUrl) { Intent intent = new Intent(this, AuthorizingPaymentActivity.class); intent.putExtra(EXTRA_AUTHORIZED_URLSTRING, authorizeUrl); intent.putExtra(EXTRA_EXPECTED_RETURN_URLSTRING_PATTERNS, new String[]{returnUrl}); + intent.putExtra(EXTRA_UI_CUSTOMIZATION, uiCustomization); startActivityForResult(intent, CheckoutActivity.AUTHORIZING_PAYMENT_REQUEST_CODE); return Unit.INSTANCE; } diff --git a/app/src/kotlin/java/co/omise/android/example/CheckoutActivity.kt b/app/src/kotlin/java/co/omise/android/example/CheckoutActivity.kt index 1952ed6d1..3a1eaeb11 100644 --- a/app/src/kotlin/java/co/omise/android/example/CheckoutActivity.kt +++ b/app/src/kotlin/java/co/omise/android/example/CheckoutActivity.kt @@ -12,14 +12,18 @@ import co.omise.android.AuthorizingPaymentURLVerifier.Companion.EXTRA_AUTHORIZED import co.omise.android.AuthorizingPaymentURLVerifier.Companion.EXTRA_EXPECTED_RETURN_URLSTRING_PATTERNS import co.omise.android.api.Client import co.omise.android.api.RequestListener -import co.omise.android.config.AuthorizingPaymentConfig -import co.omise.android.config.ThreeDSConfig -import co.omise.android.config.UiCustomization +import co.omise.android.config.ButtonCustomizationBuilder +import co.omise.android.config.ButtonType +import co.omise.android.config.LabelCustomizationBuilder +import co.omise.android.config.TextBoxCustomizationBuilder +import co.omise.android.config.ToolbarCustomizationBuilder +import co.omise.android.config.UiCustomizationBuilder import co.omise.android.models.Amount import co.omise.android.models.Capability import co.omise.android.models.Source import co.omise.android.models.Token import co.omise.android.ui.AuthorizingPaymentActivity +import co.omise.android.ui.AuthorizingPaymentActivity.Companion.EXTRA_UI_CUSTOMIZATION import co.omise.android.ui.AuthorizingPaymentResult import co.omise.android.ui.CreditCardActivity import co.omise.android.ui.OmiseActivity @@ -62,15 +66,13 @@ class CheckoutActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_checkout) - initializeAuthoringPaymentConfig() - supportActionBar?.title = getString(R.string.activity_checkout) choosePaymentMethodButton.setOnClickListener { choosePaymentMethod() } creditCardButton.setOnClickListener { payByCreditCard() } authorizeUrlButton.setOnClickListener { - AuthorizingPaymentDialog.showAuthorizingPaymentDialog(this) {authorizeUrl, returnUrl -> - startAuthoringPaymentActivity(authorizeUrl, returnUrl) + AuthorizingPaymentDialog.showAuthorizingPaymentDialog(this) { authorizeUrl, returnUrl -> + startAuthoringPaymentActivity(authorizeUrl, returnUrl) } } @@ -125,70 +127,80 @@ class CheckoutActivity : AppCompatActivity() { } } - /** - * Here's the sample of initializing 3D Secure 2. - * This should be call before start the [AuthorizingPaymentActivity]. - */ - private fun initializeAuthoringPaymentConfig() { - val uiCustomization = UiCustomization.Builder() - .labelCustomization(UiCustomization.LabelCustomization.Builder() - .textFontName("fonts/RobotoMono-Regular.ttf") - .textFontColor("#000000") - .textFontSize(16) - .headingTextColor("#000000") - .headingTextFontName("fonts/RobotoMono-Bold.ttf") - .headingTextFontSize(20) - .build()) - .textBoxCustomization(UiCustomization.TextBoxCustomization.Builder() - .textFontName("fonts/RobotoMono-Regular.ttf") - .textFontColor("#000000") - .textFontSize(16) - .borderWidth(1) - .cornerRadius(4) - .borderColor("#1A56F0") - .build()) - .toolbarCustomization(UiCustomization.ToolbarCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#000000") - .textFontSize(20) - .backgroundColor("#FFFFFF") - .headerText("Secure Checkout") - .buttonText("Close") - .build()) - .buttonCustomization(UiCustomization.ButtonType.SUBMIT_BUTTON, UiCustomization.ButtonCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#FFFFFF") - .textFontSize(20) - .backgroundColor("#1A56F0") - .cornerRadius(4) - .build()) - .buttonCustomization(UiCustomization.ButtonType.RESEND_BUTTON, UiCustomization.ButtonCustomization.Builder() - .textFontName("fonts/RobotoMono-Bold.ttf") - .textFontColor("#000000") - .textFontSize(20) - .backgroundColor("#FFFFFF") - .cornerRadius(4) - .build()) - .build() - - val threeDSConfig = ThreeDSConfig.Builder() - .uiCustomization(uiCustomization) - .timeout(5) - .build() - val authPaymentConfig = AuthorizingPaymentConfig.Builder() - .threeDSConfig(threeDSConfig) - .build() - AuthorizingPaymentConfig.initialize(authPaymentConfig) - } - private fun startAuthoringPaymentActivity(authorizeUrl: String, returnUrl: String) { - Log.d(TAG, """ + val labelCustomization = LabelCustomizationBuilder() + .headingDarkTextColor("#FFFFFF") + .headingTextColor("#000000") + .headingTextFontName("roboto_mono") + .headingTextFontSize(20) + .textFontName("roboto_mono") + .textColor("#000000") + .textFontSize(16) + .build() + + val textBoxCustomization = TextBoxCustomizationBuilder() + .textFontName("font/roboto_mono_regular.ttf") + .textColor("#000000") + .textFontSize(16) + .borderWidth(1) + .cornerRadius(4) + .borderColor("#1A56F0") + .build() + + val toolbarCustomization = ToolbarCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textColor("#000000") + .textFontSize(20) + .backgroundColor("#FFFFFF") + .headerText("Secure Checkout") + .buttonText("Close") + .darkBackgroundColor("#262626") + .darkTextColor("#FFFFFF") + .build() + + val primaryButtonCustomization = ButtonCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textFontSize(20) + .cornerRadius(4) + .textColor("#FFFFFF") + .backgroundColor("#1A56F0") + .darkTextColor("#FFFFFF") + .darkBackgroundColor("#4777F3") + .build() + + val secondaryButtonCustomization = ButtonCustomizationBuilder() + .textFontName("font/roboto_mono_bold.ttf") + .textFontSize(20) + .cornerRadius(4) + .textColor("#1A56F0") + .backgroundColor("#FFFFFF") + .darkTextColor("#1E1E1E") + .darkBackgroundColor("#FFFFFF") + .build() + + val uiCustomization = UiCustomizationBuilder() + .supportDarkMode(true) + .labelCustomization(labelCustomization) + .textBoxCustomization(textBoxCustomization) + .toolbarCustomization(toolbarCustomization) + .buttonCustomization(ButtonType.SUBMIT, primaryButtonCustomization) + .buttonCustomization(ButtonType.CONTINUE, primaryButtonCustomization) + .buttonCustomization(ButtonType.NEXT, primaryButtonCustomization) + .buttonCustomization(ButtonType.OPEN_OOB_APP, primaryButtonCustomization) + .buttonCustomization(ButtonType.RESEND, secondaryButtonCustomization) + .buttonCustomization(ButtonType.CANCEL, secondaryButtonCustomization) + .build() + + Log.d( + TAG, """ authorizeUrl=$authorizeUrl returnUrl=$returnUrl - """.trimIndent()) + """.trimIndent() + ) Intent(this, AuthorizingPaymentActivity::class.java).run { putExtra(EXTRA_AUTHORIZED_URLSTRING, authorizeUrl) putExtra(EXTRA_EXPECTED_RETURN_URLSTRING_PATTERNS, arrayOf(returnUrl)) + putExtra(EXTRA_UI_CUSTOMIZATION, uiCustomization) startActivityForResult(this, AUTHORIZING_PAYMENT_REQUEST_CODE) } } @@ -234,12 +246,14 @@ class CheckoutActivity : AppCompatActivity() { Log.e(TAG, throwable.message, throwable.cause) throwable.message ?: "Unknown error." } + null -> "Not found the authorization result." } Log.d(TAG, resultMessage) snackbar.setText(resultMessage).show() } } + PAYMENT_CREATOR_REQUEST_CODE -> { if (data.hasExtra(OmiseActivity.EXTRA_SOURCE_OBJECT)) { val source = data.getParcelableExtra(OmiseActivity.EXTRA_SOURCE_OBJECT) @@ -251,11 +265,13 @@ class CheckoutActivity : AppCompatActivity() { Log.d(TAG, "token: ${token?.id}") } } + CREDIT_CARD_REQUEST_CODE -> { val token = data.getParcelableExtra(OmiseActivity.EXTRA_TOKEN_OBJECT) snackbar.setText(token?.id ?: "No token object.").show() Log.d(TAG, "token: ${token?.id}") } + else -> { super.onActivityResult(requestCode, resultCode, data) } diff --git a/app/src/main/res/font/roboto_mono.xml b/app/src/main/res/font/roboto_mono.xml new file mode 100644 index 000000000..c0ed8904e --- /dev/null +++ b/app/src/main/res/font/roboto_mono.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/assets/fonts/RobotoMono-Bold.ttf b/app/src/main/res/font/roboto_mono_bold.ttf similarity index 100% rename from app/src/main/assets/fonts/RobotoMono-Bold.ttf rename to app/src/main/res/font/roboto_mono_bold.ttf diff --git a/app/src/main/assets/fonts/RobotoMono-Regular.ttf b/app/src/main/res/font/roboto_mono_regular.ttf similarity index 100% rename from app/src/main/assets/fonts/RobotoMono-Regular.ttf rename to app/src/main/res/font/roboto_mono_regular.ttf diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e1b7a3e82..7b3913f47 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -12,6 +12,7 @@ @style/SampleButton @style/SampleEditTextLabel @style/SampleEditTextError + @font/roboto_mono