package com.naman14.timber.activities; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.anjlab.android.iab.v3.BillingProcessor; import com.anjlab.android.iab.v3.SkuDetails; import com.anjlab.android.iab.v3.TransactionDetails; import com.naman14.timber.R; import com.naman14.timber.utils.PreferencesUtility; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Created by naman on 29/10/16. */ public class DonateActivity extends BaseThemedActivity implements BillingProcessor.IBillingHandler { private static final String DONATION_1 = "naman14.timber.donate_1"; private static final String DONATION_2 = "naman14.timber.donate_2"; private static final String DONATION_3 = "naman14.timber.donate_3"; private static final String DONATION_5 = "naman14.timber.donate_5"; private static final String DONATION_10 = "naman14.timber.donate_10"; private static final String DONATION_20 = "naman14.timber.donate_20"; private boolean readyToPurchase = false; BillingProcessor bp; private LinearLayout productListView; private ProgressBar progressBar; private TextView status; private String action = "support"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_donate); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("Support development"); action = getIntent().getAction(); productListView = (LinearLayout) findViewById(R.id.product_list); progressBar = (ProgressBar) findViewById(R.id.progressBar); status = (TextView) findViewById(R.id.donation_status); if (action != null && action.equals("restore")) { status.setText("Restoring purchases.."); } bp = new BillingProcessor(this, getString(R.string.play_billing_license_key), this); } @Override public void onBillingInitialized() { readyToPurchase = true; checkStatus(); if (!(action != null && action.equals("restore"))) getProducts(); } @Override public void onProductPurchased(String productId, TransactionDetails details) { checkStatus(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(DonateActivity.this, "Thanks for your support!", Toast.LENGTH_SHORT).show(); } }); } @Override public void onBillingError(int errorCode, Throwable error) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(DonateActivity.this, "Unable to process purchase", Toast.LENGTH_SHORT).show(); } }); } @Override public void onPurchaseHistoryRestored() { } @Override public void onDestroy() { if (bp != null) bp.release(); super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (!bp.handleActivityResult(requestCode, resultCode, data)) super.onActivityResult(requestCode, resultCode, data); } private void checkStatus() { new AsyncTask<Void, Void, Boolean>() { @Override protected Boolean doInBackground(Void... voids) { List<String> owned = bp.listOwnedProducts(); return owned != null && owned.size() != 0; } @Override protected void onPostExecute(Boolean b) { super.onPostExecute(b); if (b) { PreferencesUtility.getInstance(DonateActivity.this).setFullUnlocked(true); status.setText("Thanks for your support!"); if (action!=null && action.equals("restore")) { status.setText("Your purchases has been restored. Thanks for your support"); progressBar.setVisibility(View.GONE); } if (getSupportActionBar() != null) getSupportActionBar().setTitle("Support development"); } else { if (action!=null && action.equals("restore")) { status.setText("No previous purchase found"); getProducts(); } } } }.execute(); } private void getProducts() { new AsyncTask<Void, Void, List<SkuDetails>>() { @Override protected List<SkuDetails> doInBackground(Void... voids) { ArrayList<String> products = new ArrayList<>(); products.add(DONATION_1); products.add(DONATION_2); products.add(DONATION_3); products.add(DONATION_5); products.add(DONATION_10); products.add(DONATION_20); return bp.getPurchaseListingDetails(products); } @Override protected void onPostExecute(List<SkuDetails> productList) { super.onPostExecute(productList); if (productList == null) return; Collections.sort(productList, new Comparator<SkuDetails>() { @Override public int compare(SkuDetails skuDetails, SkuDetails t1) { if (skuDetails.priceValue >= t1.priceValue) return 1; else if (skuDetails.priceValue <= t1.priceValue) return -1; else return 0; } }); for (int i = 0; i < productList.size(); i++) { final SkuDetails product = productList.get(i); View rootView = LayoutInflater.from(DonateActivity.this).inflate(R.layout.item_donate_product, productListView, false); TextView detail = (TextView) rootView.findViewById(R.id.product_detail); detail.setText(product.priceText); rootView.findViewById(R.id.btn_donate).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (readyToPurchase) bp.purchase(DonateActivity.this, product.productId); else Toast.makeText(DonateActivity.this, "Unable to initiate purchase", Toast.LENGTH_SHORT).show(); } }); productListView.addView(rootView); } progressBar.setVisibility(View.GONE); } }.execute(); } @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case android.R.id.home: super.onBackPressed(); return true; default: break; } return super.onOptionsItemSelected(item); } }