/* This file is part of the Android Clementine Remote.
* Copyright (C) 2013, Andreas Muttscheller <asfa194@gmail.com>
*
* This program 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 program 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.qspool.clementineremote.ui.fragments;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import de.qspool.clementineremote.App;
import de.qspool.clementineremote.R;
import de.qspool.clementineremote.VendingKey;
import de.qspool.clementineremote.backend.pb.ClementineMessage;
import de.qspool.clementineremote.backend.player.MySong;
import de.qspool.clementineremote.ui.interfaces.BackPressHandleable;
import de.qspool.clementineremote.ui.interfaces.RemoteDataReceiver;
import de.qspool.clementineremote.utils.IabHelper;
import de.qspool.clementineremote.utils.IabHelper.OnConsumeFinishedListener;
import de.qspool.clementineremote.utils.IabHelper.OnIabPurchaseFinishedListener;
import de.qspool.clementineremote.utils.IabHelper.QueryInventoryFinishedListener;
import de.qspool.clementineremote.utils.IabResult;
import de.qspool.clementineremote.utils.Inventory;
import de.qspool.clementineremote.utils.Purchase;
import de.qspool.clementineremote.utils.Utilities;
public class DonateFragment extends Fragment implements BackPressHandleable, RemoteDataReceiver {
private final static String TAG = "DonateFragment";
private IabHelper mHelper;
private ActionBar mActionBar;
private Button mDonateOne;
private Button mDonateTwo;
private Button mDonateFive;
private final static String SKU_ONE_EURO = "one_euro";
private final static String SKU_TWO_EURO = "two_euros";
private final static String SKU_FIVE_EURO = "five_euros";
private boolean mBillingAvailable = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
// Create helper class for in app billing
mHelper = new IabHelper(getActivity(), VendingKey.getVendingKey());
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d("DonateFragment", "Problem setting up In-app Billing: " + result);
mBillingAvailable = false;
} else {
mBillingAvailable = true;
// Now check for consumable items
mHelper.queryInventoryAsync(mGotInventoryListener);
}
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_donation,
container, false);
mDonateOne = (Button) view.findViewById(R.id.donate_one);
mDonateTwo = (Button) view.findViewById(R.id.donate_two);
mDonateFive = (Button) view.findViewById(R.id.donate_five);
mDonateOne.setOnClickListener(oclDonate);
mDonateTwo.setOnClickListener(oclDonate);
mDonateFive.setOnClickListener(oclDonate);
mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
mActionBar.setTitle("");
mActionBar.setSubtitle("");
setActionBarTitle();
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
// Dispose helper class
if (mHelper != null && mBillingAvailable) {
mHelper.dispose();
}
mHelper = null;
}
@Override
public void MessageFromClementine(ClementineMessage clementineMessage) {
switch (clementineMessage.getMessageType()) {
case CURRENT_METAINFO:
setActionBarTitle();
break;
default:
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!this.mHelper.handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
private void setActionBarTitle() {
MySong currentSong = App.Clementine.getCurrentSong();
if (currentSong == null) {
mActionBar.setTitle(getString(R.string.player_nosong));
mActionBar.setSubtitle("");
} else {
mActionBar.setTitle(currentSong.getArtist());
mActionBar.setSubtitle(currentSong.getTitle());
}
}
private OnClickListener oclDonate = new OnClickListener() {
@Override
public void onClick(View v) {
if (!mBillingAvailable) {
Utilities.ShowMessageDialog(getActivity(), R.string.donate_not_available,
R.string.donate_not_available_text);
return;
}
String sku = "";
if (v.getId() == mDonateOne.getId()) {
sku = SKU_ONE_EURO;
} else if (v.getId() == mDonateTwo.getId()) {
sku = SKU_TWO_EURO;
} else if (v.getId() == mDonateFive.getId()) {
sku = SKU_FIVE_EURO;
}
try {
mHelper.launchPurchaseFlow(getActivity(), sku, 10001,
mPurchaseFinishedListener, "");
} catch (IllegalStateException e) {
Toast.makeText(getActivity(), R.string.donate_try_again, Toast.LENGTH_LONG).show();
}
}
};
OnIabPurchaseFinishedListener mPurchaseFinishedListener = new OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "mPurchaseFinishedListener " + result);
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
} else {
// Consume the product directly
mHelper.consumeAsync(purchase, mConsumeFinishedListener);
}
}
};
OnConsumeFinishedListener mConsumeFinishedListener = new OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
Log.d(TAG, "mConsumeFinishedListener " + result);
if (result.isSuccess()) {
Toast.makeText(getActivity(), R.string.donate_complete, Toast.LENGTH_LONG).show();
} else {
Log.d(TAG, "Error consuming product: " + result);
}
}
};
QueryInventoryFinishedListener mGotInventoryListener = new QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
// handle error here
} else {
// Do we have pending donations?
if (inventory.hasPurchase(SKU_ONE_EURO)) {
mHelper.consumeAsync(inventory.getPurchase(SKU_ONE_EURO),
mConsumeFinishedListener);
}
if (inventory.hasPurchase(SKU_TWO_EURO)) {
mHelper.consumeAsync(inventory.getPurchase(SKU_TWO_EURO),
mConsumeFinishedListener);
}
if (inventory.hasPurchase(SKU_FIVE_EURO)) {
mHelper.consumeAsync(inventory.getPurchase(SKU_FIVE_EURO),
mConsumeFinishedListener);
}
}
}
};
@Override
public boolean onBackPressed() {
return false;
}
}