Panagiotis Triantafyllou

optimize campaigns, new campaign keys

...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
3 # The app uuid the warply sdk need to connect to the engage server 3 # The app uuid the warply sdk need to connect to the engage server
4 # dev f83dfde1145e4c2da69793abb2f579af 4 # dev f83dfde1145e4c2da69793abb2f579af
5 # prod 0086a2088301440792091b9f814c2267 5 # prod 0086a2088301440792091b9f814c2267
6 -Uuid=0086a2088301440792091b9f814c2267 6 +Uuid=f83dfde1145e4c2da69793abb2f579af
7 7
8 # If we need to see logs in Logcat 8 # If we need to see logs in Logcat
9 -Debug=false 9 +Debug=true
10 10
11 # Production or Development environment of the engage server 11 # Production or Development environment of the engage server
12 # Production: https://engage.warp.ly 12 # Production: https://engage.warp.ly
13 # Development: https://engage-stage.warp.ly 13 # Development: https://engage-stage.warp.ly
14 -BaseURL=https://engage.warp.ly 14 +BaseURL=https://engage-stage.warp.ly
15 15
16 # For Verify Ticket request 16 # For Verify Ticket request
17 VerifyURL=/partners/cosmote/verify 17 VerifyURL=/partners/cosmote/verify
...@@ -39,7 +39,7 @@ PushIcon=ic_notify ...@@ -39,7 +39,7 @@ PushIcon=ic_notify
39 SendPackages=false 39 SendPackages=false
40 40
41 # The app language 41 # The app language
42 -Language=el 42 +Language=en
43 43
44 # The merchant id for some requests 44 # The merchant id for some requests
45 MerchantId=20113 45 MerchantId=20113
......
...@@ -36,7 +36,7 @@ public class SplashActivity extends BaseActivity { ...@@ -36,7 +36,7 @@ public class SplashActivity extends BaseActivity {
36 public void onWarplyReady() { 36 public void onWarplyReady() {
37 if (!WarplyDBHelper.getInstance(SplashActivity.this).isTableNotEmpty("auth")) { 37 if (!WarplyDBHelper.getInstance(SplashActivity.this).isTableNotEmpty("auth")) {
38 WarplyManager.getCosmoteUser(new WarplyCosmoteUserRequest() 38 WarplyManager.getCosmoteUser(new WarplyCosmoteUserRequest()
39 - .setGuid("6010490808"), //6012049321, 6012049322, 6012049323, 7000000831 history, 7000000826, 7000000831 shared coupons, prod 6006552990, prod 6005892749, live 3000184910,prod 7000070282 39 + .setGuid("7000000831"), //6012049321, 6012049322, 6012049323, 7000000831 history, 7000000826, 7000000831 shared coupons, prod 6006552990, prod 6005892749, live 3000184910,prod 7000070282
40 mLoginReceiver); 40 mLoginReceiver);
41 } else { 41 } else {
42 startNextActivity(); 42 startNextActivity();
......
...@@ -65,6 +65,7 @@ dependencies { ...@@ -65,6 +65,7 @@ dependencies {
65 api 'com.github.siyamed:android-shape-imageview:0.9.3' 65 api 'com.github.siyamed:android-shape-imageview:0.9.3'
66 implementation 'org.greenrobot:eventbus:3.3.1' 66 implementation 'org.greenrobot:eventbus:3.3.1'
67 api 'org.apmem.tools:layouts:1.10' 67 api 'org.apmem.tools:layouts:1.10'
68 + api 'com.google.guava:guava:30.1-android'
68 69
69 //------------------------------ Firebase -----------------------------// 70 //------------------------------ Firebase -----------------------------//
70 api platform('com.google.firebase:firebase-bom:29.0.3') 71 api platform('com.google.firebase:firebase-bom:29.0.3')
......
...@@ -50,9 +50,8 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation ...@@ -50,9 +50,8 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation
50 50
51 mBottomNavigationView = findViewById(R.id.bt_tabs); 51 mBottomNavigationView = findViewById(R.id.bt_tabs);
52 52
53 -// WarplyManager.getUserCouponsWithCouponsets(new WarplyUserCouponsRequest(), mUserCouponsReceiver);
54 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver); 53 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver);
55 - WarplyManager.getCampaigns(new WarplyGetCampaignsRequest().setLanguage("en"), mCampaignsCallback); 54 + WarplyManager.getCampaigns(mCampaignsCallback);
56 WarplyManager.getUnifiedCouponsDeals(mUnifiedCallback); 55 WarplyManager.getUnifiedCouponsDeals(mUnifiedCallback);
57 } 56 }
58 57
...@@ -123,7 +122,7 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation ...@@ -123,7 +122,7 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation
123 private final CallbackReceiver<ArrayList<Campaign>> mCampaignsCallback = new CallbackReceiver<ArrayList<Campaign>>() { 122 private final CallbackReceiver<ArrayList<Campaign>> mCampaignsCallback = new CallbackReceiver<ArrayList<Campaign>>() {
124 @Override 123 @Override
125 public void onSuccess(ArrayList<Campaign> result) { 124 public void onSuccess(ArrayList<Campaign> result) {
126 - Toast.makeText(BaseFragmentActivity.this, "Campaigns Success", Toast.LENGTH_SHORT).show(); 125 + Toast.makeText(BaseFragmentActivity.this, "Campaigns Success " + String.valueOf(result.size()), Toast.LENGTH_SHORT).show();
127 } 126 }
128 127
129 @Override 128 @Override
......
...@@ -74,6 +74,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -74,6 +74,8 @@ public class Campaign implements Parcelable, Serializable {
74 private static final String CAMPAIGN_TYPE_SETTINGS = "campaign_type_settings"; 74 private static final String CAMPAIGN_TYPE_SETTINGS = "campaign_type_settings";
75 private static final String BANNER_IMAGE = "Banner_img"; 75 private static final String BANNER_IMAGE = "Banner_img";
76 private static final String BANNER_TITLE = "Banner_title"; 76 private static final String BANNER_TITLE = "Banner_title";
77 + private static final String CATEGORY_ID = "category_id";
78 + private static final String COUPON_AVAILABILITY = "coupon_availability";
77 79
78 /* Member variables of the Campaign object */ 80 /* Member variables of the Campaign object */
79 81
...@@ -103,7 +105,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -103,7 +105,8 @@ public class Campaign implements Parcelable, Serializable {
103 private String campaignTypeSettings; 105 private String campaignTypeSettings;
104 private String bannerImage; 106 private String bannerImage;
105 private String bannerTitle; 107 private String bannerTitle;
106 - private UnifiedCampaignModel unifiedCampaign; 108 + private String categoryId;
109 + private Integer couponAvailability;
107 110
108 /** 111 /**
109 * Basic constructor used to create an object from a String, representing a 112 * Basic constructor used to create an object from a String, representing a
...@@ -143,7 +146,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -143,7 +146,8 @@ public class Campaign implements Parcelable, Serializable {
143 this.campaignTypeSettings = ""; 146 this.campaignTypeSettings = "";
144 this.bannerImage = ""; 147 this.bannerImage = "";
145 this.bannerTitle = ""; 148 this.bannerTitle = "";
146 - this.unifiedCampaign = new UnifiedCampaignModel(); 149 + this.couponAvailability = null;
150 + this.categoryId = "";
147 } 151 }
148 152
149 /** 153 /**
...@@ -204,6 +208,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -204,6 +208,8 @@ public class Campaign implements Parcelable, Serializable {
204 } else { 208 } else {
205 this.actions = null; 209 this.actions = null;
206 } 210 }
211 + this.categoryId = json.optString(CATEGORY_ID);
212 + this.couponAvailability = json.optInt(COUPON_AVAILABILITY);
207 } 213 }
208 214
209 public Campaign(Parcel source) { 215 public Campaign(Parcel source) {
...@@ -231,6 +237,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -231,6 +237,8 @@ public class Campaign implements Parcelable, Serializable {
231 this.actions = source.readArrayList(CampaignAction.class.getClassLoader()); 237 this.actions = source.readArrayList(CampaignAction.class.getClassLoader());
232 this.busId = source.readString(); 238 this.busId = source.readString();
233 this.campaignTypeSettings = source.readString(); 239 this.campaignTypeSettings = source.readString();
240 + this.categoryId = source.readString();
241 + this.couponAvailability = source.readInt();
234 } 242 }
235 243
236 @Override 244 @Override
...@@ -259,6 +267,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -259,6 +267,8 @@ public class Campaign implements Parcelable, Serializable {
259 dest.writeList(this.actions); 267 dest.writeList(this.actions);
260 dest.writeString(this.busId); 268 dest.writeString(this.busId);
261 dest.writeString(this.campaignTypeSettings); 269 dest.writeString(this.campaignTypeSettings);
270 + dest.writeInt(this.couponAvailability);
271 + dest.writeString(this.categoryId);
262 } 272 }
263 273
264 /** 274 /**
...@@ -293,6 +303,8 @@ public class Campaign implements Parcelable, Serializable { ...@@ -293,6 +303,8 @@ public class Campaign implements Parcelable, Serializable {
293 jObj.putOpt(DISPLAY_TYPE, this.displayType); 303 jObj.putOpt(DISPLAY_TYPE, this.displayType);
294 jObj.put(BUS_ID, this.busId); 304 jObj.put(BUS_ID, this.busId);
295 jObj.put(CAMPAIGN_TYPE_SETTINGS, this.campaignTypeSettings); 305 jObj.put(CAMPAIGN_TYPE_SETTINGS, this.campaignTypeSettings);
306 + jObj.putOpt(COUPON_AVAILABILITY, this.couponAvailability);
307 + jObj.putOpt(CATEGORY_ID, this.categoryId);
296 } catch (JSONException e) { 308 } catch (JSONException e) {
297 if (WarpConstants.DEBUG) { 309 if (WarpConstants.DEBUG) {
298 e.printStackTrace(); 310 e.printStackTrace();
...@@ -366,6 +378,23 @@ public class Campaign implements Parcelable, Serializable { ...@@ -366,6 +378,23 @@ public class Campaign implements Parcelable, Serializable {
366 // Getters 378 // Getters
367 // ================================================================================ 379 // ================================================================================
368 380
381 +
382 + public String getCategoryId() {
383 + return categoryId;
384 + }
385 +
386 + public void setCategoryId(String categoryId) {
387 + this.categoryId = categoryId;
388 + }
389 +
390 + public Integer getCouponAvailability() {
391 + return couponAvailability;
392 + }
393 +
394 + public void setCouponAvailability(Integer couponAvailability) {
395 + this.couponAvailability = couponAvailability;
396 + }
397 +
369 /** 398 /**
370 * @return The loyalty action of the Campaign, used if custom actions are 399 * @return The loyalty action of the Campaign, used if custom actions are
371 * implemented 400 * implemented
...@@ -630,14 +659,6 @@ public class Campaign implements Parcelable, Serializable { ...@@ -630,14 +659,6 @@ public class Campaign implements Parcelable, Serializable {
630 this.bannerTitle = bannerTitle; 659 this.bannerTitle = bannerTitle;
631 } 660 }
632 661
633 - public UnifiedCampaignModel getUnifiedCampaign() {
634 - return unifiedCampaign;
635 - }
636 -
637 - public void setUnifiedCampaign(UnifiedCampaignModel unifiedCampaign) {
638 - this.unifiedCampaign = unifiedCampaign;
639 - }
640 -
641 @Override 662 @Override
642 public int describeContents() { 663 public int describeContents() {
643 return 0; 664 return 0;
......
...@@ -79,6 +79,21 @@ public class NewCampaignList extends ArrayList<NewCampaign> { ...@@ -79,6 +79,21 @@ public class NewCampaignList extends ArrayList<NewCampaign> {
79 } 79 }
80 } 80 }
81 81
82 + public NewCampaignList(JSONObject campaignListJSONObject) {
83 + campaignListJSONObject = campaignListJSONObject.optJSONObject(JSON_KEY_CONTEXT);
84 + if (campaignListJSONObject == null)
85 + return;
86 + JSONObject jsonObject = campaignListJSONObject.optJSONObject(JSON_KEY_MAPP);
87 + if(jsonObject == null)
88 + return;;
89 + JSONArray jArray = jsonObject.optJSONArray(JSON_KEY_MAPP_VALUE);
90 + if (jArray != null) {
91 + for (int i = 0, lim = jArray.length(); i < lim; ++i) {
92 + add(new NewCampaign(jArray.optJSONObject(i)));
93 + }
94 + }
95 + }
96 +
82 @NonNull 97 @NonNull
83 public String getRequestSignature() { 98 public String getRequestSignature() {
84 return mRequestSignature; 99 return mRequestSignature;
......
...@@ -89,6 +89,29 @@ public interface ApiService { ...@@ -89,6 +89,29 @@ public interface ApiService {
89 @Header(WarpConstants.HEADER_SIGNATURE) String signature); 89 @Header(WarpConstants.HEADER_SIGNATURE) String signature);
90 90
91 @Headers("Content-Type: application/json") 91 @Headers("Content-Type: application/json")
92 + @POST("/api/mobile/v2/{appUuid}/context/")
93 + Call<ResponseBody> getCampaigns(@Path("appUuid") String appUuid,
94 + @Body RequestBody request,
95 + @Header(WarpConstants.HEADER_DATE) String timeStamp,
96 + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
97 + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
98 + @Header(WarpConstants.HEADER_CHANNEL) String channel,
99 + @Header(WarpConstants.HEADER_WEB_ID) String webId,
100 + @Header(WarpConstants.HEADER_SIGNATURE) String signature);
101 +
102 + @Headers("Content-Type: application/json")
103 + @POST("/oauth/{appUuid}/context")
104 + Call<ResponseBody> getCampaignsPersonalized(@Path("appUuid") String appUuid,
105 + @Body RequestBody request,
106 + @Header(WarpConstants.HEADER_DATE) String timeStamp,
107 + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
108 + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
109 + @Header(WarpConstants.HEADER_CHANNEL) String channel,
110 + @Header(WarpConstants.HEADER_WEB_ID) String webId,
111 + @Header(WarpConstants.HEADER_SIGNATURE) String signature,
112 + @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
113 +
114 + @Headers("Content-Type: application/json")
92 @POST("/oauth/{appUuid}/context") 115 @POST("/oauth/{appUuid}/context")
93 Call<ResponseBody> sendTelematicsData(@Path("appUuid") String appUuid, 116 Call<ResponseBody> sendTelematicsData(@Path("appUuid") String appUuid,
94 @Body RequestBody request, 117 @Body RequestBody request,
......
...@@ -34,6 +34,7 @@ import android.os.Build; ...@@ -34,6 +34,7 @@ import android.os.Build;
34 import android.os.Handler; 34 import android.os.Handler;
35 import android.os.Looper; 35 import android.os.Looper;
36 import android.os.SystemClock; 36 import android.os.SystemClock;
37 +import android.text.TextUtils;
37 import android.text.format.DateFormat; 38 import android.text.format.DateFormat;
38 import android.util.ArrayMap; 39 import android.util.ArrayMap;
39 40
...@@ -41,6 +42,13 @@ import androidx.annotation.NonNull; ...@@ -41,6 +42,13 @@ import androidx.annotation.NonNull;
41 import androidx.work.OneTimeWorkRequest; 42 import androidx.work.OneTimeWorkRequest;
42 import androidx.work.WorkManager; 43 import androidx.work.WorkManager;
43 44
45 +import com.google.common.util.concurrent.FutureCallback;
46 +import com.google.common.util.concurrent.Futures;
47 +import com.google.common.util.concurrent.ListenableFuture;
48 +import com.google.common.util.concurrent.ListeningExecutorService;
49 +import com.google.common.util.concurrent.MoreExecutors;
50 +import com.google.common.util.concurrent.SettableFuture;
51 +
44 import org.greenrobot.eventbus.EventBus; 52 import org.greenrobot.eventbus.EventBus;
45 import org.json.JSONArray; 53 import org.json.JSONArray;
46 import org.json.JSONException; 54 import org.json.JSONException;
...@@ -52,6 +60,7 @@ import java.util.ArrayList; ...@@ -52,6 +60,7 @@ import java.util.ArrayList;
52 import java.util.Collections; 60 import java.util.Collections;
53 import java.util.Date; 61 import java.util.Date;
54 import java.util.LinkedHashSet; 62 import java.util.LinkedHashSet;
63 +import java.util.List;
55 import java.util.Map; 64 import java.util.Map;
56 import java.util.Set; 65 import java.util.Set;
57 import java.util.concurrent.ExecutorService; 66 import java.util.concurrent.ExecutorService;
...@@ -90,6 +99,7 @@ import ly.warp.sdk.io.models.LoyaltySDKDynatraceEventModel; ...@@ -90,6 +99,7 @@ import ly.warp.sdk.io.models.LoyaltySDKDynatraceEventModel;
90 import ly.warp.sdk.io.models.Merchant; 99 import ly.warp.sdk.io.models.Merchant;
91 import ly.warp.sdk.io.models.MerchantCategoriesList; 100 import ly.warp.sdk.io.models.MerchantCategoriesList;
92 import ly.warp.sdk.io.models.MerchantList; 101 import ly.warp.sdk.io.models.MerchantList;
102 +import ly.warp.sdk.io.models.NewCampaign;
93 import ly.warp.sdk.io.models.PacingDetails; 103 import ly.warp.sdk.io.models.PacingDetails;
94 import ly.warp.sdk.io.models.PointsList; 104 import ly.warp.sdk.io.models.PointsList;
95 import ly.warp.sdk.io.models.ProductList; 105 import ly.warp.sdk.io.models.ProductList;
...@@ -150,7 +160,6 @@ import ly.warp.sdk.io.request.WarplyVerifyTicketRequest; ...@@ -150,7 +160,6 @@ import ly.warp.sdk.io.request.WarplyVerifyTicketRequest;
150 import ly.warp.sdk.io.volley.ApiClient; 160 import ly.warp.sdk.io.volley.ApiClient;
151 import ly.warp.sdk.io.volley.ApiService; 161 import ly.warp.sdk.io.volley.ApiService;
152 import ly.warp.sdk.services.EventCampaignService; 162 import ly.warp.sdk.services.EventCampaignService;
153 -import ly.warp.sdk.services.EventCouponsService;
154 import ly.warp.sdk.services.EventUnifiedCouponsService; 163 import ly.warp.sdk.services.EventUnifiedCouponsService;
155 import ly.warp.sdk.services.WarplyHealthService; 164 import ly.warp.sdk.services.WarplyHealthService;
156 import ly.warp.sdk.utils.WarpJSONParser; 165 import ly.warp.sdk.utils.WarpJSONParser;
...@@ -1519,23 +1528,148 @@ public class WarplyManager { ...@@ -1519,23 +1528,148 @@ public class WarplyManager {
1519 } 1528 }
1520 } 1529 }
1521 1530
1522 - if (camp.getOfferCategory().equals("questionnaire")) { 1531 + try {
1523 -// if (WarplyManagerHelper.getConsumerInternal() != null) { 1532 + JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields());
1524 -// JSONObject profMetadata = WarpJSONParser.getJSONFromString(WarplyManagerHelper.getConsumerInternal().getProfileMetadata()); 1533 + if (extraFields != null) {
1525 -// if (profMetadata != null) { 1534 + if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) {
1526 -// if (!profMetadata.has("answered")) { 1535 + campaignLoyaltyList.add(camp);
1527 -// try { 1536 + }
1528 -// JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields()); 1537 + }
1529 -// if (extraFields != null) { 1538 + } catch (Exception exception) {
1530 -// if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) { 1539 + campaignLoyaltyList.add(camp);
1531 -// campaignLoyaltyList.add(camp); 1540 + }
1532 -// } 1541 + }
1533 -// } 1542 + WarplyManagerHelper.setCarouselList(campaignCarouselList);
1534 -// } catch (Exception exception) { 1543 +
1535 -// campaignLoyaltyList.add(camp); 1544 + Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList);
1545 + campaignLoyaltyList.clear();
1546 + campaignLoyaltyList.addAll(set);
1547 + receiver.onSuccess(campaignLoyaltyList); //resultPersonalized
1548 + }
1549 +
1550 + @Override
1551 + public void onFailure(int errorCode) {
1552 + receiver.onFailure(errorCode);
1553 + }
1554 + });
1555 + }
1556 +
1557 + @Override
1558 + public void onFailure(int errorCode) {
1559 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1560 + dynatraceEvent.setEventName("custom_error_campaigns_loyalty");
1561 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1562 + receiver.onFailure(errorCode);
1563 + }
1564 + },
1565 + request.getSignature()));
1566 + }
1567 +
1568 + private static ArrayList<Campaign> mergeCampaignResults(ArrayList<Campaign> resultCampaigns, ArrayList<Campaign> resultPersonalizedCampaigns) {
1569 + ArrayList<Campaign> newCampaignList = new ArrayList<Campaign>();
1570 + ArrayList<Campaign> campaignLoyaltyList = new ArrayList<>();
1571 + newCampaignList.clear();
1572 + if (resultCampaigns != null && resultCampaigns.size() > 0)
1573 + newCampaignList.addAll(resultCampaigns);
1574 + if (resultPersonalizedCampaigns != null && resultPersonalizedCampaigns.size() > 0)
1575 + newCampaignList.addAll(resultPersonalizedCampaigns);
1576 +
1577 + if (newCampaignList != null && newCampaignList.size() > 0) {
1578 + Collections.sort(newCampaignList, (obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
1579 + WarplyManagerHelper.setCampaignList(newCampaignList);
1580 + campaignLoyaltyList.clear();
1581 + ArrayList<Campaign> campaignCarouselList = new ArrayList<>();
1582 + campaignCarouselList.clear();
1583 + for (Campaign camp : newCampaignList) {
1584 + JSONObject campMetadata = WarpJSONParser.getJSONFromString(camp.getExtraFields());
1585 + if (campMetadata != null) {
1586 + if (campMetadata.has("carousel")) {
1587 + campaignCarouselList.add(camp);
1588 + }
1589 + }
1590 +
1591 + try {
1592 + JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields());
1593 + if (extraFields != null) {
1594 + if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) {
1595 + campaignLoyaltyList.add(camp);
1596 + }
1597 + }
1598 + } catch (Exception exception) {
1599 + campaignLoyaltyList.add(camp);
1600 + }
1601 + }
1602 + WarplyManagerHelper.setCarouselList(campaignCarouselList);
1603 +
1604 + Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList);
1605 + campaignLoyaltyList.clear();
1606 + campaignLoyaltyList.addAll(set);
1607 + }
1608 +
1609 + return campaignLoyaltyList;
1610 + }
1611 +
1612 + public static void getCampaigns(final CallbackReceiver<ArrayList<Campaign>> receiver) {
1613 + WarpUtils.log("************* WARPLY Get Campaigns Request ********************");
1614 + WarpUtils.log("[WARP Trace] WARPLY Get Campaigns Request is active");
1615 + WarpUtils.log("**************************************************");
1616 +
1617 + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
1618 + ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2));
1619 +
1620 + ListenableFuture<ArrayList<Campaign>> futureCampaigns = getCampaignsRetro(service);
1621 + ListenableFuture<ArrayList<Campaign>> futurePersonalizedCampaigns = getCampaignsPersonalizedRetro(service);
1622 +
1623 + ListenableFuture<List<ArrayList<Campaign>>> allResultsFuture = Futures.allAsList(futureCampaigns, futurePersonalizedCampaigns);
1624 + ListenableFuture<ArrayList<Campaign>> mergedResultFuture = Futures.transformAsync(
1625 + allResultsFuture,
1626 + results -> {
1627 + ArrayList<Campaign> resultCampaigns = results.get(0);
1628 + ArrayList<Campaign> resultPersonalizedCampaigns = results.get(1);
1629 + return executorService.submit(() -> mergeCampaignResults(resultCampaigns, resultPersonalizedCampaigns));
1630 + },
1631 + executorService
1632 + );
1633 +
1634 + Futures.addCallback(mergedResultFuture, new FutureCallback<ArrayList<Campaign>>() {
1635 + @Override
1636 + public void onSuccess(ArrayList<Campaign> mergedResult) {
1637 + executorService.shutdownNow();
1638 + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mergedResult));
1639 + }
1640 +
1641 + @Override
1642 + public void onFailure(Throwable throwable) {
1643 + receiver.onFailure(2);
1644 + }
1645 + }, executorService);
1646 +
1647 +// getCampaignsRetro(service, new CallbackReceiver<ArrayList<Campaign>>() {
1648 +// @Override
1649 +// public void onSuccess(ArrayList<Campaign> result) {
1650 +// getCampaignsPersonalizedRetro(service, new CallbackReceiver<ArrayList<Campaign>>() {
1651 +// @Override
1652 +// public void onSuccess(ArrayList<Campaign> resultPersonalized) {
1653 +// final ExecutorService executorShops = Executors.newFixedThreadPool(1);
1654 +// executorShops.submit(() -> {
1655 +// ArrayList<Campaign> newCampaignList = new ArrayList<Campaign>();
1656 +// newCampaignList.clear();
1657 +// newCampaignList.addAll(result);
1658 +// newCampaignList.addAll(resultPersonalized);
1659 +// Collections.sort(newCampaignList, (obj1, obj2) -> Integer.compare(obj1.getSorting(), obj2.getSorting()));
1660 +// WarplyManagerHelper.setCampaignList(newCampaignList);
1661 +// ArrayList<Campaign> campaignLoyaltyList = new ArrayList<>();
1662 +// campaignLoyaltyList.clear();
1663 +// ArrayList<Campaign> campaignCarouselList = new ArrayList<>();
1664 +// campaignCarouselList.clear();
1665 +// for (Campaign camp : newCampaignList) {
1666 +// JSONObject campMetadata = WarpJSONParser.getJSONFromString(camp.getExtraFields());
1667 +// if (campMetadata != null) {
1668 +// if (campMetadata.has("carousel")) {
1669 +// campaignCarouselList.add(camp);
1536 // } 1670 // }
1537 // } 1671 // }
1538 -// } else { 1672 +//
1539 // try { 1673 // try {
1540 // JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields()); 1674 // JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields());
1541 // if (extraFields != null) { 1675 // if (extraFields != null) {
...@@ -1547,55 +1681,323 @@ public class WarplyManager { ...@@ -1547,55 +1681,323 @@ public class WarplyManager {
1547 // campaignLoyaltyList.add(camp); 1681 // campaignLoyaltyList.add(camp);
1548 // } 1682 // }
1549 // } 1683 // }
1550 -// } else { 1684 +// WarplyManagerHelper.setCarouselList(campaignCarouselList);
1551 -// try { 1685 +//
1552 -// JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields()); 1686 +// Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList);
1553 -// if (extraFields != null) { 1687 +// campaignLoyaltyList.clear();
1554 -// if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) { 1688 +// campaignLoyaltyList.addAll(set);
1555 -// campaignLoyaltyList.add(camp); 1689 +// executorShops.shutdownNow();
1690 +// new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(campaignLoyaltyList));//resultPersonalized
1691 +// });
1556 // } 1692 // }
1693 +//
1694 +// @Override
1695 +// public void onFailure(int errorCode) {
1696 +// receiver.onFailure(errorCode);
1557 // } 1697 // }
1558 -// } catch (Exception exception) { 1698 +// });
1559 -// campaignLoyaltyList.add(camp);
1560 // } 1699 // }
1700 +//
1701 +// @Override
1702 +// public void onFailure(int errorCode) {
1703 +// receiver.onFailure(errorCode);
1561 // } 1704 // }
1705 +// });
1706 + }
1707 +
1708 + private static /*void*/ ListenableFuture<ArrayList<Campaign>> getCampaignsRetro(ApiService service/*, final CallbackReceiver<ArrayList<Campaign>> receiver*/) {
1709 + SettableFuture<ArrayList<Campaign>> future = SettableFuture.create();
1710 +
1711 + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
1712 + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
1713 + String webId = WarpUtils.getWebId(Warply.getWarplyContext());
1714 +
1715 + Map<String, Object> jsonParamsCampaigns = new ArrayMap<>();
1716 + Map<String, Object> jsonParams = new ArrayMap<>();
1717 + jsonParams.put("action", "retrieve");
1718 + jsonParams.put("filters", new JSONObject());
1719 + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
1720 +
1721 + jsonParamsCampaigns.put("campaigns", jsonParams);
1722 + RequestBody campaignsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCampaigns)).toString());
1723 +
1724 + Call<ResponseBody> campaignsCall = service.getCampaigns(
1725 + WarplyProperty.getAppUuid(Warply.getWarplyContext()),
1726 + campaignsRequest,
1727 + timeStamp,
1728 + "android:" + Warply.getWarplyContext().getPackageName(),
1729 + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
1730 + "mobile",
1731 + webId,
1732 + WarpUtils.produceSignature(apiKey + timeStamp)
1733 + );
1734 +
1735 + campaignsCall.enqueue(new Callback<ResponseBody>() {
1736 + @Override
1737 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
1738 + if (response.code() == 200 && response.body() != null) {
1739 + JSONObject jobjCampaignsResponse = null;
1740 + try {
1741 + jobjCampaignsResponse = new JSONObject(response.body().string());
1742 + } catch (Exception e) {
1743 + e.printStackTrace();
1744 + }
1745 +
1746 + if (jobjCampaignsResponse != null && jobjCampaignsResponse.has("status") && jobjCampaignsResponse.optString("status", "2").equals("1")) {
1747 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1748 + dynatraceEvent.setEventName("custom_success_campaigns_loyalty");
1749 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1750 +
1751 + JSONArray jCampaignsBody = null;
1752 + try {
1753 + jCampaignsBody = jobjCampaignsResponse.optJSONObject("context").optJSONObject("MAPP_CAMPAIGNING").optJSONArray("campaigns");
1754 + } catch (Exception e) {
1755 + e.printStackTrace();
1756 + }
1757 +
1758 + if (jCampaignsBody != null) {
1759 + ArrayList<NewCampaign> tempCampaigns = new ArrayList<>();
1760 + ArrayList<Campaign> mCampaignsList = new ArrayList<>();
1761 +
1762 + final ExecutorService executorShops = Executors.newFixedThreadPool(1);
1763 + JSONArray finalCampaignsJBody = jCampaignsBody;
1764 + executorShops.submit(() -> {
1765 + for (int i = 0; i < finalCampaignsJBody.length(); ++i) {
1766 + tempCampaigns.add(new NewCampaign(finalCampaignsJBody.optJSONObject(i)));
1767 + }
1768 + for (NewCampaign newCamp : tempCampaigns) {
1769 + Campaign camp = new Campaign();
1770 + camp.setIndexUrl(newCamp.getIndexUrl());
1771 + camp.setLogoUrl(newCamp.getLogoUrl());
1772 + camp.setMessage(newCamp.getMessage());
1773 + camp.setOfferCategory(newCamp.getCommunicationCategory());
1774 + camp.setSessionUUID(newCamp.getCommunicationUUID());
1775 + camp.setTitle(newCamp.getTitle());
1776 + camp.setSubtitle(newCamp.getSubtitle());
1777 + camp.setSorting(newCamp.getSorting());
1778 + camp.setNew(newCamp.getIsNew());
1779 + camp.setType(newCamp.getCampaignType());
1780 + try {
1781 + camp.setExtraFields(newCamp.getExtraFields().toString());
1782 + if (!TextUtils.isEmpty(newCamp.getExtraFields().toString())) {
1783 + JSONObject extraFieldsResp = WarpJSONParser.getJSONFromString(newCamp.getExtraFields().toString());
1784 + if (extraFieldsResp != null) {
1785 + if (extraFieldsResp.has("Banner_title")) {
1786 + camp.setBannerTitle(extraFieldsResp.optString("Banner_title", ""));
1787 + }
1788 + if (extraFieldsResp.has("Banner_img")) {
1789 + camp.setBannerImage(extraFieldsResp.optString("Banner_img", ""));
1790 + }
1791 + }
1562 } else { 1792 } else {
1793 + camp.setBannerImage("");
1794 + camp.setBannerTitle("");
1795 + }
1796 + } catch (NullPointerException e) {
1797 + camp.setExtraFields("");
1798 + camp.setBannerImage("");
1799 + camp.setBannerTitle("");
1800 + e.printStackTrace();
1801 + }
1802 +
1563 try { 1803 try {
1564 - JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields()); 1804 + camp.setCampaignTypeSettings(newCamp.getSettings().toString());
1565 - if (extraFields != null) { 1805 + } catch (NullPointerException e) {
1566 - if (extraFields.length() == 0 || !(extraFields.has("ccms_offer") || extraFields.has("type"))) { 1806 + camp.setCampaignTypeSettings("");
1567 - campaignLoyaltyList.add(camp); 1807 + e.printStackTrace();
1568 } 1808 }
1809 + mCampaignsList.add(camp);
1569 } 1810 }
1570 - } catch (Exception exception) { 1811 +
1571 - campaignLoyaltyList.add(camp); 1812 + executorShops.shutdownNow();
1813 +// receiver.onSuccess(mCampaignsList);
1814 + future.set(mCampaignsList);
1815 + });
1816 + }
1817 + } else {
1818 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1819 + dynatraceEvent.setEventName("custom_error_campaigns_loyalty");
1820 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1821 +// receiver.onFailure(2);
1822 + future.set(new ArrayList<Campaign>());
1572 } 1823 }
1824 + } else {
1825 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1826 + dynatraceEvent.setEventName("custom_error_campaigns_loyalty");
1827 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1828 +// receiver.onFailure(response.code());
1829 + future.set(new ArrayList<Campaign>());
1573 } 1830 }
1574 } 1831 }
1575 - WarplyManagerHelper.setCarouselList(campaignCarouselList);
1576 1832
1577 - Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList); 1833 + @Override
1578 - campaignLoyaltyList.clear(); 1834 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
1579 - campaignLoyaltyList.addAll(set); 1835 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1580 - receiver.onSuccess(campaignLoyaltyList); //resultPersonalized 1836 + dynatraceEvent.setEventName("custom_error_campaigns_loyalty");
1837 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1838 +// receiver.onFailure(2);
1839 + future.set(new ArrayList<Campaign>());
1840 + }
1841 + });
1842 +
1843 + return future;
1581 } 1844 }
1582 1845
1846 + private static /*void*/ ListenableFuture<ArrayList<Campaign>> getCampaignsPersonalizedRetro(ApiService service/*, final CallbackReceiver<ArrayList<Campaign>> receiver*/) {
1847 + SettableFuture<ArrayList<Campaign>> future = SettableFuture.create();
1848 +
1849 + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
1850 + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
1851 + String webId = WarpUtils.getWebId(Warply.getWarplyContext());
1852 +
1853 + Map<String, Object> jsonParamsCampaigns = new ArrayMap<>();
1854 + Map<String, Object> jsonParams = new ArrayMap<>();
1855 + jsonParams.put("action", "retrieve");
1856 + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
1857 +
1858 + jsonParamsCampaigns.put("campaigns", jsonParams);
1859 + RequestBody campaignsPersonalizedRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCampaigns)).toString());
1860 +
1861 + Call<ResponseBody> campaignsPersonalizedCall = service.getCampaignsPersonalized(
1862 + WarplyProperty.getAppUuid(Warply.getWarplyContext()),
1863 + campaignsPersonalizedRequest,
1864 + timeStamp,
1865 + "android:" + Warply.getWarplyContext().getPackageName(),
1866 + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
1867 + "mobile",
1868 + webId,
1869 + WarpUtils.produceSignature(apiKey + timeStamp),
1870 + "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token")
1871 + );
1872 +
1873 + campaignsPersonalizedCall.enqueue(new Callback<ResponseBody>() {
1583 @Override 1874 @Override
1584 - public void onFailure(int errorCode) { 1875 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
1585 - receiver.onFailure(errorCode); 1876 + if (response.code() == 200 && response.body() != null) {
1877 + JSONObject jobjCampaignsResponse = null;
1878 + try {
1879 + jobjCampaignsResponse = new JSONObject(response.body().string());
1880 + } catch (Exception e) {
1881 + e.printStackTrace();
1882 + }
1883 +
1884 + if (jobjCampaignsResponse != null && jobjCampaignsResponse.has("status") && jobjCampaignsResponse.optString("status", "2").equals("1")) {
1885 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1886 + dynatraceEvent.setEventName("custom_success_campaigns_loyalty");
1887 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1888 +
1889 + JSONArray jCampaignsBody = null;
1890 + try {
1891 + jCampaignsBody = jobjCampaignsResponse.optJSONObject("context").optJSONObject("MAPP_CAMPAIGNING").optJSONArray("campaigns");
1892 + } catch (Exception e) {
1893 + e.printStackTrace();
1894 + }
1895 +
1896 + if (jCampaignsBody != null) {
1897 + ArrayList<NewCampaign> tempCampaigns = new ArrayList<>();
1898 + ArrayList<Campaign> mCampaignsList = new ArrayList<>();
1899 +
1900 + final ExecutorService executorShops = Executors.newFixedThreadPool(1);
1901 + JSONArray finalCampaignsJBody = jCampaignsBody;
1902 + executorShops.submit(() -> {
1903 + for (int i = 0; i < finalCampaignsJBody.length(); ++i) {
1904 + tempCampaigns.add(new NewCampaign(finalCampaignsJBody.optJSONObject(i)));
1905 + }
1906 + for (NewCampaign newCamp : tempCampaigns) {
1907 + Campaign camp = new Campaign();
1908 + camp.setIndexUrl(newCamp.getIndexUrl());
1909 + camp.setLogoUrl(newCamp.getLogoUrl());
1910 + camp.setMessage(newCamp.getMessage());
1911 + camp.setOfferCategory(newCamp.getCommunicationCategory());
1912 + camp.setSessionUUID(newCamp.getCommunicationUUID());
1913 + camp.setTitle(newCamp.getTitle());
1914 + camp.setSubtitle(newCamp.getSubtitle());
1915 + camp.setSorting(newCamp.getSorting());
1916 + camp.setNew(newCamp.getIsNew());
1917 + camp.setType(newCamp.getCampaignType());
1918 + try {
1919 + camp.setExtraFields(newCamp.getExtraFields().toString());
1920 + if (!TextUtils.isEmpty(newCamp.getExtraFields().toString())) {
1921 + JSONObject extraFieldsResp = WarpJSONParser.getJSONFromString(newCamp.getExtraFields().toString());
1922 + if (extraFieldsResp != null) {
1923 + if (extraFieldsResp.has("Banner_title")) {
1924 + camp.setBannerTitle(extraFieldsResp.optString("Banner_title", ""));
1925 + }
1926 + if (extraFieldsResp.has("Banner_img")) {
1927 + camp.setBannerImage(extraFieldsResp.optString("Banner_img", ""));
1586 } 1928 }
1929 + }
1930 + } else {
1931 + camp.setBannerImage("");
1932 + camp.setBannerTitle("");
1933 + }
1934 + } catch (NullPointerException e) {
1935 + camp.setExtraFields("");
1936 + camp.setBannerImage("");
1937 + camp.setBannerTitle("");
1938 + e.printStackTrace();
1939 + }
1940 +
1941 + try {
1942 + camp.setCampaignTypeSettings(newCamp.getSettings().toString());
1943 + } catch (NullPointerException e) {
1944 + camp.setCampaignTypeSettings("");
1945 + e.printStackTrace();
1946 + }
1947 + mCampaignsList.add(camp);
1948 + }
1949 +
1950 + executorShops.shutdownNow();
1951 +// receiver.onSuccess(mCampaignsList);
1952 + future.set(mCampaignsList);
1587 }); 1953 });
1588 } 1954 }
1955 + } else {
1956 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1957 + dynatraceEvent.setEventName("custom_error_campaigns_personalized_loyalty");
1958 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1959 +// receiver.onFailure(2);
1960 + future.set(new ArrayList<Campaign>());
1961 + }
1962 + } else if (response.code() == 401) {
1963 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
1964 + @Override
1965 + public void onSuccess(JSONObject result) {
1966 + int status = result.optInt("status", 2);
1967 + if (status == 1)
1968 + getCampaignsPersonalizedRetro(service/*, receiver*/);
1969 + else {
1970 +// receiver.onFailure(status);
1971 + future.set(new ArrayList<Campaign>());
1972 + }
1973 + }
1589 1974
1590 @Override 1975 @Override
1591 public void onFailure(int errorCode) { 1976 public void onFailure(int errorCode) {
1977 +// receiver.onFailure(errorCode);
1978 + future.set(new ArrayList<Campaign>());
1979 + }
1980 + });
1981 + } else {
1592 LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); 1982 LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1593 - dynatraceEvent.setEventName("custom_error_campaigns_loyalty"); 1983 + dynatraceEvent.setEventName("custom_error_campaigns_personalized_loyalty");
1594 EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); 1984 EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1595 - receiver.onFailure(errorCode); 1985 +// receiver.onFailure(response.code());
1986 + future.set(new ArrayList<Campaign>());
1596 } 1987 }
1597 - }, 1988 + }
1598 - request.getSignature())); 1989 +
1990 + @Override
1991 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
1992 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1993 + dynatraceEvent.setEventName("custom_error_campaigns_personalized_loyalty");
1994 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1995 +// receiver.onFailure(2);
1996 + future.set(new ArrayList<Campaign>());
1997 + }
1998 + });
1999 +
2000 + return future;
1599 } 2001 }
1600 2002
1601 public static void getCampaignsPersonalized(WarplyGetCampaignsRequest request, final CallbackReceiver<ArrayList<Campaign>> receiver) { 2003 public static void getCampaignsPersonalized(WarplyGetCampaignsRequest request, final CallbackReceiver<ArrayList<Campaign>> receiver) {
...@@ -3037,8 +3439,26 @@ public class WarplyManager { ...@@ -3037,8 +3439,26 @@ public class WarplyManager {
3037 couponsetsCall.enqueue(new Callback<ResponseBody>() { 3439 couponsetsCall.enqueue(new Callback<ResponseBody>() {
3038 @Override 3440 @Override
3039 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3441 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3442 + if (response.code() == 401) {
3443 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3444 + @Override
3445 + public void onSuccess(JSONObject result) {
3446 + int status = result.optInt("status", 2);
3447 + if (status == 1)
3448 + getCouponsetsRetro(service, isFiltered, callback);
3449 + else
3450 + callback.onFailure(call, new Throwable());
3451 + }
3452 +
3453 + @Override
3454 + public void onFailure(int errorCode) {
3455 + callback.onFailure(call, new Throwable());
3456 + }
3457 + });
3458 + } else {
3040 callback.onResponse(call, response); 3459 callback.onResponse(call, response);
3041 } 3460 }
3461 + }
3042 3462
3043 @Override 3463 @Override
3044 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3464 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
...@@ -3107,8 +3527,26 @@ public class WarplyManager { ...@@ -3107,8 +3527,26 @@ public class WarplyManager {
3107 telematicsCall.enqueue(new Callback<ResponseBody>() { 3527 telematicsCall.enqueue(new Callback<ResponseBody>() {
3108 @Override 3528 @Override
3109 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3529 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3530 + if (response.code() == 401) {
3531 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3532 + @Override
3533 + public void onSuccess(JSONObject result) {
3534 + int status = result.optInt("status", 2);
3535 + if (status == 1)
3536 + sendTelematicsData(service, accelerationTimestamps, callback);
3537 + else
3538 + callback.onFailure(call, new Throwable());
3539 + }
3540 +
3541 + @Override
3542 + public void onFailure(int errorCode) {
3543 + callback.onFailure(call, new Throwable());
3544 + }
3545 + });
3546 + } else {
3110 callback.onResponse(call, response); 3547 callback.onResponse(call, response);
3111 } 3548 }
3549 + }
3112 3550
3113 @Override 3551 @Override
3114 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3552 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
...@@ -3145,8 +3583,26 @@ public class WarplyManager { ...@@ -3145,8 +3583,26 @@ public class WarplyManager {
3145 telematicsCall.enqueue(new Callback<ResponseBody>() { 3583 telematicsCall.enqueue(new Callback<ResponseBody>() {
3146 @Override 3584 @Override
3147 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3585 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3586 + if (response.code() == 401) {
3587 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3588 + @Override
3589 + public void onSuccess(JSONObject result) {
3590 + int status = result.optInt("status", 2);
3591 + if (status == 1)
3592 + cancelUnifiedCoupon(service, transactionID, callback);
3593 + else
3594 + callback.onFailure(call, new Throwable());
3595 + }
3596 +
3597 + @Override
3598 + public void onFailure(int errorCode) {
3599 + callback.onFailure(call, new Throwable());
3600 + }
3601 + });
3602 + } else {
3148 callback.onResponse(call, response); 3603 callback.onResponse(call, response);
3149 } 3604 }
3605 + }
3150 3606
3151 @Override 3607 @Override
3152 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3608 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
...@@ -3182,8 +3638,26 @@ public class WarplyManager { ...@@ -3182,8 +3638,26 @@ public class WarplyManager {
3182 telematicsCall.enqueue(new Callback<ResponseBody>() { 3638 telematicsCall.enqueue(new Callback<ResponseBody>() {
3183 @Override 3639 @Override
3184 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3640 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3641 + if (response.code() == 401) {
3642 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3643 + @Override
3644 + public void onSuccess(JSONObject result) {
3645 + int status = result.optInt("status", 2);
3646 + if (status == 1)
3647 + getTelematicsHistory(service, callback);
3648 + else
3649 + callback.onFailure(call, new Throwable());
3650 + }
3651 +
3652 + @Override
3653 + public void onFailure(int errorCode) {
3654 + callback.onFailure(call, new Throwable());
3655 + }
3656 + });
3657 + } else {
3185 callback.onResponse(call, response); 3658 callback.onResponse(call, response);
3186 } 3659 }
3660 + }
3187 3661
3188 @Override 3662 @Override
3189 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3663 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
...@@ -3220,8 +3694,26 @@ public class WarplyManager { ...@@ -3220,8 +3694,26 @@ public class WarplyManager {
3220 telematicsCall.enqueue(new Callback<ResponseBody>() { 3694 telematicsCall.enqueue(new Callback<ResponseBody>() {
3221 @Override 3695 @Override
3222 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3696 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3697 + if (response.code() == 401) {
3698 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3699 + @Override
3700 + public void onSuccess(JSONObject result) {
3701 + int status = result.optInt("status", 2);
3702 + if (status == 1)
3703 + getTripMetrics(service, tripId, callback);
3704 + else
3705 + callback.onFailure(call, new Throwable());
3706 + }
3707 +
3708 + @Override
3709 + public void onFailure(int errorCode) {
3710 + callback.onFailure(call, new Throwable());
3711 + }
3712 + });
3713 + } else {
3223 callback.onResponse(call, response); 3714 callback.onResponse(call, response);
3224 } 3715 }
3716 + }
3225 3717
3226 @Override 3718 @Override
3227 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3719 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
...@@ -3259,8 +3751,26 @@ public class WarplyManager { ...@@ -3259,8 +3751,26 @@ public class WarplyManager {
3259 telematicsCall.enqueue(new Callback<ResponseBody>() { 3751 telematicsCall.enqueue(new Callback<ResponseBody>() {
3260 @Override 3752 @Override
3261 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { 3753 public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
3754 + if (response.code() == 401) {
3755 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
3756 + @Override
3757 + public void onSuccess(JSONObject result) {
3758 + int status = result.optInt("status", 2);
3759 + if (status == 1)
3760 + rateTrip(service, tripId, isPositive, callback);
3761 + else
3762 + callback.onFailure(call, new Throwable());
3763 + }
3764 +
3765 + @Override
3766 + public void onFailure(int errorCode) {
3767 + callback.onFailure(call, new Throwable());
3768 + }
3769 + });
3770 + } else {
3262 callback.onResponse(call, response); 3771 callback.onResponse(call, response);
3263 } 3772 }
3773 + }
3264 3774
3265 @Override 3775 @Override
3266 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { 3776 public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
......