@@ -46,7 +46,7 @@ class GooglePayActivity : BaseActivity() {
4646 private var shouldWatchText = true
4747 private var typedManually = false
4848
49- private val transactionFee get() = max(getAmountFloat(binding.donateAmountText.text.toString()) * GooglePayComponent .TRANSACTION_FEE_PERCENTAGE , viewModel.transactionFee)
49+ private val transactionFee get() = max(DonateUtil . getAmountFloat(binding.donateAmountText.text.toString()) * GooglePayComponent .TRANSACTION_FEE_PERCENTAGE , viewModel.transactionFee)
5050
5151 public override fun onCreate (savedInstanceState : Bundle ? ) {
5252 super .onCreate(savedInstanceState)
@@ -56,7 +56,7 @@ class GooglePayActivity : BaseActivity() {
5656 supportActionBar?.setDisplayHomeAsUpEnabled(true )
5757 title = " "
5858
59- binding.donateAmountInput.prefixText = viewModel .currencySymbol
59+ binding.donateAmountInput.prefixText = DonateUtil .currencySymbol
6060
6161 paymentsClient = GooglePayComponent .createPaymentsClient(this )
6262
@@ -82,10 +82,12 @@ class GooglePayActivity : BaseActivity() {
8282 onContentsReceived(resource.data)
8383 }
8484 is GooglePayViewModel .DonateSuccess -> {
85- DonorExperienceEvent .logAction(" impression" , " gpay_processed" , campaignId = intent.getStringExtra(DonateDialog .ARG_CAMPAIGN_ID ).orEmpty())
85+ DonorExperienceEvent .logAction(" impression" , " gpay_processed" ,
86+ campaignId = intent.getStringExtra(DonateDialog .ARG_CAMPAIGN_ID ).orEmpty().ifEmpty { CAMPAIGN_ID_APP_MENU }
87+ )
8688 CampaignCollection .addDonationResult(
8789 amount = viewModel.finalAmount,
88- currency = viewModel .currencyCode,
90+ currency = DonateUtil .currencyCode,
8991 recurring = binding.checkBoxRecurring.isChecked
9092 )
9193 setResult(RESULT_OK )
@@ -107,7 +109,7 @@ class GooglePayActivity : BaseActivity() {
107109 return @setOnClickListener
108110 }
109111
110- var totalAmount = getAmountFloat(amountText)
112+ var totalAmount = DonateUtil . getAmountFloat(amountText)
111113 if (binding.checkBoxTransactionFee.isChecked) {
112114 totalAmount + = transactionFee
113115 }
@@ -133,7 +135,7 @@ class GooglePayActivity : BaseActivity() {
133135 }
134136 val buttonToHighlight = binding.amountPresetsContainer.children.firstOrNull { child ->
135137 if (child is MaterialButton ) {
136- val amount = getAmountFloat(text.toString())
138+ val amount = DonateUtil . getAmountFloat(text.toString())
137139 child.tag == amount
138140 } else {
139141 false
@@ -164,18 +166,20 @@ class GooglePayActivity : BaseActivity() {
164166 }
165167
166168 private fun validateInput (text : String ): Boolean {
167- val amount = getAmountFloat(text)
169+ val amount = DonateUtil . getAmountFloat(text)
168170 val min = viewModel.minimumAmount
169171 val max = viewModel.maximumAmount
170172
171173 updateTransactionFee()
172174
173175 if (amount <= 0f || amount < min) {
174- binding.donateAmountInput.error = getString(R .string.donate_gpay_minimum_amount, viewModel.currencyFormat.format(min))
176+ binding.donateAmountInput.error = getString(R .string.donate_gpay_minimum_amount,
177+ DonateUtil .currencyFormat.format(min))
175178 DonorExperienceEvent .submit(" submission_error" , " gpay" , " error_reason: min_amount" )
176179 return false
177180 } else if (max > 0f && amount > max) {
178- binding.donateAmountInput.error = getString(R .string.donate_gpay_maximum_amount, viewModel.currencyFormat.format(max))
181+ binding.donateAmountInput.error = getString(R .string.donate_gpay_maximum_amount,
182+ DonateUtil .currencyFormat.format(max))
179183 DonorExperienceEvent .submit(" submission_error" , " gpay" , " error_reason: max_amount" )
180184 return false
181185 } else {
@@ -217,23 +221,38 @@ class GooglePayActivity : BaseActivity() {
217221 .build())
218222
219223 val viewIds = mutableListOf<Int >()
220- val presets = donationConfig.currencyAmountPresets[viewModel.currencyCode]
221- presets?.forEach { amount ->
224+ val presets = donationConfig.currencyAmountPresets[DonateUtil .currencyCode]?.toMutableSet()
225+ if (viewModel.filledAmount > 0f ) {
226+ presets?.add(viewModel.filledAmount)
227+ }
228+ var filledAmountButton: MaterialButton ? = null
229+ presets?.sorted()?.forEach { amount ->
222230 val viewId = View .generateViewId()
223231 viewIds.add(viewId)
224232 val button = MaterialButton (this )
225- button.text = viewModel .currencyFormat.format(amount)
233+ button.text = DonateUtil .currencyFormat.format(amount)
226234 button.id = viewId
227235 button.tag = amount
236+ if (amount == viewModel.filledAmount) {
237+ filledAmountButton = button
238+ }
228239 binding.amountPresetsContainer.addView(button)
240+
229241 button.setOnClickListener {
230242 setButtonHighlighted(it)
231243 setAmountText(it.tag as Float )
232244 DonorExperienceEvent .logAction(" amount_selected" , " gpay" )
233245 }
234246 }
235247 binding.amountPresetsFlow.referencedIds = viewIds.toIntArray()
236- setButtonHighlighted()
248+ setFilledAmountToText()
249+ setButtonHighlighted(filledAmountButton)
250+ }
251+
252+ private fun setFilledAmountToText () {
253+ if (viewModel.filledAmount > 0f ) {
254+ setAmountText(viewModel.filledAmount)
255+ }
237256 }
238257
239258 private fun setButtonHighlighted (button : View ? = null) {
@@ -252,17 +271,7 @@ class GooglePayActivity : BaseActivity() {
252271
253272 private fun updateTransactionFee () {
254273 binding.checkBoxTransactionFee.text = getString(R .string.donate_gpay_check_transaction_fee,
255- viewModel.currencyFormat.format(transactionFee))
256- }
257-
258- private fun getAmountFloat (text : String ): Float {
259- var result: Float?
260- result = text.toFloatOrNull()
261- if (result == null ) {
262- val text2 = if (text.contains(" ." )) text.replace(" ." , " ," ) else text.replace(" ," , " ." )
263- result = text2.toFloatOrNull()
264- }
265- return result ? : 0f
274+ DonateUtil .currencyFormat.format(transactionFee))
266275 }
267276
268277 private fun setAmountText (amount : Float ) {
@@ -304,11 +313,13 @@ class GooglePayActivity : BaseActivity() {
304313 companion object {
305314 private const val LOAD_PAYMENT_DATA_REQUEST_CODE = 42
306315 private const val CAMPAIGN_ID_APP_MENU = " appmenu"
316+ const val FILLED_AMOUNT = " filledAmount"
307317
308- fun newIntent (context : Context , campaignId : String? = null, donateUrl : String? = null): Intent {
318+ fun newIntent (context : Context , campaignId : String? = null, donateUrl : String? = null, filledAmount : Float = 0f ): Intent {
309319 return Intent (context, GooglePayActivity ::class .java)
310320 .putExtra(DonateDialog .ARG_CAMPAIGN_ID , campaignId)
311321 .putExtra(DonateDialog .ARG_DONATE_URL , donateUrl)
322+ .putExtra(FILLED_AMOUNT , filledAmount)
312323 }
313324 }
314325}
0 commit comments