Showing
13 changed files
with
441 additions
and
6 deletions
.idea/AndroidProjectSystem.xml
0 → 100644
.idea/compiler.xml
0 → 100644
.idea/deploymentTargetSelector.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="deploymentTargetSelector"> | ||
| 4 | + <selectionStates> | ||
| 5 | + <SelectionState runConfigName="app"> | ||
| 6 | + <option name="selectionMode" value="DROPDOWN" /> | ||
| 7 | + </SelectionState> | ||
| 8 | + </selectionStates> | ||
| 9 | + </component> | ||
| 10 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
.idea/gradle.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="GradleMigrationSettings" migrationVersion="1" /> | ||
| 4 | + <component name="GradleSettings"> | ||
| 5 | + <option name="linkedExternalProjectsSettings"> | ||
| 6 | + <GradleProjectSettings> | ||
| 7 | + <option name="testRunner" value="CHOOSE_PER_TEST" /> | ||
| 8 | + <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||
| 9 | + <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" /> | ||
| 10 | + <option name="modules"> | ||
| 11 | + <set> | ||
| 12 | + <option value="$PROJECT_DIR$" /> | ||
| 13 | + <option value="$PROJECT_DIR$/app" /> | ||
| 14 | + <option value="$PROJECT_DIR$/warply_android_sdk" /> | ||
| 15 | + </set> | ||
| 16 | + </option> | ||
| 17 | + </GradleProjectSettings> | ||
| 18 | + </option> | ||
| 19 | + </component> | ||
| 20 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
.idea/migrations.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="ProjectMigrations"> | ||
| 4 | + <option name="MigrateToGradleLocalJavaHome"> | ||
| 5 | + <set> | ||
| 6 | + <option value="$PROJECT_DIR$" /> | ||
| 7 | + </set> | ||
| 8 | + </option> | ||
| 9 | + </component> | ||
| 10 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
.idea/misc.xml
0 → 100644
| 1 | +<project version="4"> | ||
| 2 | + <component name="ExternalStorageConfigurationManager" enabled="true" /> | ||
| 3 | + <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK" /> | ||
| 4 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
.idea/runConfigurations.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="RunConfigurationProducerService"> | ||
| 4 | + <option name="ignoredProducers"> | ||
| 5 | + <set> | ||
| 6 | + <option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" /> | ||
| 7 | + <option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" /> | ||
| 8 | + <option value="com.intellij.execution.junit.PatternConfigurationProducer" /> | ||
| 9 | + <option value="com.intellij.execution.junit.TestInClassConfigurationProducer" /> | ||
| 10 | + <option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" /> | ||
| 11 | + <option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" /> | ||
| 12 | + <option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" /> | ||
| 13 | + <option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" /> | ||
| 14 | + </set> | ||
| 15 | + </option> | ||
| 16 | + </component> | ||
| 17 | +</project> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
.idea/vcs.xml
0 → 100644
| ... | @@ -26,6 +26,7 @@ import ly.warp.sdk.io.adapters.BannerAdapter; | ... | @@ -26,6 +26,7 @@ import ly.warp.sdk.io.adapters.BannerAdapter; | 
| 26 | import ly.warp.sdk.io.adapters.OfferAdapter; | 26 | import ly.warp.sdk.io.adapters.OfferAdapter; | 
| 27 | import ly.warp.sdk.io.callbacks.CallbackReceiver; | 27 | import ly.warp.sdk.io.callbacks.CallbackReceiver; | 
| 28 | import ly.warp.sdk.io.models.BannerItem; | 28 | import ly.warp.sdk.io.models.BannerItem; | 
| 29 | +import ly.warp.sdk.io.models.Couponset; | ||
| 29 | import ly.warp.sdk.io.models.DummyDataProvider; | 30 | import ly.warp.sdk.io.models.DummyDataProvider; | 
| 30 | import ly.warp.sdk.io.models.OfferCategory; | 31 | import ly.warp.sdk.io.models.OfferCategory; | 
| 31 | import ly.warp.sdk.io.models.OfferItem; | 32 | import ly.warp.sdk.io.models.OfferItem; | 
| ... | @@ -100,6 +101,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -100,6 +101,7 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 100 | initViews(); | 101 | initViews(); | 
| 101 | mPbLoading.setVisibility(View.VISIBLE); | 102 | mPbLoading.setVisibility(View.VISIBLE); | 
| 102 | WarplyManager.getCampaigns(mCampaignsCallback); | 103 | WarplyManager.getCampaigns(mCampaignsCallback); | 
| 104 | + WarplyManager.getCouponsets(mCouponsetsCallback); | ||
| 103 | 105 | ||
| 104 | // Setup all category sections | 106 | // Setup all category sections | 
| 105 | // setupTopOffersSection(); | 107 | // setupTopOffersSection(); | 
| ... | @@ -431,7 +433,6 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -431,7 +433,6 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 431 | }); | 433 | }); | 
| 432 | mBannerAdapter.setOnBannerContentClickListener(article -> { | 434 | mBannerAdapter.setOnBannerContentClickListener(article -> { | 
| 433 | //TODO: click article | 435 | //TODO: click article | 
| 434 | - String s = ""; | ||
| 435 | }); | 436 | }); | 
| 436 | 437 | ||
| 437 | // Set the number of pages to preload for adjacent items | 438 | // Set the number of pages to preload for adjacent items | 
| ... | @@ -519,4 +520,16 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | ... | @@ -519,4 +520,16 @@ public class HomeActivity extends Activity implements View.OnClickListener, Offe | 
| 519 | mViewPager.setVisibility(View.GONE); | 520 | mViewPager.setVisibility(View.GONE); | 
| 520 | } | 521 | } | 
| 521 | }; | 522 | }; | 
| 523 | + | ||
| 524 | + private CallbackReceiver<ArrayList<Couponset>> mCouponsetsCallback = new CallbackReceiver<ArrayList<Couponset>>() { | ||
| 525 | + @Override | ||
| 526 | + public void onSuccess(ArrayList<Couponset> result) { | ||
| 527 | + mPbLoading.setVisibility(View.GONE); | ||
| 528 | + } | ||
| 529 | + | ||
| 530 | + @Override | ||
| 531 | + public void onFailure(int errorCode) { | ||
| 532 | + mPbLoading.setVisibility(View.GONE); | ||
| 533 | + } | ||
| 534 | + }; | ||
| 522 | } | 535 | } | ... | ... | 
| ... | @@ -80,6 +80,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -80,6 +80,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 80 | private static final String FINAL_PRICE = "final_price"; | 80 | private static final String FINAL_PRICE = "final_price"; | 
| 81 | private static final String DISCOUNT_TYPE = "discount_type"; | 81 | private static final String DISCOUNT_TYPE = "discount_type"; | 
| 82 | private static final String EXTRA_FIELDS = "extra_fields"; | 82 | private static final String EXTRA_FIELDS = "extra_fields"; | 
| 83 | + private static final String IS_NEW = "is_new"; | ||
| 84 | + private static final String PROMOTED = "promoted"; | ||
| 85 | + private static final String PERSONALIZED = "personalized"; | ||
| 86 | + private static final String LOCKED = "locked"; | ||
| 87 | + private static final String UNLOCK_ACTION = "unlock_action"; | ||
| 88 | + private static final String UNLOCK_MESSAGE = "unlock_message"; | ||
| 83 | 89 | ||
| 84 | 90 | ||
| 85 | /* Member variables of the Campaign object */ | 91 | /* Member variables of the Campaign object */ | 
| ... | @@ -115,6 +121,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -115,6 +121,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 115 | private Date endDate = new Date(); | 121 | private Date endDate = new Date(); | 
| 116 | private String couponsetType = ""; | 122 | private String couponsetType = ""; | 
| 117 | private JSONObject extraFields = new JSONObject(); | 123 | private JSONObject extraFields = new JSONObject(); | 
| 124 | + private boolean isNew = false; | ||
| 125 | + private boolean promoted = false; | ||
| 126 | + private boolean personalized = false; | ||
| 127 | + private boolean locked = false; | ||
| 128 | + private String unlockAction = ""; | ||
| 129 | + private String unlockMessage = ""; | ||
| 118 | 130 | ||
| 119 | public Couponset() { | 131 | public Couponset() { | 
| 120 | this.uuid = ""; | 132 | this.uuid = ""; | 
| ... | @@ -146,6 +158,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -146,6 +158,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 146 | this.discount_type = ""; | 158 | this.discount_type = ""; | 
| 147 | this.final_price = 0.0d; | 159 | this.final_price = 0.0d; | 
| 148 | this.extraFields = new JSONObject(); | 160 | this.extraFields = new JSONObject(); | 
| 161 | + this.isNew = false; | ||
| 162 | + this.promoted = false; | ||
| 163 | + this.personalized = false; | ||
| 164 | + this.locked = false; | ||
| 165 | + this.unlockAction = ""; | ||
| 166 | + this.unlockMessage = ""; | ||
| 149 | } | 167 | } | 
| 150 | 168 | ||
| 151 | public Couponset(boolean isUniversal) { | 169 | public Couponset(boolean isUniversal) { | 
| ... | @@ -168,6 +186,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -168,6 +186,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 168 | this.innerText = ""; | 186 | this.innerText = ""; | 
| 169 | this.final_price = 0.0d; | 187 | this.final_price = 0.0d; | 
| 170 | this.extraFields = new JSONObject(); | 188 | this.extraFields = new JSONObject(); | 
| 189 | + this.isNew = false; | ||
| 190 | + this.promoted = false; | ||
| 191 | + this.personalized = false; | ||
| 192 | + this.locked = false; | ||
| 193 | + this.unlockAction = ""; | ||
| 194 | + this.unlockMessage = ""; | ||
| 171 | } | 195 | } | 
| 172 | 196 | ||
| 173 | /** | 197 | /** | 
| ... | @@ -204,6 +228,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -204,6 +228,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 204 | this.active = json.optBoolean(ACTIVE); | 228 | this.active = json.optBoolean(ACTIVE); | 
| 205 | this.visible = json.optBoolean(VISIBLE); | 229 | this.visible = json.optBoolean(VISIBLE); | 
| 206 | this.buyable = json.optBoolean(BUYABLE); | 230 | this.buyable = json.optBoolean(BUYABLE); | 
| 231 | + this.isNew = json.optBoolean(IS_NEW); | ||
| 232 | + this.promoted = json.optBoolean(PROMOTED); | ||
| 233 | + this.personalized = json.optBoolean(PERSONALIZED); | ||
| 234 | + this.locked = json.optBoolean(LOCKED); | ||
| 235 | + this.unlockAction = json.optString(UNLOCK_ACTION); | ||
| 236 | + this.unlockMessage = json.optString(UNLOCK_MESSAGE); | ||
| 207 | this.user_generated = json.optBoolean(USER_GENERATED); | 237 | this.user_generated = json.optBoolean(USER_GENERATED); | 
| 208 | this.limits = json.optJSONObject(LIMITS); | 238 | this.limits = json.optJSONObject(LIMITS); | 
| 209 | this.points = json.optInt(POINTS); | 239 | this.points = json.optInt(POINTS); | 
| ... | @@ -247,6 +277,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -247,6 +277,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 247 | } catch (JSONException e) { | 277 | } catch (JSONException e) { | 
| 248 | e.printStackTrace(); | 278 | e.printStackTrace(); | 
| 249 | } | 279 | } | 
| 280 | + this.isNew = json.optBoolean(IS_NEW); | ||
| 281 | + this.promoted = json.optBoolean(PROMOTED); | ||
| 282 | + this.personalized = json.optBoolean(PERSONALIZED); | ||
| 283 | + this.locked = json.optBoolean(LOCKED); | ||
| 284 | + this.unlockAction = json.optString(UNLOCK_ACTION); | ||
| 285 | + this.unlockMessage = json.optString(UNLOCK_MESSAGE); | ||
| 250 | this.active = json.optBoolean(ACTIVE); | 286 | this.active = json.optBoolean(ACTIVE); | 
| 251 | this.buyable = json.optBoolean(BUYABLE); | 287 | this.buyable = json.optBoolean(BUYABLE); | 
| 252 | this.name = json.optString(NAME); | 288 | this.name = json.optString(NAME); | 
| ... | @@ -322,6 +358,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -322,6 +358,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 322 | this.innerText = source.readString(); | 358 | this.innerText = source.readString(); | 
| 323 | this.discount_type = source.readString(); | 359 | this.discount_type = source.readString(); | 
| 324 | this.final_price = source.readDouble(); | 360 | this.final_price = source.readDouble(); | 
| 361 | + this.isNew = source.readByte() != 0; | ||
| 362 | + this.promoted = source.readByte() != 0; | ||
| 363 | + this.personalized = source.readByte() != 0; | ||
| 364 | + this.locked = source.readByte() != 0; | ||
| 365 | + this.unlockAction = source.readString(); | ||
| 366 | + this.unlockMessage = source.readString(); | ||
| 325 | } | 367 | } | 
| 326 | 368 | ||
| 327 | @Override | 369 | @Override | 
| ... | @@ -352,6 +394,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -352,6 +394,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 352 | dest.writeString(this.innerText); | 394 | dest.writeString(this.innerText); | 
| 353 | dest.writeString(this.discount_type); | 395 | dest.writeString(this.discount_type); | 
| 354 | dest.writeDouble(this.final_price); | 396 | dest.writeDouble(this.final_price); | 
| 397 | + dest.writeByte((byte) (this.isNew ? 1 : 0)); | ||
| 398 | + dest.writeByte((byte) (this.promoted ? 1 : 0)); | ||
| 399 | + dest.writeByte((byte) (this.personalized ? 1 : 0)); | ||
| 400 | + dest.writeByte((byte) (this.locked ? 1 : 0)); | ||
| 401 | + dest.writeString(this.unlockAction); | ||
| 402 | + dest.writeString(this.unlockMessage); | ||
| 355 | } | 403 | } | 
| 356 | 404 | ||
| 357 | /** | 405 | /** | 
| ... | @@ -391,6 +439,12 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -391,6 +439,12 @@ public class Couponset implements Parcelable, Serializable { | 
| 391 | jObj.putOpt(DISCOUNT_TYPE, this.discount_type); | 439 | jObj.putOpt(DISCOUNT_TYPE, this.discount_type); | 
| 392 | jObj.putOpt(FINAL_PRICE, this.final_price); | 440 | jObj.putOpt(FINAL_PRICE, this.final_price); | 
| 393 | jObj.putOpt(EXTRA_FIELDS, this.extraFields); | 441 | jObj.putOpt(EXTRA_FIELDS, this.extraFields); | 
| 442 | + jObj.putOpt(IS_NEW, this.isNew); | ||
| 443 | + jObj.putOpt(PROMOTED, this.promoted); | ||
| 444 | + jObj.putOpt(PERSONALIZED, this.personalized); | ||
| 445 | + jObj.putOpt(LOCKED, this.locked); | ||
| 446 | + jObj.putOpt(UNLOCK_ACTION, this.unlockAction); | ||
| 447 | + jObj.putOpt(UNLOCK_MESSAGE, this.unlockMessage); | ||
| 394 | } catch (JSONException e) { | 448 | } catch (JSONException e) { | 
| 395 | if (WarpConstants.DEBUG) { | 449 | if (WarpConstants.DEBUG) { | 
| 396 | e.printStackTrace(); | 450 | e.printStackTrace(); | 
| ... | @@ -682,6 +736,55 @@ public class Couponset implements Parcelable, Serializable { | ... | @@ -682,6 +736,55 @@ public class Couponset implements Parcelable, Serializable { | 
| 682 | return img_preview; | 736 | return img_preview; | 
| 683 | } | 737 | } | 
| 684 | 738 | ||
| 739 | + | ||
| 740 | + public boolean isNew() { | ||
| 741 | + return isNew; | ||
| 742 | + } | ||
| 743 | + | ||
| 744 | + public void setNew(boolean aNew) { | ||
| 745 | + isNew = aNew; | ||
| 746 | + } | ||
| 747 | + | ||
| 748 | + public boolean isPromoted() { | ||
| 749 | + return promoted; | ||
| 750 | + } | ||
| 751 | + | ||
| 752 | + public void setPromoted(boolean promoted) { | ||
| 753 | + this.promoted = promoted; | ||
| 754 | + } | ||
| 755 | + | ||
| 756 | + public boolean isPersonalized() { | ||
| 757 | + return personalized; | ||
| 758 | + } | ||
| 759 | + | ||
| 760 | + public void setPersonalized(boolean personalized) { | ||
| 761 | + this.personalized = personalized; | ||
| 762 | + } | ||
| 763 | + | ||
| 764 | + public boolean isLocked() { | ||
| 765 | + return locked; | ||
| 766 | + } | ||
| 767 | + | ||
| 768 | + public void setLocked(boolean locked) { | ||
| 769 | + this.locked = locked; | ||
| 770 | + } | ||
| 771 | + | ||
| 772 | + public String getUnlockAction() { | ||
| 773 | + return unlockAction; | ||
| 774 | + } | ||
| 775 | + | ||
| 776 | + public void setUnlockAction(String unlockAction) { | ||
| 777 | + this.unlockAction = unlockAction; | ||
| 778 | + } | ||
| 779 | + | ||
| 780 | + public String getUnlockMessage() { | ||
| 781 | + return unlockMessage; | ||
| 782 | + } | ||
| 783 | + | ||
| 784 | + public void setUnlockMessage(String unlockMessage) { | ||
| 785 | + this.unlockMessage = unlockMessage; | ||
| 786 | + } | ||
| 787 | + | ||
| 685 | @Override | 788 | @Override | 
| 686 | public int describeContents() { | 789 | public int describeContents() { | 
| 687 | return 0; | 790 | return 0; | ... | ... | 
| ... | @@ -66,7 +66,9 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -66,7 +66,9 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 66 | private static final String SETTINGS = "settings"; | 66 | private static final String SETTINGS = "settings"; | 
| 67 | private static final String AUDIENCE = "audience"; | 67 | private static final String AUDIENCE = "audience"; | 
| 68 | private static final String IS_NEW = "is_new"; | 68 | private static final String IS_NEW = "is_new"; | 
| 69 | - private static final String BANNER_IMAGE = "Banner_img"; | 69 | + private static final String BANNER_IMAGE = "banner_img"; | 
| 70 | + private static final String BANNER_IMAGE_MOBILE = "banner_img_mobile"; | ||
| 71 | + private static final String CAMPAIGN_URL = "campaign_url"; | ||
| 70 | private static final String BANNER_TITLE = "Banner_title"; | 72 | private static final String BANNER_TITLE = "Banner_title"; | 
| 71 | 73 | ||
| 72 | /* Member variables of the Campaign object */ | 74 | /* Member variables of the Campaign object */ | 
| ... | @@ -92,6 +94,8 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -92,6 +94,8 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 92 | private final String communicationCategory; | 94 | private final String communicationCategory; | 
| 93 | private boolean isNew = false; | 95 | private boolean isNew = false; | 
| 94 | private String bannerImage = ""; | 96 | private String bannerImage = ""; | 
| 97 | + private String bannerImageMobile = ""; | ||
| 98 | + private String campaignUrl = ""; | ||
| 95 | private String bannerTitle = ""; | 99 | private String bannerTitle = ""; | 
| 96 | private boolean showExpiration = false; | 100 | private boolean showExpiration = false; | 
| 97 | private String couponImg = ""; | 101 | private String couponImg = ""; | 
| ... | @@ -139,6 +143,12 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -139,6 +143,12 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 139 | if (this.extraFields.has(BANNER_IMAGE)) { | 143 | if (this.extraFields.has(BANNER_IMAGE)) { | 
| 140 | this.bannerImage = this.extraFields.optString(BANNER_IMAGE); | 144 | this.bannerImage = this.extraFields.optString(BANNER_IMAGE); | 
| 141 | } | 145 | } | 
| 146 | + if (this.extraFields.has(BANNER_IMAGE_MOBILE)) { | ||
| 147 | + this.bannerImageMobile = this.extraFields.optString(BANNER_IMAGE_MOBILE); | ||
| 148 | + } | ||
| 149 | + if (this.extraFields.has(CAMPAIGN_URL)) { | ||
| 150 | + this.campaignUrl = this.extraFields.optString(CAMPAIGN_URL); | ||
| 151 | + } | ||
| 142 | if (this.extraFields.has(BANNER_TITLE)) { | 152 | if (this.extraFields.has(BANNER_TITLE)) { | 
| 143 | this.bannerTitle = this.extraFields.optString(BANNER_TITLE); | 153 | this.bannerTitle = this.extraFields.optString(BANNER_TITLE); | 
| 144 | } | 154 | } | 
| ... | @@ -183,6 +193,8 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -183,6 +193,8 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 183 | this.category = source.readString(); | 193 | this.category = source.readString(); | 
| 184 | this.campaignType = source.readString(); | 194 | this.campaignType = source.readString(); | 
| 185 | this.bannerImage = source.readString(); | 195 | this.bannerImage = source.readString(); | 
| 196 | + this.bannerImageMobile = source.readString(); | ||
| 197 | + this.campaignUrl = source.readString(); | ||
| 186 | this.bannerTitle = source.readString(); | 198 | this.bannerTitle = source.readString(); | 
| 187 | } | 199 | } | 
| 188 | 200 | ||
| ... | @@ -210,6 +222,8 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -210,6 +222,8 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 210 | dest.writeString(this.campaignType); | 222 | dest.writeString(this.campaignType); | 
| 211 | dest.writeString(this.communicationUUID); | 223 | dest.writeString(this.communicationUUID); | 
| 212 | dest.writeString(this.bannerImage); | 224 | dest.writeString(this.bannerImage); | 
| 225 | + dest.writeString(this.bannerImageMobile); | ||
| 226 | + dest.writeString(this.campaignUrl); | ||
| 213 | dest.writeString(this.bannerTitle); | 227 | dest.writeString(this.bannerTitle); | 
| 214 | } | 228 | } | 
| 215 | 229 | ||
| ... | @@ -420,6 +434,22 @@ public class NewCampaign implements Parcelable, Serializable { | ... | @@ -420,6 +434,22 @@ public class NewCampaign implements Parcelable, Serializable { | 
| 420 | this.filter = filter; | 434 | this.filter = filter; | 
| 421 | } | 435 | } | 
| 422 | 436 | ||
| 437 | + public String getBannerImageMobile() { | ||
| 438 | + return bannerImageMobile; | ||
| 439 | + } | ||
| 440 | + | ||
| 441 | + public void setBannerImageMobile(String bannerImageMobile) { | ||
| 442 | + this.bannerImageMobile = bannerImageMobile; | ||
| 443 | + } | ||
| 444 | + | ||
| 445 | + public String getCampaignUrl() { | ||
| 446 | + return campaignUrl; | ||
| 447 | + } | ||
| 448 | + | ||
| 449 | + public void setCampaignUrl(String campaignUrl) { | ||
| 450 | + this.campaignUrl = campaignUrl; | ||
| 451 | + } | ||
| 452 | + | ||
| 423 | @Override | 453 | @Override | 
| 424 | public int describeContents() { | 454 | public int describeContents() { | 
| 425 | return 0; | 455 | return 0; | ... | ... | 
| ... | @@ -118,6 +118,28 @@ public interface ApiService { | ... | @@ -118,6 +118,28 @@ public interface ApiService { | 
| 118 | @Header(WarpConstants.HEADER_SIGNATURE) String signature, | 118 | @Header(WarpConstants.HEADER_SIGNATURE) String signature, | 
| 119 | @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); | 119 | @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); | 
| 120 | 120 | ||
| 121 | + @Headers("Content-Type: application/json") | ||
| 122 | + @POST("/api/mobile/v2/{appUuid}/context/") | ||
| 123 | + Call<ResponseBody> getCouponsets(@Path("appUuid") String appUuid, | ||
| 124 | + @Body RequestBody request, | ||
| 125 | + @Header(WarpConstants.HEADER_DATE) String timeStamp, | ||
| 126 | + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId, | ||
| 127 | + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId, | ||
| 128 | + @Header(WarpConstants.HEADER_CHANNEL) String channel, | ||
| 129 | + @Header(WarpConstants.HEADER_WEB_ID) String webId, | ||
| 130 | + @Header(WarpConstants.HEADER_SIGNATURE) String signature); | ||
| 131 | + | ||
| 132 | + @Headers("Content-Type: application/json") | ||
| 133 | + @POST("/api/mobile/v2/{appUuid}/context/") | ||
| 134 | + Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid, | ||
| 135 | + @Body RequestBody request, | ||
| 136 | + @Header(WarpConstants.HEADER_DATE) String timeStamp, | ||
| 137 | + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId, | ||
| 138 | + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId, | ||
| 139 | + @Header(WarpConstants.HEADER_CHANNEL) String channel, | ||
| 140 | + @Header(WarpConstants.HEADER_WEB_ID) String webId, | ||
| 141 | + @Header(WarpConstants.HEADER_SIGNATURE) String signature); | ||
| 142 | + | ||
| 121 | // =========================================================== | 143 | // =========================================================== | 
| 122 | // Getter & Setter | 144 | // Getter & Setter | 
| 123 | // =========================================================== | 145 | // =========================================================== | ... | ... | 
| ... | @@ -60,6 +60,8 @@ import ly.warp.sdk.io.models.Campaign; | ... | @@ -60,6 +60,8 @@ import ly.warp.sdk.io.models.Campaign; | 
| 60 | import ly.warp.sdk.io.models.Content; | 60 | import ly.warp.sdk.io.models.Content; | 
| 61 | import ly.warp.sdk.io.models.Coupon; | 61 | import ly.warp.sdk.io.models.Coupon; | 
| 62 | import ly.warp.sdk.io.models.CouponList; | 62 | import ly.warp.sdk.io.models.CouponList; | 
| 63 | +import ly.warp.sdk.io.models.Couponset; | ||
| 64 | +import ly.warp.sdk.io.models.Merchant; | ||
| 63 | import ly.warp.sdk.io.models.NewCampaign; | 65 | import ly.warp.sdk.io.models.NewCampaign; | 
| 64 | import ly.warp.sdk.io.models.RedeemedSMHistoryModel; | 66 | import ly.warp.sdk.io.models.RedeemedSMHistoryModel; | 
| 65 | import ly.warp.sdk.io.request.WarplyRefreshTokenRequest; | 67 | import ly.warp.sdk.io.request.WarplyRefreshTokenRequest; | 
| ... | @@ -385,6 +387,192 @@ public class WarplyManager { | ... | @@ -385,6 +387,192 @@ public class WarplyManager { | 
| 385 | }, executorService); | 387 | }, executorService); | 
| 386 | } | 388 | } | 
| 387 | 389 | ||
| 390 | + public static void getCouponsets(final CallbackReceiver<ArrayList<Couponset>> receiver) { | ||
| 391 | + WarpUtils.log("************* WARPLY Couponsets Request ********************"); | ||
| 392 | + WarpUtils.log("[WARP Trace] WARPLY Couponsets Request is active"); | ||
| 393 | + WarpUtils.log("**************************************************"); | ||
| 394 | + | ||
| 395 | + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class); | ||
| 396 | + ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2)); | ||
| 397 | + | ||
| 398 | + ListenableFuture<ArrayList<Couponset>> futureCouponsets = getCouponsetsRetro(service); | ||
| 399 | + ListenableFuture<ArrayList<Merchant>> futureMerchants = getMerchantsRetro(service); | ||
| 400 | + | ||
| 401 | + ListenableFuture<List<Object>> allResultsFuture = Futures.allAsList(futureCouponsets, futureMerchants); | ||
| 402 | + ListenableFuture<ArrayList<Couponset>> mergedResultFuture = Futures.transformAsync(allResultsFuture, results -> { | ||
| 403 | + ArrayList<Couponset> resultCoupons = (ArrayList<Couponset>) results.get(0); | ||
| 404 | + return executorService.submit(() -> resultCoupons/*createCouponSetsSection(resultCoupons)*/); | ||
| 405 | + }, executorService); | ||
| 406 | + | ||
| 407 | + Futures.addCallback(mergedResultFuture, new FutureCallback<ArrayList<Couponset>>() { | ||
| 408 | + @Override | ||
| 409 | + public void onSuccess(ArrayList<Couponset> mergedResult) { | ||
| 410 | + executorService.shutdownNow(); | ||
| 411 | + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mergedResult)); | ||
| 412 | + } | ||
| 413 | + | ||
| 414 | + @Override | ||
| 415 | + public void onFailure(Throwable throwable) { | ||
| 416 | + executorService.shutdownNow(); | ||
| 417 | + new Handler(Looper.getMainLooper()).post(() -> receiver.onFailure(2)); | ||
| 418 | + } | ||
| 419 | + }, executorService); | ||
| 420 | + } | ||
| 421 | + | ||
| 422 | + private static ListenableFuture<ArrayList<Couponset>> getCouponsetsRetro(ApiService service/*, Callback<ResponseBody> callback*/) { | ||
| 423 | + SettableFuture<ArrayList<Couponset>> future = SettableFuture.create(); | ||
| 424 | + | ||
| 425 | + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | ||
| 426 | + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ||
| 427 | + String webId = WarpUtils.getWebId(Warply.getWarplyContext()); | ||
| 428 | + | ||
| 429 | + Map<String, Object> jsonParamsCouponsets = new ArrayMap<>(); | ||
| 430 | + Map<String, Object> jsonParams = new ArrayMap<>(); | ||
| 431 | + jsonParams.put("action", "retrieve_multilingual"); | ||
| 432 | + jsonParams.put("active", true); | ||
| 433 | + jsonParams.put("visible", true); | ||
| 434 | + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext())); | ||
| 435 | + jsonParamsCouponsets.put("coupon", jsonParams); | ||
| 436 | + | ||
| 437 | + RequestBody couponsetsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCouponsets)).toString()); | ||
| 438 | + Call<ResponseBody> couponsetsCall = service.getCouponsets( | ||
| 439 | + WarplyProperty.getAppUuid(Warply.getWarplyContext()), | ||
| 440 | + couponsetsRequest, | ||
| 441 | + timeStamp, | ||
| 442 | + "android:" + Warply.getWarplyContext().getPackageName(), | ||
| 443 | + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), | ||
| 444 | + "mobile", | ||
| 445 | + webId, | ||
| 446 | + WarpUtils.produceSignature(apiKey + timeStamp) | ||
| 447 | + ); | ||
| 448 | + couponsetsCall.enqueue(new Callback<ResponseBody>() { | ||
| 449 | + @Override | ||
| 450 | + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { | ||
| 451 | + if (response.code() == 200 && response.body() != null) { | ||
| 452 | + JSONObject jobjCouponsetsResponse = null; | ||
| 453 | + try { | ||
| 454 | + jobjCouponsetsResponse = new JSONObject(response.body().string()); | ||
| 455 | + } catch (Exception e) { | ||
| 456 | + e.printStackTrace(); | ||
| 457 | + } | ||
| 458 | + if (jobjCouponsetsResponse != null && jobjCouponsetsResponse.has("status") && jobjCouponsetsResponse.optString("status", "2").equals("1")) { | ||
| 459 | + JSONArray jCouponsetsBody = null; | ||
| 460 | + try { | ||
| 461 | + jCouponsetsBody = jobjCouponsetsResponse.optJSONObject("context").optJSONArray("MAPP_COUPON"); | ||
| 462 | + } catch (Exception e) { | ||
| 463 | + e.printStackTrace(); | ||
| 464 | + } | ||
| 465 | + | ||
| 466 | + if (jCouponsetsBody != null) { | ||
| 467 | + ArrayList<Couponset> mCouponsetList = new ArrayList<Couponset>(); | ||
| 468 | + final ExecutorService executorCouponsets = Executors.newFixedThreadPool(1); | ||
| 469 | + JSONArray finalJCouponsetsBody = jCouponsetsBody; | ||
| 470 | + executorCouponsets.submit(() -> { | ||
| 471 | + for (int i = 0; i < finalJCouponsetsBody.length(); ++i) { | ||
| 472 | + Couponset tempCouponset = new Couponset(finalJCouponsetsBody.optJSONObject(i)); | ||
| 473 | + mCouponsetList.add(tempCouponset); | ||
| 474 | + } | ||
| 475 | + | ||
| 476 | + executorCouponsets.shutdownNow(); | ||
| 477 | + future.set(mCouponsetList); | ||
| 478 | + }); | ||
| 479 | + } | ||
| 480 | + } else { | ||
| 481 | + future.set(new ArrayList<Couponset>()); | ||
| 482 | + } | ||
| 483 | + } else if (String.valueOf(response.code()).startsWith("5")) { | ||
| 484 | + future.set(new ArrayList<Couponset>()); | ||
| 485 | + } else { | ||
| 486 | +// future.set(new CouponsetsList()); | ||
| 487 | + future.setException(new Throwable()); | ||
| 488 | + } | ||
| 489 | + } | ||
| 490 | + | ||
| 491 | + @Override | ||
| 492 | + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { | ||
| 493 | +// future.set(new CouponsetsList()); | ||
| 494 | + future.setException(new Throwable()); | ||
| 495 | + } | ||
| 496 | + }); | ||
| 497 | + return future; | ||
| 498 | + } | ||
| 499 | + | ||
| 500 | + private static ListenableFuture<ArrayList<Merchant>> getMerchantsRetro(ApiService service/*, Callback<ResponseBody> callback*/) { | ||
| 501 | + SettableFuture<ArrayList<Merchant>> future = SettableFuture.create(); | ||
| 502 | + | ||
| 503 | + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | ||
| 504 | + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ||
| 505 | + String webId = WarpUtils.getWebId(Warply.getWarplyContext()); | ||
| 506 | + | ||
| 507 | + Map<String, Object> jsonParamsMerchants = new ArrayMap<>(); | ||
| 508 | + Map<String, Object> jsonParams = new ArrayMap<>(); | ||
| 509 | + jsonParams.put("action", "retrieve_multilingual"); | ||
| 510 | + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext())); | ||
| 511 | + jsonParamsMerchants.put("shops", jsonParams); | ||
| 512 | + | ||
| 513 | + RequestBody couponsetsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsMerchants)).toString()); | ||
| 514 | + Call<ResponseBody> merchantsCall = service.getMerchants( | ||
| 515 | + WarplyProperty.getAppUuid(Warply.getWarplyContext()), | ||
| 516 | + couponsetsRequest, | ||
| 517 | + timeStamp, | ||
| 518 | + "android:" + Warply.getWarplyContext().getPackageName(), | ||
| 519 | + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), | ||
| 520 | + "mobile", | ||
| 521 | + webId, | ||
| 522 | + WarpUtils.produceSignature(apiKey + timeStamp) | ||
| 523 | + ); | ||
| 524 | + merchantsCall.enqueue(new Callback<ResponseBody>() { | ||
| 525 | + @Override | ||
| 526 | + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { | ||
| 527 | + if (response.code() == 200 && response.body() != null) { | ||
| 528 | + JSONObject jobjMerchantsResponse = null; | ||
| 529 | + try { | ||
| 530 | + jobjMerchantsResponse = new JSONObject(response.body().string()); | ||
| 531 | + } catch (Exception e) { | ||
| 532 | + e.printStackTrace(); | ||
| 533 | + } | ||
| 534 | + if (jobjMerchantsResponse != null && jobjMerchantsResponse.has("status") && jobjMerchantsResponse.optString("status", "2").equals("1")) { | ||
| 535 | + JSONArray jMerchantsBody = null; | ||
| 536 | + try { | ||
| 537 | + jMerchantsBody = jobjMerchantsResponse.optJSONObject("context").optJSONObject("MAPP_SHOPS").optJSONArray("result"); | ||
| 538 | + } catch (Exception e) { | ||
| 539 | + e.printStackTrace(); | ||
| 540 | + } | ||
| 541 | + | ||
| 542 | + if (jMerchantsBody != null) { | ||
| 543 | + ArrayList<Merchant> mMerchantList = new ArrayList<Merchant>(); | ||
| 544 | + final ExecutorService executorCouponsets = Executors.newFixedThreadPool(1); | ||
| 545 | + JSONArray finalJMerchantsBody = jMerchantsBody; | ||
| 546 | + executorCouponsets.submit(() -> { | ||
| 547 | + for (int i = 0; i < finalJMerchantsBody.length(); ++i) { | ||
| 548 | + Merchant tempCouponset = new Merchant(finalJMerchantsBody.optJSONObject(i)); | ||
| 549 | + mMerchantList.add(tempCouponset); | ||
| 550 | + } | ||
| 551 | + | ||
| 552 | + executorCouponsets.shutdownNow(); | ||
| 553 | + future.set(mMerchantList); | ||
| 554 | + }); | ||
| 555 | + } | ||
| 556 | + } else { | ||
| 557 | + future.set(new ArrayList<Merchant>()); | ||
| 558 | + } | ||
| 559 | + } else if (String.valueOf(response.code()).startsWith("5")) { | ||
| 560 | + future.set(new ArrayList<Merchant>()); | ||
| 561 | + } else { | ||
| 562 | +// future.set(new CouponsetsList()); | ||
| 563 | + future.setException(new Throwable()); | ||
| 564 | + } | ||
| 565 | + } | ||
| 566 | + | ||
| 567 | + @Override | ||
| 568 | + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { | ||
| 569 | +// future.set(new CouponsetsList()); | ||
| 570 | + future.setException(new Throwable()); | ||
| 571 | + } | ||
| 572 | + }); | ||
| 573 | + return future; | ||
| 574 | + } | ||
| 575 | + | ||
| 388 | private static ArrayList<BannerItem> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns, ArrayList<Content> resultArticles) { | 576 | private static ArrayList<BannerItem> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns, ArrayList<Content> resultArticles) { | 
| 389 | ArrayList<BannerItem> allItems = new ArrayList<>(); | 577 | ArrayList<BannerItem> allItems = new ArrayList<>(); | 
| 390 | 578 | ||
| ... | @@ -503,8 +691,8 @@ public class WarplyManager { | ... | @@ -503,8 +691,8 @@ public class WarplyManager { | 
| 503 | Campaign camp = new Campaign(); | 691 | Campaign camp = new Campaign(); | 
| 504 | NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i)); | 692 | NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i)); | 
| 505 | 693 | ||
| 506 | - camp.setIndexUrl(tempNewCampaign.getIndexUrl()); | 694 | + camp.setIndexUrl(tempNewCampaign.getCampaignUrl()); | 
| 507 | - camp.setLogoUrl(tempNewCampaign.getLogoUrl()); | 695 | + camp.setLogoUrl(tempNewCampaign.getBannerImageMobile()); | 
| 508 | camp.setMessage(tempNewCampaign.getMessage()); | 696 | camp.setMessage(tempNewCampaign.getMessage()); | 
| 509 | camp.setOfferCategory(tempNewCampaign.getCommunicationCategory()); | 697 | camp.setOfferCategory(tempNewCampaign.getCommunicationCategory()); | 
| 510 | camp.setSessionUUID(tempNewCampaign.getCommunicationUUID()); | 698 | camp.setSessionUUID(tempNewCampaign.getCommunicationUUID()); | 
| ... | @@ -598,8 +786,8 @@ public class WarplyManager { | ... | @@ -598,8 +786,8 @@ public class WarplyManager { | 
| 598 | Campaign camp = new Campaign(); | 786 | Campaign camp = new Campaign(); | 
| 599 | NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i)); | 787 | NewCampaign tempNewCampaign = new NewCampaign(finalCampaignsJBody.optJSONObject(i)); | 
| 600 | 788 | ||
| 601 | - camp.setIndexUrl(tempNewCampaign.getIndexUrl()); | 789 | + camp.setIndexUrl(tempNewCampaign.getCampaignUrl()); | 
| 602 | - camp.setLogoUrl(tempNewCampaign.getLogoUrl()); | 790 | + camp.setLogoUrl(tempNewCampaign.getBannerImageMobile()); | 
| 603 | camp.setMessage(tempNewCampaign.getMessage()); | 791 | camp.setMessage(tempNewCampaign.getMessage()); | 
| 604 | camp.setOfferCategory(tempNewCampaign.getCommunicationCategory()); | 792 | camp.setOfferCategory(tempNewCampaign.getCommunicationCategory()); | 
| 605 | camp.setSessionUUID(tempNewCampaign.getCommunicationUUID()); | 793 | camp.setSessionUUID(tempNewCampaign.getCommunicationUUID()); | ... | ... | 
- 
Please register or login to post a comment
