/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.platform; import com.google.common.collect.Maps; import com.google.common.eventbus.EventBus; import com.happydroids.droidtowers.events.PurchaseEvent; import com.happydroids.droidtowers.events.SafeEventBus; import com.happydroids.droidtowers.gamestate.server.TowerGameService; import com.happydroids.platform.purchase.DroidTowerVersions; import com.happydroids.platform.purchase.RefundEvent; import com.happydroids.security.SecurePreferences; import java.util.HashMap; import java.util.Map; import static com.happydroids.platform.purchase.DroidTowerVersions.*; public abstract class PlatformPurchaseManger { private static Runnable initializeRunnable; protected final HashMap<DroidTowerVersions, String> itemSkus; private boolean purchasesEnabled; private EventBus eventBus; public PlatformPurchaseManger() { eventBus = new SafeEventBus(PlatformPurchaseManger.class.getSimpleName()); purchasesEnabled = false; if (initializeRunnable != null) { initializeRunnable.run(); } itemSkus = Maps.newHashMap(); } public static void setInitializeRunnable(Runnable initializeRunnable) { PlatformPurchaseManger.initializeRunnable = initializeRunnable; } public void purchaseItem(String itemId, String purchaseToken) { if (!TowerGameService.instance().getPreferences().contains(itemId)) { TowerGameService.instance().getPreferences().putString(itemId, purchaseToken); TowerGameService.instance().getPreferences().flush(); eventBus.post(new PurchaseEvent(purchaseToken, itemId)); } } public void revokeItem(String itemId) { if (TowerGameService.instance().getPreferences().contains(itemId)) { TowerGameService.instance().getPreferences().remove(itemId); TowerGameService.instance().getPreferences().flush(); eventBus.post(new RefundEvent(itemId)); } } public boolean hasPurchasedUnlimitedVersion() { SecurePreferences preferences = TowerGameService.instance().getPreferences(); return preferences.contains(getSkuForVersion(UNLIMITED_299)) || preferences.contains(getSkuForVersion(ONE_TIME_DISCOUNT_199)) || preferences.contains(getSkuForVersion(UNLIMITED_99_XMAS)); } public abstract void requestPurchase(String itemId); public void enablePurchases() { purchasesEnabled = true; } public void requestPurchaseForUnlimitedVersion() { requestPurchase(getSkuForVersion(UNLIMITED_99_XMAS)); } public SecurePreferences getPurchases() { return TowerGameService.instance().getPreferences(); } public abstract void onStart(); public abstract void onResume(); private DroidTowerVersions getVersionForSku(String itemSku) { for (Map.Entry<DroidTowerVersions, String> entry : itemSkus.entrySet()) { if (entry.getValue().equals(itemSku)) { return entry.getKey(); } } return null; } public String getSkuForVersion(DroidTowerVersions version) { return itemSkus.get(version); } public EventBus events() { return eventBus; } public void requestPurchaseForDiscountedOffer() { requestPurchase(getSkuForVersion(DroidTowerVersions.ONE_TIME_DISCOUNT_199)); } }