package co.smartreceipts.android.purchases.model; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.common.base.Preconditions; import java.util.ArrayList; public enum InAppPurchase { SmartReceiptsPlus(Subscription.class, "pro_sku_3", PurchaseFamily.SmartReceiptsPlus), OcrScans10(ConsumablePurchase.class, "ocr_purchase_10", PurchaseFamily.Ocr), OcrScans50(ConsumablePurchase.class, "ocr_purchase_1", PurchaseFamily.Ocr); private final Class<? extends ManagedProduct> type; private final String sku; private final PurchaseFamily purchaseFamily; InAppPurchase(@NonNull Class<? extends ManagedProduct> type, @NonNull String sku, @NonNull PurchaseFamily purchaseFamily) { this.type = Preconditions.checkNotNull(type); this.sku = Preconditions.checkNotNull(sku); this.purchaseFamily = Preconditions.checkNotNull(purchaseFamily); } /** * @return the unique {@link String} identifier (ie stock keeping unit) for this product */ @NonNull public String getSku() { return sku; } /** * @return the type of {@link ManagedProduct} that this is */ @NonNull public Class<? extends ManagedProduct> getType() { return type; } /** * @return the {@link PurchaseFamily} for this purchase type */ @NonNull public PurchaseFamily getPurchaseFamily() { return purchaseFamily; } /** * @return the {@link String} of the Google product type (ie "inapp" or "subs") */ @NonNull public String getProductType() { if (ConsumablePurchase.class.equals(type)) { return ConsumablePurchase.GOOGLE_PRODUCT_TYPE; } else { return Subscription.GOOGLE_PRODUCT_TYPE; } } @Nullable public static InAppPurchase from(@Nullable String sku) { for (final InAppPurchase inAppPurchase : values()) { if (inAppPurchase.getSku().equals(sku)) { return inAppPurchase; } } return null; } @NonNull public static ArrayList<String> getConsumablePurchaseSkus() { final ArrayList<String> skus = new ArrayList<>(values().length); for (final InAppPurchase inAppPurchase : values()) { if (ConsumablePurchase.class.equals(inAppPurchase.getType())) { skus.add(inAppPurchase.getSku()); } } return skus; } @NonNull public static ArrayList<String> getSubscriptionSkus() { final ArrayList<String> skus = new ArrayList<>(values().length); for (final InAppPurchase inAppPurchase : values()) { if (Subscription.class.equals(inAppPurchase.getType())) { skus.add(inAppPurchase.getSku()); } } return skus; } }