Skip to content
Merged
65 changes: 28 additions & 37 deletions app/src/extra/java/org/wikipedia/donate/GooglePayActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.google.android.gms.wallet.AutoResolveHelper
import com.google.android.gms.wallet.PaymentData
import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.wallet.PaymentsClient
import com.google.android.gms.wallet.button.ButtonConstants
import com.google.android.gms.wallet.button.ButtonOptions
import com.google.android.gms.wallet.contract.TaskResultContracts
import com.google.android.material.button.MaterialButton
import kotlinx.coroutines.launch
import org.json.JSONArray
Expand Down Expand Up @@ -48,6 +48,30 @@ class GooglePayActivity : BaseActivity() {

private val transactionFee get() = max(DonateUtil.getAmountFloat(binding.donateAmountText.text.toString()) * GooglePayComponent.TRANSACTION_FEE_PERCENTAGE, viewModel.transactionFee)

private val paymentDataLauncher = registerForActivityResult(TaskResultContracts.GetPaymentDataResult()) { taskResult ->
when (taskResult.status.statusCode) {
CommonStatusCodes.SUCCESS -> {
taskResult.result?.let { paymentData ->
viewModel.submit(paymentData,
binding.checkBoxTransactionFee.isChecked,
binding.checkBoxRecurring.isChecked,
if (viewModel.emailOptInRequired) binding.checkBoxAllowEmail.isChecked else true,
intent.getStringExtra(DonateDialog.ARG_CAMPAIGN_ID).orEmpty().ifEmpty { CAMPAIGN_ID_APP_MENU })
}
}

CommonStatusCodes.CANCELED -> {
// The user cancelled the payment attempt
}

CommonStatusCodes.ERROR -> {
taskResult.status.statusMessage?.let { message ->
FeedbackUtil.showMessage(this, message)
}
}
}
}

public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDonateBinding.inflate(layoutInflater)
Expand Down Expand Up @@ -122,10 +146,8 @@ class GooglePayActivity : BaseActivity() {
DonorExperienceEvent.submit("donate_confirm_click", "gpay",
"add_transaction: ${binding.checkBoxTransactionFee.isChecked}, recurring: ${binding.checkBoxRecurring.isChecked}, email_subscribe: ${binding.checkBoxAllowEmail.isChecked}")

AutoResolveHelper.resolveTask(
paymentsClient.loadPaymentData(viewModel.getPaymentDataRequest()),
this, LOAD_PAYMENT_DATA_REQUEST_CODE
)
val task = paymentsClient.loadPaymentData(viewModel.getPaymentDataRequest())
task.addOnCompleteListener(paymentDataLauncher::launch)
}

binding.donateAmountText.addTextChangedListener { text ->
Expand Down Expand Up @@ -280,38 +302,7 @@ class GooglePayActivity : BaseActivity() {
shouldWatchText = true
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

if (requestCode == LOAD_PAYMENT_DATA_REQUEST_CODE) {
when (resultCode) {
RESULT_OK -> {
data?.let { dataIntent ->
PaymentData.getFromIntent(dataIntent)?.let { paymentData ->
viewModel.submit(paymentData,
binding.checkBoxTransactionFee.isChecked,
binding.checkBoxRecurring.isChecked,
if (viewModel.emailOptInRequired) binding.checkBoxAllowEmail.isChecked else true,
intent.getStringExtra(DonateDialog.ARG_CAMPAIGN_ID).orEmpty().ifEmpty { CAMPAIGN_ID_APP_MENU })
}
}
}
RESULT_CANCELED -> {
// The user cancelled the payment attempt
}
AutoResolveHelper.RESULT_ERROR -> {
AutoResolveHelper.getStatusFromIntent(data)?.let {
it.statusMessage?.let { message ->
FeedbackUtil.showMessage(this, message)
}
}
}
}
}
}

companion object {
private const val LOAD_PAYMENT_DATA_REQUEST_CODE = 42
private const val CAMPAIGN_ID_APP_MENU = "appmenu"
const val FILLED_AMOUNT = "filledAmount"

Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ espressoVersion = "3.7.0"
firebaseMessagingVersion = "24.1.2"
flexbox = "3.0.0"
fragmentKtx = "1.8.9"
googlePayVersion = "19.5.0"
googlePayVersion = "20.0.0"
googleServices = "4.4.4"
gradle = "9.1.1"
hcaptcha = "4.4.0"
Expand Down
Loading