Android Open Source - android-store Purchasable Virtual Item






From Project

Back to project page android-store.

License

The source code is released under:

Copyright (c) 2012 SOOMLA http://project.soom.la/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to...

If you think the Android project android-store listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2012-2014 Soomla Inc./* www  . j  ava  2  s  .  c  o  m*/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.soomla.store.domain;

import com.soomla.SoomlaUtils;
import com.soomla.store.data.StoreJSONConsts;
import com.soomla.store.exceptions.InsufficientFundsException;
import com.soomla.store.purchaseTypes.PurchaseType;
import com.soomla.store.purchaseTypes.PurchaseWithMarket;
import com.soomla.store.purchaseTypes.PurchaseWithVirtualItem;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

/**
 * A representation of a <code>VirtualItem</code> that you can actually purchase.
 */
public abstract class PurchasableVirtualItem extends VirtualItem {

    /**
     * Constructor.
     *
     * @param mName see parent
     * @param mDescription see parent
     * @param mItemId see parent
     * @param purchaseType the way this item is purchased
     */
    public PurchasableVirtualItem(String mName, String mDescription, String mItemId,
                                  PurchaseType purchaseType) {
        super(mName, mDescription, mItemId);

        mPurchaseType = purchaseType;

        mPurchaseType.setAssociatedItem(this);
    }

    /**
     * Constructor.
     *
     * @param jsonObject see parent
     * @throws JSONException
     */
    public PurchasableVirtualItem(JSONObject jsonObject) throws JSONException {
        super(jsonObject);

        JSONObject purchasableObj = jsonObject.getJSONObject(StoreJSONConsts.PURCHASABLE_ITEM);
        String purchaseType = purchasableObj.getString(StoreJSONConsts.PURCHASE_TYPE);

        if (purchaseType.equals(StoreJSONConsts.PURCHASE_TYPE_MARKET)) {
            JSONObject marketItemObj =
                    purchasableObj.getJSONObject(StoreJSONConsts.PURCHASE_MARKET_ITEM);

            mPurchaseType = new PurchaseWithMarket(new MarketItem(marketItemObj));
        } else if (purchaseType.equals(StoreJSONConsts.PURCHASE_TYPE_VI)) {
            String itemId = purchasableObj.getString(StoreJSONConsts.PURCHASE_VI_ITEMID);
            int amount = purchasableObj.getInt(StoreJSONConsts.PURCHASE_VI_AMOUNT);

            mPurchaseType = new PurchaseWithVirtualItem(itemId, amount);
        } else {
            SoomlaUtils.LogError(TAG, "IabPurchase type not recognized !");
        }

        if (mPurchaseType != null) {
            mPurchaseType.setAssociatedItem(this);
        }
    }

    /**
     * @{inheritDoc}
     */
    @Override
    public JSONObject toJSONObject(){
        JSONObject parentJsonObject = super.toJSONObject();
        JSONObject jsonObject = new JSONObject();
        try {
            Iterator<?> keys = parentJsonObject.keys();
            while(keys.hasNext())
            {
                String key = (String)keys.next();
                jsonObject.put(key, parentJsonObject.get(key));
            }

            JSONObject purchasableObj = new JSONObject();

            if(mPurchaseType instanceof PurchaseWithMarket) {
                purchasableObj.put(StoreJSONConsts.PURCHASE_TYPE, StoreJSONConsts.PURCHASE_TYPE_MARKET);

                MarketItem mi = ((PurchaseWithMarket) mPurchaseType).getMarketItem();
                purchasableObj.put(StoreJSONConsts.PURCHASE_MARKET_ITEM, mi.toJSONObject());
            } else if(mPurchaseType instanceof PurchaseWithVirtualItem) {
                purchasableObj.put(StoreJSONConsts.PURCHASE_TYPE, StoreJSONConsts.PURCHASE_TYPE_VI);

                purchasableObj.put(StoreJSONConsts.PURCHASE_VI_ITEMID,
                        ((PurchaseWithVirtualItem) mPurchaseType).getTargetItemId());
                purchasableObj.put(StoreJSONConsts.PURCHASE_VI_AMOUNT,
                        ((PurchaseWithVirtualItem) mPurchaseType).getAmount());
            }

            jsonObject.put(StoreJSONConsts.PURCHASABLE_ITEM, purchasableObj);
        } catch (JSONException e) {
            SoomlaUtils.LogError(TAG, "An error occurred while generating JSON object.");
        }

        return jsonObject;
    }

    /**
     * Buys the <code>PurchasableVirtualItem</code>, after checking if the user is in a state that
     * allows him/her to buy. This action uses the associated <code>PurchaseType</code> to perform
     * the purchase.
     *
     * @param payload a string you want to be assigned to the purchase. This string
     *   is saved in a static variable and will be given bacl to you when the
     *   purchase is completed.
     * @throws InsufficientFundsException if the user does not have enough funds for buying.
     */
    public void buy(String payload) throws InsufficientFundsException {
        if (!canBuy()) return;

        mPurchaseType.buy(payload);
    }

    /**
     * Determines if user is in a state that allows him/her to buy a specific
     * <code>VirtualItem</code>.
     *
     * @return true if can buy, false otherwise
     */
    protected abstract boolean canBuy();


    /** Setters and Getters */

    public PurchaseType getPurchaseType() {
        return mPurchaseType;
    }


    /** Private Members */

    private static final String TAG = "SOOMLA PurchasableVirtualItem"; //used for Log messages

    private PurchaseType mPurchaseType; //the way this PurchasableVirtualItem is purchased.
}




Java Source Code List

com.soomla.example.ExampleEventHandler.java
com.soomla.example.MuffinRushAssets.java
com.soomla.example.StoreExampleActivity.java
com.soomla.example.StoreGoodsActivity.java
com.soomla.example.StorePacksActivity.java
com.soomla.rewards.VirtualItemReward.java
com.soomla.store.IStoreAssets.java
com.soomla.store.SoomlaStore.java
com.soomla.store.StoreConfig.java
com.soomla.store.StoreForeground.java
com.soomla.store.StoreInventory.java
com.soomla.store.billing.IIabService.java
com.soomla.store.billing.IabCallbacks.java
com.soomla.store.billing.IabException.java
com.soomla.store.billing.IabHelper.java
com.soomla.store.billing.IabInventory.java
com.soomla.store.billing.IabPurchase.java
com.soomla.store.billing.IabResult.java
com.soomla.store.billing.IabSkuDetails.java
com.soomla.store.data.StorageManager.java
com.soomla.store.data.StoreInfo.java
com.soomla.store.data.StoreJSONConsts.java
com.soomla.store.data.VirtualCurrencyStorage.java
com.soomla.store.data.VirtualGoodsStorage.java
com.soomla.store.data.VirtualItemStorage.java
com.soomla.store.domain.MarketItem.java
com.soomla.store.domain.PurchasableVirtualItem.java
com.soomla.store.domain.VirtualCategory.java
com.soomla.store.domain.VirtualItem.java
com.soomla.store.domain.virtualCurrencies.VirtualCurrencyPack.java
com.soomla.store.domain.virtualCurrencies.VirtualCurrency.java
com.soomla.store.domain.virtualGoods.EquippableVG.java
com.soomla.store.domain.virtualGoods.LifetimeVG.java
com.soomla.store.domain.virtualGoods.SingleUsePackVG.java
com.soomla.store.domain.virtualGoods.SingleUseVG.java
com.soomla.store.domain.virtualGoods.UpgradeVG.java
com.soomla.store.domain.virtualGoods.VirtualGood.java
com.soomla.store.events.BillingNotSupportedEvent.java
com.soomla.store.events.BillingSupportedEvent.java
com.soomla.store.events.CurrencyBalanceChangedEvent.java
com.soomla.store.events.GoodBalanceChangedEvent.java
com.soomla.store.events.GoodEquippedEvent.java
com.soomla.store.events.GoodUnEquippedEvent.java
com.soomla.store.events.GoodUpgradeEvent.java
com.soomla.store.events.IabServiceStartedEvent.java
com.soomla.store.events.IabServiceStoppedEvent.java
com.soomla.store.events.ItemPurchaseStartedEvent.java
com.soomla.store.events.ItemPurchasedEvent.java
com.soomla.store.events.MarketItemsRefreshFinishedEvent.java
com.soomla.store.events.MarketItemsRefreshStartedEvent.java
com.soomla.store.events.MarketPurchaseCancelledEvent.java
com.soomla.store.events.MarketPurchaseEvent.java
com.soomla.store.events.MarketPurchaseStartedEvent.java
com.soomla.store.events.MarketRefundEvent.java
com.soomla.store.events.RestoreTransactionsFinishedEvent.java
com.soomla.store.events.RestoreTransactionsStartedEvent.java
com.soomla.store.events.SoomlaStoreInitializedEvent.java
com.soomla.store.events.UnexpectedStoreErrorEvent.java
com.soomla.store.exceptions.InsufficientFundsException.java
com.soomla.store.exceptions.NotEnoughGoodsException.java
com.soomla.store.exceptions.VirtualItemNotFoundException.java
com.soomla.store.purchaseTypes.PurchaseType.java
com.soomla.store.purchaseTypes.PurchaseWithMarket.java
com.soomla.store.purchaseTypes.PurchaseWithVirtualItem.java