package com.pledgeapps.buyingtime; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import android.widget.TextView; import com.pledgeapps.buyingtime.billing.IabHelper; import com.pledgeapps.buyingtime.billing.IabResult; import com.pledgeapps.buyingtime.billing.Inventory; import com.pledgeapps.buyingtime.billing.Purchase; import com.pledgeapps.buyingtime.data.Transaction; import com.pledgeapps.buyingtime.data.Transactions; import java.util.Date; public class DonateActivity extends ActionBarActivity { IabHelper mHelper; static final int RC_REQUEST = 10001; TextView currentPledge; TextView totalDonated; TextView explanation; Button donateButton; Button donatedButton; Spinner donationAmount; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_donate); currentPledge = (TextView) findViewById(R.id.currentPledge); totalDonated = (TextView) findViewById(R.id.totalDonated); explanation = (TextView) findViewById(R.id.explanation); donationAmount = (Spinner) findViewById(R.id.donationAmount); donateButton = (Button) findViewById(R.id.donateButton); donatedButton = (Button) findViewById(R.id.donatedButton); donateButton.setOnClickListener( new View.OnClickListener() {public void onClick(View view) {donate();}} ); donatedButton.setOnClickListener( new View.OnClickListener() {public void onClick(View view) {donated();}} ); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.donation_amounts, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); donationAmount.setAdapter(adapter); String base64EncodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArb6ycGs7oQ3fCZvCqa9jT/z+W9zNdYvOFQOJfg3/qYE9b43HVk+18H0NEuvRztrNnDB7XkoRtNyi4/0IXLlDdMOF+ZpoLG+MqLB/WZwwBcbGbUNkVcNl8/fPCl9bnutQ5Xn7jqOjQ3UBCsjzDj/Dl5fex0P4WESVDtuGRWagfFMkqxexGoPYc6ZjhDrHWMSrHUgrMiYmnFjVNyM++sFwzoBQSasTUDN6KfJDjuqvPvvJQo600BWHsMjDi6aAw8fIW6ydJhbb8PwaxLEEbFL0H8aN5/XHOUboUzIHJDq6rMwheNm+ygP4lafk0DKKTnAtwR6zRypjfTYAO7KdAV7DXwIDAQAB"; mHelper = new IabHelper(this, base64EncodedPublicKey); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { return; } if (mHelper == null) return; mHelper.queryInventoryAsync(inventoryListener); } }); refreshScreen(); } IabHelper.QueryInventoryFinishedListener inventoryListener = new IabHelper.QueryInventoryFinishedListener() { public void onQueryInventoryFinished(IabResult result, Inventory inventory) { if (mHelper == null) return; if (result.isFailure()) return; int[] amounts = new int[]{1,2,3,4,5,10,20}; for (int amount : amounts) { String sku = "donate_" + Integer.toString(amount); Purchase purchase = inventory.getPurchase(sku); if (purchase!=null) mHelper.consumeAsync(inventory.getPurchase(sku), consumeListener); return; } } }; public void refreshScreen() { currentPledge.setText("Current Pledge: " + "$" + String.format("%1.2f", Transactions.getCurrent().getCurrentPledge())); totalDonated.setText("Total Donated: " + "$" + String.format("%1.2f", Transactions.getCurrent().getTotalDonated())); } public void donate() { Object selectedItem = donationAmount.getSelectedItem(); String selectedValue = selectedItem.toString().replace("$","").replace(".00",""); int amount = Integer.parseInt(selectedValue); String sku = "donate_" + Integer.toString(amount); mHelper.launchPurchaseFlow(this, sku, RC_REQUEST, purchaseListener, ""); } public void donated() { DonationAmountFragment f = DonationAmountFragment.newInstance(donatedHandler); f.show(this.getSupportFragmentManager(), "donatedHandler"); } Handler donatedHandler = new Handler() { public void handleMessage(Message m) { finish(); } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (mHelper == null) return; if (!mHelper.handleActivityResult(requestCode, resultCode, data)) super.onActivityResult(requestCode, resultCode, data); } // Callback for when a purchase is finished IabHelper.OnIabPurchaseFinishedListener purchaseListener = new IabHelper.OnIabPurchaseFinishedListener() { public void onIabPurchaseFinished(IabResult result, Purchase purchase) { if (mHelper == null) return; if (result.isFailure()) return; mHelper.consumeAsync(purchase, consumeListener); } }; // Called when consumption is complete IabHelper.OnConsumeFinishedListener consumeListener = new IabHelper.OnConsumeFinishedListener() { public void onConsumeFinished(Purchase purchase, IabResult result) { if (mHelper == null) return; if (result.isSuccess()) { int amount = Integer.parseInt(purchase.getSku().replace("donate_","")); logPayment(amount); } finish(); } }; private void logPayment(double amount) { Transaction t = new Transaction(); t.date = new Date(); t.amount = -amount; Transactions.getCurrent().add(t); Transactions.getCurrent().save(this); } }