Android Open Source - android-store Virtual Goods Storage






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./*from  w  w  w. ja  va2 s  .  c  om*/
 *
 * 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.data;

import android.text.TextUtils;

import com.soomla.BusProvider;
import com.soomla.SoomlaUtils;
import com.soomla.data.KeyValueStorage;
import com.soomla.store.domain.VirtualItem;
import com.soomla.store.domain.virtualGoods.EquippableVG;
import com.soomla.store.domain.virtualGoods.UpgradeVG;
import com.soomla.store.domain.virtualGoods.VirtualGood;
import com.soomla.store.events.GoodBalanceChangedEvent;
import com.soomla.store.events.GoodEquippedEvent;
import com.soomla.store.events.GoodUnEquippedEvent;
import com.soomla.store.events.GoodUpgradeEvent;
import com.soomla.store.exceptions.VirtualItemNotFoundException;

/**
 * This class provides basic storage operations on virtual goods.
 */
public class VirtualGoodsStorage extends VirtualItemStorage{

    /**
     * Constructor
     */
    public VirtualGoodsStorage() {
        mTag = "SOOMLA VirtualGoodsStorage";
    }

    /**
     * Removes any upgrade associated with the given <code>VirtualGood</code>.
     *
     * @param goodItemId the VirtualGood to remove upgrade from
     */
    public void removeUpgrades(String goodItemId) {
        removeUpgrades(goodItemId, true);
    }

    /**
     * Removes any upgrade associated with the given VirtualGood.
     *
     * @param goodItemId the virtual good to remove the upgrade from
     * @param notify if true post event to bus
     */
    public void removeUpgrades(String goodItemId, boolean notify) {
        SoomlaUtils.LogDebug(mTag, "Removing upgrade information from virtual good: " +
                goodItemId);

        String key = keyGoodUpgrade(goodItemId);

        KeyValueStorage.deleteKeyValue(key);

        if (notify) {
            BusProvider.getInstance().post(new GoodUpgradeEvent(goodItemId, null));
        }
    }

    /**
     * Assigns a specific upgrade to the given virtual good.
     *
     * @param goodItemId the virtual good to upgrade
     * @param upgradeVGItemId the upgrade to assign
     */
    public void assignCurrentUpgrade(String goodItemId, String upgradeVGItemId) {
        assignCurrentUpgrade(goodItemId, upgradeVGItemId, true);
    }

    /**
     * Assigns a specific upgrade to the given virtual good.
     *
     * @param goodItemId the VirtualGood to upgrade
     * @param upgradeVGItemId the upgrade to assign
     * @param notify if true post event to bus
     */
    public void assignCurrentUpgrade(String goodItemId, String upgradeVGItemId, boolean notify) {

        String upgradeItemId = getCurrentUpgrade(goodItemId);
        if (!TextUtils.isEmpty(upgradeItemId)) {
            try {
                UpgradeVG upgrade = (UpgradeVG) StoreInfo.getVirtualItem(upgradeItemId);

                if (upgrade != null && upgrade.getItemId().equals(
                        upgradeVGItemId)) {
                    return;
                }
            } catch (VirtualItemNotFoundException ignored) {

            }
        }

        SoomlaUtils.LogDebug(mTag, "Assigning upgrade " + upgradeVGItemId + " to virtual good: "
                + goodItemId);

        String key = keyGoodUpgrade(goodItemId);

        KeyValueStorage.setValue(key, upgradeVGItemId);

        if (notify) {
            BusProvider.getInstance().post(new GoodUpgradeEvent(goodItemId, upgradeVGItemId));
        }
    }

    /**
     * Retrieves the current upgrade for the given virtual good.
     *
     * @param goodItemId the virtual good to retrieve upgrade for
     * @return the current upgrade for the given virtual good
     */
    public String getCurrentUpgrade(String goodItemId) {
        SoomlaUtils.LogDebug(mTag, "Fetching upgrade to virtual good: " + goodItemId);

        String key = keyGoodUpgrade(goodItemId);

        String upItemId = KeyValueStorage.getValue(key);

        if (upItemId == null) {
            SoomlaUtils.LogDebug(mTag, "You tried to fetch the current upgrade of " + goodItemId
                    + " but there's not upgrade to it.");
            return null;
        }

        try {
            return upItemId;
        } catch (ClassCastException e) {
            SoomlaUtils.LogError(mTag,
                    "The current upgrade's itemId from the DB is not an UpgradeVG.");
        }

        return null;
    }

    /**
     * Checks if the given <code>EquippableVG</code> is currently equipped or not.
     *
     * @param goodItemId the <code>EquippableVG</code> to check the status for
     * @return true if the given good is equipped, false otherwise
     */
    public boolean isEquipped(String goodItemId){
        SoomlaUtils.LogDebug(mTag, "checking if virtual good with itemId: " + goodItemId +
                " is equipped.");

        String key = keyGoodEquipped(goodItemId);
        String val = KeyValueStorage.getValue(key);

        return val != null;
    }

    /**
     * Equips the given <code>EquippableVG</code>.
     *
     * @param goodItemId the <code>EquippableVG</code> to equip
     */
    public void equip(String goodItemId) {
        equip(goodItemId, true);
    }

    /**
     * Equips the given <code>EquippableVG</code>.
     *
     * @param goodItemId the EquippableVG to equip
     * @param notify if notify is true post event to bus
     */
    public void equip(String goodItemId, boolean notify) {
        if (isEquipped(goodItemId)) {
            return;
        }
        equipPriv(goodItemId, true, notify);
    }

    /**
     * UnEquips the given <code>EquippableVG</code>.
     *
     * @param goodItemId the <code>EquippableVG</code> to unequip
     */
    public void unequip(String goodItemId) {
        unequip(goodItemId, true);
    }

    /**
     * UnEquips the given <code>EquippableVG</code>.
     *
     * @param goodItemId the <code>EquippableVG</code> to unequip
     * @param notify if true post event to bus
     */
    public void unequip(String goodItemId, boolean notify) {
        if (!isEquipped(goodItemId)) {
            return;
        }
        equipPriv(goodItemId, false, notify);
    }

    /**
     * @{inheritDoc}
     */
    @Override
    protected String keyBalance(String itemId) {
        return keyGoodBalance(itemId);
    }

    /**
     * @{inheritDoc}
     */
    @Override
    protected void postBalanceChangeEvent(String itemId, int balance, int amountAdded) {
        BusProvider.getInstance().post(new GoodBalanceChangedEvent(itemId,
                balance, amountAdded));
    }

    /**
     * Helper function for <code>equip</code> and <code>unequip</code> functions.
     */
    private void equipPriv(String goodItemId, boolean equip, boolean notify){
        SoomlaUtils.LogDebug(mTag, (!equip ? "unequipping " : "equipping ") + goodItemId + ".");

        String key = keyGoodEquipped(goodItemId);

        if (equip) {
            KeyValueStorage.setValue(key, "");
            if (notify) {
                BusProvider.getInstance().post(new GoodEquippedEvent(goodItemId));
            }
        } else {
            KeyValueStorage.deleteKeyValue(key);
            if (notify) {
                BusProvider.getInstance().post(new GoodUnEquippedEvent(goodItemId));
            }
        }
    }


    private static String keyGoodBalance(String itemId) {
        return DB_KEY_GOOD_PREFIX + itemId + ".balance";
    }

    private static String keyGoodEquipped(String itemId) {
        return DB_KEY_GOOD_PREFIX + itemId + ".equipped";
    }

    private static String keyGoodUpgrade(String itemId) {
        return DB_KEY_GOOD_PREFIX + itemId + ".currentUpgrade";
    }

    public final static String DB_KEY_GOOD_PREFIX = "good.";
}




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