Search in sources :

Example 6 with InAppSubscription

use of net.osmand.plus.inapp.InAppPurchases.InAppSubscription in project Osmand by osmandapp.

the class InAppPurchaseHelperImpl method execImpl.

@Override
protected void execImpl(@NonNull final InAppPurchaseTaskType taskType, @NonNull final InAppCommand runnable) {
    billingManager = new BillingManager(ctx, BASE64_ENCODED_PUBLIC_KEY, new BillingManager.BillingUpdatesListener() {

        @Override
        public void onBillingClientSetupFinished() {
            logDebug("Setup finished.");
            BillingManager billingManager = getBillingManager();
            // Have we been disposed of in the meantime? If so, quit.
            if (billingManager == null) {
                stop(true);
                return;
            }
            if (!billingManager.isServiceConnected()) {
                // Oh noes, there was a problem.
                // complain("Problem setting up in-app billing: " + result);
                notifyError(taskType, billingManager.getBillingClientResponseMessage());
                stop(true);
                return;
            }
            runnable.run(InAppPurchaseHelperImpl.this);
        }

        @Override
        public void onConsumeFinished(String token, BillingResult billingResult) {
        }

        @Override
        public void onPurchasesUpdated(final List<Purchase> purchases) {
            BillingManager billingManager = getBillingManager();
            // Have we been disposed of in the meantime? If so, quit.
            if (billingManager == null) {
                stop(true);
                return;
            }
            if (activeTask == InAppPurchaseTaskType.REQUEST_INVENTORY) {
                List<String> skuInApps = new ArrayList<>();
                for (InAppPurchase purchase : getInAppPurchases().getAllInAppPurchases(false)) {
                    skuInApps.add(purchase.getSku());
                }
                for (Purchase p : purchases) {
                    skuInApps.add(p.getSku());
                }
                billingManager.querySkuDetailsAsync(BillingClient.SkuType.INAPP, skuInApps, new SkuDetailsResponseListener() {

                    @Override
                    public void onSkuDetailsResponse(@NonNull BillingResult billingResult, final List<SkuDetails> skuDetailsListInApps) {
                        // Is it a failure?
                        if (billingResult.getResponseCode() != BillingClient.BillingResponseCode.OK) {
                            logError("Failed to query inapps sku details: " + billingResult.getResponseCode());
                            notifyError(InAppPurchaseTaskType.REQUEST_INVENTORY, billingResult.getDebugMessage());
                            stop(true);
                            return;
                        }
                        List<String> skuSubscriptions = new ArrayList<>();
                        for (InAppSubscription subscription : getInAppPurchases().getAllInAppSubscriptions()) {
                            skuSubscriptions.add(subscription.getSku());
                        }
                        for (Purchase p : purchases) {
                            skuSubscriptions.add(p.getSku());
                        }
                        skuSubscriptions.addAll(subscriptionStateMap.keySet());
                        BillingManager billingManager = getBillingManager();
                        // Have we been disposed of in the meantime? If so, quit.
                        if (billingManager == null) {
                            stop(true);
                            return;
                        }
                        billingManager.querySkuDetailsAsync(BillingClient.SkuType.SUBS, skuSubscriptions, new SkuDetailsResponseListener() {

                            @Override
                            public void onSkuDetailsResponse(@NonNull BillingResult billingResult, final List<SkuDetails> skuDetailsListSubscriptions) {
                                // Is it a failure?
                                if (billingResult.getResponseCode() != BillingClient.BillingResponseCode.OK) {
                                    logError("Failed to query subscriptipons sku details: " + billingResult.getResponseCode());
                                    notifyError(InAppPurchaseTaskType.REQUEST_INVENTORY, billingResult.getDebugMessage());
                                    stop(true);
                                    return;
                                }
                                List<SkuDetails> skuDetailsList = new ArrayList<>(skuDetailsListInApps);
                                skuDetailsList.addAll(skuDetailsListSubscriptions);
                                InAppPurchaseHelperImpl.this.skuDetailsList = skuDetailsList;
                                getSkuDetailsResponseListener(runnable.userRequested()).onSkuDetailsResponse(billingResult, skuDetailsList);
                            }
                        });
                    }
                });
            }
            for (Purchase purchase : purchases) {
                InAppSubscription subscription = getSubscriptions().getSubscriptionBySku(purchase.getSku());
                if (!purchase.isAcknowledged() || (subscription != null && !subscription.isPurchased())) {
                    onPurchaseFinished(purchase);
                }
            }
        }

        @Override
        public void onPurchaseCanceled() {
            stop(true);
        }
    });
}
Also used : SkuDetails(com.android.billingclient.api.SkuDetails) InAppPurchase(net.osmand.plus.inapp.InAppPurchases.InAppPurchase) Purchase(com.android.billingclient.api.Purchase) InAppPurchase(net.osmand.plus.inapp.InAppPurchases.InAppPurchase) BillingManager(net.osmand.plus.inapp.util.BillingManager) ArrayList(java.util.ArrayList) InAppSubscription(net.osmand.plus.inapp.InAppPurchases.InAppSubscription) SkuDetailsResponseListener(com.android.billingclient.api.SkuDetailsResponseListener) NonNull(androidx.annotation.NonNull) BillingResult(com.android.billingclient.api.BillingResult) ArrayList(java.util.ArrayList) List(java.util.List)

Example 7 with InAppSubscription

use of net.osmand.plus.inapp.InAppPurchases.InAppSubscription in project Osmand by osmandapp.

the class InAppPurchaseHelperImpl method getRequestInventoryCommand.

@Override
protected InAppCommand getRequestInventoryCommand(boolean userRequested) {
    return new InAppCommand() {

        @Override
        protected void commandDone() {
            super.commandDone();
            inventoryRequested = false;
        }

        @Override
        public void run(InAppPurchaseHelper helper) {
            logDebug("Setup successful. Querying inventory.");
            try {
                productInfos = new ArrayList<>();
                obtainOwnedSubscriptions();
            } catch (Exception e) {
                logError("queryInventoryAsync Error", e);
                notifyDismissProgress(InAppPurchaseTaskType.REQUEST_INVENTORY);
                stop(true);
                commandDone();
            }
        }

        private void obtainOwnedSubscriptions() {
            if (uiActivity != null) {
                IapRequestHelper.obtainOwnedPurchases(getIapClient(), IapClient.PriceType.IN_APP_SUBSCRIPTION, null, new IapApiCallback<OwnedPurchasesResult>() {

                    @Override
                    public void onSuccess(OwnedPurchasesResult result) {
                        ownedSubscriptions = result;
                        obtainOwnedInApps(null);
                    }

                    @Override
                    public void onFail(Exception e) {
                        logError("obtainOwnedSubscriptions exception", e);
                        ExceptionHandle.handle((Activity) uiActivity, e);
                        commandDone();
                    }
                });
            } else {
                commandDone();
            }
        }

        private void obtainOwnedInApps(final String continuationToken) {
            if (uiActivity != null) {
                // Query users' purchased non-consumable products.
                IapRequestHelper.obtainOwnedPurchases(getIapClient(), IapClient.PriceType.IN_APP_NONCONSUMABLE, continuationToken, new IapApiCallback<OwnedPurchasesResult>() {

                    @Override
                    public void onSuccess(OwnedPurchasesResult result) {
                        ownedInApps.add(result);
                        if (result != null && !TextUtils.isEmpty(result.getContinuationToken())) {
                            obtainOwnedInApps(result.getContinuationToken());
                        } else {
                            obtainSubscriptionsInfo();
                        }
                    }

                    @Override
                    public void onFail(Exception e) {
                        logError("obtainOwnedInApps exception", e);
                        ExceptionHandle.handle((Activity) uiActivity, e);
                        commandDone();
                    }
                });
            } else {
                commandDone();
            }
        }

        private void obtainSubscriptionsInfo() {
            if (uiActivity != null) {
                Set<String> productIds = new HashSet<>();
                List<InAppSubscription> subscriptions = purchases.getSubscriptions().getAllSubscriptions();
                for (InAppSubscription s : subscriptions) {
                    productIds.add(s.getSku());
                }
                productIds.addAll(ownedSubscriptions.getItemList());
                IapRequestHelper.obtainProductInfo(getIapClient(), new ArrayList<>(productIds), IapClient.PriceType.IN_APP_SUBSCRIPTION, new IapApiCallback<ProductInfoResult>() {

                    @Override
                    public void onSuccess(final ProductInfoResult result) {
                        if (result != null && result.getProductInfoList() != null) {
                            productInfos.addAll(result.getProductInfoList());
                        }
                        obtainInAppsInfo();
                    }

                    @Override
                    public void onFail(Exception e) {
                        int errorCode = ExceptionHandle.handle((Activity) uiActivity, e);
                        if (ExceptionHandle.SOLVED != errorCode) {
                            LOG.error("Unknown error");
                        }
                        commandDone();
                    }
                });
            } else {
                commandDone();
            }
        }

        private void obtainInAppsInfo() {
            if (uiActivity != null) {
                Set<String> productIds = new HashSet<>();
                for (InAppPurchase purchase : getInAppPurchases().getAllInAppPurchases(false)) {
                    productIds.add(purchase.getSku());
                }
                for (OwnedPurchasesResult result : ownedInApps) {
                    productIds.addAll(result.getItemList());
                }
                IapRequestHelper.obtainProductInfo(getIapClient(), new ArrayList<>(productIds), IapClient.PriceType.IN_APP_NONCONSUMABLE, new IapApiCallback<ProductInfoResult>() {

                    @Override
                    public void onSuccess(ProductInfoResult result) {
                        if (result != null && result.getProductInfoList() != null) {
                            productInfos.addAll(result.getProductInfoList());
                        }
                        processInventory();
                    }

                    @Override
                    public void onFail(Exception e) {
                        int errorCode = ExceptionHandle.handle((Activity) uiActivity, e);
                        if (ExceptionHandle.SOLVED != errorCode) {
                            LOG.error("Unknown error");
                        }
                        commandDone();
                    }
                });
            } else {
                commandDone();
            }
        }

        private void processInventory() {
            logDebug("Query sku details was successful.");
            /*
				 * Check for items we own. Notice that for each purchase, we check
				 * the developer payload to see if it's correct!
				 */
            List<String> allOwnedSubscriptionSkus = ownedSubscriptions.getItemList();
            for (InAppSubscription s : getSubscriptions().getAllSubscriptions()) {
                if (hasDetails(s.getSku())) {
                    InAppPurchaseData purchaseData = getPurchaseData(s.getSku());
                    ProductInfo liveUpdatesInfo = getProductInfo(s.getSku());
                    if (liveUpdatesInfo != null) {
                        fetchInAppPurchase(s, liveUpdatesInfo, purchaseData);
                    }
                    allOwnedSubscriptionSkus.remove(s.getSku());
                }
            }
            for (String sku : allOwnedSubscriptionSkus) {
                InAppPurchaseData purchaseData = getPurchaseData(sku);
                ProductInfo liveUpdatesInfo = getProductInfo(sku);
                if (liveUpdatesInfo != null) {
                    InAppSubscription s = getSubscriptions().upgradeSubscription(sku);
                    if (s == null) {
                        s = new InAppPurchaseLiveUpdatesOldSubscription(liveUpdatesInfo);
                    }
                    fetchInAppPurchase(s, liveUpdatesInfo, purchaseData);
                }
            }
            InAppPurchase fullVersion = getFullVersion();
            if (hasDetails(fullVersion.getSku())) {
                InAppPurchaseData purchaseData = getPurchaseData(fullVersion.getSku());
                ProductInfo fullPriceDetails = getProductInfo(fullVersion.getSku());
                if (fullPriceDetails != null) {
                    fetchInAppPurchase(fullVersion, fullPriceDetails, purchaseData);
                }
            }
            InAppPurchase depthContours = getDepthContours();
            if (hasDetails(depthContours.getSku())) {
                InAppPurchaseData purchaseData = getPurchaseData(depthContours.getSku());
                ProductInfo depthContoursDetails = getProductInfo(depthContours.getSku());
                if (depthContoursDetails != null) {
                    fetchInAppPurchase(depthContours, depthContoursDetails, purchaseData);
                }
            }
            InAppPurchase contourLines = getContourLines();
            if (hasDetails(contourLines.getSku())) {
                InAppPurchaseData purchaseData = getPurchaseData(contourLines.getSku());
                ProductInfo contourLinesDetails = getProductInfo(contourLines.getSku());
                if (contourLinesDetails != null) {
                    fetchInAppPurchase(contourLines, contourLinesDetails, purchaseData);
                }
            }
            if (getPurchaseData(fullVersion.getSku()) != null) {
                ctx.getSettings().FULL_VERSION_PURCHASED.set(true);
            }
            if (getPurchaseData(depthContours.getSku()) != null) {
                ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true);
            }
            if (getPurchaseData(contourLines.getSku()) != null) {
                ctx.getSettings().CONTOUR_LINES_PURCHASED.set(true);
            }
            // Do we have the live updates?
            boolean subscribedToLiveUpdates = false;
            boolean subscribedToOsmAndPro = false;
            boolean subscribedToMaps = false;
            List<InAppPurchaseData> subscriptionPurchases = new ArrayList<>();
            for (InAppSubscription s : getSubscriptions().getAllSubscriptions()) {
                InAppPurchaseData purchaseData = getPurchaseData(s.getSku());
                if (purchaseData != null || s.getState().isActive()) {
                    if (purchaseData != null) {
                        subscriptionPurchases.add(purchaseData);
                    }
                    if (!subscribedToLiveUpdates && purchases.isLiveUpdatesSubscription(s)) {
                        subscribedToLiveUpdates = true;
                    }
                    if (!subscribedToOsmAndPro && purchases.isOsmAndProSubscription(s)) {
                        subscribedToOsmAndPro = true;
                    }
                    if (!subscribedToMaps && purchases.isMapsSubscription(s)) {
                        subscribedToMaps = true;
                    }
                }
            }
            if (!subscribedToLiveUpdates && ctx.getSettings().LIVE_UPDATES_PURCHASED.get()) {
                ctx.getSettings().LIVE_UPDATES_PURCHASED.set(false);
            } else if (subscribedToLiveUpdates) {
                ctx.getSettings().LIVE_UPDATES_PURCHASED.set(true);
            }
            if (!subscribedToOsmAndPro && ctx.getSettings().OSMAND_PRO_PURCHASED.get()) {
                ctx.getSettings().OSMAND_PRO_PURCHASED.set(false);
            } else if (subscribedToOsmAndPro) {
                ctx.getSettings().OSMAND_PRO_PURCHASED.set(true);
            }
            if (!subscribedToMaps && ctx.getSettings().OSMAND_MAPS_PURCHASED.get()) {
                ctx.getSettings().OSMAND_MAPS_PURCHASED.set(false);
            } else if (subscribedToMaps) {
                ctx.getSettings().OSMAND_MAPS_PURCHASED.set(true);
            }
            if (!subscribedToLiveUpdates && !subscribedToOsmAndPro && !subscribedToMaps) {
                onSubscriptionExpired();
            }
            lastValidationCheckTime = System.currentTimeMillis();
            logDebug("User " + (subscribedToLiveUpdates ? "HAS" : "DOES NOT HAVE") + " live updates purchased.");
            logDebug("User " + (subscribedToOsmAndPro ? "HAS" : "DOES NOT HAVE") + " OsmAnd Pro purchased.");
            logDebug("User " + (subscribedToMaps ? "HAS" : "DOES NOT HAVE") + " Maps purchased.");
            OsmandSettings settings = ctx.getSettings();
            settings.INAPPS_READ.set(true);
            List<InAppPurchaseData> tokensToSend = new ArrayList<>();
            if (subscriptionPurchases.size() > 0) {
                List<String> tokensSent = Arrays.asList(settings.BILLING_PURCHASE_TOKENS_SENT.get().split(";"));
                for (InAppPurchaseData purchase : subscriptionPurchases) {
                    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 (!tokensSent.contains(purchase.getProductId())) {
                        tokensToSend.add(purchase);
                    }
                }
            }
            List<PurchaseInfo> purchaseInfoList = new ArrayList<>();
            for (InAppPurchaseData purchase : tokensToSend) {
                purchaseInfoList.add(getPurchaseInfo(purchase));
            }
            onSkuDetailsResponseDone(purchaseInfoList, userRequested);
        }

        private void onSubscriptionExpired() {
            if (!isDepthContoursPurchased(ctx)) {
                ctx.getSettings().getCustomRenderBooleanProperty("depthContours").set(false);
            }
        }
    };
}
Also used : InAppPurchaseData(com.huawei.hms.iap.entity.InAppPurchaseData) InAppPurchaseLiveUpdatesOldSubscription(net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription) ProductInfoResult(com.huawei.hms.iap.entity.ProductInfoResult) ArrayList(java.util.ArrayList) Activity(android.app.Activity) InAppSubscription(net.osmand.plus.inapp.InAppPurchases.InAppSubscription) HashSet(java.util.HashSet) ProductInfo(com.huawei.hms.iap.entity.ProductInfo) InAppPurchase(net.osmand.plus.inapp.InAppPurchases.InAppPurchase) ParseException(java.text.ParseException) OsmandSettings(net.osmand.plus.settings.backend.OsmandSettings) PurchaseInfo(net.osmand.plus.inapp.InAppPurchases.PurchaseInfo) OwnedPurchasesResult(com.huawei.hms.iap.entity.OwnedPurchasesResult)

Example 8 with InAppSubscription

use of net.osmand.plus.inapp.InAppPurchases.InAppSubscription in project Osmand by osmandapp.

the class InAppPurchaseHelper method onPurchaseDone.

protected void onPurchaseDone(PurchaseInfo info) {
    logDebug("Purchase successful.");
    InAppSubscription subscription = getSubscriptions().getSubscriptionBySku(info.getSku());
    InAppPurchase fullVersion = getFullVersion();
    InAppPurchase depthContours = getDepthContours();
    InAppPurchase contourLines = getContourLines();
    if (subscription != null) {
        final boolean maps = purchases.isMapsSubscription(subscription);
        final boolean liveUpdates = purchases.isLiveUpdatesSubscription(subscription);
        final boolean pro = purchases.isOsmAndProSubscription(subscription);
        // bought live updates
        if (maps) {
            logDebug("Maps subscription purchased.");
        } else if (liveUpdates) {
            logDebug("Live updates subscription purchased.");
        } else if (pro) {
            logDebug("OsmAnd Pro subscription purchased.");
        }
        final String sku = subscription.getSku();
        subscription.setPurchaseState(PurchaseState.PURCHASED);
        subscription.setPurchaseInfo(ctx, info);
        subscription.setState(ctx, SubscriptionState.UNDEFINED);
        logDebug("Sending tokens...");
        sendTokens(Collections.singletonList(info), new OnRequestResultListener() {

            @Override
            public void onResult(@Nullable String result, @Nullable String error, @Nullable Integer resultCode) {
                logDebug("Tokens sent");
                boolean active = false;
                if (liveUpdates || pro) {
                    active = ctx.getSettings().LIVE_UPDATES_PURCHASED.get();
                    ctx.getSettings().LIVE_UPDATES_PURCHASED.set(true);
                    if (pro) {
                        ctx.getSettings().OSMAND_PRO_PURCHASED.set(true);
                    }
                    ctx.getSettings().getCustomRenderBooleanProperty("depthContours").set(true);
                    ctx.getSettings().LIVE_UPDATES_EXPIRED_FIRST_DLG_SHOWN_TIME.set(0L);
                    ctx.getSettings().LIVE_UPDATES_EXPIRED_SECOND_DLG_SHOWN_TIME.set(0L);
                } else if (maps) {
                    active = ctx.getSettings().OSMAND_MAPS_PURCHASED.get();
                    ctx.getSettings().OSMAND_MAPS_PURCHASED.set(true);
                    ctx.getSettings().getCustomRenderBooleanProperty("depthContours").set(true);
                }
                notifyDismissProgress(InAppPurchaseTaskType.PURCHASE_SUBSCRIPTION);
                notifyItemPurchased(sku, active);
                refreshAndroidAuto();
                stop(true);
            }
        });
    } else if (fullVersion != null && info.getSku().equals(fullVersion.getSku())) {
        // bought full version
        fullVersion.setPurchaseState(PurchaseState.PURCHASED);
        fullVersion.setPurchaseInfo(ctx, info);
        logDebug("Full version purchased.");
        showToast(ctx.getString(R.string.full_version_thanks));
        ctx.getSettings().FULL_VERSION_PURCHASED.set(true);
        notifyDismissProgress(InAppPurchaseTaskType.PURCHASE_FULL_VERSION);
        notifyItemPurchased(fullVersion.getSku(), false);
        refreshAndroidAuto();
        stop(true);
    } else if (depthContours != null && info.getSku().equals(depthContours.getSku())) {
        // bought sea depth contours
        depthContours.setPurchaseState(PurchaseState.PURCHASED);
        depthContours.setPurchaseInfo(ctx, info);
        logDebug("Sea depth contours purchased.");
        showToast(ctx.getString(R.string.sea_depth_thanks));
        ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true);
        ctx.getSettings().getCustomRenderBooleanProperty("depthContours").set(true);
        notifyDismissProgress(InAppPurchaseTaskType.PURCHASE_DEPTH_CONTOURS);
        notifyItemPurchased(depthContours.getSku(), false);
        stop(true);
    } else if (contourLines != null && info.getSku().equals(contourLines.getSku())) {
        // bought contour lines
        contourLines.setPurchaseState(PurchaseState.PURCHASED);
        contourLines.setPurchaseInfo(ctx, info);
        logDebug("Contours lines purchased.");
        showToast(ctx.getString(R.string.contour_lines_thanks));
        ctx.getSettings().CONTOUR_LINES_PURCHASED.set(true);
        notifyDismissProgress(InAppPurchaseTaskType.PURCHASE_CONTOUR_LINES);
        notifyItemPurchased(contourLines.getSku(), false);
        stop(true);
    } else {
        notifyDismissProgress(activeTask);
        stop(true);
    }
}
Also used : InAppPurchase(net.osmand.plus.inapp.InAppPurchases.InAppPurchase) OnRequestResultListener(net.osmand.plus.utils.AndroidNetworkUtils.OnRequestResultListener) InAppSubscription(net.osmand.plus.inapp.InAppPurchases.InAppSubscription)

Example 9 with InAppSubscription

use of net.osmand.plus.inapp.InAppPurchases.InAppSubscription in project Osmand by osmandapp.

the class InAppPurchaseCard method updateContent.

@Override
protected void updateContent() {
    ImageView icon = view.findViewById(R.id.icon);
    TextView title = view.findViewById(R.id.title);
    if (purchases.isOsmAndProSubscription(purchase)) {
        title.setText(R.string.osmand_pro);
        icon.setImageDrawable(getIcon(R.drawable.ic_action_osmand_pro_logo_colored));
    } else if (purchases.isLiveUpdatesSubscription(purchase)) {
        title.setText(R.string.osm_live);
        icon.setImageDrawable(getIcon(R.drawable.ic_action_subscription_osmand_live));
    } else if (purchases.isMapsSubscription(purchase) || purchases.isFullVersion(purchase)) {
        title.setText(R.string.maps_plus);
        icon.setImageDrawable(getIcon(R.drawable.ic_action_osmand_maps_plus));
    }
    if (purchase instanceof InAppSubscription) {
        setupSubscriptionCard((InAppSubscription) purchase);
    } else {
        setupPurchaseCard(purchase);
    }
    boolean manageVisible = purchase instanceof InAppSubscription;
    boolean liveVisible = purchases.isLiveUpdatesSubscription(purchase);
    setupLiveButton(liveVisible);
    setupManageButton(manageVisible);
    AndroidUiHelper.updateVisibility(view.findViewById(R.id.card_divider), manageVisible || liveVisible);
    AndroidUiHelper.updateVisibility(view.findViewById(R.id.buttons_divider), manageVisible && liveVisible);
}
Also used : InAppSubscription(net.osmand.plus.inapp.InAppPurchases.InAppSubscription) TextView(android.widget.TextView) ImageView(android.widget.ImageView)

Example 10 with InAppSubscription

use of net.osmand.plus.inapp.InAppPurchases.InAppSubscription in project Osmand by osmandapp.

the class BackupHelper method getOrderId.

@Nullable
public String getOrderId() {
    InAppPurchaseHelper purchaseHelper = app.getInAppPurchaseHelper();
    InAppSubscription purchasedSubscription = purchaseHelper.getAnyPurchasedOsmAndProSubscription();
    return purchasedSubscription != null ? purchasedSubscription.getOrderId() : null;
}
Also used : InAppPurchaseHelper(net.osmand.plus.inapp.InAppPurchaseHelper) InAppSubscription(net.osmand.plus.inapp.InAppPurchases.InAppSubscription) Nullable(androidx.annotation.Nullable)

Aggregations

InAppSubscription (net.osmand.plus.inapp.InAppPurchases.InAppSubscription)14 ArrayList (java.util.ArrayList)7 ParseException (java.text.ParseException)4 InAppPurchase (net.osmand.plus.inapp.InAppPurchases.InAppPurchase)4 OsmandSettings (net.osmand.plus.settings.backend.OsmandSettings)3 NonNull (androidx.annotation.NonNull)2 BillingResult (com.android.billingclient.api.BillingResult)2 Purchase (com.android.billingclient.api.Purchase)2 SkuDetails (com.android.billingclient.api.SkuDetails)2 SkuDetailsResponseListener (com.android.billingclient.api.SkuDetailsResponseListener)2 List (java.util.List)2 InAppPurchases (net.osmand.plus.inapp.InAppPurchases)2 InAppSubscriptionIntroductoryInfo (net.osmand.plus.inapp.InAppPurchases.InAppSubscriptionIntroductoryInfo)2 PurchaseInfo (net.osmand.plus.inapp.InAppPurchases.PurchaseInfo)2 InAppPurchaseLiveUpdatesOldSubscription (net.osmand.plus.inapp.InAppPurchasesImpl.InAppPurchaseLiveUpdatesOldSubscription)2 BillingManager (net.osmand.plus.inapp.util.BillingManager)2 Activity (android.app.Activity)1 Spannable (android.text.Spannable)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1