/* * Copyright (C) 2016 Naman Dwivedi * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package com.naman14.algovisualizer; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; 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 java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class DonateActivity extends AppCompatActivity implements BillingProcessor.IBillingHandler { private static final String DONATION_1 = "naman14.algo.donate_1"; private static final String DONATION_2 = "naman14.algo.donate_2"; private static final String DONATION_3 = "naman14.algo.donate_3"; private static final String DONATION_5 = "naman14.algo.donate_5"; private static final String DONATION_10 = "naman14.algo.donate_10"; private boolean readyToPurchase = false; BillingProcessor bp; private LinearLayout productListView; private ProgressBar progressBar; private TextView status; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_donate); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("Donate"); productListView = (LinearLayout) findViewById(R.id.product_list); progressBar = (ProgressBar) findViewById(R.id.progressBar); status = (TextView) findViewById(R.id.donation_status); bp = new BillingProcessor(this, getString(R.string.play_billing_license_key), this); } @Override public void onBillingInitialized() { readyToPurchase = true; checkStatus(); getProducts(); } @Override public void onProductPurchased(String productId, TransactionDetails details) { checkStatus(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(DonateActivity.this, "Thanks for your donation!", 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) { status.setText("Thanks for your donation!"); } } }.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); 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); } }