Panagiotis Triantafyllou

retrofit fixes

......@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'ly.warp'
PUBLISH_VERSION = '4.5.4.6rc21'
PUBLISH_VERSION = '4.5.4.6rc29'
PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
}
......
/*
* Copyright 2010-2013 Warply Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE WARPLY LTD ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL WARPLY LTD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ly.warp.sdk.io.callbacks;
public interface RetrofitInterface {
// @GET("/api/session/{sessionUuid}")
// Call<ResponseBody> getSingleCampaign(@Path("sessionUuid") String sessionUuid);
}
package ly.warp.sdk.io.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.Date;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class CouponModel {
@SerializedName("msg")
@Expose
private String msg;
@SerializedName("result")
@Expose
private ArrayList<CouponResult> result = null;
@SerializedName("status")
@Expose
private Integer status;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public ArrayList<CouponResult> getResult() {
return result;
}
public void setResult(ArrayList<CouponResult> result) {
this.result = result;
}
public class CouponResult {
@SerializedName("changes_dates")
@Expose
private ChangesDates changesDates;
@SerializedName("communication_uuid")
@Expose
private String communicationUuid;
@SerializedName("coupon")
@Expose
private String coupon;
@SerializedName("couponset_uuid")
@Expose
private String couponsetUuid;
@SerializedName("description")
@Expose
private String description;
@SerializedName("discount")
@Expose
private String discount;
@SerializedName("expiration")
@Expose
private String expiration;
@SerializedName("image")
@Expose
private String image;
@SerializedName("name")
@Expose
private String name;
@SerializedName("status")
@Expose
private Integer status;
private String merchantUuid = "";
private String innerText = "";
private Date expirationDate = new Date();
private String discount_type = "";
private double final_price = 0.0d;
public ChangesDates getChangesDates() {
return changesDates;
}
public void setChangesDates(ChangesDates changesDates) {
this.changesDates = changesDates;
}
public String getCommunicationUuid() {
return communicationUuid;
}
public void setCommunicationUuid(String communicationUuid) {
this.communicationUuid = communicationUuid;
}
public String getCoupon() {
return coupon;
}
public void setCoupon(String coupon) {
this.coupon = coupon;
}
public String getCouponsetUuid() {
return couponsetUuid;
}
public void setCouponsetUuid(String couponsetUuid) {
this.couponsetUuid = couponsetUuid;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDiscount() {
return discount;
}
public void setDiscount(String discount) {
this.discount = discount;
}
public String getExpiration() {
return expiration;
}
public void setExpiration(String expiration) {
this.expiration = expiration;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMerchantUuid() {
return merchantUuid;
}
public void setMerchantUuid(String merchantUuid) {
this.merchantUuid = merchantUuid;
}
public String getInnerText() {
return innerText;
}
public void setInnerText(String innerText) {
this.innerText = innerText;
}
public Date getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(Date expirationDate) {
this.expirationDate = expirationDate;
}
public String getDiscount_type() {
return discount_type;
}
public void setDiscount_type(String discount_type) {
this.discount_type = discount_type;
}
public double getFinal_price() {
return final_price;
}
public void setFinal_price(double final_price) {
this.final_price = final_price;
}
}
public class ChangesDates {
@SerializedName("assigned")
@Expose
private String assigned;
@SerializedName("created")
@Expose
private String created;
public String getAssigned() {
return assigned;
}
public void setAssigned(String assigned) {
this.assigned = assigned;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
}
}
package ly.warp.sdk.io.models;
import org.json.JSONArray;
import ly.warp.sdk.Warply;
import ly.warp.sdk.utils.WarplyProperty;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class CouponRequestModel {
private CouponsetRequestInnerModel coupon;
public CouponRequestModel() {
this.coupon = new CouponsetRequestInnerModel();
}
private class CouponsetRequestInnerModel {
private String action;
private JSONArray fetch_data;
public CouponsetRequestInnerModel() {
this.action = "get_user_coupons";
JSONArray fetch = new JSONArray();
fetch.put("transaction");
fetch.put("communication");
this.fetch_data = fetch;
}
}
}
package ly.warp.sdk.io.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class CouponsetModel {
@SerializedName("status")
@Expose
private String status;
@SerializedName("context")
@Expose
private CouponsetContext context;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public CouponsetContext getContext() {
return context;
}
public void setContext(CouponsetContext context) {
this.context = context;
}
public class CouponsetContext {
@SerializedName("MAPP_COUPON-status")
@Expose
private Integer mAPPCOUPONStatus;
@SerializedName("events_processed")
@Expose
private Integer eventsProcessed;
@SerializedName("MAPP_COUPON")
@Expose
private ArrayList<MappCoupon> mappCoupon = null;
public ArrayList<MappCoupon> getMappCoupon() {
return mappCoupon;
}
public void setMappCoupon(ArrayList<MappCoupon> mappCoupon) {
this.mappCoupon = mappCoupon;
}
public Integer getMAPPCOUPONStatus() {
return mAPPCOUPONStatus;
}
public void setMAPPCOUPONStatus(Integer mAPPCOUPONStatus) {
this.mAPPCOUPONStatus = mAPPCOUPONStatus;
}
public Integer getEventsProcessed() {
return eventsProcessed;
}
public void setEventsProcessed(Integer eventsProcessed) {
this.eventsProcessed = eventsProcessed;
}
}
public class MappCoupon {
@SerializedName("uuid")
@Expose
private String uuid;
@SerializedName("img_preview")
@Expose
private String imgPreview;
@SerializedName("final_price")
@Expose
private Integer finalPrice;
@SerializedName("start_date")
@Expose
private String startDate;
@SerializedName("end_date")
@Expose
private String endDate;
@SerializedName("discount_type")
@Expose
private String discountType;
@SerializedName("promoted")
@Expose
private Boolean promoted;
@SerializedName("expiration")
@Expose
private CouponsetExpiration expiration;
@SerializedName("name")
@Expose
private String name;
@SerializedName("description")
@Expose
private String description;
@SerializedName("short_description")
@Expose
private String shortDescription;
@SerializedName("discount")
@Expose
private String discount;
@SerializedName("terms")
@Expose
private String terms;
@SerializedName("inner_text")
@Expose
private String innerText;
@SerializedName("merchant_uuid")
@Expose
private String merchantUuid;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getImgPreview() {
return imgPreview;
}
public void setImgPreview(String imgPreview) {
this.imgPreview = imgPreview;
}
public Integer getFinalPrice() {
return finalPrice;
}
public void setFinalPrice(Integer finalPrice) {
this.finalPrice = finalPrice;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getDiscountType() {
return discountType;
}
public void setDiscountType(String discountType) {
this.discountType = discountType;
}
public Boolean getPromoted() {
return promoted;
}
public void setPromoted(Boolean promoted) {
this.promoted = promoted;
}
public CouponsetExpiration getExpiration() {
return expiration;
}
public void setExpiration(CouponsetExpiration expiration) {
this.expiration = expiration;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getShortDescription() {
return shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getDiscount() {
return discount;
}
public void setDiscount(String discount) {
this.discount = discount;
}
public String getTerms() {
return terms;
}
public void setTerms(String terms) {
this.terms = terms;
}
public String getInnerText() {
return innerText;
}
public void setInnerText(String innerText) {
this.innerText = innerText;
}
public String getMerchantUuid() {
return merchantUuid;
}
public void setMerchantUuid(String merchantUuid) {
this.merchantUuid = merchantUuid;
}
}
public class CouponsetExpiration {
@SerializedName("type")
@Expose
private String type;
@SerializedName("value")
@Expose
private String value;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
package ly.warp.sdk.io.models;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import ly.warp.sdk.Warply;
import ly.warp.sdk.utils.WarplyProperty;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class CouponsetRequestModel {
private CouponsetRequestInnerModel coupon;
public CouponsetRequestModel() {
this.coupon = new CouponsetRequestInnerModel();
}
private class CouponsetRequestInnerModel {
private String action;
private boolean active;
private boolean visible;
private String language;
public CouponsetRequestInnerModel() {
this.action = "retrieve_multilingual";
this.active = true;
this.visible = true;
this.language = WarplyProperty.getLanguage(Warply.getWarplyContext());
}
}
}
package ly.warp.sdk.io.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.Date;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class MerchantModel {
@SerializedName("status")
@Expose
private String status;
@SerializedName("context")
@Expose
private MerchantContext context;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public MerchantContext getContext() {
return context;
}
public void setContext(MerchantContext context) {
this.context = context;
}
public class MerchantContext {
@SerializedName("MAPP_SHOPS")
@Expose
private MappShops mappShops;
@SerializedName("MAPP_SHOPS-status")
@Expose
private Integer mAPPSHOPSStatus;
@SerializedName("events_processed")
@Expose
private Integer eventsProcessed;
public MappShops getMappShops() {
return mappShops;
}
public void setMappShops(MappShops mappShops) {
this.mappShops = mappShops;
}
public Integer getMAPPSHOPSStatus() {
return mAPPSHOPSStatus;
}
public void setMAPPSHOPSStatus(Integer mAPPSHOPSStatus) {
this.mAPPSHOPSStatus = mAPPSHOPSStatus;
}
public Integer getEventsProcessed() {
return eventsProcessed;
}
public void setEventsProcessed(Integer eventsProcessed) {
this.eventsProcessed = eventsProcessed;
}
}
public class MappShops {
@SerializedName("msg")
@Expose
private String msg;
@SerializedName("result")
@Expose
private ArrayList<MerchantResult> result = null;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public ArrayList<MerchantResult> getResult() {
return result;
}
public void setResult(ArrayList<MerchantResult> result) {
this.result = result;
}
}
public class MerchantResult {
@SerializedName("uuid")
@Expose
private String uuid;
@SerializedName("img_preview")
@Expose
private String imgPreview;
@SerializedName("admin_name")
@Expose
private String adminName;
@SerializedName("address")
@Expose
private String address;
@SerializedName("name")
@Expose
private String name;
@SerializedName("latitude")
@Expose
private double latitude;
@SerializedName("longitude")
@Expose
private double longitude;
@SerializedName("telephone")
@Expose
private String telephone;
@SerializedName("website")
@Expose
private String website;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getImgPreview() {
return imgPreview;
}
public void setImgPreview(String imgPreview) {
this.imgPreview = imgPreview;
}
public String getAdminName() {
return adminName;
}
public void setAdminName(String adminName) {
this.adminName = adminName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
}
}
package ly.warp.sdk.io.models;
import org.json.JSONArray;
import org.json.JSONObject;
import ly.warp.sdk.Warply;
import ly.warp.sdk.utils.WarplyProperty;
/**
* Created by Panagiotis Triantafyllou on 24/Νοε/2022.
*/
public class MerchantsRequestModel {
private MerchantsRequestInnerModel shops;
public MerchantsRequestModel() {
this.shops = new MerchantsRequestInnerModel();
}
private class MerchantsRequestInnerModel {
private String action;
private JSONArray categories;
private boolean active;
private JSONObject location;
private JSONArray parent_uuids;
private String language;
public MerchantsRequestInnerModel() {
this.action = "retrieve_multilingual";
this.categories = new JSONArray();
this.active = true;
this.location = null;
this.parent_uuids = null;
this.language = WarplyProperty.getLanguage(Warply.getWarplyContext());
}
}
}
package ly.warp.sdk.io.volley;
import ly.warp.sdk.io.models.CouponModel;
import ly.warp.sdk.io.models.CouponRequestModel;
import ly.warp.sdk.io.models.CouponsetModel;
import ly.warp.sdk.io.models.CouponsetRequestModel;
import ly.warp.sdk.io.models.MerchantModel;
import ly.warp.sdk.io.models.MerchantsRequestModel;
import ly.warp.sdk.utils.constants.WarpConstants;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;
......@@ -33,9 +30,10 @@ public interface ApiService {
// Methods
// ===========================================================
@Headers("Content-Type: application/json")
@POST("/api/mobile/v2/{appUuid}/context/")
Call<CouponsetModel> getCouponsets(@Path("appUuid") String appUuid,
@Body CouponsetRequestModel request,
Call<ResponseBody> getCouponsets(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
......@@ -43,9 +41,10 @@ public interface ApiService {
@Header(WarpConstants.HEADER_WEB_ID) String webId,
@Header(WarpConstants.HEADER_SIGNATURE) String signature);
@Headers("Content-Type: application/json")
@POST("/oauth/{appUuid}/context")
Call<CouponModel> getUserCoupons(@Path("appUuid") String appUuid,
@Body CouponRequestModel request,
Call<ResponseBody> getUserCoupons(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
......@@ -54,9 +53,10 @@ public interface ApiService {
@Header(WarpConstants.HEADER_SIGNATURE) String signature,
@Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
@Headers("Content-Type: application/json")
@POST("/api/mobile/v2/{appUuid}/context/")
Call<MerchantModel> getMerchants(@Path("appUuid") String appUuid,
@Body MerchantsRequestModel request,
Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid,
@Body RequestBody request,
@Header(WarpConstants.HEADER_DATE) String timeStamp,
@Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
@Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
......
......@@ -25,20 +25,19 @@
package ly.warp.sdk.utils.managers;
import static java.lang.Boolean.FALSE;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.text.format.DateFormat;
import android.util.ArrayMap;
import androidx.annotation.NonNull;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
......@@ -53,6 +52,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
......@@ -72,7 +72,6 @@ import ly.warp.sdk.io.callbacks.NewCampaignsHook;
import ly.warp.sdk.io.callbacks.PacingDetailsHook;
import ly.warp.sdk.io.callbacks.PointsHook;
import ly.warp.sdk.io.callbacks.ProductsHook;
import ly.warp.sdk.io.callbacks.RetrofitInterface;
import ly.warp.sdk.io.callbacks.SharingHook;
import ly.warp.sdk.io.callbacks.TagsCategoriesHook;
import ly.warp.sdk.io.callbacks.TagsHook;
......@@ -85,19 +84,12 @@ import ly.warp.sdk.io.models.Consumer;
import ly.warp.sdk.io.models.ContentList;
import ly.warp.sdk.io.models.Coupon;
import ly.warp.sdk.io.models.CouponList;
import ly.warp.sdk.io.models.CouponModel;
import ly.warp.sdk.io.models.CouponRequestModel;
import ly.warp.sdk.io.models.Couponset;
import ly.warp.sdk.io.models.CouponsetModel;
import ly.warp.sdk.io.models.CouponsetRequestModel;
import ly.warp.sdk.io.models.CouponsetsList;
import ly.warp.sdk.io.models.LoyaltyContextualOfferModel;
import ly.warp.sdk.io.models.LoyaltySDKDynatraceEventModel;
import ly.warp.sdk.io.models.Merchant;
import ly.warp.sdk.io.models.MerchantCategoriesList;
import ly.warp.sdk.io.models.MerchantList;
import ly.warp.sdk.io.models.MerchantModel;
import ly.warp.sdk.io.models.MerchantsRequestModel;
import ly.warp.sdk.io.models.PacingDetails;
import ly.warp.sdk.io.models.PointsList;
import ly.warp.sdk.io.models.ProductList;
......@@ -162,6 +154,9 @@ import ly.warp.sdk.utils.WarplyDeviceInfoCollector;
import ly.warp.sdk.utils.WarplyManagerHelper;
import ly.warp.sdk.utils.WarplyProperty;
import ly.warp.sdk.utils.constants.WarpConstants;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
......@@ -1574,557 +1569,6 @@ public class WarplyManager {
}
WarplyManagerHelper.setCarouselList(campaignCarouselList);
// ArrayList<LoyaltyContextualOfferModel> list = new ArrayList<>();
// JSONArray jArray = null;
// try {
// jArray = new JSONArray("[\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5166.e07.fffffffffa10663a.ffffffffda30c76a\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"dataCategory\": \"Data\",\n" +
// " \"dataValue\": \"None\",\n" +
// " \"discount\": \"None\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003590\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"minsValue\": \"None\",\n" +
// " \"noOfRecurrance\": \"None\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003590\",\n" +
// " \"offerName\": \"CCMS loyalty white label\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"White Label\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"provStepValueMins\": \"None\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5166.e07.fffffffffa10663a.ffffffffda30c76a\",\n" +
// " \"validity\": \"0\",\n" +
// " \"voiceCategory\": \"None\",\n" +
// " \"wave\": \"1\",\n" +
// " \"zone\": \"COSMOTE_APP_LOYALTY_PROMO\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"546d.ea1.ffffffffcc4c34b3.c64ed53\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"dataCategory\": \"Data\",\n" +
// " \"dataValue\": \"1\",\n" +
// " \"description\": \"5days1000 3744\",\n" +
// " \"discount\": \"None\",\n" +
// " \"duration\": \"5\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"giftType\": \"GB\",\n" +
// " \"giftValue\": \"1\",\n" +
// " \"id\": \"000003744\",\n" +
// " \"imageOfferUrl\": \"https://uatatg.cosmote.gr/images/ContexualOffers//testOffer/x3_detailed_default.png\",\n" +
// " \"imageUrl\": \"https://uatatg.cosmote.gr/images/ContexualOffers//testOffer/x3_store_default.png\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"minsValue\": \"None\",\n" +
// " \"noOfRecurrance\": \"5\",\n" +
// " \"notificationMessage\": \"5days1000 3744\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003744\",\n" +
// " \"offerName\": \"White_Label_5days1000 3744\",\n" +
// " \"price\": \"0\",\n" +
// " \"productType\": \"White Label\",\n" +
// " \"provDuration\": \"1.0\",\n" +
// " \"score\": \"50\",\n" +
// " \"sessionId\": \"COSMOTE_APP_BALANCES.6945251078.20220908115231\",\n" +
// " \"treatmentCode\": \"546d.ea1.ffffffffcc4c34b3.c64ed53\",\n" +
// " \"validity\": \"0\",\n" +
// " \"wave\": \"1\",\n" +
// " \"voiceCategory\": \"None\",\n" +
// " \"validity\": \"5\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"White_Label_5days1000 3744\",\n" +
// " \"titleOffer\": \"5days1000 3744\",\n" +
// " \"termsAndConditions\": \"5days1000 3744\",\n" +
// " \"subtitle\": \"5days1000 3744\",\n" +
// " \"description\": \"Test6\",\n" +
// " \"zone\": \"COSMOTE_APP_GIFTS4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"51ed.e10.2c006f18.71e96d08\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"dataCategory\": \"Data\",\n" +
// " \"dataValue\": \"233\",\n" +
// " \"discount\": \"None\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003599\",\n" +
// " \"loyaltyCampaignId\": \"9a92d445956145f6bbc5cd20cef543b9\",\n" + //c5cc5f4f65624f47a580b720233fa60d
// " \"minsValue\": \"None\",\n" +
// " \"noOfRecurrance\": \"None\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003599\",\n" +
// " \"offerName\": \"CCMS loyalty white label with campaignId\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"White Label\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"provStepValueMins\": \"None\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"51ed.e10.2c006f18.71e96d08\",\n" +
// " \"validity\": \"0\",\n" +
// " \"voiceCategory\": \"None\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Title External\",\n" +
// " \"subtitle\": \"Subtitle MFY second\",\n" +
// " \"description\": \"Description Internal\",\n" +
// " \"message\": \"Message MFY third\",\n" +
// " \"titleOffer\": \"Title Internal\",\n" +
// " \"imageOfferUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"duration\": \"gia 7 imeres\",\n" +
// " \"giftType\": \"Internet\",\n" +
// " \"giftValue\": \"1 GB\",\n" +
// " \"termsAndConditions\": \"Terms and Conditions Lorem Ipsum Dolores sit amen\",\n" +
// " \"zone\": \"COSMOTE_APP_LOYALTY_PROMO\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"516c.e05.ffffffffa943695b.79ff470b\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"businessService\": \"0.0\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003588\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"noOfRecurrance\": \"0\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003588\",\n" +
// " \"offerName\": \"CCMS loyalty postpay addon\",\n" +
// " \"postpayProduct\": \"0.0\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"MOBILE ADDON\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"516c.e05.ffffffffa943695b.79ff470b\",\n" +
// " \"validity\": \"0\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test2\",\n" +
// " \"subtitle\": \"Test2\",\n" +
// " \"description\": \"Test2\",\n" +
// " \"zone\": \"COSMOTE_APP_LOYALTY_PROMO\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5224.e19.30e2f27b.ffffffffeb22b0db\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"dataCategory\": \"Data\",\n" +
// " \"dataValue\": \"None\",\n" +
// " \"discount\": \"None\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003608\",\n" +
// " \"loyaltyCampaignId\": \"c134cdeb8a924f8eac38e261acb9caf5\",\n" +
// " \"minsValue\": \"None\",\n" +
// " \"noOfRecurrance\": \"None\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003608\",\n" +
// " \"offerName\": \"CCMS loyalty gifts4u v1\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"White Label\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"provStepValueMins\": \"None\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5224.e19.30e2f27b.ffffffffeb22b0db\",\n" +
// " \"validity\": \"0\",\n" +
// " \"voiceCategory\": \"None\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test3\",\n" +
// " \"subtitle\": \"Test3\",\n" +
// " \"description\": \"Test3\",\n" +
// " \"zone\": \"COSMOTE_APP_GIFTS4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5228.e1d.38378e61.750186c1\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"businessService\": \"0.0\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003612\",\n" +
// " \"loyaltyCampaignId\": \"8eb71c4ceaff409c896e2d1f6f1c20f3\",\n" +
// " \"noOfRecurrance\": \"0\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003612\",\n" +
// " \"offerName\": \"CCMS loyalty - postpay addon gifts4u\",\n" +
// " \"postpayProduct\": \"0.0\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"MOBILE ADDON\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5228.e1d.38378e61.750186c1\",\n" +
// " \"validity\": \"0\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test4\",\n" +
// " \"subtitle\": \"Test4\",\n" +
// " \"description\": \"Test4\",\n" +
// " \"zone\": \"COSMOTE_APP_GIFTS4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5222.e1b.ffffffffe725d1b3.ffffffffed6d8723\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"dataCategory\": \"Data\",\n" +
// " \"dataValue\": \"None\",\n" +
// " \"discount\": \"None\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003610\",\n" +
// " \"loyaltyCampaignId\": \"8e2c88ec94c948d8b51577324ed9a4d5\",\n" +
// " \"minsValue\": \"None\",\n" +
// " \"noOfRecurrance\": \"None\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003610\",\n" +
// " \"offerName\": \"CCMS loyalty more4u v1\",\n" +
// " \"price\": \"20\",\n" +
// " \"productType\": \"White Label\",\n" +
// " \"provDuration\": \"7.0\",\n" +
// " \"provStepValueMins\": \"None\",\n" +
// " \"score\": \"60\",\n" +
// " \"treatmentCode\": \"5222.e1b.ffffffffe725d1b3.ffffffffed6d8723\",\n" +
// " \"validity\": \"0\",\n" +
// " \"voiceCategory\": \"None\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test5\",\n" +
// " \"subtitle\": \"Test5\",\n" +
// " \"description\": \"Test5\",\n" +
// " \"zone\": \"COSMOTE_APP_MORE4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5226.e1f.728b68c6.ffffffffa6c7b10e\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"businessService\": \"0.0\",\n" +
// " \"eligibleAssets\": [\n" +
// " \"306945218770\",\n" +
// " \"306944333488\",\n" +
// " \"306932222490\",\n" +
// " \"306996824010\",\n" +
// " \"306972713201\",\n" +
// " \"306942496252\",\n" +
// " \"306977316716\",\n" +
// " \"306945433100\",\n" +
// " \"306977403986\",\n" +
// " \"306936581495\",\n" +
// " \"306980689662\",\n" +
// " \"306970101490\",\n" +
// " \"306973396329\",\n" +
// " \"306972577064\",\n" +
// " \"306974923219\",\n" +
// " \"306977513761\",\n" +
// " \"306984220987\",\n" +
// " \"306979949205\",\n" +
// " \"306943134127\",\n" +
// " \"306970437794\",\n" +
// " \"306932535319\",\n" +
// " \"306974063133\",\n" +
// " \"306932520323\",\n" +
// " \"306978733823\",\n" +
// " \"306985995420\",\n" +
// " \"306983879555\",\n" +
// " ],\n" +
// " \"id\": \"000003614\",\n" +
// " \"loyaltyCampaignId\": \"aaf4022194584f02bb84c7b283c7c51e\",\n" +
// " \"noOfRecurrance\": \"0\",\n" +
// " \"notificationMessage\": \"None\",\n" +
// " \"offerAudienceLevel\": \"msisdn\",\n" +
// " \"offerCode1\": \"000003614\",\n" +
// " \"offerName\": \"CCMS loyalty - postpay addon more4u\",\n" +
// " \"postpayProduct\": \"0.0\",\n" +
// " \"price\": \"None\",\n" +
// " \"productType\": \"MOBILE ADDON\",\n" +
// " \"provDuration\": \"0.0\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5226.e1f.728b68c6.ffffffffa6c7b10e\",\n" +
// " \"validity\": \"0\",\n" +
// " \"wave\": \"1\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test6\",\n" +
// " \"subtitle\": \"Test6\",\n" +
// " \"description\": \"Test6\",\n" +
// " \"zone\": \"COSMOTE_APP_MORE4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5154.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003586\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003586\",\n" +
// " \"offerName\": \"CCMS loyalty offer 6\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5154.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"validity\": \"0\",\n" +
// " \"zone\": \"COSMOTE_APP_LOYALTY_PROMO\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"51d2.e0c.291f49d9.40d5a689\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003595\",\n" +
// " \"loyaltyCampaignId\": \"c5cc5f4f65624f47a580b720233fa60d\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003595\",\n" +
// " \"offerName\": \"CCMS Loyal offer campaignId\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"51d2.e0c.291f49d9.40d5a689\",\n" +
// " \"validity\": \"0\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test7\",\n" +
// " \"subtitle\": \"Test7\",\n" +
// " \"description\": \"Test7\",\n" +
// " \"zone\": \"COSMOTE_APP_LOYALTY_PROMO\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"51d6.e0c.291f49d9.40d5a689\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003595\",\n" +
// " \"loyaltyCampaignId\": \"c5cc5f4f65624f47a580b720233fa60d\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003595\",\n" +
// " \"offerName\": \"CCMS Loyal offer campaignId\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"51d6.e0c.291f49d9.40d5a689\",\n" +
// " \"validity\": \"0\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test8\",\n" +
// " \"subtitle\": \"Test8\",\n" +
// " \"description\": \"Test8\",\n" +
// " \"zone\": \"COSMOTE_APP_GIFTS4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5150.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003586\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003586\",\n" +
// " \"offerName\": \"CCMS loyalty offer 6\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5150.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"validity\": \"0\",\n" +
// " \"zone\": \"COSMOTE_APP_GIFTS4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"5152.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003586\",\n" +
// " \"loyaltyCampaignId\": \"NA\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003586\",\n" +
// " \"offerName\": \"CCMS loyalty offer 6\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"5152.e03.ffffffffeebc476a.ffffffffc5b96f6a\",\n" +
// " \"validity\": \"0\",\n" +
// " \"zone\": \"COSMOTE_APP_MORE4U\"\n" +
// " },\n" +
// " {\n" +
// " \"UACIOfferTrackingCode\": \"51d4.e0c.291f49d9.40d5a689\",\n" +
// " \"businessAdditionalId\": \"\",\n" +
// " \"eligibleAssets\": [],\n" +
// " \"id\": \"000003595\",\n" +
// " \"loyaltyCampaignId\": \"c5cc5f4f65624f47a580b720233fa60d\",\n" +
// " \"offerAudienceLevel\": \"guid\",\n" +
// " \"offerCode1\": \"000003595\",\n" +
// " \"offerName\": \"CCMS Loyal offer campaignId\",\n" +
// " \"productType\": \"GENERIC\",\n" +
// " \"score\": \"50\",\n" +
// " \"treatmentCode\": \"51d4.e0c.291f49d9.40d5a689\",\n" +
// " \"validity\": \"0\",\n" +
// " \"imageUrl\": \"https://www.cosmotetvott.gr/assets/images/ogImage.jpg\",\n" +
// " \"title\": \"Test9\",\n" +
// " \"subtitle\": \"Test9\",\n" +
// " \"description\": \"Test9\",\n" +
// " \"zone\": \"COSMOTE_APP_MORE4U\"\n" +
// " }\n" +
// " ]");
// } catch (JSONException e) {
// e.printStackTrace();
// }
// if (jArray != null && jArray.length() > 0) {
// for (int i = 0; i < jArray.length(); i++) {
// JSONObject jobj = new JSONObject();
// jobj = jArray.optJSONObject(i);
// if (jobj != null) {
// LoyaltyContextualOfferModel model = new LoyaltyContextualOfferModel(jobj);
// list.add(model);
// }
// }
// }
// WarplyManagerHelper.setCCMSLoyaltyCampaigns(list);
Set<Campaign> set = new LinkedHashSet<>(campaignLoyaltyList);
campaignLoyaltyList.clear();
campaignLoyaltyList.addAll(set);
......@@ -2555,79 +1999,120 @@ public class WarplyManager {
WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active");
WarpUtils.log("**************************************************");
getMerchantsRetro(new Callback<MerchantModel>() {
ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
getMerchantsRetro(service, new Callback<ResponseBody>() {
@Override
public void onResponse(Call<MerchantModel> call, Response<MerchantModel> response) {
if (response.code() == 200) {
if (response.body() != null && response.body().getStatus().equals("1")) {
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseMerchants) {
if (responseMerchants.code() == 200 && responseMerchants.body() != null) {
JSONObject jobjMerchantsResponse = null;
try {
jobjMerchantsResponse = new JSONObject(responseMerchants.body().string());
} catch (Exception e) {
e.printStackTrace();
}
if (jobjMerchantsResponse != null && jobjMerchantsResponse.has("status") && jobjMerchantsResponse.optString("status", "2").equals("1")) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_success_shops_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
JSONArray jMerchantsBody = null;
try {
jMerchantsBody = jobjMerchantsResponse.optJSONObject("context").optJSONObject("MAPP_SHOPS").optJSONArray("result");
} catch (Exception e) {
e.printStackTrace();
}
if (jMerchantsBody != null) {
MerchantList mMerchantList = new MerchantList();
final ExecutorService executorShops = Executors.newFixedThreadPool(2);
final ExecutorService executorShops = Executors.newFixedThreadPool(1);
JSONArray finalMerchantsJBody = jMerchantsBody;
executorShops.submit(() -> {
for (MerchantModel.MerchantResult shop : response.body().getContext().getMappShops().getResult()) {
Merchant merchant = new Merchant();
merchant.setAddress(shop.getAddress());
merchant.setName(shop.getName());
merchant.setWebsite(shop.getWebsite());
merchant.setTelephone(shop.getTelephone());
merchant.setLatitude(shop.getLatitude());
merchant.setLongitude(shop.getLongitude());
merchant.setUuid(shop.getUuid());
merchant.setImg_preview(shop.getImgPreview());
merchant.setAdmin_name(shop.getAdminName());
mMerchantList.add(merchant);
for (int i = 0; i < finalMerchantsJBody.length(); ++i) {
mMerchantList.add(new Merchant(finalMerchantsJBody.optJSONObject(i)));
}
WarplyManagerHelper.setMerchantList(mMerchantList);
});
executorShops.shutdownNow();
});
getCouponsetsRetro(new Callback<CouponsetModel>() {
@Override
public void onResponse(Call<CouponsetModel> call, Response<CouponsetModel> response) {
if (response.code() == 200) {
if (response.body() != null && response.body().getStatus().equals("1")) {
getUserCouponsRetro(new Callback<CouponModel>() {
getCouponsetsRetro(service, new Callback<ResponseBody>() {
@Override
public void onResponse(Call<CouponModel> call, Response<CouponModel> responseCoupons) {
if (responseCoupons.code() == 200) {
if (responseCoupons.body() != null && responseCoupons.body().getStatus() == 1) {
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseCouponsets) {
if (responseCouponsets.code() == 200 && responseCouponsets.body() != null) {
JSONObject jobjCouponsetsResponse = null;
try {
jobjCouponsetsResponse = new JSONObject(responseCouponsets.body().string());
} catch (Exception e) {
e.printStackTrace();
}
if (jobjCouponsetsResponse != null && jobjCouponsetsResponse.has("status") && jobjCouponsetsResponse.optString("status", "2").equals("1")) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_success_user_coupons_loyalty");
dynatraceEvent.setEventName("custom_success_couponsets_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
new AsyncTask<Void, CouponList, CouponList>() {
JSONObject finalJobjCouponsetsResponse = jobjCouponsetsResponse;
getUserCouponsRetro(service, new Callback<ResponseBody>() {
@Override
protected CouponList doInBackground(Void... voids) {
CouponList mCouponList = new CouponList();
for (CouponModel.CouponResult coupon : responseCoupons.body().getResult()) {
for (CouponsetModel.MappCoupon couponset : response.body().getContext().getMappCoupon()) {
if (coupon.getCouponsetUuid().equals(couponset.getUuid())) {
Coupon newCoupon = new Coupon();
newCoupon.setStatus(coupon.getStatus());
JSONObject obj = new JSONObject();
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseCoupons) {
if (responseCoupons.code() == 200 && responseCoupons.body() != null) {
JSONObject jobjCouponsResponse = null;
try {
obj.putOpt("assigned", coupon.getChangesDates().getAssigned());
obj.putOpt("created", coupon.getChangesDates().getCreated());
newCoupon.setChangesDates(obj);
} catch (JSONException e) {
jobjCouponsResponse = new JSONObject(responseCoupons.body().string());
} catch (Exception e) {
e.printStackTrace();
}
newCoupon.setImage(couponset.getImgPreview());
newCoupon.setMerchantUuid(coupon.getMerchantUuid());
newCoupon.setCoupon(coupon.getCoupon());
newCoupon.setCouponsetUuid(coupon.getCouponsetUuid());
newCoupon.setDiscount(coupon.getDiscount());
newCoupon.setExpiration(coupon.getExpiration());
newCoupon.setDescription(couponset.getShortDescription());
newCoupon.setName(couponset.getName());
newCoupon.setMerchantUuid(couponset.getMerchantUuid());
newCoupon.setInnerText(couponset.getInnerText());
newCoupon.setDiscount_type(couponset.getDiscountType());
newCoupon.setFinal_price(couponset.getFinalPrice());
mCouponList.add(newCoupon);
}
if (jobjCouponsResponse != null && jobjCouponsResponse.has("status") && jobjCouponsResponse.optInt("status", 2) == 1) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_success_user_coupons_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
JSONObject finalJobjCouponsResponse = jobjCouponsResponse;
final ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(() -> {
// COUPONS START //
JSONArray jCouponsBody = null;
try {
jCouponsBody = finalJobjCouponsResponse.optJSONArray("result");
} catch (Exception e) {
e.printStackTrace();
}
// COUPONS END //
// COUPONSETS START //
JSONArray jCouponsetsBody = null;
try {
jCouponsetsBody = finalJobjCouponsetsResponse.optJSONObject("context").optJSONArray("MAPP_COUPON");
} catch (Exception e) {
e.printStackTrace();
}
// COUPONSETS END //
if (jCouponsetsBody != null && jCouponsBody != null) {
CouponList mCouponList = new CouponList();
CouponsetsList mCouponsetList = new CouponsetsList();
for (int i = 0; i < jCouponsetsBody.length(); ++i) {
Couponset tempCouponset = new Couponset(jCouponsetsBody.optJSONObject(i));
mCouponsetList.add(tempCouponset);
for (int j = 0; j < jCouponsBody.length(); ++j) {
Coupon tempCoupon = new Coupon(jCouponsBody.optJSONObject(j));
if (tempCoupon.getCouponsetUuid().equals(tempCouponset.getUuid())) {
tempCoupon.setDescription(tempCouponset.getShortDescription());
tempCoupon.setImage(tempCouponset.getImgPreview());
tempCoupon.setName(tempCouponset.getName());
tempCoupon.setMerchantUuid(tempCouponset.getMerchantUuid());
tempCoupon.setInnerText(tempCouponset.getInnerText());
tempCoupon.setDiscount_type(tempCouponset.getDiscount_type());
tempCoupon.setFinal_price(tempCouponset.getFinal_price());
mCouponList.add(tempCoupon);
break;
}
}
}
WarplyManagerHelper.setCouponsets(mCouponsetList);
WarplyManagerHelper.setCouponList(mCouponList);
CouponList mActiveCouponList = new CouponList();
......@@ -2647,34 +2132,10 @@ public class WarplyManager {
Collections.sort(mActiveCouponList, (coupon1, coupon2) -> coupon1.getExpirationDate().compareTo(coupon2.getExpirationDate()));
CouponsetsList newCouponstList = new CouponsetsList();
for (CouponsetModel.MappCoupon couponsetOld : response.body().getContext().getMappCoupon()) {
Couponset newCouponset = new Couponset();
newCouponset.setUuid(couponsetOld.getUuid());
newCouponset.setImg_preview(couponsetOld.getImgPreview());
newCouponset.setExpiration(couponsetOld.getExpiration().getValue());
newCouponset.setName(couponsetOld.getName());
newCouponset.setDescription(couponsetOld.getDescription());
newCouponset.setShort_description(couponsetOld.getShortDescription());
newCouponset.setDiscount(couponsetOld.getDiscount());
newCouponset.setTerms(couponsetOld.getTerms());
newCouponset.setMerchantUuid(couponsetOld.getMerchantUuid());
newCouponset.setInnerText(couponsetOld.getInnerText());
newCouponset.setDiscount_type(couponsetOld.getDiscountType());
newCouponset.setFinal_price(couponsetOld.getFinalPrice());
newCouponstList.add(newCouponset);
}
WarplyManagerHelper.setCouponsets(newCouponstList);
return mActiveCouponList;
}
@Override
protected void onPostExecute(CouponList couponsResponse) {
super.onPostExecute(couponsResponse);
receiver.onSuccess(couponsResponse);
new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mActiveCouponList));
executor.shutdownNow();
}
}.execute();
});
} else {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_user_coupons_loyalty");
......@@ -2690,35 +2151,38 @@ public class WarplyManager {
}
@Override
public void onFailure(Call<CouponModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_user_coupons_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
receiver.onFailure(2);
}
});
} else {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_couponsets_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
receiver.onFailure(2);
}
} else {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_couponsets_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
receiver.onFailure(2);
receiver.onFailure(responseCouponsets.code());
}
}
@Override
public void onFailure(Call<CouponsetModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_couponsets_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
receiver.onFailure(2);
}
});
}
} else {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_shops_loyalty");
......@@ -2731,12 +2195,12 @@ public class WarplyManager {
dynatraceEvent.setEventName("custom_error_shops_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
receiver.onFailure(2);
receiver.onFailure(responseMerchants.code());
}
}
@Override
public void onFailure(Call<MerchantModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
dynatraceEvent.setEventName("custom_error_shops_loyalty");
EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
......@@ -2746,16 +2210,24 @@ public class WarplyManager {
});
}
private static void getCouponsetsRetro(Callback<CouponsetModel> callback) {
private static void getCouponsetsRetro(ApiService service, Callback<ResponseBody> callback) {
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
CouponsetRequestModel couponsetRequest = new CouponsetRequestModel();
Call<CouponsetModel> couponsetCall = service.getCouponsets(
Map<String, Object> jsonParamsCouponsets = new ArrayMap<>();
Map<String, Object> jsonParams = new ArrayMap<>();
jsonParams.put("action", "retrieve_multilingual");
jsonParams.put("active", true);
jsonParams.put("visible", true);
jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
jsonParamsCouponsets.put("coupon", jsonParams);
RequestBody couponsetsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCouponsets)).toString());
Call<ResponseBody> couponsetsCall = service.getCouponsets(
WarplyProperty.getAppUuid(Warply.getWarplyContext()),
couponsetRequest,
couponsetsRequest,
timeStamp,
"android:" + Warply.getWarplyContext().getPackageName(),
new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
......@@ -2764,27 +2236,39 @@ public class WarplyManager {
WarpUtils.produceSignature(apiKey + timeStamp)
);
couponsetCall.enqueue(new Callback<CouponsetModel>() { /* =================================== Couponsets Start =================================== */
couponsetsCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<CouponsetModel> call, Response<CouponsetModel> response) {
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
callback.onResponse(call, response);
}
@Override
public void onFailure(Call<CouponsetModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
callback.onFailure(call, t);
}
}); /* ====================================================================================== Couponsets nd =========================================== */
});
}
private static void getMerchantsRetro(Callback<MerchantModel> callback) {
private static void getMerchantsRetro(ApiService service, Callback<ResponseBody> callback) {
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
MerchantsRequestModel merchantsRequest = new MerchantsRequestModel();
Call<MerchantModel> merchantsCall = service.getMerchants(
Map<String, Object> jsonParamsShops = new ArrayMap<>();
Map<String, Object> jsonParams = new ArrayMap<>();
jsonParams.put("action", "retrieve_multilingual");
jsonParams.put("categories", new JSONArray());
jsonParams.put("active", true);
jsonParams.put("location", null);
jsonParams.put("parent_uuids", null);
jsonParams.put("tags", null);
jsonParams.put("default_shown", null);
jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
jsonParamsShops.put("shops", jsonParams);
RequestBody merchantsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsShops)).toString());
Call<ResponseBody> merchantsCall = service.getMerchants(
WarplyProperty.getAppUuid(Warply.getWarplyContext()),
merchantsRequest,
timeStamp,
......@@ -2795,29 +2279,38 @@ public class WarplyManager {
WarpUtils.produceSignature(apiKey + timeStamp)
);
merchantsCall.enqueue(new Callback<MerchantModel>() { /* =================================== Merchants Start =================================== */
merchantsCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<MerchantModel> call, Response<MerchantModel> response) {
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
callback.onResponse(call, response);
}
@Override
public void onFailure(Call<MerchantModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
callback.onFailure(call, t);
}
}); /* ====================================================================================== Merchants End ======================================= */
});
}
private static void getUserCouponsRetro(Callback<CouponModel> callback) {
private static void getUserCouponsRetro(ApiService service, Callback<ResponseBody> callback) {
String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
String webId = WarpUtils.getWebId(Warply.getWarplyContext());
ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
CouponRequestModel couponRequest = new CouponRequestModel();
Call<CouponModel> couponCall = service.getUserCoupons(
Map<String, Object> jsonParamsCoupons = new ArrayMap<>();
Map<String, Object> jsonParams = new ArrayMap<>();
jsonParams.put("action", "get_user_coupons");
JSONArray jArr = new JSONArray();
jArr.put("transaction");
jArr.put("communication");
jsonParams.put("fetch_data", jArr);
jsonParamsCoupons.put("coupon", jsonParams);
RequestBody couponsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCoupons)).toString());
Call<ResponseBody> couponsCall = service.getUserCoupons(
WarplyProperty.getAppUuid(Warply.getWarplyContext()),
couponRequest,
couponsRequest,
timeStamp,
"android:" + Warply.getWarplyContext().getPackageName(),
new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
......@@ -2827,16 +2320,16 @@ public class WarplyManager {
"Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token")
);
couponCall.enqueue(new Callback<CouponModel>() { /* ================================== Coupons Start ================================== */
couponsCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<CouponModel> call, Response<CouponModel> response) {
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
if (response.code() == 401) {
refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
@Override
public void onSuccess(JSONObject result) {
int status = result.optInt("status", 2);
if (status == 1)
getUserCouponsRetro(callback);
getUserCouponsRetro(service, callback);
else
callback.onFailure(call, new Throwable());
}
......@@ -2846,16 +2339,16 @@ public class WarplyManager {
callback.onFailure(call, new Throwable());
}
});
} else if (response.code() == 200) {
} else {
callback.onResponse(call, response);
}
}
@Override
public void onFailure(Call<CouponModel> call, Throwable t) {
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
callback.onFailure(call, t);
}
}); /* ============================================================================== Coupons nd ====================================== */
});
}
public static void getCosmoteUser(WarplyCosmoteUserRequest request, final CallbackReceiver<JSONObject> receiver) {
......@@ -3196,7 +2689,7 @@ public class WarplyManager {
}
public static void makeGetRequest(String url) {
// Always run it in a new Thread, not in the main
// Always run it in a new Thread, not in the main, ie Executors
// new Thread(() -> {
// makeGetRequest(session_uuid);
// }).start();
......@@ -3205,11 +2698,11 @@ public class WarplyManager {
// api 'com.squareup.retrofit2:retrofit:2.9.0'
// api 'com.squareup.okhttp3:okhttp:4.10.0'
// And uncomment the code inside RetrofitInterface.java
// And uncomment the code inside ApiService.java
// OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
// httpClient.followRedirects(FALSE)
// .followSslRedirects(FALSE);
// httpClient.followRedirects(false)
// .followSslRedirects(false);
//
// Retrofit retrofit = new Retrofit.Builder()
// .baseUrl(WarplyProperty.getBaseUrl(Warply.getWarplyContext()))
......
......@@ -88,7 +88,7 @@
android:layout_width="240dp"
android:layout_height="50dp"
android:layout_marginHorizontal="32dp"
android:layout_marginTop="88dp"
android:layout_marginTop="27dp"
android:background="@drawable/selector_button_green"
android:gravity="center"
android:orientation="horizontal">
......
......@@ -12,8 +12,8 @@
android:id="@+id/cl_more_header"
android:layout_width="match_parent"
android:layout_height="64dp"
android:translationZ="10dp"
android:background="@drawable/ic_background_transparent_shadow">
android:background="@drawable/ic_background_transparent_shadow"
android:translationZ="10dp">
<ImageView
android:id="@+id/iv_list_close"
......@@ -43,7 +43,7 @@
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-18dp"
......@@ -51,11 +51,11 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:overScrollMode="never">
<LinearLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
......@@ -152,6 +152,7 @@
android:id="@+id/ll_exclusive_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_research_items"
android:orientation="vertical"
android:visibility="gone">
......@@ -180,6 +181,7 @@
android:id="@+id/ll_contest_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_exclusive_items"
android:orientation="vertical"
android:visibility="gone">
......@@ -208,6 +210,7 @@
android:id="@+id/ll_contextual_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_contest_items"
android:orientation="vertical"
android:visibility="gone">
......@@ -231,7 +234,7 @@
android:overScrollMode="never"
android:paddingBottom="4dp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</ScrollView>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
......