package com.lechucksoftware.proxy.proxysettings.ui.activities;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import com.lechucksoftware.proxy.proxysettings.BuildConfig;
import com.lechucksoftware.proxy.proxysettings.R;
import com.lechucksoftware.proxy.proxysettings.constants.Constants;
import com.lechucksoftware.proxy.proxysettings.ui.fragments.IabFragment;
import com.lechucksoftware.proxy.proxysettings.utils.UIUtils;
import com.lechucksoftware.proxy.proxysettings.utils.billing.IabException;
import com.lechucksoftware.proxy.proxysettings.utils.billing.IabHelper;
import com.lechucksoftware.proxy.proxysettings.utils.billing.IabResult;
import com.lechucksoftware.proxy.proxysettings.utils.billing.Inventory;
import com.lechucksoftware.proxy.proxysettings.utils.billing.Purchase;
import com.lechucksoftware.proxy.proxysettings.utils.billing.SkuDetails;
import java.util.ArrayList;
import java.util.List;
import timber.log.Timber;
public class IabActivity extends AppCompatActivity
{
private IabHelper iabHelper;
private Inventory iabInventory;
private IabFragment iabFragment;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_in_app_billing);
if (savedInstanceState == null)
{
iabFragment = IabFragment.newInstance();
getSupportFragmentManager().beginTransaction()
.add(R.id.container, iabFragment)
.commit();
}
}
@Override
protected void onResume()
{
super.onResume();
initIAB();
}
private void initIAB()
{
try
{
iabHelper = new IabHelper(this, BuildConfig.PLAY_IN_APP_BILLING_PUBLIC_KEY);
iabHelper.enableDebugLogging(true);
iabHelper.startSetup(new CustomOnIabSetupFinishedListener());
}
catch (Exception e)
{
Timber.e(e,"Cannot initIAB");
}
}
private boolean checkIabHelper()
{
if (iabHelper == null)
{
Timber.e("iabHelper not initialized. Try again to initIAB.");
initIAB();
return true;
}
return false;
}
@Override
public void onDestroy()
{
super.onDestroy();
if (iabHelper != null)
{
iabHelper.dispose();
}
iabHelper = null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
Timber.d("Received activity result. Request: %d, Result: %d", requestCode, resultCode);
if (iabHelper != null && iabHelper.handleActivityResult(requestCode, resultCode, data))
{
}
else
{
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_in_app_billing, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings)
{
return true;
}
return super.onOptionsItemSelected(item);
}
private class CustomOnIabSetupFinishedListener implements IabHelper.OnIabSetupFinishedListener
{
public void onIabSetupFinished(IabResult result)
{
if (!result.isSuccess())
{
Timber.e(new IabException(result), "In-app Billing setup failed: " + result);
}
else
{
Timber.d("In-app Billing is set up OK");
startQueryAvailableSKU();
}
}
}
public void startQueryAvailableSKU()
{
List<String> skus = new ArrayList<>();
skus.add(Constants.IAB_ITEM_SKU_BASE);
// skus.add(Constants.IAB_ITEM_SKU_PRO);
// skus.add(Constants.IAB_ITEM_SKU_NINJA);
// if (BuildConfig.DEBUG)
// {
// skus.add(Constants.IAB_ITEM_SKU_TEST_PURCHASED);
// skus.add(Constants.IAB_ITEM_SKU_TEST_CANCELED);
// skus.add(Constants.IAB_ITEM_SKU_TEST_REFUNDED);
// skus.add(Constants.IAB_ITEM_SKU_TEST_UNAVAILABLE);
// }
iabHelper.queryInventoryAsync(true, skus, queryAvailableSkuReceivedInventoryListener);
}
public void launchPurchase(String sku, int requestCode)
{
if (checkIabHelper()) return;
Timber.d("Launching purchase for SKU: '%s'", sku);
try
{
// if (iabInventory.hasPurchase(sku))
// {
// Purchase purchase = iabInventory.getPurchase(sku);
// iabHelper.consumeAsync(purchase, mOnConsumeFinishedListener);
// }
// else
// {
iabHelper.launchPurchaseFlow(this, sku, requestCode, mPurchaseFinishedListener, "mypurchasetoken");
// }
}
catch (Exception e)
{
Timber.e(e, "Exception during launchPurchaseFlow");
UIUtils.showError(this, R.string.billing_error_during_operation);
}
}
public boolean handleActivityResult(int requestCode, int resultCode, Intent data)
{
if (checkIabHelper()) return false;
return iabHelper.handleActivityResult(requestCode, resultCode, data);
}
IabHelper.OnConsumeFinishedListener mOnConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener()
{
@Override
public void onConsumeFinished(Purchase purchase, IabResult result)
{
if (result.isFailure())
{
// Handle error
Timber.e(new IabException(result), "Failure on Iab Purchase Finished");
return;
}
else
{
Timber.d("Consumed purchase: '%s'", purchase.toString());
startQueryAvailableSKU();
}
}
};
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener()
{
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
if (result.isFailure())
{
switch (result.getResponse())
{
case IabHelper.IABHELPER_USER_CANCELLED:
Timber.e("User canceled IAB: '%s'", result.toString());
break;
default:
Timber.e(new IabException(result), "Failure on Iab Purchase Finished");
break;
}
return;
}
else
{
Timber.d("Purchase successful: %s", result.toString());
switch (purchase.getSku())
{
case Constants.IAB_ITEM_SKU_PRO:
break;
case Constants.IAB_ITEM_SKU_BASE:
break;
case Constants.IAB_ITEM_SKU_TEST_PURCHASED:
break;
case Constants.IAB_ITEM_SKU_TEST_CANCELED:
break;
case Constants.IAB_ITEM_SKU_TEST_REFUNDED:
break;
case Constants.IAB_ITEM_SKU_TEST_UNAVAILABLE:
break;
default:
Timber.e("Purchase not recognized");
}
startQueryAvailableSKU();
}
}
};
IabHelper.QueryInventoryFinishedListener queryAvailableSkuReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener()
{
public void onQueryInventoryFinished(IabResult result, Inventory inventory)
{
if (result.isFailure())
{
// Handle failure
}
else
{
iabInventory = inventory;
List<SkuDetails> skus = inventory.getAllSkus();
List<Purchase> purchases = inventory.getAllPurchases();
for (SkuDetails sku : skus)
{
Timber.d(sku.toString());
}
for (Purchase purchase : purchases)
{
Timber.d(purchase.toString());
}
iabFragment.setInventory(inventory);
}
}
};
}