Panagiotis Triantafyllou

new release

...@@ -3,6 +3,8 @@ package ly.warp.sdk.activities; ...@@ -3,6 +3,8 @@ package ly.warp.sdk.activities;
3 import android.app.Activity; 3 import android.app.Activity;
4 import android.content.Intent; 4 import android.content.Intent;
5 import android.os.Bundle; 5 import android.os.Bundle;
6 +import android.text.TextUtils;
7 +import android.util.Log;
6 import android.view.View; 8 import android.view.View;
7 import android.widget.ImageView; 9 import android.widget.ImageView;
8 import android.widget.LinearLayout; 10 import android.widget.LinearLayout;
...@@ -26,7 +28,9 @@ import ly.warp.sdk.io.models.Couponset; ...@@ -26,7 +28,9 @@ import ly.warp.sdk.io.models.Couponset;
26 import ly.warp.sdk.io.models.CouponsetsList; 28 import ly.warp.sdk.io.models.CouponsetsList;
27 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel; 29 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel;
28 import ly.warp.sdk.io.models.LoyaltyGiftsForYouOfferClickEvent; 30 import ly.warp.sdk.io.models.LoyaltyGiftsForYouOfferClickEvent;
31 +import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage;
29 import ly.warp.sdk.io.models.MergedGifts; 32 import ly.warp.sdk.io.models.MergedGifts;
33 +import ly.warp.sdk.utils.WarpJSONParser;
30 import ly.warp.sdk.utils.WarpUtils; 34 import ly.warp.sdk.utils.WarpUtils;
31 import ly.warp.sdk.utils.WarplyManagerHelper; 35 import ly.warp.sdk.utils.WarplyManagerHelper;
32 import ly.warp.sdk.utils.managers.WarplyEventBusManager; 36 import ly.warp.sdk.utils.managers.WarplyEventBusManager;
...@@ -45,13 +49,7 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -45,13 +49,7 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
45 49
46 private ImageView mIvBack, mIvPopupClose; 50 private ImageView mIvBack, mIvPopupClose;
47 private TextView mTvTitle; 51 private TextView mTvTitle;
48 - /**** Old functionality ****/
49 -// private RecyclerView mRecyclerGifts, mRecyclerRewards, mRecyclerCoupons;
50 -// private ProfileCampaignAdapter mAdapterGifts, mAdapterRewards;
51 -// private CouponsetsAdapter mAdapterCoupons;
52 -// private ConstraintLayout mClGiftsOuter, mClRewardsOuter, mClCouponsOuter;
53 private HashMap<String, CampaignList> mUniqueGiftsList = new HashMap<String, CampaignList>(); 52 private HashMap<String, CampaignList> mUniqueGiftsList = new HashMap<String, CampaignList>();
54 - /**** Old functionality ****/
55 private LinearLayout mLlGiftsPopup; 53 private LinearLayout mLlGiftsPopup;
56 private ArrayList<MergedGifts> mData = new ArrayList(); 54 private ArrayList<MergedGifts> mData = new ArrayList();
57 private RecyclerView mRecyclerMergedGifts; 55 private RecyclerView mRecyclerMergedGifts;
...@@ -64,10 +62,7 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -64,10 +62,7 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
64 public void onCreate(Bundle savedInstanceState) { 62 public void onCreate(Bundle savedInstanceState) {
65 super.onCreate(savedInstanceState); 63 super.onCreate(savedInstanceState);
66 setContentView(R.layout.activity_gifts_for_you); 64 setContentView(R.layout.activity_gifts_for_you);
67 - 65 + ArrayList<LoyaltyGiftsForYouPackage> list = new ArrayList();
68 - /**** Old functionality ****/
69 -// getCampaignsBySubcategory();
70 - /**** Old functionality ****/
71 mergeDatasets( 66 mergeDatasets(
72 WarplyManagerHelper.getUniqueCampaignList().get("gifts_for_you"), 67 WarplyManagerHelper.getUniqueCampaignList().get("gifts_for_you"),
73 WarplyManagerHelper.getCouponsets() 68 WarplyManagerHelper.getCouponsets()
...@@ -78,17 +73,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -78,17 +73,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
78 mIvPopupClose = findViewById(R.id.iv_popup_gifts_close); 73 mIvPopupClose = findViewById(R.id.iv_popup_gifts_close);
79 mLlGiftsPopup = findViewById(R.id.ll_gifts_popup); 74 mLlGiftsPopup = findViewById(R.id.ll_gifts_popup);
80 75
81 - /**** Old functionality ****/
82 -// mClGiftsOuter = findViewById(R.id.cl_recycler_inner);
83 -// mRecyclerGifts = findViewById(R.id.rv_gifts);
84 -
85 -// mClRewardsOuter = findViewById(R.id.cl_recycler_inner2);
86 -// mRecyclerRewards = findViewById(R.id.rv_rewards);
87 -
88 -// mClCouponsOuter = findViewById(R.id.cl_recycler_inner3);
89 -// mRecyclerCoupons = findViewById(R.id.rv_coupons);
90 - /**** Old functionality ****/
91 -
92 mRecyclerMergedGifts = findViewById(R.id.rv_merged_gifts); 76 mRecyclerMergedGifts = findViewById(R.id.rv_merged_gifts);
93 77
94 initViews(); 78 initViews();
...@@ -123,55 +107,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -123,55 +107,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
123 if (WarpUtils.getGiftsPopup(this)) 107 if (WarpUtils.getGiftsPopup(this))
124 mLlGiftsPopup.setVisibility(View.VISIBLE); 108 mLlGiftsPopup.setVisibility(View.VISIBLE);
125 109
126 - /**** Old functionality ****/
127 -// if (mUniqueGiftsList.get("gifts") != null && mUniqueGiftsList.get("gifts").size() > 0) {
128 -// mRecyclerGifts.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
129 -// mAdapterGifts = new ProfileCampaignAdapter(this, mUniqueGiftsList.get("gifts"));
130 -// mRecyclerGifts.setAdapter(mAdapterGifts);
131 -// mAdapterGifts.getPositionClicks()
132 -// .doOnNext(gift -> {
133 -// startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(gift)));
134 -// })
135 -// .doOnError(error -> {
136 -// })
137 -// .subscribe();
138 -// } else {
139 -// mClGiftsOuter.setVisibility(View.GONE);
140 -// }
141 -
142 -// if (mUniqueGiftsList.get("rewards") != null && mUniqueGiftsList.get("rewards").size() > 0) {
143 -// mRecyclerRewards.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
144 -// mAdapterRewards = new ProfileCampaignAdapter(this, mUniqueGiftsList.get("rewards"));
145 -// mRecyclerRewards.setAdapter(mAdapterRewards);
146 -// mAdapterRewards.getPositionClicks()
147 -// .doOnNext(reward -> {
148 -// startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(reward)));
149 -// })
150 -// .doOnError(error -> {
151 -// })
152 -// .subscribe();
153 -// } else {
154 -// mClRewardsOuter.setVisibility(View.GONE);
155 -// }
156 -
157 -// if (WarplyManagerHelper.getCouponsets() != null && WarplyManagerHelper.getCouponsets().size() > 0) {
158 -// mRecyclerCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
159 -// mAdapterCoupons = new CouponsetsAdapter(this, WarplyManagerHelper.getCouponsets());
160 -// mRecyclerCoupons.setAdapter(mAdapterCoupons);
161 -// mAdapterCoupons.getPositionClicks()
162 -// .doOnNext(couponset -> {
163 -// Intent intent = new Intent(GiftsForYouActivity.this, CouponsetInfoActivity.class);
164 -// intent.putExtra("couponset", (Serializable) couponset);
165 -// startActivity(intent);
166 -// })
167 -// .doOnError(error -> {
168 -// })
169 -// .subscribe();
170 -// } else {
171 -// mClCouponsOuter.setVisibility(View.GONE);
172 -// }
173 - /**** Old functionality ****/
174 -
175 if (mData != null && mData.size() > 0) { 110 if (mData != null && mData.size() > 0) {
176 mRecyclerMergedGifts.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 111 mRecyclerMergedGifts.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
177 mAdapterMergedGifts = new MergedGiftsAdapter(this, mData); 112 mAdapterMergedGifts = new MergedGiftsAdapter(this, mData);
...@@ -181,7 +116,21 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -181,7 +116,21 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
181 if (dataItem.getDataType() == 1) { 116 if (dataItem.getDataType() == 1) {
182 EventBus.getDefault().post(new WarplyEventBusManager(new LoyaltyGiftsForYouOfferClickEvent())); 117 EventBus.getDefault().post(new WarplyEventBusManager(new LoyaltyGiftsForYouOfferClickEvent()));
183 118
119 + try {
120 + String key = WarpJSONParser.getJSONFromString(dataItem.getCampaign().getExtraFields()).keys().next();
121 + if (!TextUtils.isEmpty(key) && key.equals("loyaltyCampaignId")) {
122 + String value = WarpJSONParser.getJSONFromString(dataItem.getCampaign().getExtraFields()).optString("loyaltyCampaignId");
123 + for (LoyaltyContextualOfferModel ccms : WarplyManagerHelper.getCCMSLoyaltyCampaigns()) {
124 + if (ccms.getLoyaltyCampaignId().equals(value)) {
125 + startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCcmsUrl(dataItem.getCampaign(), ccms.getSessionId())));
126 + return;
127 + }
128 + }
129 + }
130 + startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(dataItem.getCampaign())));
131 + } catch (Exception exception) {
184 startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(dataItem.getCampaign()))); 132 startActivity(WarpViewActivity.createIntentFromURL(this, WarplyManagerHelper.constructCampaignUrl(dataItem.getCampaign())));
133 + }
185 } else if (dataItem.getDataType() == 2) { 134 } else if (dataItem.getDataType() == 2) {
186 EventBus.getDefault().post(new WarplyEventBusManager(new LoyaltyContextualOfferModel())); 135 EventBus.getDefault().post(new WarplyEventBusManager(new LoyaltyContextualOfferModel()));
187 136
...@@ -193,33 +142,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene ...@@ -193,33 +142,6 @@ public class GiftsForYouActivity extends Activity implements View.OnClickListene
193 .doOnError(error -> { 142 .doOnError(error -> {
194 }) 143 })
195 .subscribe(); 144 .subscribe();
196 - } else {
197 -// mClCouponsOuter.setVisibility(View.GONE);
198 - }
199 - }
200 -
201 - private void getCampaignsBySubcategory() {
202 - if (WarplyManagerHelper.getUniqueCampaignList().get("gifts_for_you") != null && WarplyManagerHelper.getUniqueCampaignList().get("gifts_for_you").size() > 0) {
203 - for (Campaign campaign : WarplyManagerHelper.getUniqueCampaignList().get("gifts_for_you")) {
204 - JSONObject campaignExtra = null;
205 - try {
206 - campaignExtra = new JSONObject(campaign.getExtraFields());
207 - } catch (JSONException e) {
208 - e.printStackTrace();
209 - }
210 -
211 - if (campaignExtra != null) {
212 - if (mUniqueGiftsList.containsKey(campaignExtra.optString("subcategory").trim())) {
213 - CampaignList tempCampaignList = mUniqueGiftsList.get(campaignExtra.optString("subcategory").trim());
214 - tempCampaignList.add(campaign);
215 - mUniqueGiftsList.put(campaignExtra.optString("subcategory").trim(), tempCampaignList);
216 - } else {
217 - CampaignList tempCampaignList = new CampaignList();
218 - tempCampaignList.add(campaign);
219 - mUniqueGiftsList.put(campaignExtra.optString("subcategory").trim(), tempCampaignList);
220 - }
221 - }
222 - }
223 } 145 }
224 } 146 }
225 147
......
1 +package ly.warp.sdk.io.request;
2 +
3 +import android.util.Base64;
4 +
5 +import org.json.JSONException;
6 +import org.json.JSONObject;
7 +
8 +import java.io.UnsupportedEncodingException;
9 +import java.security.MessageDigest;
10 +import java.security.NoSuchAlgorithmException;
11 +import java.util.HashMap;
12 +
13 +import ly.warp.sdk.utils.constants.WarpConstants;
14 +
15 +/**
16 + * Created by Panagiotis Triantafyllou on 23-June-22.
17 + */
18 +
19 +public class CosmoteRetrieveSharingRequest {
20 +
21 + // ===========================================================
22 + // Constants
23 + // ===========================================================
24 +
25 + private final String KEY_MAPP = "wallet";
26 + private final String KEY_ACTION = "action";
27 + private final String KEY_ACTION_VALUE = "sharing_response";
28 + private final String KEY_SHARING_ID_KEY = "sharing_id";
29 + private final String KEY_ACCEPT_KEY = "accept";
30 +
31 + // ===========================================================
32 + // Fields
33 + // ===========================================================
34 +
35 + private HashMap<String, String> mFilters;
36 + private long mCacheUpdateInterval = 0;
37 + private String mSharingId = "";
38 + private boolean mIsAccept = false;
39 +
40 + // ===========================================================
41 + // Constructor
42 + // ===========================================================
43 +
44 + /**
45 + * Default constructor of CosmoteRetrieveSharingRequest, initializes an empty filters HashMap
46 + */
47 + public CosmoteRetrieveSharingRequest() {
48 + mFilters = new HashMap<>();
49 + }
50 +
51 + public CosmoteRetrieveSharingRequest(CosmoteRetrieveSharingRequest copy) {
52 + if (copy != null) {
53 + this.mFilters = copy.mFilters;
54 + this.mCacheUpdateInterval = copy.mCacheUpdateInterval;
55 + }
56 + }
57 +
58 + // ===========================================================
59 + // Methods for/from SuperClass/Interfaces
60 + // ===========================================================
61 +
62 + @Override
63 + public boolean equals(Object object) {
64 + if (object instanceof CosmoteRetrieveSharingRequest) {
65 + CosmoteRetrieveSharingRequest other = (CosmoteRetrieveSharingRequest) object;
66 + return other == this || (this.mFilters == other.mFilters || (this.mFilters != null && this.mFilters.equals(other.mFilters)));
67 + }
68 + return false;
69 + }
70 +
71 + @Override
72 + public int hashCode() {
73 + return mFilters.hashCode();
74 + }
75 +
76 + // ===========================================================
77 + // Methods
78 + // ===========================================================
79 +
80 + // ===========================================================
81 + // Getter & Setter
82 + // ===========================================================
83 +
84 + public CosmoteRetrieveSharingRequest setSharingId(String sharingId) {
85 + mSharingId = sharingId;
86 + return this;
87 + }
88 +
89 + public CosmoteRetrieveSharingRequest setAccept(boolean acceptGift) {
90 + mIsAccept = acceptGift;
91 + return this;
92 + }
93 +
94 + /**
95 + * Call this to get how often the cached data will be updated.
96 + *
97 + * @return mCacheUpdateInterval
98 + */
99 + public long getCacheUpdateInterval() {
100 + return mCacheUpdateInterval;
101 + }
102 +
103 + /**
104 + * Call this to set how often the cached data will be updated.
105 + *
106 + * @param updateInterval The time that data will be cached
107 + * @return CosmoteRetrieveSharingRequest
108 + */
109 + public CosmoteRetrieveSharingRequest setCacheUpdateInterval(long updateInterval) {
110 +
111 + this.mCacheUpdateInterval = updateInterval;
112 + if (mCacheUpdateInterval < 0) {
113 + mCacheUpdateInterval = 0;
114 + }
115 + return this;
116 + }
117 +
118 + /**
119 + * Call this to check if the Application uses Cache
120 + *
121 + * @return <p>true - the Application is using Cache</p>
122 + * <p>false - the Application is not using Cache</p>
123 + */
124 + public boolean isUseCache() {
125 + return mCacheUpdateInterval > 0;
126 + }
127 +
128 + /**
129 + * Call this to check whether the cached data need to be updated
130 + *
131 + * @param useCache <p>true - the Application is using Cache</p>
132 + * <p>false - the Application is not using Cache</p>
133 + * @return CosmoteRetrieveSharingRequest
134 + */
135 + public CosmoteRetrieveSharingRequest setUseCache(boolean useCache) {
136 +
137 + if (useCache) {
138 + mCacheUpdateInterval = mCacheUpdateInterval > 0 ? mCacheUpdateInterval
139 + : WarpConstants.INBOX_UPDATE_INTERVAL;
140 + } else {
141 + mCacheUpdateInterval = 0;
142 + }
143 + return this;
144 + }
145 +
146 + /**
147 + * Call this to build the offers Json object
148 + *
149 + * @return bodyJsonObject
150 + */
151 + public JSONObject toJson() {
152 + JSONObject bodyJsonObject = new JSONObject();
153 + try {
154 + JSONObject extraJson = new JSONObject();
155 + extraJson.putOpt(KEY_ACTION, KEY_ACTION_VALUE);
156 + extraJson.putOpt(KEY_SHARING_ID_KEY, mSharingId);
157 + extraJson.putOpt(KEY_ACCEPT_KEY, mIsAccept);
158 + bodyJsonObject.putOpt(KEY_MAPP, extraJson);
159 + } catch (JSONException e) {
160 + if (WarpConstants.DEBUG)
161 + e.printStackTrace();
162 + }
163 + return bodyJsonObject;
164 + }
165 +
166 + public String getSignature() {
167 + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_cosmote_retrieve_sharing_request";
168 + try {
169 + byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8"));
170 + signature = Base64.encodeToString(hash, Base64.NO_WRAP);
171 + } catch (NullPointerException | NoSuchAlgorithmException
172 + | UnsupportedEncodingException e) {
173 + e.printStackTrace();
174 + }
175 + return signature;
176 + }
177 +}
1 +package ly.warp.sdk.io.request;
2 +
3 +import android.util.Base64;
4 +
5 +import org.json.JSONArray;
6 +import org.json.JSONException;
7 +import org.json.JSONObject;
8 +
9 +import java.io.UnsupportedEncodingException;
10 +import java.security.MessageDigest;
11 +import java.security.NoSuchAlgorithmException;
12 +import java.util.ArrayList;
13 +import java.util.HashMap;
14 +
15 +import ly.warp.sdk.utils.constants.WarpConstants;
16 +
17 +/**
18 + * Created by Panagiotis Triantafyllou on 23-June-22.
19 + */
20 +
21 +public class CosmoteSharingRequest {
22 +
23 + // ===========================================================
24 + // Constants
25 + // ===========================================================
26 +
27 + private final String KEY_MAPP = "wallet";
28 + private final String KEY_ACTION = "action";
29 + private final String KEY_ACTION_VALUE = "sharing_info";
30 + private final String KEY_SHARING_ID_KEY = "sharing_id";
31 +
32 + // ===========================================================
33 + // Fields
34 + // ===========================================================
35 +
36 + private HashMap<String, String> mFilters;
37 + private long mCacheUpdateInterval = 0;
38 + private String mSharingId = "";
39 +
40 + // ===========================================================
41 + // Constructor
42 + // ===========================================================
43 +
44 + /**
45 + * Default constructor of CosmoteSharingRequest, initializes an empty filters HashMap
46 + */
47 + public CosmoteSharingRequest() {
48 + mFilters = new HashMap<>();
49 + }
50 +
51 + public CosmoteSharingRequest(CosmoteSharingRequest copy) {
52 + if (copy != null) {
53 + this.mFilters = copy.mFilters;
54 + this.mCacheUpdateInterval = copy.mCacheUpdateInterval;
55 + }
56 + }
57 +
58 + // ===========================================================
59 + // Methods for/from SuperClass/Interfaces
60 + // ===========================================================
61 +
62 + @Override
63 + public boolean equals(Object object) {
64 + if (object instanceof CosmoteSharingRequest) {
65 + CosmoteSharingRequest other = (CosmoteSharingRequest) object;
66 + return other == this || (this.mFilters == other.mFilters || (this.mFilters != null && this.mFilters.equals(other.mFilters)));
67 + }
68 + return false;
69 + }
70 +
71 + @Override
72 + public int hashCode() {
73 + return mFilters.hashCode();
74 + }
75 +
76 + // ===========================================================
77 + // Methods
78 + // ===========================================================
79 +
80 + // ===========================================================
81 + // Getter & Setter
82 + // ===========================================================
83 +
84 + public CosmoteSharingRequest setSharingId(String sharingId) {
85 + mSharingId = sharingId;
86 + return this;
87 + }
88 +
89 + /**
90 + * Call this to get how often the cached data will be updated.
91 + *
92 + * @return mCacheUpdateInterval
93 + */
94 + public long getCacheUpdateInterval() {
95 + return mCacheUpdateInterval;
96 + }
97 +
98 + /**
99 + * Call this to set how often the cached data will be updated.
100 + *
101 + * @param updateInterval The time that data will be cached
102 + * @return CosmoteSharingRequest
103 + */
104 + public CosmoteSharingRequest setCacheUpdateInterval(long updateInterval) {
105 +
106 + this.mCacheUpdateInterval = updateInterval;
107 + if (mCacheUpdateInterval < 0) {
108 + mCacheUpdateInterval = 0;
109 + }
110 + return this;
111 + }
112 +
113 + /**
114 + * Call this to check if the Application uses Cache
115 + *
116 + * @return <p>true - the Application is using Cache</p>
117 + * <p>false - the Application is not using Cache</p>
118 + */
119 + public boolean isUseCache() {
120 + return mCacheUpdateInterval > 0;
121 + }
122 +
123 + /**
124 + * Call this to check whether the cached data need to be updated
125 + *
126 + * @param useCache <p>true - the Application is using Cache</p>
127 + * <p>false - the Application is not using Cache</p>
128 + * @return CosmoteSharingRequest
129 + */
130 + public CosmoteSharingRequest setUseCache(boolean useCache) {
131 +
132 + if (useCache) {
133 + mCacheUpdateInterval = mCacheUpdateInterval > 0 ? mCacheUpdateInterval
134 + : WarpConstants.INBOX_UPDATE_INTERVAL;
135 + } else {
136 + mCacheUpdateInterval = 0;
137 + }
138 + return this;
139 + }
140 +
141 + /**
142 + * Call this to build the offers Json object
143 + *
144 + * @return bodyJsonObject
145 + */
146 + public JSONObject toJson() {
147 + JSONObject bodyJsonObject = new JSONObject();
148 + try {
149 + JSONObject extraJson = new JSONObject();
150 + extraJson.putOpt(KEY_ACTION, KEY_ACTION_VALUE);
151 + extraJson.putOpt(KEY_SHARING_ID_KEY, mSharingId);
152 + bodyJsonObject.putOpt(KEY_MAPP, extraJson);
153 + } catch (JSONException e) {
154 + if (WarpConstants.DEBUG)
155 + e.printStackTrace();
156 + }
157 + return bodyJsonObject;
158 + }
159 +
160 + public String getSignature() {
161 + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_cosmote_sharing_request";
162 + try {
163 + byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8"));
164 + signature = Base64.encodeToString(hash, Base64.NO_WRAP);
165 + } catch (NullPointerException | NoSuchAlgorithmException
166 + | UnsupportedEncodingException e) {
167 + e.printStackTrace();
168 + }
169 + return signature;
170 + }
171 +}
...@@ -12,6 +12,7 @@ import java.security.NoSuchAlgorithmException; ...@@ -12,6 +12,7 @@ import java.security.NoSuchAlgorithmException;
12 import java.util.ArrayList; 12 import java.util.ArrayList;
13 import java.util.HashMap; 13 import java.util.HashMap;
14 14
15 +import ly.warp.sdk.utils.WarplyManagerHelper;
15 import ly.warp.sdk.utils.constants.WarpConstants; 16 import ly.warp.sdk.utils.constants.WarpConstants;
16 17
17 /** 18 /**
...@@ -145,15 +146,11 @@ public class WarplyIntegrationRequest { ...@@ -145,15 +146,11 @@ public class WarplyIntegrationRequest {
145 JSONObject extraJson = new JSONObject(); 146 JSONObject extraJson = new JSONObject();
146 extraJson.putOpt(KEY_ACTION, KEY_ACTION_VALUE); 147 extraJson.putOpt(KEY_ACTION, KEY_ACTION_VALUE);
147 extraJson.putOpt(KEY_METHOD, KEY_METHOD_VALUE); 148 extraJson.putOpt(KEY_METHOD, KEY_METHOD_VALUE);
148 - ArrayList list = new ArrayList();
149 - list.add("6982853746");
150 - list.add("6982853747");
151 - list.add("6982853748");
152 JSONObject data = new JSONObject(); 149 JSONObject data = new JSONObject();
153 - data.putOpt("nonTelco", false); 150 + data.putOpt("nonTelco", WarplyManagerHelper.loadCustomerState().isNonTelco());
154 - data.putOpt("acceptedConsent", true); 151 + data.putOpt("acceptedConsent", WarplyManagerHelper.loadCustomerState().isAcceptedConsent());
155 - data.putOpt("msisdnList", new JSONArray(list)); 152 + data.putOpt("msisdnList", new JSONArray(WarplyManagerHelper.loadCustomerState().getMsisdnList()));
156 - data.putOpt("guid", "12345678"); 153 + data.putOpt("guid", WarplyManagerHelper.loadCustomerState().getGuid());
157 154
158 extraJson.putOpt(KEY_DATA, data); 155 extraJson.putOpt(KEY_DATA, data);
159 bodyJsonObject.putOpt(KEY_MAPP, extraJson); 156 bodyJsonObject.putOpt(KEY_MAPP, extraJson);
......
...@@ -25,15 +25,21 @@ ...@@ -25,15 +25,21 @@
25 25
26 package ly.warp.sdk.utils; 26 package ly.warp.sdk.utils;
27 27
28 +import android.content.Context;
29 +import android.text.TextUtils;
28 import android.util.Log; 30 import android.util.Log;
29 31
32 +import androidx.appcompat.app.AlertDialog;
33 +
30 import org.json.JSONObject; 34 import org.json.JSONObject;
31 35
32 import java.util.ArrayList; 36 import java.util.ArrayList;
33 import java.util.HashMap; 37 import java.util.HashMap;
34 38
39 +import ly.warp.sdk.R;
35 import ly.warp.sdk.Warply; 40 import ly.warp.sdk.Warply;
36 import ly.warp.sdk.db.WarplyDBHelper; 41 import ly.warp.sdk.db.WarplyDBHelper;
42 +import ly.warp.sdk.io.callbacks.CallbackReceiver;
37 import ly.warp.sdk.io.models.ActiveDFYCouponModel; 43 import ly.warp.sdk.io.models.ActiveDFYCouponModel;
38 import ly.warp.sdk.io.models.Campaign; 44 import ly.warp.sdk.io.models.Campaign;
39 import ly.warp.sdk.io.models.CampaignList; 45 import ly.warp.sdk.io.models.CampaignList;
...@@ -43,6 +49,9 @@ import ly.warp.sdk.io.models.CouponsetsList; ...@@ -43,6 +49,9 @@ import ly.warp.sdk.io.models.CouponsetsList;
43 import ly.warp.sdk.io.models.CustomerStateModel; 49 import ly.warp.sdk.io.models.CustomerStateModel;
44 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel; 50 import ly.warp.sdk.io.models.LoyaltyContextualOfferModel;
45 import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage; 51 import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage;
52 +import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest;
53 +import ly.warp.sdk.io.request.CosmoteSharingRequest;
54 +import ly.warp.sdk.utils.managers.WarplyManager;
46 55
47 /** 56 /**
48 * Created by Panagiotis Triantafyllou on 18-Apr-22. 57 * Created by Panagiotis Triantafyllou on 18-Apr-22.
...@@ -67,6 +76,8 @@ public class WarplyManagerHelper { ...@@ -67,6 +76,8 @@ public class WarplyManagerHelper {
67 private static ArrayList<ActiveDFYCouponModel> mDfyCoupons = new ArrayList(); 76 private static ArrayList<ActiveDFYCouponModel> mDfyCoupons = new ArrayList();
68 private static ArrayList<LoyaltyGiftsForYouPackage> mSeasonalList = new ArrayList<>(); 77 private static ArrayList<LoyaltyGiftsForYouPackage> mSeasonalList = new ArrayList<>();
69 private static ArrayList<LoyaltyContextualOfferModel> mCCMSList = new ArrayList<>(); 78 private static ArrayList<LoyaltyContextualOfferModel> mCCMSList = new ArrayList<>();
79 + private static AlertDialog mAlertDialogSharing, mAlertDialogAcceptSharing, mAlertDialogRejectSharing,
80 + mAlertDialogReturnSharing, mAlertDialogErrorSharing;
70 81
71 // =========================================================== 82 // ===========================================================
72 // Methods for/from SuperClass/Interfaces 83 // Methods for/from SuperClass/Interfaces
...@@ -100,39 +111,164 @@ public class WarplyManagerHelper { ...@@ -100,39 +111,164 @@ public class WarplyManagerHelper {
100 } 111 }
101 112
102 /** 113 /**
103 - * Open Warply campaign with sharing id 114 + * Handle sharing flow
104 */ 115 */
105 - public static void constructCampaignUrlForShare(String sharingId) { 116 + public static void handleSharing(Context context, String sharingId) {
106 -// if (getCampaignList() != null) { 117 + WarplyManager.cosmoteSharing(new CosmoteSharingRequest().setSharingId(sharingId), new CallbackReceiver<JSONObject>() {
107 -// for (Campaign item : getCampaignList()) { 118 + @Override
108 -// if (item.getSessionUUID().equals(sessionUuid)) { 119 + public void onSuccess(JSONObject result) {
109 -// String url = item.getIndexUrl() 120 + Log.v("CosmoteSharing", "Success");
110 -// + "?web_id=" + WarpUtils.getWebId(Warply.getWarplyContext()) 121 + int status = result.optInt("status", 2);
111 -// + "&app_uuid=" + WarplyProperty.getAppUuid(Warply.getWarplyContext()) 122 + if (status == 1) {
112 -// + "&api_key=" + WarpUtils.getApiKey(Warply.getWarplyContext()) 123 + JSONObject innerResult = new JSONObject();
113 -// + "&session_uuid=" + item.getSessionUUID() 124 + innerResult = result.optJSONObject("result");
114 -// + "&access_token=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token") 125 + if (innerResult != null) {
115 -// + "&refresh_token=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("refresh_token") 126 + String modalText = innerResult.optString("modal_text", "");
116 -// + "&client_id=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getClientValue("client_id") 127 + String sharingStatus = innerResult.optString("status", "");
117 -// + "&client_secret=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getClientValue("client_secret") 128 +
118 -// + "&sharing_id=" + sharingId; 129 + if (!TextUtils.isEmpty(sharingStatus) && sharingStatus.equals("pending")) {
119 -// return url; 130 + initialSharingDialog(context, modalText, sharingId);
120 -// } 131 + return;
121 -// } 132 + }
122 -// } 133 + if (!TextUtils.isEmpty(sharingStatus) && sharingStatus.equals("reject")) {
123 -// 134 + returnSharingDialog(context, modalText);
124 -// return ""; 135 + }
136 + }
137 + } else
138 + errorSharingDialog(context);
139 + }
140 +
141 + @Override
142 + public void onFailure(int errorCode) {
143 + Log.v("CosmoteSharing", "Error");
144 + errorSharingDialog(context);
145 + }
146 + });
125 } 147 }
126 148
127 /** 149 /**
128 - * Open CCMS campaign 150 + * First dialog when we handle the deeplink
151 + */
152 + private static void initialSharingDialog(Context context, String alertTitle, String sharingId) {
153 + mAlertDialogSharing = new AlertDialog.Builder(context)
154 + .setTitle(R.string.cos_dlg_success_title)
155 + .setMessage(alertTitle)
156 + .setPositiveButton(R.string.cos_dlg_positive_button, (dialogPositive, whichPositive) -> {
157 + WarplyManager.cosmoteRetrieveSharing(new CosmoteRetrieveSharingRequest()
158 + .setSharingId(sharingId)
159 + .setAccept(true),
160 + new CallbackReceiver<JSONObject>() {
161 + @Override
162 + public void onSuccess(JSONObject result) {
163 + int status = result.optInt("status", 2);
164 + if (status == 1)
165 + acceptSharingDialog(context);
166 + else
167 + errorSharingDialog(context);
168 + }
169 +
170 + @Override
171 + public void onFailure(int errorCode) {
172 + errorSharingDialog(context);
173 + }
174 + });
175 + })
176 + .setNegativeButton(R.string.cos_dlg_negative_button, (dialogNegative, whichNegative) -> {
177 + rejectSharingDialog(context, sharingId);
178 + })
179 + .show();
180 + }
181 +
182 + /**
183 + * Dialog when we success get the sharing gift
184 + */
185 + private static void acceptSharingDialog(Context context) {
186 + mAlertDialogAcceptSharing = new AlertDialog.Builder(context)
187 + .setTitle(R.string.cos_dlg_success_title)
188 + .setMessage(R.string.cos_dlg_positive_button_text)
189 + .setPositiveButton(R.string.cos_dlg_positive_button2, (dialogPositive, whichPositive) -> {
190 + dialogPositive.dismiss();
191 + })
192 + .show();
193 + }
194 +
195 + /**
196 + * Dialog when we reject the sharing gift
197 + */
198 + private static void rejectSharingDialog(Context context, String sharingId) {
199 + mAlertDialogRejectSharing = new AlertDialog.Builder(context)
200 + .setTitle(R.string.cos_dlg_reject_title)
201 + .setMessage(R.string.cos_dlg_reject_text)
202 + .setPositiveButton(R.string.cos_dlg_negative_button, (dialogPositive, whichPositive) -> {
203 + WarplyManager.cosmoteRetrieveSharing(new CosmoteRetrieveSharingRequest()
204 + .setSharingId(sharingId)
205 + .setAccept(false),
206 + new CallbackReceiver<JSONObject>() {
207 + @Override
208 + public void onSuccess(JSONObject result) {
209 + int status = result.optInt("status", 2);
210 + }
211 +
212 + @Override
213 + public void onFailure(int errorCode) {
214 + errorSharingDialog(context);
215 + }
216 + });
217 + })
218 + .setNegativeButton(R.string.cos_dlg_negative_button2, (dialogNegative, whichNegative) -> {
219 + dialogNegative.dismiss();
220 + })
221 + .show();
222 + }
223 +
224 + /**
225 + * Dialog when the gift gets returned
129 */ 226 */
130 - public static String constructCcmsUrl(LoyaltyContextualOfferModel item) { 227 + private static void returnSharingDialog(Context context, String alertTitle) {
131 - return /*url*/ ""; 228 + mAlertDialogReturnSharing = new AlertDialog.Builder(context)
229 + .setTitle(R.string.cod_dlg_return_title)
230 + .setMessage(alertTitle)
231 + .setPositiveButton(R.string.cos_dlg_positive_button2, (dialogPositive, whichPositive) -> {
232 + dialogPositive.dismiss();
233 + })
234 + .show();
132 } 235 }
133 236
134 - private void mergeCCMS() { 237 + /**
238 + * Error dialog
239 + */
240 + private static void errorSharingDialog(Context context) {
241 + mAlertDialogErrorSharing = new AlertDialog.Builder(context)
242 + .setTitle(R.string.cos_dlg_error_title)
243 + .setMessage(R.string.cos_dlg_error_subtitle)
244 + .setPositiveButton(R.string.cos_dlg_positive_button2, (dialogPositive, whichPositive) -> {
245 + dialogPositive.dismiss();
246 + })
247 + .show();
248 + }
249 +
250 + /**
251 + * Open CCMS campaign
252 + */
253 + public static String constructCcmsUrl(Campaign item, String sessionId) {
254 + item.setNew(false);
255 + String url = item.getIndexUrl()
256 + + "?web_id=" + WarpUtils.getWebId(Warply.getWarplyContext())
257 + + "&app_uuid=" + WarplyProperty.getAppUuid(Warply.getWarplyContext())
258 + + "&api_key=" + WarpUtils.getApiKey(Warply.getWarplyContext())
259 + + "&session_uuid=" + item.getSessionUUID()
260 + + "&access_token=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token")
261 + + "&refresh_token=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("refresh_token")
262 + + "&client_id=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getClientValue("client_id")
263 + + "&client_secret=" + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getClientValue("client_secret")
264 + + "&session_id=" + sessionId;
265 +
266 +// if (mConsumer != null)
267 +// url = url + "&auth_token=" + (mConsumer.getUuid());
268 +// else
269 +// url = url + "&auth_token=";
135 270
271 + return url;
136 } 272 }
137 273
138 /** 274 /**
...@@ -140,15 +276,55 @@ public class WarplyManagerHelper { ...@@ -140,15 +276,55 @@ public class WarplyManagerHelper {
140 */ 276 */
141 public static void setCCMSLoyaltyCampaigns(ArrayList<LoyaltyContextualOfferModel> list) { 277 public static void setCCMSLoyaltyCampaigns(ArrayList<LoyaltyContextualOfferModel> list) {
142 mCCMSList = list; 278 mCCMSList = list;
279 +
280 + if (list != null && list.size() == 0) {
281 + CampaignList tempGifts = new CampaignList();
282 + if (mUniqueCampaignList != null && mUniqueCampaignList.get("gifts_for_you") != null && mUniqueCampaignList.get("gifts_for_you").size() > 0) {
283 + for (Campaign camp : mUniqueCampaignList.get("gifts_for_you")) {
284 + try {
285 + String key = WarpJSONParser.getJSONFromString(camp.getExtraFields()).keys().next();
286 + if (!TextUtils.isEmpty(key) && key.equals("loyaltyCampaignId")) {
287 + tempGifts.add(camp);
288 + }
289 + } catch (Exception exception) {
290 + Log.v("WarplyManagerHelper_CCMS_Upper", exception.toString());
291 + }
292 + }
293 +
294 + mUniqueCampaignList.get("gifts_for_you").removeAll(tempGifts);
295 + }
296 + return;
297 + }
298 +
299 + CampaignList tempGifts = new CampaignList();
143 if (mUniqueCampaignList != null && mUniqueCampaignList.get("gifts_for_you") != null && mUniqueCampaignList.get("gifts_for_you").size() > 0) { 300 if (mUniqueCampaignList != null && mUniqueCampaignList.get("gifts_for_you") != null && mUniqueCampaignList.get("gifts_for_you").size() > 0) {
144 for (Campaign camp : mUniqueCampaignList.get("gifts_for_you")) { 301 for (Campaign camp : mUniqueCampaignList.get("gifts_for_you")) {
145 try { 302 try {
146 - String te2 = WarpJSONParser.getJSONFromString(camp.getExtraFields()).keys().next(); 303 + String key = WarpJSONParser.getJSONFromString(camp.getExtraFields()).keys().next();
304 + if (!TextUtils.isEmpty(key) && key.equals("loyaltyCampaignId")) {
305 + String value = WarpJSONParser.getJSONFromString(camp.getExtraFields()).optString("loyaltyCampaignId");
306 + for (LoyaltyContextualOfferModel ccms : list) {
307 + if (ccms.getLoyaltyCampaignId().equals(value)) {
308 + tempGifts.add(camp);
309 + break;
310 + }
311 + }
312 + }
147 } catch (Exception exception) { 313 } catch (Exception exception) {
148 Log.v("WarplyManagerHelper_CCMS", exception.toString()); 314 Log.v("WarplyManagerHelper_CCMS", exception.toString());
315 + tempGifts.add(camp);
316 + }
149 } 317 }
318 +
319 + mUniqueCampaignList.get("gifts_for_you").retainAll(tempGifts);
150 } 320 }
151 } 321 }
322 +
323 + /**
324 + * Get the List with CCMS Campaigns
325 + */
326 + public static ArrayList<LoyaltyContextualOfferModel> getCCMSLoyaltyCampaigns() {
327 + return mCCMSList;
152 } 328 }
153 329
154 /** 330 /**
......
...@@ -60,6 +60,8 @@ import ly.warp.sdk.io.models.ProductList; ...@@ -60,6 +60,8 @@ import ly.warp.sdk.io.models.ProductList;
60 import ly.warp.sdk.io.models.TagsCategoriesList; 60 import ly.warp.sdk.io.models.TagsCategoriesList;
61 import ly.warp.sdk.io.models.TagsList; 61 import ly.warp.sdk.io.models.TagsList;
62 import ly.warp.sdk.io.models.TransactionsList; 62 import ly.warp.sdk.io.models.TransactionsList;
63 +import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest;
64 +import ly.warp.sdk.io.request.CosmoteSharingRequest;
63 import ly.warp.sdk.io.request.WarplyAddAddressRequest; 65 import ly.warp.sdk.io.request.WarplyAddAddressRequest;
64 import ly.warp.sdk.io.request.WarplyAddCardRequest; 66 import ly.warp.sdk.io.request.WarplyAddCardRequest;
65 import ly.warp.sdk.io.request.WarplyAuthorizeRequest; 67 import ly.warp.sdk.io.request.WarplyAuthorizeRequest;
...@@ -1349,4 +1351,82 @@ public class WarplyManager { ...@@ -1349,4 +1351,82 @@ public class WarplyManager {
1349 } 1351 }
1350 }); 1352 });
1351 } 1353 }
1354 +
1355 + public static void cosmoteSharing(CosmoteSharingRequest request, final CallbackReceiver<JSONObject> receiver) {
1356 + WarpUtils.log("************* WARPLY Cosmote Sharing Request ********************");
1357 + WarpUtils.log("[WARP Trace] WARPLY Cosmote Sharing Request is active");
1358 + WarpUtils.log("**************************************************");
1359 +
1360 + Warply.postReceiveMicroappData(true, "context", request.toJson(), new CallbackReceiver<JSONObject>() {
1361 + @Override
1362 + public void onSuccess(JSONObject result) {
1363 + int status = result.optInt("status", 2);
1364 + if (status == 1)
1365 + receiver.onSuccess(result);
1366 + else
1367 + receiver.onFailure(status);
1368 + }
1369 +
1370 + @Override
1371 + public void onFailure(int errorCode) {
1372 + if (errorCode == 401) {
1373 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
1374 + @Override
1375 + public void onSuccess(JSONObject result) {
1376 + int status = result.optInt("status", 2);
1377 + if (status == 1)
1378 + cosmoteSharing(request, receiver);
1379 + else
1380 + receiver.onFailure(status);
1381 + }
1382 +
1383 + @Override
1384 + public void onFailure(int errorCode) {
1385 + receiver.onFailure(errorCode);
1386 + }
1387 + });
1388 + } else
1389 + receiver.onFailure(errorCode);
1390 + }
1391 + });
1392 + }
1393 +
1394 + public static void cosmoteRetrieveSharing(CosmoteRetrieveSharingRequest request, final CallbackReceiver<JSONObject> receiver) {
1395 + WarpUtils.log("************* WARPLY Cosmote Retrieve Sharing Request ********************");
1396 + WarpUtils.log("[WARP Trace] WARPLY Cosmote Retrieve Sharing Request is active");
1397 + WarpUtils.log("**************************************************");
1398 +
1399 + Warply.postReceiveMicroappData(true, "context", request.toJson(), new CallbackReceiver<JSONObject>() {
1400 + @Override
1401 + public void onSuccess(JSONObject result) {
1402 + int status = result.optInt("status", 2);
1403 + if (status == 1)
1404 + receiver.onSuccess(result);
1405 + else
1406 + receiver.onFailure(status);
1407 + }
1408 +
1409 + @Override
1410 + public void onFailure(int errorCode) {
1411 + if (errorCode == 401) {
1412 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
1413 + @Override
1414 + public void onSuccess(JSONObject result) {
1415 + int status = result.optInt("status", 2);
1416 + if (status == 1)
1417 + cosmoteRetrieveSharing(request, receiver);
1418 + else
1419 + receiver.onFailure(status);
1420 + }
1421 +
1422 + @Override
1423 + public void onFailure(int errorCode) {
1424 + receiver.onFailure(errorCode);
1425 + }
1426 + });
1427 + } else
1428 + receiver.onFailure(errorCode);
1429 + }
1430 + });
1431 + }
1352 } 1432 }
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
35 <string name="cos_coupons_title">ΚΟΥΠΟΝΙΑ</string> 35 <string name="cos_coupons_title">ΚΟΥΠΟΝΙΑ</string>
36 <string name="cos_coupon_terms_title">Όροι χρήσης</string> 36 <string name="cos_coupon_terms_title">Όροι χρήσης</string>
37 <string name="cos_redeem_coupon">Απόκτησέ το</string> 37 <string name="cos_redeem_coupon">Απόκτησέ το</string>
38 - <string name="cos_dlg_success_title">Συγχαρητήρια</string>
39 <string name="cos_dlg_success_subtitle">Το κουπόνι εξαργυρώθηκε με επιτυχία</string> 38 <string name="cos_dlg_success_subtitle">Το κουπόνι εξαργυρώθηκε με επιτυχία</string>
40 <string name="cos_dlg_error_title">Αποτυχία</string> 39 <string name="cos_dlg_error_title">Αποτυχία</string>
41 <string name="cos_dlg_error_subtitle">Κάτι πήγε στραβά</string> 40 <string name="cos_dlg_error_subtitle">Κάτι πήγε στραβά</string>
...@@ -75,6 +74,16 @@ ...@@ -75,6 +74,16 @@
75 <string name="cos_active_gifts_title">Ενεργά δώρα</string> 74 <string name="cos_active_gifts_title">Ενεργά δώρα</string>
76 <string name="cos_loyalty_analysis">Ανάλυση συναλλαγών</string> 75 <string name="cos_loyalty_analysis">Ανάλυση συναλλαγών</string>
77 <string name="cos_value">%1$s€</string> 76 <string name="cos_value">%1$s€</string>
77 + <string name="cos_dlg_success_title">Συγχαρητήρια!</string>
78 + <string name="cos_dlg_reject_title">Είσαι σίγουρος;</string>
79 + <string name="cod_dlg_return_title">Επιστροφή δώρου</string>
80 + <string name="cos_dlg_positive_button">Ενεργοποίηση</string>
81 + <string name="cos_dlg_negative_button">Απόρριψη</string>
82 + <string name="cos_dlg_positive_button2">ΟΚ</string>
83 + <string name="cos_dlg_positive_button_text">Μόλις έλαβες το δώρο σου!</string>
84 + <string name="cos_dlg_reject_text">Είσαι σίγουρος ότι θέλεις να απορρίψεις το δώρο που μόλις έλαβες;</string>
85 + <string name="cos_dlg_return_text">Έλαβες πίσω το δώρο σου, κουπόνι αξίας 100€ για τα Intersport</string>
86 + <string name="cos_dlg_negative_button2">Άκυρο</string>
78 87
79 <string-array name="coupons_array"> 88 <string-array name="coupons_array">
80 <item>Κουπόνια</item> 89 <item>Κουπόνια</item>
......