diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java b/WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java new file mode 100644 index 000000000..6a8455394 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java @@ -0,0 +1,124 @@ +package org.wordpress.android.ui.plans.models; + +import org.json.JSONException; +import org.json.JSONObject; +import org.wordpress.android.util.JSONUtils; +import org.wordpress.android.util.StringUtils; + +public class Feature { + /* + + { + "product_slug": "space", + "title": "Space", + "description": "Increase your available storage space and add the ability to upload audio files.", + "icon": "", + "plans": { + "1": { + "title": "Media storage", + "description": "Upload up to 3GB of photos, videos, or music.", + "icon": "" + }, + "1003": { + "title": "Expanded media storage", + "description": "Upload up to 13GB of photos, videos, or music.", + "icon": "" + }, + "1008": { + "title": "Unlimited media storage", + "description": "You can upload unlimited photos, videos, or music.", + "icon": "" + } + } + }, + + OR + + { + "product_slug": "ecommerce", + "title": "eCommerce", + "description": "Sell stuff right on your blog with Ecwid and Shopify.", + "icon": "", + "plans": { + "1008": true + } + }, + + */ + + private String mProductSlug; + private String mTitle; + private String mIcon; + private String mDescription; + private boolean mIsNotPartOfFreeTrial; + private final JSONObject mPlanIDToDescription; + + public Feature(JSONObject featureJSONObject) throws JSONException { + mProductSlug = featureJSONObject.getString("product_slug"); + mTitle = featureJSONObject.getString("title"); + mIcon = featureJSONObject.optString("icon"); + mDescription = featureJSONObject.getString("description"); + mPlanIDToDescription = featureJSONObject.optJSONObject("plans"); + + if (featureJSONObject.has("not_part_of_free_trial") && + JSONUtils.getBool(featureJSONObject, "not_part_of_free_trial")) { + // not part of free trial + mIsNotPartOfFreeTrial = true; + } + } + + public String getProductSlug() { + return StringUtils.notNullStr(mProductSlug); + } + + public String getTitle() { + return StringUtils.notNullStr(mTitle); + } + + public String getDescription() { + return StringUtils.notNullStr(mDescription); + } + + public boolean isNotPartOfFreeTrial() { + return mIsNotPartOfFreeTrial; + } + + /** + * Return the description of this feature for a given plan. + * If description is not provided for the given plan, fallback to the global description of the feature. + */ + public String getDescriptionForPlan(Long planID) { + return getPropertyForPlan(planID, "description", mDescription); + } + + /** + * Return the title of this feature for a given plan. + * If title is not provided for the given plan, fallback to the global title of the feature. + */ + public String getTitleForPlan(Long planID) { + return getPropertyForPlan(planID, "title", mTitle); + } + + /** + * Return the icon of this feature for a given plan. + * If icon is not provided for the given plan, fallback to the global icon for this feature. + */ + public String getIconForPlan(Long planID) { + return getPropertyForPlan(planID, "icon", mIcon); + } + + private String getPropertyForPlan(Long planID, String propertyName, String fallback) { + String planIdAsString = String.valueOf(planID); + fallback = StringUtils.notNullStr(fallback); + if (mPlanIDToDescription != null && mPlanIDToDescription.has(planIdAsString)) { + JSONObject plan = mPlanIDToDescription.optJSONObject(planIdAsString); + if (plan != null) { // It's not a JSON object. Just `true` in the response. That means the plan has this feature with generic description/title/icon. + return plan.optString( + propertyName, + fallback + ); + } + } + return fallback; + } +} |