修复首次添加信用卡不能编辑的bug

This commit is contained in:
2026-06-29 09:54:01 +08:00
parent 21f1c5b13c
commit ed034f152c
5 changed files with 68 additions and 46 deletions

View File

@@ -28,9 +28,9 @@ android {
applicationId "com.abbidot.tracker"
minSdkVersion 23
targetSdkVersion 35
versionCode 2212
// versionName "2.2.12"
versionName "2.2.12-Beta2"
versionCode 2213
// versionName "2.2.13"
versionName "2.2.13-Beta1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -44,6 +44,9 @@ class AddCreditCardPaymentActivity :
private var mOldCard: CreditCardBean? = null
private var isEdit = false
//是否存在PaymentMethodID
private var isHavePaymentMethodID = false
override fun getTopBar() = mViewBinding.ilAddPaymentMethodTopInfo.titleTopBar
override fun initData() {
@@ -52,7 +55,8 @@ class AddCreditCardPaymentActivity :
mCreditCard = Util.getParcelableAdaptive(
intent, ConstantString.Card, CreditCardBean::class.java
)
isEdit = getBoolean(ConstantString.Edit, false)
isEdit = getBoolean(ConstantString.Edit)
isHavePaymentMethodID = getBoolean(ConstantString.isCheck)
}
if (null == mCreditCard) mCreditCard = CreditCardBean()
@@ -382,45 +386,53 @@ class AddCreditCardPaymentActivity :
setButtonEnabled(btnSaveNewCreditCard, ConstantInt.Type0)
lifecycleScope.launch(Dispatchers.IO) {
mCreditCard?.let {
MyDatabase.creditCardDao().deleteAll(MyDatabase.CREDIT_CARD_TABLE)
it.cardNumber = cardNumber
it.cardName = cardName
it.expirationDate = creditCardValidity
it.cvv = cvv
val insertResult = MyDatabase.creditCardDao().insert(it)
if (insertResult > 0) {
if (isEdit) {
val dates = creditCardValidity.split("/")
// 用 PaymentMethodCreateParams 封装银行卡不再直接new Card
val cardParams =
PaymentMethodCreateParams.Card.Builder().setNumber(cardNumber)
.setExpiryMonth(dates[0].toInt())
.setExpiryYear(dates[1].toInt()).setCvc(cvv).build()
val paymentMethodParams = PaymentMethodCreateParams.create(cardParams)
val stripeKey = ThirdPartyUtil.instance.getStripeKey(mContext)
LogUtil.e("支付stripeKey=$stripeKey")
Stripe(mContext, stripeKey).createPaymentMethod(
paymentMethodParams,
callback = object : ApiResultCallback<PaymentMethod> {
override fun onError(e: Exception) {
showToast(R.string.txt_missing_param)
setButtonEnabled(btnSaveNewCreditCard, ConstantInt.Type1)
LogUtil.e("PaymentMethodCreateParams,${e.message}")
}
if (isHavePaymentMethodID && isEdit) {
val dates = creditCardValidity.split("/")
// 用 PaymentMethodCreateParams 封装银行卡不再直接new Card
val cardParams =
PaymentMethodCreateParams.Card.Builder().setNumber(cardNumber)
.setExpiryMonth(dates[0].toInt())
.setExpiryYear(dates[1].toInt()).setCvc(cvv).build()
val paymentMethodParams = PaymentMethodCreateParams.create(cardParams)
val stripeKey = ThirdPartyUtil.instance.getStripeKey(mContext)
LogUtil.e("支付stripeKey=$stripeKey")
Stripe(mContext, stripeKey).createPaymentMethod(
paymentMethodParams,
callback = object : ApiResultCallback<PaymentMethod> {
override fun onError(e: Exception) {
var message = e.message
if (null == message || TextUtils.isEmpty(message)) message =
getString(R.string.txt_missing_param)
showToast(message)
setButtonEnabled(btnSaveNewCreditCard, ConstantInt.Type1)
LogUtil.e("PaymentMethodCreateParams,${e.message}")
}
override fun onSuccess(result: PaymentMethod) {
LogUtil.e(result.toString())
val paymentMethodID = "${result.id}"
mSubscriptionPayViewModel.savePaymentMethodInfo(
paymentMethodID
)
}
})
} else {
runOnUiThread {
setResult(ResultCode.ResultCode_1, null)
showToast(R.string.txt_save_successful, isFinish = true)
}
override fun onSuccess(result: PaymentMethod) {
LogUtil.e(result.toString())
MyDatabase.creditCardDao()
.deleteAll(MyDatabase.CREDIT_CARD_TABLE)
it.cardNumber = cardNumber
it.cardName = cardName
it.expirationDate = creditCardValidity
it.cvv = cvv
MyDatabase.creditCardDao().insert(it)
val paymentMethodID = "${result.id}"
mSubscriptionPayViewModel.savePaymentMethodInfo(
paymentMethodID
)
}
})
} else {
MyDatabase.creditCardDao().deleteAll(MyDatabase.CREDIT_CARD_TABLE)
it.cardNumber = cardNumber
it.cardName = cardName
it.expirationDate = creditCardValidity
it.cvv = cvv
MyDatabase.creditCardDao().insert(it)
runOnUiThread {
setResult(ResultCode.ResultCode_1, null)
showToast(R.string.txt_save_successful, isFinish = true)
}
}
}

View File

@@ -135,6 +135,13 @@ class CreditCardPaymentFragment : BaseFragment<FragmentCreditCardPaymentBinding>
Intent(mContext, AddCreditCardPaymentActivity::class.java).let {
it.putExtra(ConstantString.Card, cardBean)
it.putExtra(ConstantString.Edit, true)
//是否存在PaymentMethodID
var isHavePaymentMethodID = false
getHostActivity(PaymentMethodActivity::class.java)?.let { h ->
isHavePaymentMethodID =
!(null == h.mPaymentIDBean || TextUtils.isEmpty(h.mPaymentIDBean?.stripeMethodInfo?.lastFourNumber))
}
it.putExtra(ConstantString.isCheck, isHavePaymentMethodID)
launchActivity(mActivity!!, mActivityResultLauncher, it)
}
}
@@ -273,7 +280,10 @@ class CreditCardPaymentFragment : BaseFragment<FragmentCreditCardPaymentBinding>
paymentMethodParams,
callback = object : ApiResultCallback<PaymentMethod> {
override fun onError(e: Exception) {
showToast(R.string.txt_missing_param)
var message = e.message
if (null == message || TextUtils.isEmpty(message)) message =
getString(R.string.txt_missing_param)
showToast(message)
showNoCancelableLoading(false)
LogUtil.e("ApiResultCallback,${e.message}")
}

View File

@@ -82,6 +82,7 @@
<string name="txt_card_list_end">À partir du %s</string>
<string name="txt_duration_min_unit">%s min</string>
<string name="txt_legal_info_content">En utilisant notre application, vous acceptez notre Politique de confidentialité et nos Conditions générales. Nous pouvons les mettre à jour occasionnellement - votre utilisation continue signifie que vous acceptez ces modifications.</string>
<!-- Android -->
<string name="start_txt_yes">Oui</string>
<string name="system_txt_copyright">Copyright © %d ABBIDOT Tous droits réservés</string>
<string name="tracker_number">%d traceurs</string>
@@ -357,7 +358,6 @@
<string name="text_sticker_hint_easy_photos">Double-cliquez pour modifier</string>
<string name="text_sticker_hint_name_easy_photos">Personnaliser</string>
<string name="picture_selection_easy_photos">Sélection de photos</string>
<string name="gif_easy_photos">GIF</string>
<string name="txt_card_list_time">Jours</string>
<string name="txt_card_auto_sub">Renouvellement automatique :</string>

View File

@@ -10,7 +10,7 @@
# This option should only be used with decoupled projects. For more details, visit
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
# org.gradle.parallel=true
#Wed Jun 10 09:53:29 CST 2026
#Fri Jun 26 11:14:19 CST 2026
BAIDU_MAP_KEY=YT2CmlqAkpMyzmw1AKNIBlYlBtHESEaW
BUGLY_KEY=06fc0a9cd1
GOOGLE_MAP_KEY=AIzaSyCFEqlOoo2274NsX7tzoQjs_DA7B9N7-gY
@@ -25,4 +25,4 @@ android.nonTransitiveRClass=false
android.suppressUnsupportedCompileSdk=34
android.useAndroidX=true
kotlin.code.style=official
org.gradle.jvmargs=-Xmx1024M -Dkotlin.daemon.jvm.options\="-Xmx1024M" -Dfile.encoding\=UTF-8
org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M" -Dfile.encoding\=UTF-8