use of com.soomla.store.domain.virtualGoods.VirtualGood in project android-store by soomla.
the class StoreInfo method replaceVirtualItem.
/**
* Replaces an old virtual item with a new one by doing the following:
* 1. Determines the type of the given virtual item.
* 2. Looks for the given virtual item in the relevant list, according to its type.
* 3. If found, removes it.
* 4. Adds the given virtual item.
*
* @param virtualItem the virtual item that replaces the old one if exists.
*/
public static void replaceVirtualItem(VirtualItem virtualItem) {
mVirtualItems.put(virtualItem.getItemId(), virtualItem);
if (virtualItem instanceof VirtualCurrency) {
for (int i = 0; i < mCurrencies.size(); i++) {
if (mCurrencies.get(i).getItemId().equals(virtualItem.getItemId())) {
mCurrencies.remove(i);
break;
}
}
mCurrencies.add((VirtualCurrency) virtualItem);
}
if (virtualItem instanceof VirtualCurrencyPack) {
VirtualCurrencyPack vcp = (VirtualCurrencyPack) virtualItem;
PurchaseType purchaseType = vcp.getPurchaseType();
if (purchaseType instanceof PurchaseWithMarket) {
mPurchasableItems.put(((PurchaseWithMarket) purchaseType).getMarketItem().getProductId(), vcp);
}
for (int i = 0; i < mCurrencyPacks.size(); i++) {
if (mCurrencyPacks.get(i).getItemId().equals(vcp.getItemId())) {
mCurrencyPacks.remove(i);
break;
}
}
mCurrencyPacks.add(vcp);
}
if (virtualItem instanceof VirtualGood) {
VirtualGood vg = (VirtualGood) virtualItem;
if (vg instanceof UpgradeVG) {
List<UpgradeVG> upgrades = mGoodsUpgrades.get(((UpgradeVG) vg).getGoodItemId());
if (upgrades == null) {
upgrades = new ArrayList<UpgradeVG>();
mGoodsUpgrades.put(((UpgradeVG) vg).getGoodItemId(), upgrades);
}
upgrades.add((UpgradeVG) vg);
}
PurchaseType purchaseType = vg.getPurchaseType();
if (purchaseType instanceof PurchaseWithMarket) {
mPurchasableItems.put(((PurchaseWithMarket) purchaseType).getMarketItem().getProductId(), vg);
}
for (int i = 0; i < mGoods.size(); i++) {
if (mGoods.get(i).getItemId().equals(vg.getItemId())) {
mGoods.remove(i);
break;
}
}
mGoods.add(vg);
}
}
use of com.soomla.store.domain.virtualGoods.VirtualGood in project android-store by soomla.
the class StoreInfo method fromJSONObject.
/**
* Transforms given jsonObject to StoreInfo
*
* @param jsonObject
* @throws JSONException
*/
private static void fromJSONObject(JSONObject jsonObject) throws JSONException {
mVirtualItems = new HashMap<String, VirtualItem>();
mPurchasableItems = new HashMap<String, PurchasableVirtualItem>();
mGoodsCategories = new HashMap<String, VirtualCategory>();
mGoodsUpgrades = new HashMap<String, List<UpgradeVG>>();
mCurrencyPacks = new LinkedList<VirtualCurrencyPack>();
mGoods = new LinkedList<VirtualGood>();
mCategories = new LinkedList<VirtualCategory>();
mCurrencies = new LinkedList<VirtualCurrency>();
if (jsonObject.has(StoreJSONConsts.STORE_CURRENCIES)) {
JSONArray virtualCurrencies = jsonObject.getJSONArray(StoreJSONConsts.STORE_CURRENCIES);
for (int i = 0; i < virtualCurrencies.length(); i++) {
JSONObject o = virtualCurrencies.getJSONObject(i);
VirtualCurrency c = new VirtualCurrency(o);
mCurrencies.add(c);
mVirtualItems.put(c.getItemId(), c);
}
}
if (jsonObject.has(StoreJSONConsts.STORE_CURRENCYPACKS)) {
JSONArray currencyPacks = jsonObject.getJSONArray(StoreJSONConsts.STORE_CURRENCYPACKS);
for (int i = 0; i < currencyPacks.length(); i++) {
JSONObject o = currencyPacks.getJSONObject(i);
VirtualCurrencyPack pack = new VirtualCurrencyPack(o);
mCurrencyPacks.add(pack);
mVirtualItems.put(pack.getItemId(), pack);
PurchaseType purchaseType = pack.getPurchaseType();
if (purchaseType instanceof PurchaseWithMarket) {
mPurchasableItems.put(((PurchaseWithMarket) purchaseType).getMarketItem().getProductId(), pack);
}
}
}
// For example: VGU and VGP depend on other VGs
if (jsonObject.has(StoreJSONConsts.STORE_GOODS)) {
JSONObject virtualGoods = jsonObject.getJSONObject(StoreJSONConsts.STORE_GOODS);
if (virtualGoods.has(StoreJSONConsts.STORE_GOODS_SU)) {
JSONArray suGoods = virtualGoods.getJSONArray(StoreJSONConsts.STORE_GOODS_SU);
for (int i = 0; i < suGoods.length(); i++) {
JSONObject o = suGoods.getJSONObject(i);
SingleUseVG g = new SingleUseVG(o);
addVG(g);
}
}
if (virtualGoods.has(StoreJSONConsts.STORE_GOODS_LT)) {
JSONArray ltGoods = virtualGoods.getJSONArray(StoreJSONConsts.STORE_GOODS_LT);
for (int i = 0; i < ltGoods.length(); i++) {
JSONObject o = ltGoods.getJSONObject(i);
LifetimeVG g = new LifetimeVG(o);
addVG(g);
}
}
if (virtualGoods.has(StoreJSONConsts.STORE_GOODS_EQ)) {
JSONArray eqGoods = virtualGoods.getJSONArray(StoreJSONConsts.STORE_GOODS_EQ);
for (int i = 0; i < eqGoods.length(); i++) {
JSONObject o = eqGoods.getJSONObject(i);
EquippableVG g = new EquippableVG(o);
addVG(g);
}
}
if (virtualGoods.has(StoreJSONConsts.STORE_GOODS_PA)) {
JSONArray paGoods = virtualGoods.getJSONArray(StoreJSONConsts.STORE_GOODS_PA);
for (int i = 0; i < paGoods.length(); i++) {
JSONObject o = paGoods.getJSONObject(i);
SingleUsePackVG g = new SingleUsePackVG(o);
addVG(g);
}
}
if (virtualGoods.has(StoreJSONConsts.STORE_GOODS_UP)) {
JSONArray upGoods = virtualGoods.getJSONArray(StoreJSONConsts.STORE_GOODS_UP);
for (int i = 0; i < upGoods.length(); i++) {
JSONObject o = upGoods.getJSONObject(i);
UpgradeVG g = new UpgradeVG(o);
addVG(g);
List<UpgradeVG> upgrades = mGoodsUpgrades.get(g.getGoodItemId());
if (upgrades == null) {
upgrades = new ArrayList<UpgradeVG>();
mGoodsUpgrades.put(g.getGoodItemId(), upgrades);
}
upgrades.add(g);
}
}
}
// Categories depend on virtual goods. That's why the have to be initialized after!
if (jsonObject.has(StoreJSONConsts.STORE_CATEGORIES)) {
JSONArray virtualCategories = jsonObject.getJSONArray(StoreJSONConsts.STORE_CATEGORIES);
for (int i = 0; i < virtualCategories.length(); i++) {
JSONObject o = virtualCategories.getJSONObject(i);
VirtualCategory category = new VirtualCategory(o);
mCategories.add(category);
for (String goodItemId : category.getGoodsItemIds()) {
mGoodsCategories.put(goodItemId, category);
}
}
}
// Remove this code when no longer needed.
if (mNonConsumableMigrationNeeded) {
SoomlaUtils.LogDebug(TAG, "NonConsumables balance migration is required. Doing it now.");
nonConsBalancesToLTVGs();
}
}
use of com.soomla.store.domain.virtualGoods.VirtualGood in project android-store by soomla.
the class StoreGoodsActivity method onCreate.
/**
* Called when the activity starts.
* Displays the list view of the game, where users can see the available goods for purchase.
*
* @param savedInstanceState if the activity should be re-initialized after previously being
* shut down then this <code>Bundle</code> will contain the most
* recent data, otherwise it will be null.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
SoomlaStore.getInstance().startIabServiceInBg();
TextView title = (TextView) findViewById(R.id.title);
title.setText("Virtual Goods");
mImages = generateImagesHash();
mStoreAdapter = new StoreAdapter();
/* configuring the list with an adapter */
final Activity activity = this;
ListView list = (ListView) findViewById(R.id.list);
list.setAdapter(mStoreAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
/*
The user decided to make an actual purchase of virtual goods. We try to buy() the
user's desired good and SoomlaStore tells us if the user has enough funds to
make the purchase. If he/she doesn't have enough then an InsufficientFundsException
will be thrown.
*/
VirtualGood good = StoreInfo.getGoods().get(i);
try {
good.buy("this is just a payload");
} catch (InsufficientFundsException e) {
AlertDialog ad = new AlertDialog.Builder(activity).create();
ad.setCancelable(false);
ad.setMessage("You don't have enough muffins.");
ad.setButton(DialogInterface.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
}
}
});
}
Aggregations