aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/plans/models/Feature.java
diff options
context:
space:
mode:
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.java124
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;
+ }
+}