mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-20 12:49:02 +00:00
21+ Gems , Purchase Cache
This commit is contained in:
parent
4b08ee92a4
commit
b6201ae5a3
4 changed files with 75 additions and 57 deletions
|
|
@ -15,7 +15,7 @@
|
|||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="+ 20"
|
||||
android:text="+ 21"
|
||||
android:id="@+id/btn.purchase.gems"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:drawableRight="@drawable/ic_header_gem"
|
||||
|
|
|
|||
|
|
@ -18,21 +18,20 @@ import com.raizlabs.android.dbflow.config.FlowManager;
|
|||
import org.solovyev.android.checkout.Billing;
|
||||
import org.solovyev.android.checkout.Cache;
|
||||
import org.solovyev.android.checkout.Checkout;
|
||||
import org.solovyev.android.checkout.Inventory;
|
||||
import org.solovyev.android.checkout.ProductTypes;
|
||||
import org.solovyev.android.checkout.Products;
|
||||
import org.solovyev.android.checkout.PurchaseVerifier;
|
||||
import org.solovyev.android.checkout.RequestListener;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* Created by Negue on 14.06.2015.
|
||||
*/
|
||||
public class HabiticaApplication extends Application {
|
||||
|
||||
public static String Purchase20Gems = "com.habitrpg.android.habitica.iap.20.gems";
|
||||
|
||||
public static HabiticaApplication Instance;
|
||||
public static HabitRPGUser User;
|
||||
|
||||
|
|
@ -44,7 +43,7 @@ public class HabiticaApplication extends Application {
|
|||
|
||||
Instance = this;
|
||||
|
||||
billing.connect();
|
||||
createBillingAndCheckout();
|
||||
|
||||
FlowManager.init(this);
|
||||
|
||||
|
|
@ -78,7 +77,7 @@ public class HabiticaApplication extends Application {
|
|||
return new File(getExternalFilesDir(null), "HabiticaDatabase/" + name);
|
||||
}
|
||||
|
||||
public static void logout(Context context){
|
||||
public static void logout(Context context) {
|
||||
Instance.deleteDatabase(HabitDatabase.NAME);
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
|
|
@ -87,7 +86,7 @@ public class HabiticaApplication extends Application {
|
|||
context.startActivity(new Intent(context, LoginActivity.class));
|
||||
}
|
||||
|
||||
public static void checkUserAuthentication(Context context, HostConfig hostConfig){
|
||||
public static void checkUserAuthentication(Context context, HostConfig hostConfig) {
|
||||
if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) {
|
||||
context.startActivity(new Intent(context, LoginActivity.class));
|
||||
}
|
||||
|
|
@ -97,47 +96,41 @@ public class HabiticaApplication extends Application {
|
|||
|
||||
// region IAP - Specific
|
||||
|
||||
private void createBillingAndCheckout() {
|
||||
billing = new Billing(this, new Billing.DefaultConfiguration() {
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPublicKey() {
|
||||
return "DONT-NEED-IT";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Cache getCache() {
|
||||
return Billing.newCache();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PurchaseVerifier getPurchaseVerifier() {
|
||||
return new HabiticaPurchaseVerifier(HabiticaApplication.this);
|
||||
}
|
||||
});
|
||||
|
||||
checkout = Checkout.forApplication(billing, Products.create().add(ProductTypes.IN_APP, Arrays.asList(Purchase20Gems)));
|
||||
}
|
||||
|
||||
/**
|
||||
* For better performance billing class should be used as singleton
|
||||
*/
|
||||
@NonNull
|
||||
private final Billing billing = new Billing(this, new Billing.Configuration() {
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPublicKey() {
|
||||
return "DONT-NEED-IT";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Cache getCache() {
|
||||
return Billing.newCache();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PurchaseVerifier getPurchaseVerifier() {
|
||||
return new HabiticaPurchaseVerifier();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getFallbackInventory(Checkout checkout, Executor executor) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAutoConnect() {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
public static String Purchase20Gems = "com.habitrpg.android.habitica.iap.20.gems";
|
||||
private Billing billing;
|
||||
|
||||
/**
|
||||
* Application wide {@link org.solovyev.android.checkout.Checkout} instance (can be used anywhere in the app).
|
||||
* This instance contains all available products in the app.
|
||||
*/
|
||||
@NonNull
|
||||
private final Checkout checkout = Checkout.forApplication(billing, Products.create().add(ProductTypes.IN_APP, Arrays.asList(Purchase20Gems)));
|
||||
private Checkout checkout;
|
||||
|
||||
|
||||
@NonNull
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
package com.habitrpg.android.habitica;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Transaction;
|
||||
|
|
@ -9,36 +13,56 @@ import org.solovyev.android.checkout.Purchase;
|
|||
import org.solovyev.android.checkout.RequestListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Negue on 26.11.2015.
|
||||
*/
|
||||
public class HabiticaPurchaseVerifier extends BasePurchaseVerifier {
|
||||
|
||||
private Set<String> purchasedOrderList = new HashSet<>();
|
||||
static String PURCHASED_PRODUCTS_KEY = "PURCHASED_PRODUCTS";
|
||||
private SharedPreferences preferences;
|
||||
|
||||
public HabiticaPurchaseVerifier(Context context) {
|
||||
preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
preferences.getStringSet(PURCHASED_PRODUCTS_KEY, purchasedOrderList);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doVerify(final List<Purchase> purchases, final RequestListener<List<Purchase>> requestListener) {
|
||||
final List<Purchase> verifiedPurchases = new ArrayList<Purchase>(purchases.size());
|
||||
final List<Purchase> verifiedPurchases = new ArrayList<>(purchases.size());
|
||||
|
||||
for(final Purchase purchase : purchases)
|
||||
{
|
||||
PurchaseValidationRequest validationRequest = new PurchaseValidationRequest();
|
||||
validationRequest.transaction = new Transaction();
|
||||
validationRequest.transaction.receipt = purchase.data;
|
||||
validationRequest.transaction.signature = purchase.signature;
|
||||
|
||||
PurchaseValidationResult purchaseValidationResult = HabiticaApplication.ApiHelper.validatePurchase(validationRequest);
|
||||
|
||||
if (purchaseValidationResult.ok) {
|
||||
for (final Purchase purchase : purchases) {
|
||||
if (purchasedOrderList.contains(purchase.orderId)) {
|
||||
verifiedPurchases.add(purchase);
|
||||
|
||||
requestListener.onSuccess(verifiedPurchases);
|
||||
}
|
||||
else
|
||||
{
|
||||
requestListener.onError(purchases.indexOf(purchase), new Exception(purchaseValidationResult.data.toString()));
|
||||
}
|
||||
} else {
|
||||
PurchaseValidationRequest validationRequest = new PurchaseValidationRequest();
|
||||
validationRequest.transaction = new Transaction();
|
||||
validationRequest.transaction.receipt = purchase.data;
|
||||
validationRequest.transaction.signature = purchase.signature;
|
||||
|
||||
PurchaseValidationResult purchaseValidationResult = HabiticaApplication.ApiHelper.validatePurchase(validationRequest);
|
||||
|
||||
if (purchaseValidationResult.ok) {
|
||||
purchasedOrderList.add(purchase.orderId);
|
||||
|
||||
verifiedPurchases.add(purchase);
|
||||
|
||||
requestListener.onSuccess(verifiedPurchases);
|
||||
} else {
|
||||
requestListener.onError(purchases.indexOf(purchase), new Exception(purchaseValidationResult.data.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SharedPreferences.Editor edit = preferences.edit();
|
||||
edit.putStringSet(PURCHASED_PRODUCTS_KEY, purchasedOrderList);
|
||||
edit.apply();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,12 +32,13 @@ import io.fabric.sdk.android.Fabric;
|
|||
*/
|
||||
public class GemsPurchaseFragment extends BaseFragment {
|
||||
|
||||
static final int GEMS_TO_ADD = 21;
|
||||
|
||||
private BillingRequests billingRequests;
|
||||
|
||||
@InjectView(R.id.btn_purchase_gems)
|
||||
Button btnPurchaseGems;
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
|
|
@ -60,7 +61,7 @@ public class GemsPurchaseFragment extends BaseFragment {
|
|||
billingRequests.consume(purchase.token, new RequestListener<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object o) {
|
||||
EventBus.getDefault().post(new BoughtGemsEvent(20));
|
||||
EventBus.getDefault().post(new BoughtGemsEvent(GEMS_TO_ADD));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -106,7 +107,7 @@ public class GemsPurchaseFragment extends BaseFragment {
|
|||
billingRequests.consume(purchase.token, new RequestListener<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object o) {
|
||||
EventBus.getDefault().post(new BoughtGemsEvent(20));
|
||||
EventBus.getDefault().post(new BoughtGemsEvent(GEMS_TO_ADD));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in a new issue