Change data flow due to deprecated method
This commit is contained in:
parent
cfd7dfef6b
commit
6bf313c32e
3 changed files with 77 additions and 50 deletions
|
@ -6,9 +6,7 @@ import android.content.Intent;
|
|||
import android.net.Uri;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.AccountIdentifiers;
|
||||
import com.android.billingclient.api.BillingClient;
|
||||
import com.android.billingclient.api.BillingResult;
|
||||
import com.android.billingclient.api.Purchase;
|
||||
|
@ -25,7 +23,6 @@ import net.osmand.plus.inapp.InAppPurchases.InAppSubscription.SubscriptionState;
|
|||
import net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription;
|
||||
import net.osmand.plus.inapp.util.BillingManager;
|
||||
import net.osmand.plus.settings.backend.CommonPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -37,6 +34,9 @@ import java.util.Arrays;
|
|||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
||||
|
||||
// The helper object
|
||||
|
@ -197,6 +197,7 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
if (skuDetails == null) {
|
||||
throw new IllegalArgumentException("Cannot find sku details");
|
||||
}
|
||||
|
||||
BillingManager billingManager = getBillingManager();
|
||||
if (billingManager != null) {
|
||||
billingManager.initiatePurchaseFlow(activity, skuDetails);
|
||||
|
@ -442,19 +443,8 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
if (liveUpdatesPurchases.size() > 0) {
|
||||
List<String> tokensSent = Arrays.asList(settings.BILLING_PURCHASE_TOKENS_SENT.get().split(";"));
|
||||
for (Purchase purchase : liveUpdatesPurchases) {
|
||||
if ((Algorithms.isEmpty(settings.BILLING_USER_ID.get()) || Algorithms.isEmpty(settings.BILLING_USER_TOKEN.get()))
|
||||
&& !Algorithms.isEmpty(purchase.getDeveloperPayload())) {
|
||||
String payload = purchase.getDeveloperPayload();
|
||||
if (!Algorithms.isEmpty(payload)) {
|
||||
String[] arr = payload.split(" ");
|
||||
if (arr.length > 0) {
|
||||
settings.BILLING_USER_ID.set(arr[0]);
|
||||
}
|
||||
if (arr.length > 1) {
|
||||
token = arr[1];
|
||||
settings.BILLING_USER_TOKEN.set(token);
|
||||
}
|
||||
}
|
||||
if (needRestoreUserInfo(settings)) {
|
||||
restoreUserInfo(settings, purchase);
|
||||
}
|
||||
if (!tokensSent.contains(purchase.getSku())) {
|
||||
tokensToSend.add(purchase);
|
||||
|
@ -469,6 +459,48 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
}
|
||||
};
|
||||
|
||||
private void restoreUserInfo(OsmandSettings settings, Purchase purchase) {
|
||||
boolean restored = restoreUserInfoUsingPayload(settings, purchase);
|
||||
if (!restored) {
|
||||
restoreUserInfoUsingAccountIdentifiers(settings, purchase);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean restoreUserInfoUsingPayload(OsmandSettings settings, Purchase purchase) {
|
||||
String payload = purchase.getDeveloperPayload();
|
||||
if (Algorithms.isEmpty(payload)) {
|
||||
return false;
|
||||
}
|
||||
String[] arr = payload.split(" ");
|
||||
if (arr.length > 0) {
|
||||
settings.BILLING_USER_ID.set(arr[0]);
|
||||
}
|
||||
if (arr.length > 1) {
|
||||
token = arr[1];
|
||||
settings.BILLING_USER_TOKEN.set(token);
|
||||
}
|
||||
return needRestoreUserInfo(settings);
|
||||
}
|
||||
|
||||
private void restoreUserInfoUsingAccountIdentifiers(OsmandSettings settings, Purchase purchase) {
|
||||
AccountIdentifiers accountInfo = purchase.getAccountIdentifiers();
|
||||
if (accountInfo != null) {
|
||||
String userId = accountInfo.getObfuscatedAccountId();
|
||||
String userToken = accountInfo.getObfuscatedProfileId();
|
||||
if (Algorithms.isEmpty(settings.BILLING_USER_ID.get()) && !Algorithms.isEmpty(userId)) {
|
||||
settings.BILLING_USER_ID.set(userId);
|
||||
}
|
||||
if (Algorithms.isEmpty(settings.BILLING_USER_TOKEN.get()) && !Algorithms.isEmpty(userToken)) {
|
||||
token = userToken;
|
||||
settings.BILLING_USER_TOKEN.set(userToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean needRestoreUserInfo(OsmandSettings settings) {
|
||||
return Algorithms.isEmpty(settings.BILLING_USER_ID.get()) || Algorithms.isEmpty(settings.BILLING_USER_TOKEN.get());
|
||||
}
|
||||
|
||||
private PurchaseInfo getPurchaseInfo(Purchase purchase) {
|
||||
return new PurchaseInfo(purchase.getSku(), purchase.getOrderId(), purchase.getPurchaseToken());
|
||||
}
|
||||
|
@ -524,7 +556,7 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
}
|
||||
}
|
||||
|
||||
protected InAppCommand getPurchaseLiveUpdatesCommand(final WeakReference<Activity> activity, final String sku, final String payload) {
|
||||
protected InAppCommand getPurchaseLiveUpdatesCommand(final WeakReference<Activity> activity, final String sku) {
|
||||
return new InAppCommand() {
|
||||
@Override
|
||||
public void run(InAppPurchaseHelper helper) {
|
||||
|
@ -534,7 +566,6 @@ public class InAppPurchaseHelperImpl extends InAppPurchaseHelper {
|
|||
if (AndroidUtils.isActivityNotDestroyed(a) && skuDetails != null) {
|
||||
BillingManager billingManager = getBillingManager();
|
||||
if (billingManager != null) {
|
||||
billingManager.setPayload(payload);
|
||||
billingManager.initiatePurchaseFlow(a, skuDetails);
|
||||
} else {
|
||||
throw new IllegalStateException("BillingManager disposed");
|
||||
|
|
|
@ -8,9 +8,6 @@ import android.os.AsyncTask;
|
|||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.AndroidNetworkUtils;
|
||||
import net.osmand.AndroidNetworkUtils.OnRequestResultListener;
|
||||
import net.osmand.AndroidNetworkUtils.OnRequestsResultListener;
|
||||
|
@ -43,6 +40,9 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public abstract class InAppPurchaseHelper {
|
||||
// Debug tag, for logging
|
||||
protected static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(InAppPurchaseHelper.class);
|
||||
|
@ -364,8 +364,7 @@ public abstract class InAppPurchaseHelper {
|
|||
notifyDismissProgress(InAppPurchaseTaskType.PURCHASE_LIVE_UPDATES);
|
||||
if (!Algorithms.isEmpty(userId) && !Algorithms.isEmpty(token)) {
|
||||
logDebug("Launching purchase flow for live updates subscription for userId=" + userId);
|
||||
final String payload = userId + " " + token;
|
||||
exec(InAppPurchaseTaskType.PURCHASE_LIVE_UPDATES, getPurchaseLiveUpdatesCommand(activity, sku, payload));
|
||||
exec(InAppPurchaseTaskType.PURCHASE_LIVE_UPDATES, getPurchaseLiveUpdatesCommand(activity, sku));
|
||||
} else {
|
||||
notifyError(InAppPurchaseTaskType.PURCHASE_LIVE_UPDATES, "Empty userId");
|
||||
stop(true);
|
||||
|
@ -374,7 +373,7 @@ public abstract class InAppPurchaseHelper {
|
|||
}
|
||||
|
||||
protected abstract InAppCommand getPurchaseLiveUpdatesCommand(final WeakReference<Activity> activity,
|
||||
final String sku, final String payload) throws UnsupportedOperationException;
|
||||
final String sku) throws UnsupportedOperationException;
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private class RequestInventoryTask extends AsyncTask<Void, Void, String[]> {
|
||||
|
|
|
@ -3,9 +3,6 @@ package net.osmand.plus.inapp.util;
|
|||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.AcknowledgePurchaseParams;
|
||||
import com.android.billingclient.api.AcknowledgePurchaseResponseListener;
|
||||
import com.android.billingclient.api.BillingClient;
|
||||
|
@ -25,7 +22,8 @@ import com.android.billingclient.api.SkuDetailsParams;
|
|||
import com.android.billingclient.api.SkuDetailsResponseListener;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
@ -33,6 +31,9 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Handles all the interactions with Play Store (via Billing library), maintains connection to
|
||||
* it through BillingClient and caches temporary states/data if needed
|
||||
|
@ -58,7 +59,6 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
|
||||
// Public key for verifying signature, in base64 encoding
|
||||
private String mSignatureBase64;
|
||||
private String mPayload;
|
||||
|
||||
private final BillingUpdatesListener mBillingUpdatesListener;
|
||||
private final List<Purchase> mPurchases = new ArrayList<>();
|
||||
|
@ -145,7 +145,11 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
Runnable purchaseFlowRequest = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
BillingFlowParams.Builder paramsBuilder = BillingFlowParams.newBuilder().setSkuDetails(skuDetails);
|
||||
OsmandSettings settings = getSettings(activity);
|
||||
BillingFlowParams.Builder paramsBuilder = BillingFlowParams.newBuilder()
|
||||
.setSkuDetails(skuDetails)
|
||||
.setObfuscatedAccountId(settings.BILLING_USER_ID.get())
|
||||
.setObfuscatedProfileId(settings.BILLING_USER_TOKEN.get());
|
||||
if (oldSku != null) {
|
||||
paramsBuilder.setOldSku(oldSku, purchaseToken);
|
||||
}
|
||||
|
@ -180,9 +184,11 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
@Override
|
||||
public void run() {
|
||||
// Query the purchase async
|
||||
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
|
||||
params.setSkusList(skuList).setType(itemType);
|
||||
mBillingClient.querySkuDetailsAsync(params.build(),
|
||||
SkuDetailsParams params = SkuDetailsParams.newBuilder()
|
||||
.setSkusList(skuList)
|
||||
.setType(itemType)
|
||||
.build();
|
||||
mBillingClient.querySkuDetailsAsync(params,
|
||||
new SkuDetailsResponseListener() {
|
||||
@Override
|
||||
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
|
||||
|
@ -250,15 +256,6 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
return Collections.unmodifiableList(mPurchases);
|
||||
}
|
||||
|
||||
|
||||
public String getPayload() {
|
||||
return mPayload;
|
||||
}
|
||||
|
||||
public void setPayload(String payload) {
|
||||
this.mPayload = payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the purchase
|
||||
* <p>Note: Notice that for each purchase, we check if signature is valid on the client.
|
||||
|
@ -277,13 +274,9 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
|
||||
// Acknowledge the purchase if it hasn't already been acknowledged.
|
||||
if (!purchase.isAcknowledged()) {
|
||||
AcknowledgePurchaseParams.Builder builder =
|
||||
AcknowledgePurchaseParams.newBuilder()
|
||||
.setPurchaseToken(purchase.getPurchaseToken());
|
||||
if (!Algorithms.isEmpty(mPayload)) {
|
||||
builder.setDeveloperPayload(mPayload);
|
||||
}
|
||||
AcknowledgePurchaseParams acknowledgePurchaseParams = builder.build();
|
||||
AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
|
||||
.setPurchaseToken(purchase.getPurchaseToken())
|
||||
.build();
|
||||
mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
|
||||
@Override
|
||||
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
|
||||
|
@ -419,6 +412,10 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||
private boolean verifyValidSignature(String signedData, String signature) {
|
||||
return Security.verifyPurchase(mSignatureBase64, signedData, signature);
|
||||
}
|
||||
|
||||
private OsmandSettings getSettings(Activity activity) {
|
||||
return ((OsmandApplication) activity.getApplication()).getSettings();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue