| package org.wordpress.android.ui.plans.models; |
| |
| |
| import android.text.TextUtils; |
| |
| import org.json.JSONArray; |
| import org.json.JSONException; |
| import org.json.JSONObject; |
| import org.wordpress.android.util.JSONUtils; |
| import org.wordpress.android.util.StringUtils; |
| |
| import java.io.Serializable; |
| import java.util.ArrayList; |
| import java.util.Hashtable; |
| import java.util.List; |
| |
| public class Plan implements Serializable { |
| private long mProductID; |
| private String mProductName; |
| private final Hashtable<String, Integer> mPrices = new Hashtable<>(); |
| private String mProductNameShort; |
| private String mProductSlug; |
| private String mTagline; |
| private String mDescription; |
| private long mCost; |
| private int mBillPeriod; |
| private String mProductType; |
| private boolean mIsAvailable; |
| private String mBillPeriodLabel; |
| private String mPrice; |
| private String mFormattedPrice; |
| private String mIconUrl; |
| private int mRawPrice; |
| |
| // Optionals |
| private int mWidth; |
| private int mHeight; |
| private long mSaving; // diff from cost and original |
| private long mOriginal; // Original price |
| private String mFormattedOriginalPrice; |
| private int mStore; |
| private int mMulti; |
| private String mSupportDocument; |
| private String mCapability; |
| private ArrayList<Integer> mBundleProductIds; |
| private final ArrayList<PlanFeaturesHighlightSection> mFeaturesHighlightSections = new ArrayList<>(); |
| |
| // used to link with an actual product on the Store (ie: Used to load the price from the Store). |
| private String mAndroidSKU; |
| |
| // Info attached to the current site/user |
| private int mRawDiscount; |
| private String mFormattedDiscount; |
| private boolean mIsCurrentPlan; |
| private boolean mCanStartTrial; |
| private String mExpiry; |
| private boolean mFreeTrial; |
| private String mUserFacingExpiry; |
| private String mSubscribedDate; |
| private String mBundleSubscriptionID; |
| |
| |
| public Plan(JSONObject planJSONObject) throws JSONException { |
| mProductID = planJSONObject.getLong("product_id"); |
| mProductName = planJSONObject.getString("product_name"); |
| |
| // Unfold prices object |
| JSONObject priceJSONObject = planJSONObject.getJSONObject("prices"); |
| JSONArray priceKeys = priceJSONObject.names(); |
| if (priceKeys != null) { |
| for (int i=0; i < priceKeys.length(); i ++) { |
| String currentKey = priceKeys.getString(i); |
| int currentPrice = priceJSONObject.getInt(currentKey); |
| mPrices.put(currentKey, currentPrice); |
| } |
| } |
| |
| mProductNameShort = planJSONObject.getString("product_name_short"); |
| mProductSlug = planJSONObject.getString("product_slug"); |
| mTagline = planJSONObject.getString("tagline"); |
| mDescription = planJSONObject.getString("description"); |
| mCost = planJSONObject.getLong("cost"); |
| mBillPeriod = planJSONObject.getInt("bill_period"); |
| mProductType = planJSONObject.getString("product_type"); |
| mIsAvailable = JSONUtils.getBool(planJSONObject, "available"); |
| mBillPeriodLabel = planJSONObject.getString("bill_period_label"); |
| mPrice = planJSONObject.getString("price"); |
| mFormattedPrice = planJSONObject.getString("formatted_price"); |
| mRawPrice = planJSONObject.getInt("raw_price"); |
| mIconUrl = planJSONObject.optString("icon"); |
| mAndroidSKU = planJSONObject.optString("android_sku"); |
| |
| // Optionals |
| mWidth = planJSONObject.optInt("width"); |
| mHeight = planJSONObject.optInt("height"); |
| mSaving = planJSONObject.optLong("saving", 0L); |
| mOriginal = planJSONObject.optLong("original", mCost); |
| mFormattedOriginalPrice = planJSONObject.optString("formatted_original_price"); |
| mSupportDocument = planJSONObject.optString("support_document"); |
| mCapability = planJSONObject.optString("capability"); |
| mStore = planJSONObject.optInt("store"); |
| mMulti = planJSONObject.optInt("multi"); |
| |
| if (planJSONObject.has("bundle_product_ids")) { |
| JSONArray bundleIDS = planJSONObject.getJSONArray("bundle_product_ids"); |
| mBundleProductIds = new ArrayList<>(bundleIDS.length()); |
| for (int i=0; i < bundleIDS.length(); i ++) { |
| int currentBundleID = bundleIDS.getInt(i); |
| mBundleProductIds.add(currentBundleID); |
| } |
| } |
| |
| if (planJSONObject.has("features_highlight")) { |
| JSONArray featuresHighlightSections = planJSONObject.getJSONArray("features_highlight"); |
| for (int i=0; i < featuresHighlightSections.length(); i++) { |
| mFeaturesHighlightSections.add( |
| new PlanFeaturesHighlightSection(featuresHighlightSections.getJSONObject(i)) |
| ); |
| } |
| } |
| |
| // Specific info liked with the current site |
| mRawDiscount = planJSONObject.optInt("raw_discount", 0); |
| mFormattedDiscount = planJSONObject.optString("formatted_discount"); |
| mCanStartTrial = JSONUtils.getBool(planJSONObject, "can_start_trial"); |
| mIsCurrentPlan = JSONUtils.getBool(planJSONObject, "current_plan"); |
| mExpiry = planJSONObject.optString("expiry"); |
| mUserFacingExpiry = planJSONObject.optString("user_facing_expiry"); |
| mSubscribedDate = planJSONObject.optString("subscribed_date"); |
| mFreeTrial = JSONUtils.getBool(planJSONObject, "free_trial"); |
| mBundleSubscriptionID = planJSONObject.optString("bundle_subscription_id"); |
| } |
| |
| |
| public long getProductID() { |
| return mProductID; |
| } |
| |
| public String getProductName() { |
| return StringUtils.notNullStr(mProductName); |
| } |
| |
| public Hashtable<String, Integer> getPrices() { |
| return mPrices; |
| } |
| |
| public String getProductNameShort() { |
| return StringUtils.notNullStr(mProductNameShort); |
| } |
| |
| public String getProductSlug() { |
| return StringUtils.notNullStr(mProductSlug); |
| } |
| |
| public String getTagline() { |
| return StringUtils.notNullStr(mTagline); |
| } |
| |
| public String getDescription() { |
| return StringUtils.notNullStr(mDescription); |
| } |
| |
| public long getCost() { |
| return mCost; |
| } |
| |
| public int getBillPeriod() { |
| return mBillPeriod; |
| } |
| |
| public String getProductType() { |
| return StringUtils.notNullStr(mProductType); |
| } |
| |
| public boolean isAvailable() { |
| return mIsAvailable; |
| } |
| |
| public int getWidth() { |
| return mWidth; |
| } |
| |
| public int getHeight() { |
| return mHeight; |
| } |
| |
| public String getBillPeriodLabel() { |
| return StringUtils.notNullStr(mBillPeriodLabel); |
| } |
| |
| public String getPrice() { |
| return StringUtils.notNullStr(mPrice); |
| } |
| |
| public String getFormattedPrice() { |
| return StringUtils.notNullStr(mFormattedPrice); |
| } |
| |
| public int getRawPrice() { |
| return mRawPrice; |
| } |
| |
| public ArrayList<PlanFeaturesHighlightSection> getFeaturesHighlightSections() { |
| return mFeaturesHighlightSections; |
| } |
| |
| public List<Integer> getBundleProductIds() { |
| return mBundleProductIds; |
| } |
| |
| public String getCapability() { |
| return StringUtils.notNullStr(mCapability); |
| } |
| |
| public String getSupportDocument() { |
| return StringUtils.notNullStr(mSupportDocument); |
| } |
| |
| public int getMulti() { |
| return mMulti; |
| } |
| |
| public int getStore() { |
| return mStore; |
| } |
| |
| public String getFormattedOriginalPrice() { |
| return StringUtils.notNullStr(mFormattedOriginalPrice); |
| } |
| |
| public long getSaving() { |
| return mSaving; |
| } |
| |
| public long getOriginal() { |
| return mOriginal; |
| } |
| |
| public String getIconUrl() { |
| return StringUtils.notNullStr(mIconUrl); |
| } |
| public void setIconUrl(String iconUrl) { |
| mIconUrl = StringUtils.notNullStr(iconUrl); |
| } |
| public boolean hasIconUrl() { |
| return !TextUtils.isEmpty(mIconUrl); |
| } |
| |
| public int getRawDiscount() { |
| return mRawDiscount; |
| } |
| |
| public String getFormattedDiscount() { |
| return StringUtils.notNullStr(mFormattedDiscount); |
| } |
| |
| |
| public boolean isCurrentPlan() { |
| return mIsCurrentPlan; |
| } |
| |
| public boolean canStartTrial() { |
| return mCanStartTrial; |
| } |
| |
| public String getSubscribedDate() { |
| return StringUtils.notNullStr(mSubscribedDate); |
| } |
| |
| public String getUserFacingExpiry() { |
| return StringUtils.notNullStr(mUserFacingExpiry); |
| } |
| |
| public boolean isFreeTrial() { |
| return mFreeTrial; |
| } |
| |
| public String getExpiry() { |
| return StringUtils.notNullStr(mExpiry); |
| } |
| |
| public String getBundleSubscriptionID() { |
| return StringUtils.notNullStr(mBundleSubscriptionID); |
| } |
| } |