TrivialDriveJava/app/src/main/java/com/sample/android/trivialdrivesample/ui/MakePurchaseFragment.java [114:158]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        makePurchaseViewModel.buySku(getActivity(), sku);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

    public LiveData<Boolean> canBuySku(String sku) {
        return makePurchaseViewModel.canBuySku(sku);
    }

    private void combineTitleSkuAndIsPurchasedData(
            MediatorLiveData<CharSequence> result,
            LiveData<String> skuTitleLiveData,
            LiveData<Boolean> isPurchasedLiveData,
            @NonNull String sku
    ) {
        String skuTitle = skuTitleLiveData.getValue();
        Boolean isPurchased = isPurchasedLiveData.getValue();
        // don't emit until we have all of our data
        if (null == skuTitle || null == isPurchased) {
            return;
        }
        if ( isPurchased && ( sku.equals(TrivialDriveRepository.SKU_INFINITE_GAS_MONTHLY) ||
                sku.equals(TrivialDriveRepository.SKU_INFINITE_GAS_YEARLY))) {
            // add URL to the Play store to allow user to unsubscribe if the user already has
            // purchased a subscription
            SpannableString titleSpannable = new SpannableString(skuTitle);
            titleSpannable.setSpan(new URLSpan(String.format(
                    PLAY_STORE_SUBSCRIPTION_DEEPLINK_URL,
                    sku,
                    getContext().getPackageName())), 0, titleSpannable.length(),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            result.setValue(titleSpannable);
        } else {
            // empty SpannableString needs to be used to clear spannables
            SpannableString titleSpannable = new SpannableString(skuTitle);
            result.setValue(titleSpannable);
        }
    }

    public LiveData<CharSequence> skuTitle(final @NonNull String sku) {
        MakePurchaseViewModel.SkuDetails skuDetails = makePurchaseViewModel.getSkuDetails(sku);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



TrivialDriveKotlin/app/src/main/java/com/sample/android/trivialdrivesample/ui/MakePurchaseFragment.java [113:157]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        makePurchaseViewModel.buySku(getActivity(), sku);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

    public LiveData<Boolean> canBuySku(String sku) {
        return makePurchaseViewModel.canBuySku(sku);
    }

    private void combineTitleSkuAndIsPurchasedData(
            MediatorLiveData<CharSequence> result,
            LiveData<String> skuTitleLiveData,
            LiveData<Boolean> isPurchasedLiveData,
            @NonNull String sku
    ) {
        String skuTitle = skuTitleLiveData.getValue();
        Boolean isPurchased = isPurchasedLiveData.getValue();
        // don't emit until we have all of our data
        if (null == skuTitle || null == isPurchased) {
            return;
        }
        if ( isPurchased && ( sku.equals(TrivialDriveRepository.SKU_INFINITE_GAS_MONTHLY) ||
                sku.equals(TrivialDriveRepository.SKU_INFINITE_GAS_YEARLY))) {
            // add URL to the Play store to allow user to unsubscribe if the user already has
            // purchased a subscription
            SpannableString titleSpannable = new SpannableString(skuTitle);
            titleSpannable.setSpan(new URLSpan(String.format(
                    PLAY_STORE_SUBSCRIPTION_DEEPLINK_URL,
                    sku,
                    getContext().getPackageName())), 0, titleSpannable.length(),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            result.setValue(titleSpannable);
        } else {
            // empty SpannableString needs to be used to clear spannables
            SpannableString titleSpannable = new SpannableString(skuTitle);
            result.setValue(titleSpannable);
        }
    }

    public LiveData<CharSequence> skuTitle(final @NonNull String sku) {
        MakePurchaseViewModel.SkuDetails skuDetails = makePurchaseViewModel.getSkuDetails(sku);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



