From 567f33653cab351fac134b252988f2c974db88c4 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Mon, 29 Apr 2024 16:43:01 +0800 Subject: [PATCH] Billing: Fix handling of SKU without info (#2321) --- .../microg/vending/billing/core/GetSkuDetailsResult.kt | 7 +++++-- .../main/java/org/microg/vending/billing/core/IAPCore.kt | 8 +++++++- .../java/org/microg/vending/billing/core/ui/UIType.kt | 2 ++ .../vending/billing/ui/logic/InAppBillingViewModel.kt | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/vending-app/src/main/java/org/microg/vending/billing/core/GetSkuDetailsResult.kt b/vending-app/src/main/java/org/microg/vending/billing/core/GetSkuDetailsResult.kt index c6d19633d..7664b2dda 100644 --- a/vending-app/src/main/java/org/microg/vending/billing/core/GetSkuDetailsResult.kt +++ b/vending-app/src/main/java/org/microg/vending/billing/core/GetSkuDetailsResult.kt @@ -1,7 +1,9 @@ package org.microg.vending.billing.core +import android.util.Log import org.microg.vending.billing.proto.DocId import org.microg.vending.billing.proto.SkuDetailsResponse +import org.microg.vending.billing.proto.SkuInfo class GetSkuDetailsResult private constructor( @@ -23,11 +25,12 @@ class GetSkuDetailsResult private constructor( ) } val skuDetailsList = - skuDetailsResponse.details.filter { it.skuDetails.isNotBlank() && it.skuInfo != null} + skuDetailsResponse.details.filter { it.skuDetails.isNotBlank() } .map { skuDetails -> + val skuInfo = skuDetails.skuInfo ?: SkuInfo() SkuDetailsItem( skuDetails.skuDetails, - skuDetails.skuInfo!!.skuItem.associate { it.token to it.docId } + skuInfo.skuItem.associate { it.token to it.docId } ) } return GetSkuDetailsResult(skuDetailsList) diff --git a/vending-app/src/main/java/org/microg/vending/billing/core/IAPCore.kt b/vending-app/src/main/java/org/microg/vending/billing/core/IAPCore.kt index c4cc7bc73..1b1eb9b8e 100644 --- a/vending-app/src/main/java/org/microg/vending/billing/core/IAPCore.kt +++ b/vending-app/src/main/java/org/microg/vending/billing/core/IAPCore.kt @@ -2,6 +2,7 @@ package org.microg.vending.billing.core import android.content.Context import android.util.Base64 +import android.util.Log import com.android.vending.Timestamp import org.json.JSONObject import org.microg.gms.utils.toBase64 @@ -92,8 +93,13 @@ class IAPCore( val requestBody = skuDetailsRequest.encode() val cacheEntry = skuDetailsCache.get(requestBody) if (cacheEntry != null) { - return GetSkuDetailsResult.parseFrom(ResponseWrapper.ADAPTER.decode(cacheEntry).payload?.skuDetailsResponse) + val getSkuDetailsResult = GetSkuDetailsResult.parseFrom(ResponseWrapper.ADAPTER.decode(cacheEntry).payload?.skuDetailsResponse) + if (getSkuDetailsResult.skuDetailsList != null && getSkuDetailsResult.skuDetailsList.isNotEmpty()) { + Log.d("IAPCore", "getSkuDetails from cache ") + return getSkuDetailsResult + } } + Log.d("IAPCore", "getSkuDetails: ") val response = HttpClient(context).post( GooglePlayApi.URL_SKU_DETAILS, headers = HeaderProvider.getDefaultHeaders(authData, deviceInfo), diff --git a/vending-app/src/main/java/org/microg/vending/billing/core/ui/UIType.kt b/vending-app/src/main/java/org/microg/vending/billing/core/ui/UIType.kt index 75a28ff57..ff33e41df 100644 --- a/vending-app/src/main/java/org/microg/vending/billing/core/ui/UIType.kt +++ b/vending-app/src/main/java/org/microg/vending/billing/core/ui/UIType.kt @@ -14,10 +14,12 @@ enum class UIType(val value: Int) { BILLING_PROFILE_OPTION_ADD_PLAY_CREDIT(816), BILLING_PROFILE_OPTION_CREATE_INSTRUMENT(817), BILLING_PROFILE_EXISTING_INSTRUMENT(818), + BILLING_PROFILE_BUTTON_UPDATE_INSTRUMENT(819), PURCHASE_SUCCESS_SCREEN_WITH_AUTH_CHOICES(1250), PURCHASE_CHANGE_SUBSCRIPTION_CONTINUE_BUTTON(1281), PURCHASE_PAYMENT_DECLINED_CONTINUE_BUTTON(1301), BILLING_PROFILE_MORE_OPTION_BUTTON_SHOW_HIDEABLE_INSTRUMENT(12034), + PURCHASE_CONSENT_COLLECTION_REFUND_RIGHTS_CONTINUE_BUTTON(11872), BILLING_PROFILE_SCREEN_ABANDON(12035); companion object { diff --git a/vending-app/src/main/java/org/microg/vending/billing/ui/logic/InAppBillingViewModel.kt b/vending-app/src/main/java/org/microg/vending/billing/ui/logic/InAppBillingViewModel.kt index f0995101e..969bcd123 100644 --- a/vending-app/src/main/java/org/microg/vending/billing/ui/logic/InAppBillingViewModel.kt +++ b/vending-app/src/main/java/org/microg/vending/billing/ui/logic/InAppBillingViewModel.kt @@ -180,6 +180,7 @@ class InAppBillingViewModel : ViewModel() { UIType.PURCHASE_PAYMENT_DECLINED_CONTINUE_BUTTON, UIType.PURCHASE_CART_PAYMENT_OPTIONS_LINK, UIType.PURCHASE_CART_CONTINUE_BUTTON, + UIType.PURCHASE_CONSENT_COLLECTION_REFUND_RIGHTS_CONTINUE_BUTTON, UIType.BILLING_PROFILE_SCREEN_ABANDON -> { if (action.screenId?.isNotBlank() == true) { if (showScreen(action.screenId!!)) { @@ -193,6 +194,7 @@ class InAppBillingViewModel : ViewModel() { UIType.BILLING_PROFILE_OPTION_CREATE_INSTRUMENT, UIType.BILLING_PROFILE_OPTION_ADD_PLAY_CREDIT, + UIType.BILLING_PROFILE_BUTTON_UPDATE_INSTRUMENT, UIType.BILLING_PROFILE_OPTION_REDEEM_CODE -> { viewModelScope.launch(Dispatchers.IO) { showPaymentMethodPage("action")