Приветствую!Мне нужна помощь в реализации одной функции.Мне нужно время до конца подписки выводилось на экран

 package com.ru.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.PurchaseInfo;
import com.anjlab.android.iab.v3.SkuDetails;
import com.anjlab.android.iab.v3.TransactionDetails;



///Перед началом тестов,желательно добавить карту заново.
///Конец работы 14.08.2020.
///Весь код написан на java.

public class mainactivity extends AppCompatActivity implements BillingProcessor.IBillingHandler {

    BillingProcessor mBillingProcessor;

    private final static String ONE_TIME_PAYMENT = "otp";
    private final static String SUBSCRIPTION = "subs";
    ///Вводим ключ из коносли
    private final static String GPLAY_LICENSE = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnjzOg5BORvyrs6yRBjTqDdSisuHfTJGYO5ciWRbNlG8T9b0WTGfFsJAVjc31TMYERFg/w+N2Ugyj5+dgE564HORY7N23tYp6p0Iv3ozC7+z5BaNMdRGMkz6tlQFu2xqYkRjj4/yIOhq7xnnIVNohfE66N6Tleov2szfSLaIQ/3UU20zlcophWXVMMg/Hxu0raYtl9jAoJKMG9jk2iC4aI2qTLD0ulmHuesiNOtCFlntVmI9eqkiPgFpf9PoIgZyyOgYZJvXT6EK4E4DYjErY7F7YM8OsEwUDsbOzZdBS+HkxmGlcJLZmRmhBRp4s1TfcIlMhyfWKAQcdx8gHLyLYzwIDAQAB";

    ///Назначаем кнопки ч1.
    ///Смотрим ID в XML файле.
    private Button mSingleTimePaymentButton;
    private Button mConsumabelButton;
    private Button mSubscriptionButton;

    private View mProgress;
    ///Для работы будем использовать BillingProcessor.

    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBillingProcessor = new BillingProcessor(this, GPLAY_LICENSE, this);


        ///Назначаем слушители ч2.
        mProgress = findViewById(R.id.progress);

        mSingleTimePaymentButton = findViewById(R.id.btnSingleTypePayment);
        mConsumabelButton = findViewById(R.id.btnConsume);
        mSubscriptionButton = findViewById(R.id.btnSubscription);
        ///Инициализация BillingProcessor
        boolean isAvailable = BillingProcessor.isIabServiceAvailable(this);
        if (!isAvailable) {
            mProgress.setVisibility(View.GONE);
            showMsg(getString(R.string.billing_not_available));
        } else {
            mBillingProcessor.initialize();
        }

        setupButtonClickListeners();
    }

    private void setupButtonClickListeners() {
        mSingleTimePaymentButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mBillingProcessor.purchase(mainactivity.this, ONE_TIME_PAYMENT);
            }
        });

        mSubscriptionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mBillingProcessor.subscribe(mainactivity.this, SUBSCRIPTION);
            }
        });

        mConsumabelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean consumptionResult = mBillingProcessor.consumePurchase(ONE_TIME_PAYMENT);
                if (consumptionResult) {
                    setupConsumableButtons(false);
                }
            }
        });
    }

    ///Как только процессор подгрузился можно загрузить уже купленные продукты.
    @Override
    public void onBillingInitialized() {

        showMsg("onBillingInitialized");
        if (mBillingProcessor.loadOwnedPurchasesFromGoogle()) {
            handleLoadedItems();
        }
    }

    ///Обработка покупки,выдаем цифровой товар.
    @Override
    public void onProductPurchased(String productId, TransactionDetails details) {
        showMsg("onProductPurchased");
        if (checkIfPurchaseIsValid(details.purchaseInfo)) {
            showMsg("purchase: " + productId + " COMPLETED");
            switch (productId) {
                case ONE_TIME_PAYMENT:
                    setupConsumableButtons(true);
                    break;
                case SUBSCRIPTION:
                    setupSubscription(true);
                    break;
            }
        } else {
            showMsg("fakePayment");
        }
    }

    private boolean checkIfPurchaseIsValid(PurchaseInfo purchaseInfo) {

        return false;
    }

        ///Если что случиться,выдаем ошибку.
        @Override
        public void onBillingError(int errorCode, Throwable error) {
            showMsg("onBillingError");
        }
        ///Если кеш не готов, в программу придет асинхронный вызов, что история покупок была восстановлена.
        @Override
        public void onPurchaseHistoryRestored() {
            showMsg("onPurchaseHistoryRestored");
            handleLoadedItems();
        }
        ///В любом случае мы получаем список ранее купленных вещей в нашем  приложении.
        private void handleLoadedItems() {
            mProgress.setVisibility(View.GONE);

            boolean isOneTimePurchaseSupported = mBillingProcessor.isOneTimePurchaseSupported();
            if (isOneTimePurchaseSupported) {
                mSingleTimePaymentButton.setVisibility(View.VISIBLE);
                mConsumabelButton.setVisibility(View.VISIBLE);
            } else {
                showMsg(getString(R.string.one_time_payment_not_supported));
            }

            boolean isSubsUpdateSupported = mBillingProcessor.isSubscriptionUpdateSupported();
            if (isSubsUpdateSupported) {
                mSubscriptionButton.setVisibility(View.VISIBLE);
            } else {
                showMsg(getString(R.string.subscription_not_supported));
            }

            setupConsumableButtons(mBillingProcessor.listOwnedProducts().contains(ONE_TIME_PAYMENT));
            setupSubscription(mBillingProcessor.listOwnedSubscriptions().contains(SUBSCRIPTION));
        }

        private void setupConsumableButtons(boolean isPurchased) {
            mConsumabelButton.setEnabled(isPurchased);
            mSingleTimePaymentButton.setEnabled(!isPurchased);
            if (isPurchased) {
                mSingleTimePaymentButton.setText(R.string.already_bought);
                mConsumabelButton.setText(R.string.consume_one_time);
            } else {
                SkuDetails details = mBillingProcessor.getPurchaseListingDetails(ONE_TIME_PAYMENT);
                mSingleTimePaymentButton.setText(getString(R.string.one_time_payment_value, ((SkuDetails) details).priceText));
                mConsumabelButton.setText(R.string.not_bought_yet);
            }
        }

        private void setupSubscription(boolean isPurchased) {
            mSubscriptionButton.setEnabled(!isPurchased);
            if (isPurchased) {
                mSubscriptionButton.setText(R.string.already_subscribed);
            } else {
                SkuDetails details = mBillingProcessor.getSubscriptionListingDetails(SUBSCRIPTION);
                mSubscriptionButton.setText(getString(R.string.subscription_value, details.priceText));
            }
        }




        private void showMsg(String text) {
            Toast.makeText(this, text, Toast.LENGTH_LONG).show();
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (!mBillingProcessor.handleActivityResult(requestCode, resultCode, data)) {
                super.onActivityResult(requestCode, resultCode, data);
            }
        }

        @Override
        public void onDestroy() {
            if (mBillingProcessor != null) {
                mBillingProcessor.release();
            }
            super.onDestroy();
        }

    }

Ответы (0 шт):