Panagiotis Triantafyllou

redesign supermarket part1

Showing 23 changed files with 1955 additions and 151 deletions
...@@ -104,6 +104,9 @@ dependencies { ...@@ -104,6 +104,9 @@ dependencies {
104 //------------------------------ Retrofit -----------------------------// 104 //------------------------------ Retrofit -----------------------------//
105 implementation 'com.squareup.retrofit2:retrofit:2.9.0' 105 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
106 implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 106 implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
107 +
108 + //------------------------------ Expandable Layout -----------------------------//
109 + api 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
107 } 110 }
108 111
109 // In every export please update the version number 112 // In every export please update the version number
......
...@@ -48,6 +48,18 @@ ...@@ -48,6 +48,18 @@
48 android:theme="@style/SDKAppTheme" /> 48 android:theme="@style/SDKAppTheme" />
49 49
50 <activity 50 <activity
51 + android:name="ly.warp.sdk.activities.LoyaltyMarketAnalysisActivity"
52 + android:exported="false"
53 + android:screenOrientation="portrait"
54 + android:theme="@style/SDKAppTheme" />
55 +
56 + <activity
57 + android:name="ly.warp.sdk.activities.UnifiedCouponInfoActivity"
58 + android:exported="false"
59 + android:screenOrientation="portrait"
60 + android:theme="@style/SDKAppTheme" />
61 +
62 + <activity
51 android:name="ly.warp.sdk.activities.ActiveCouponsActivity" 63 android:name="ly.warp.sdk.activities.ActiveCouponsActivity"
52 android:exported="false" 64 android:exported="false"
53 android:screenOrientation="portrait" 65 android:screenOrientation="portrait"
......
...@@ -5,6 +5,7 @@ import android.content.Context; ...@@ -5,6 +5,7 @@ import android.content.Context;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.os.Bundle; 6 import android.os.Bundle;
7 import android.os.Handler; 7 import android.os.Handler;
8 +import android.os.Looper;
8 import android.text.SpannableStringBuilder; 9 import android.text.SpannableStringBuilder;
9 import android.text.Spanned; 10 import android.text.Spanned;
10 import android.text.TextUtils; 11 import android.text.TextUtils;
...@@ -18,12 +19,16 @@ import android.widget.TextView; ...@@ -18,12 +19,16 @@ import android.widget.TextView;
18 19
19 import androidx.appcompat.app.AlertDialog; 20 import androidx.appcompat.app.AlertDialog;
20 import androidx.constraintlayout.widget.ConstraintLayout; 21 import androidx.constraintlayout.widget.ConstraintLayout;
22 +import androidx.core.content.ContextCompat;
23 +import androidx.core.widget.NestedScrollView;
21 import androidx.recyclerview.widget.LinearLayoutManager; 24 import androidx.recyclerview.widget.LinearLayoutManager;
22 import androidx.recyclerview.widget.RecyclerView; 25 import androidx.recyclerview.widget.RecyclerView;
23 26
24 import com.bumptech.glide.Glide; 27 import com.bumptech.glide.Glide;
25 import com.bumptech.glide.load.engine.DiskCacheStrategy; 28 import com.bumptech.glide.load.engine.DiskCacheStrategy;
26 29
30 +import net.cachapa.expandablelayout.ExpandableLayout;
31 +
27 import org.apmem.tools.layouts.FlowLayout; 32 import org.apmem.tools.layouts.FlowLayout;
28 import org.greenrobot.eventbus.EventBus; 33 import org.greenrobot.eventbus.EventBus;
29 import org.greenrobot.eventbus.Subscribe; 34 import org.greenrobot.eventbus.Subscribe;
...@@ -35,23 +40,30 @@ import java.util.ArrayList; ...@@ -35,23 +40,30 @@ import java.util.ArrayList;
35 import java.util.Collections; 40 import java.util.Collections;
36 import java.util.Comparator; 41 import java.util.Comparator;
37 import java.util.Date; 42 import java.util.Date;
43 +import java.util.Locale;
44 +import java.util.concurrent.ExecutorService;
45 +import java.util.concurrent.Executors;
38 import java.util.concurrent.TimeUnit; 46 import java.util.concurrent.TimeUnit;
39 47
40 import io.github.inflationx.calligraphy3.CalligraphyTypefaceSpan; 48 import io.github.inflationx.calligraphy3.CalligraphyTypefaceSpan;
41 import io.github.inflationx.calligraphy3.TypefaceUtils; 49 import io.github.inflationx.calligraphy3.TypefaceUtils;
42 import io.github.inflationx.viewpump.ViewPumpContextWrapper; 50 import io.github.inflationx.viewpump.ViewPumpContextWrapper;
43 import ly.warp.sdk.R; 51 import ly.warp.sdk.R;
52 +import ly.warp.sdk.io.callbacks.CallbackReceiver;
44 import ly.warp.sdk.io.models.ActiveDFYCouponEventModel; 53 import ly.warp.sdk.io.models.ActiveDFYCouponEventModel;
45 import ly.warp.sdk.io.models.ActiveDFYCouponModel; 54 import ly.warp.sdk.io.models.ActiveDFYCouponModel;
46 import ly.warp.sdk.io.models.Coupon; 55 import ly.warp.sdk.io.models.Coupon;
47 import ly.warp.sdk.io.models.CouponList; 56 import ly.warp.sdk.io.models.CouponList;
48 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel; 57 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel;
58 +import ly.warp.sdk.io.models.UnifiedCoupon;
49 import ly.warp.sdk.io.models.WarplyDealsAnalysisEventModel; 59 import ly.warp.sdk.io.models.WarplyDealsAnalysisEventModel;
50 import ly.warp.sdk.utils.WarpUtils; 60 import ly.warp.sdk.utils.WarpUtils;
51 import ly.warp.sdk.utils.WarplyManagerHelper; 61 import ly.warp.sdk.utils.WarplyManagerHelper;
52 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager; 62 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
53 import ly.warp.sdk.utils.managers.WarplyEventBusManager; 63 import ly.warp.sdk.utils.managers.WarplyEventBusManager;
64 +import ly.warp.sdk.utils.managers.WarplyManager;
54 import ly.warp.sdk.views.adapters.ActiveCouponAdapter; 65 import ly.warp.sdk.views.adapters.ActiveCouponAdapter;
66 +import ly.warp.sdk.views.adapters.MarketCouponAdapter;
55 67
56 68
57 public class LoyaltyWallet extends Activity implements View.OnClickListener, View.OnScrollChangeListener { 69 public class LoyaltyWallet extends Activity implements View.OnClickListener, View.OnScrollChangeListener {
...@@ -64,21 +76,29 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -64,21 +76,29 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
64 // Fields 76 // Fields
65 // =========================================================== 77 // ===========================================================
66 78
67 - private ImageView mIvBack, mIvDealsLogo, mIvProfilePhoto; 79 + private ImageView mIvBack, mIvDealsLogo, mIvProfilePhoto, mIvExpArrow;
68 private TextView mTvUsername, mTvDealsValue, mTvDealsValueAll, 80 private TextView mTvUsername, mTvDealsValue, mTvDealsValueAll,
69 mTvUserBadge, mTvGiftsValue, mTvGiftsValueAll, mTvActiveCode, mTvActiveDate, 81 mTvUserBadge, mTvGiftsValue, mTvGiftsValueAll, mTvActiveCode, mTvActiveDate,
70 - mTvActiveTitle, mTvActiveCouponsHeader; 82 + mTvActiveTitle, mTvActiveCouponsHeader, mTvMarketValue, mTvMarketAll, mTvFavValue, mTvFavValueAll;
71 private ConstraintLayout mClDealsBanner, mClDealsView, 83 private ConstraintLayout mClDealsBanner, mClDealsView,
72 - mClGiftsBanner, mClToolbar; 84 + mClGiftsBanner, mClToolbar, mClExp, mClMarket;
73 - private LinearLayout mLlQuestionnaire, mLlUserBadge, mLlEmptyWallet, mLlDeals, mLlGifts; 85 + private LinearLayout mLlQuestionnaire, mLlUserBadge, mLlEmptyWallet, mLlDeals, mLlGifts,
86 + mLlMarketView;
74 private FlowLayout mLlActiveCodesView; 87 private FlowLayout mLlActiveCodesView;
75 - private float couponDfyValue = 0.0f; 88 + private float couponDfyValue = 0.0f, mFavValue = 0.0f;
76 - private RecyclerView mRecyclerCoupons; 89 + private RecyclerView mRecyclerCoupons, mRvMarketCoupons;
77 private ActiveCouponAdapter mAdapterCoupons; 90 private ActiveCouponAdapter mAdapterCoupons;
78 private AlertDialog mAlertDialogNonTelco; 91 private AlertDialog mAlertDialogNonTelco;
79 - private ScrollView mScActiveCodes, mSvLoyaltyWallet; 92 + private ScrollView mScActiveCodes;
93 + private NestedScrollView mSvLoyaltyWallet;
80 private int mTimer = 0; 94 private int mTimer = 0;
81 private Handler mSecondsHandler; 95 private Handler mSecondsHandler;
96 + private ArrayList<UnifiedCoupon> mUnifiedCoupons = new ArrayList<UnifiedCoupon>();
97 + private ArrayList<UnifiedCoupon> mUnifiedCouponsAll = new ArrayList<UnifiedCoupon>();
98 + private float countValue = 0.0f;
99 + private MarketCouponAdapter mAdapterMarketCoupons;
100 + private ExpandableLayout mElGifts;
101 + private boolean mIsStayCollapsed = true;
82 102
83 // =========================================================== 103 // ===========================================================
84 // Methods for/from SuperClass/Interfaces 104 // Methods for/from SuperClass/Interfaces
...@@ -97,8 +117,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -97,8 +117,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
97 mTvUserBadge = findViewById(R.id.tv_type); 117 mTvUserBadge = findViewById(R.id.tv_type);
98 mTvGiftsValue = findViewById(R.id.tv_gifts_value); 118 mTvGiftsValue = findViewById(R.id.tv_gifts_value);
99 mTvGiftsValueAll = findViewById(R.id.tv_gifts_value_all); 119 mTvGiftsValueAll = findViewById(R.id.tv_gifts_value_all);
100 - mClDealsBanner = findViewById(R.id.cl_deals_cos); 120 + mClDealsBanner = findViewById(R.id.cl_deals_win_inner_cos);
101 - mClGiftsBanner = findViewById(R.id.cl_deals_win); 121 + mClGiftsBanner = findViewById(R.id.cl_deals_win_inner);
102 mTvDealsValue = findViewById(R.id.tv_deals_value); 122 mTvDealsValue = findViewById(R.id.tv_deals_value);
103 mTvDealsValueAll = findViewById(R.id.tv_deals_value_all); 123 mTvDealsValueAll = findViewById(R.id.tv_deals_value_all);
104 mTvActiveCode = findViewById(R.id.tv_active_deals_text); 124 mTvActiveCode = findViewById(R.id.tv_active_deals_text);
...@@ -115,6 +135,18 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -115,6 +135,18 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
115 mSvLoyaltyWallet = findViewById(R.id.sv_loyalty_wallet); 135 mSvLoyaltyWallet = findViewById(R.id.sv_loyalty_wallet);
116 mClToolbar = findViewById(R.id.cl_loyalty_wallet_header); 136 mClToolbar = findViewById(R.id.cl_loyalty_wallet_header);
117 mLlGifts = findViewById(R.id.ll_gifts_view); 137 mLlGifts = findViewById(R.id.ll_gifts_view);
138 + mLlMarketView = findViewById(R.id.ll_market_view);
139 + mRvMarketCoupons = findViewById(R.id.rv_market_coupons);
140 + mRvMarketCoupons.setNestedScrollingEnabled(false);
141 + mRvMarketCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
142 + mElGifts = findViewById(R.id.el_exp);
143 + mClExp = findViewById(R.id.cl_exp);
144 + mIvExpArrow = findViewById(R.id.iv_exp_arrow);
145 + mTvMarketValue = findViewById(R.id.tv_market_value);
146 + mTvMarketAll = findViewById(R.id.tv_market_value_all);
147 + mClMarket = findViewById(R.id.cl_market_inner);
148 + mTvFavValue = findViewById(R.id.tv_exp_value);
149 + mTvFavValueAll = findViewById(R.id.tv_exp_value_all);
118 150
119 if (WarplyManagerHelper.getActiveDFYCoupons() != null) { 151 if (WarplyManagerHelper.getActiveDFYCoupons() != null) {
120 Collections.sort(WarplyManagerHelper.getActiveDFYCoupons(), new Comparator<ActiveDFYCouponModel>() { 152 Collections.sort(WarplyManagerHelper.getActiveDFYCoupons(), new Comparator<ActiveDFYCouponModel>() {
...@@ -136,7 +168,9 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -136,7 +168,9 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
136 mRecyclerCoupons.setNestedScrollingEnabled(false); 168 mRecyclerCoupons.setNestedScrollingEnabled(false);
137 mRecyclerCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 169 mRecyclerCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
138 170
139 - initViews(); 171 +// initViews();
172 +
173 + WarplyManager.getUnifiedCoupons(mUnifiedCallback);
140 } 174 }
141 175
142 @Override 176 @Override
...@@ -198,7 +232,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -198,7 +232,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
198 startActivityForResult(WarpViewActivity.createIntentFromURL(LoyaltyWallet.this, WarplyManagerHelper.openQuestionnaire()), 1000); 232 startActivityForResult(WarpViewActivity.createIntentFromURL(LoyaltyWallet.this, WarplyManagerHelper.openQuestionnaire()), 1000);
199 return; 233 return;
200 } 234 }
201 - if (view.getId() == R.id.cl_deals_cos) { 235 + if (view.getId() == R.id.cl_deals_win_inner_cos) {
202 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen") 236 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen")
203 .concat(":") 237 .concat(":")
204 .concat("DealsBanner")); 238 .concat("DealsBanner"));
...@@ -214,7 +248,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -214,7 +248,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
214 EventBus.getDefault().post(new WarplyEventBusManager(analyticsEvent)); 248 EventBus.getDefault().post(new WarplyEventBusManager(analyticsEvent));
215 return; 249 return;
216 } 250 }
217 - if (view.getId() == R.id.cl_deals_win) { 251 + if (view.getId() == R.id.cl_deals_win_inner) {
218 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen") 252 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen")
219 .concat(":") 253 .concat(":")
220 .concat("LoyaltyBanner")); 254 .concat("LoyaltyBanner"));
...@@ -228,6 +262,31 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -228,6 +262,31 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
228 startActivity(intent); 262 startActivity(intent);
229 return; 263 return;
230 } 264 }
265 + if (view.getId() == R.id.cl_exp) {
266 + if (!mIsStayCollapsed) {
267 + mElGifts.toggle(true);
268 + if (mElGifts.isExpanded()) {
269 + mIvExpArrow.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_up_dark_new));
270 + } else {
271 + mIvExpArrow.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_down_dark_new));
272 + }
273 + }
274 + return;
275 + }
276 + if (view.getId() == R.id.cl_market_inner) {
277 + if (countValue > 0) {
278 + WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen")
279 + .concat(":")
280 + .concat("MarketBanner"));
281 + LoyaltySDKFirebaseEventModel analyticsEvent = new LoyaltySDKFirebaseEventModel();
282 + analyticsEvent.setEventName("did_tap_market_badge");
283 + analyticsEvent.setParameter("screen", "Loyalty Wallet");
284 + EventBus.getDefault().post(new WarplyEventBusManager(analyticsEvent));
285 +// Intent intent = new Intent(LoyaltyWallet.this, LoyaltyMarketAnalysisActivity.class); //TODO: uncomment it
286 +// startActivity(intent);
287 + }
288 + return;
289 + }
231 if (view.getId() == R.id.cl_mygifts) { 290 if (view.getId() == R.id.cl_mygifts) {
232 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen") 291 WarplyAnalyticsManager.logTrackersEvent(this, "click", ("LoyaltyWalletScreen")
233 .concat(":") 292 .concat(":")
...@@ -329,6 +388,39 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -329,6 +388,39 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
329 nonTelcoDialog(); 388 nonTelcoDialog();
330 } 389 }
331 390
391 + if (mUnifiedCoupons != null && mUnifiedCoupons.size() > 0) {
392 + ArrayList<UnifiedCoupon> unilist = new ArrayList<UnifiedCoupon>();
393 + for (UnifiedCoupon unicpn : mUnifiedCoupons) {
394 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss", Locale.US);
395 + Date newDate = new Date();
396 + try {
397 + newDate = simpleDateFormat.parse(unicpn.getCreated());
398 + } catch (ParseException e) {
399 + e.printStackTrace();
400 + }
401 + unicpn.setExpirationDate(newDate);
402 + unilist.add(unicpn);
403 + }
404 + Collections.sort(unilist, (coupon1, coupon2) -> coupon2.getExpirationDate().compareTo(coupon1.getExpirationDate()));
405 + mAdapterMarketCoupons = new MarketCouponAdapter(this, unilist);
406 + mRvMarketCoupons.setAdapter(mAdapterMarketCoupons);
407 + mAdapterMarketCoupons.getPositionClicks()
408 + .doOnNext(coupon -> {
409 + WarplyAnalyticsManager.logTrackersEvent(this, "click", ("UnifiedCoupon").concat(":").concat(coupon.getBarcode()));
410 + Intent intent = new Intent(LoyaltyWallet.this, UnifiedCouponInfoActivity.class);
411 + intent.putExtra("coupon", (Serializable) coupon);
412 + intent.putExtra("isFromWallet", true);
413 + startActivity(intent);
414 +// startActivityForResult(intent, 1002);
415 + })
416 + .doOnError(error -> {
417 + })
418 + .subscribe();
419 + mLlMarketView.setVisibility(View.VISIBLE);
420 + } else {
421 + mLlMarketView.setVisibility(View.GONE);
422 + }
423 +
332 if (WarplyManagerHelper.getCouponList() != null && WarplyManagerHelper.getCouponList().size() > 0) { 424 if (WarplyManagerHelper.getCouponList() != null && WarplyManagerHelper.getCouponList().size() > 0) {
333 CouponList cpnlist = new CouponList(); 425 CouponList cpnlist = new CouponList();
334 for (Coupon cpn : WarplyManagerHelper.getCouponList()) { 426 for (Coupon cpn : WarplyManagerHelper.getCouponList()) {
...@@ -360,13 +452,14 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -360,13 +452,14 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
360 .doOnError(error -> { 452 .doOnError(error -> {
361 }) 453 })
362 .subscribe(); 454 .subscribe();
455 + mLlGifts.setVisibility(View.VISIBLE);
363 } else { 456 } else {
364 mLlGifts.setVisibility(View.GONE); 457 mLlGifts.setVisibility(View.GONE);
365 } 458 }
366 459
367 - if (WarplyManagerHelper.getDealsCouponsSum() > 0) { 460 + // First Expandable Banner
368 - mTvDealsValue.setText(String.format(getString(R.string.cos_value), String.valueOf(/*couponDfyValue*/ WarplyManagerHelper.getDealsCouponsSum()))); 461 + String badgeValueFirst = String.format("%.02f", WarplyManagerHelper.getDealsCouponsSum());
369 - 462 + mTvDealsValue.setText(String.format(getString(R.string.cos_value), badgeValueFirst));
370 SpannableStringBuilder sBuilder = new SpannableStringBuilder(); 463 SpannableStringBuilder sBuilder = new SpannableStringBuilder();
371 sBuilder 464 sBuilder
372 .append(getString(R.string.cos_wallet_text1)) 465 .append(getString(R.string.cos_wallet_text1))
...@@ -377,45 +470,63 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -377,45 +470,63 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
377 sBuilder.setSpan(typefaceRegularSpan, 0, getString(R.string.cos_wallet_text1).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 470 sBuilder.setSpan(typefaceRegularSpan, 0, getString(R.string.cos_wallet_text1).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
378 sBuilder.setSpan(typefaceRegularSpan, getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length(), getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length() + getString(R.string.cos_wallet_text2).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 471 sBuilder.setSpan(typefaceRegularSpan, getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length(), getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length() + getString(R.string.cos_wallet_text2).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
379 sBuilder.setSpan(typefaceBoldSpan, getString(R.string.cos_wallet_text1).length(), getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 472 sBuilder.setSpan(typefaceBoldSpan, getString(R.string.cos_wallet_text1).length(), getString(R.string.cos_wallet_text1).length() + String.valueOf(WarplyManagerHelper.getDealsCouponsSum()).length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
380 -
381 mTvDealsValueAll.setText(sBuilder, TextView.BufferType.SPANNABLE); 473 mTvDealsValueAll.setText(sBuilder, TextView.BufferType.SPANNABLE);
382 - } else { 474 + mFavValue += WarplyManagerHelper.getDealsCouponsSum();
383 - mClDealsBanner.setVisibility(View.GONE);
384 - }
385 475
386 - if (WarplyManagerHelper.getLoyaltyBadge() != null) { 476 + // Second Expandable Banner
387 - if (WarplyManagerHelper.getLoyaltyBadge().getCouponCount() > 0) { 477 + if (WarplyManagerHelper.getLoyaltyBadge() != null && (WarplyManagerHelper.getLoyaltyBadge().getCouponCount() > 0 || WarplyManagerHelper.getLoyaltyBadge().getCouponCount() == 0)) {
388 String badgeValue = String.format("%.02f", WarplyManagerHelper.getLoyaltyBadge().getValue()); 478 String badgeValue = String.format("%.02f", WarplyManagerHelper.getLoyaltyBadge().getValue());
389 -
390 mTvGiftsValue.setText(String.format(getString(R.string.cos_value), badgeValue)); 479 mTvGiftsValue.setText(String.format(getString(R.string.cos_value), badgeValue));
391 - 480 + SpannableStringBuilder sBuilderSecond = new SpannableStringBuilder();
392 - SpannableStringBuilder sBuilder = new SpannableStringBuilder(); 481 + sBuilderSecond
393 - sBuilder
394 .append(getString(R.string.cos_wallet_text3)) 482 .append(getString(R.string.cos_wallet_text3))
395 .append(String.format(getString(R.string.cos_value), badgeValue)) 483 .append(String.format(getString(R.string.cos_value), badgeValue))
396 .append(getString(R.string.cos_wallet_text4)) 484 .append(getString(R.string.cos_wallet_text4))
397 .append(String.format(getString(R.string.cos_value2), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()))) 485 .append(String.format(getString(R.string.cos_value2), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount())))
398 .append(getString(R.string.cos_wallet_text5)); 486 .append(getString(R.string.cos_wallet_text5));
399 - 487 + CalligraphyTypefaceSpan typefaceRegularSpanSecond = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf"));
400 - CalligraphyTypefaceSpan typefaceRegularSpan = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf"));
401 CalligraphyTypefaceSpan typefaceRegularSpan2 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf")); 488 CalligraphyTypefaceSpan typefaceRegularSpan2 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf"));
402 CalligraphyTypefaceSpan typefaceRegularSpan3 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf")); 489 CalligraphyTypefaceSpan typefaceRegularSpan3 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Regular.ttf"));
403 - CalligraphyTypefaceSpan typefaceBoldSpan = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf")); 490 + CalligraphyTypefaceSpan typefaceBoldSpanSecond = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf"));
404 CalligraphyTypefaceSpan typefaceBoldSpan2 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf")); 491 CalligraphyTypefaceSpan typefaceBoldSpan2 = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf"));
405 - sBuilder.setSpan(typefaceRegularSpan, 0, getString(R.string.cos_wallet_text3).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 492 + sBuilderSecond.setSpan(typefaceRegularSpanSecond, 0, getString(R.string.cos_wallet_text3).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
406 - sBuilder.setSpan(typefaceBoldSpan, getString(R.string.cos_wallet_text3).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 493 + sBuilderSecond.setSpan(typefaceBoldSpanSecond, getString(R.string.cos_wallet_text3).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
407 - sBuilder.setSpan(typefaceRegularSpan2, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 494 + sBuilderSecond.setSpan(typefaceRegularSpan2, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
408 - sBuilder.setSpan(typefaceBoldSpan2, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 495 + sBuilderSecond.setSpan(typefaceBoldSpan2, getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
409 - sBuilder.setSpan(typefaceRegularSpan3, getString(R.string.cos_wallet_text3).length() + 1 + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length() + getString(R.string.cos_wallet_text5).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 496 + sBuilderSecond.setSpan(typefaceRegularSpan3, getString(R.string.cos_wallet_text3).length() + 1 + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length(), getString(R.string.cos_wallet_text3).length() + badgeValue.length() + 1 + getString(R.string.cos_wallet_text4).length() + String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()).length() + getString(R.string.cos_wallet_text5).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
497 + mTvGiftsValueAll.setText(sBuilderSecond, TextView.BufferType.SPANNABLE);
498 + mFavValue += WarplyManagerHelper.getLoyaltyBadge().getValue();
499 + }
410 500
411 - mTvGiftsValueAll.setText(sBuilder, TextView.BufferType.SPANNABLE); 501 + // Third Expandable Banner
502 + if (mUnifiedCouponsAll.size() > 0) {
503 + countValue = 0.0f;
504 + for (UnifiedCoupon unicou : mUnifiedCouponsAll) {
505 + if (unicou.getCoupons() != null && unicou.getCoupons().size() > 0) {
506 + for (Coupon inncou : unicou.getCoupons()) {
507 + if (inncou.getStatus() == 0) {
508 + countValue += Float.valueOf(inncou.getDiscount());
509 + }
510 + }
511 + }
512 + }
513 + mFavValue += countValue;
514 + if (countValue > 0) {
515 + String badgeValue = String.format("%.02f", countValue);
516 + mTvMarketValue.setText(String.format(getString(R.string.cos_value), badgeValue));
412 } else { 517 } else {
413 - mClGiftsBanner.setVisibility(View.GONE); 518 + String badgeValue = String.format("%.02f", 0.0f);
519 + mTvMarketValue.setText(String.format(getString(R.string.cos_value), badgeValue));
414 } 520 }
415 } else { 521 } else {
416 - mClGiftsBanner.setVisibility(View.GONE); 522 + String badgeValue = String.format("%.02f", 0.0f);
523 + mTvMarketValue.setText(String.format(getString(R.string.cos_value), badgeValue));
417 } 524 }
418 525
526 + // Sum Expandable Banner
527 + String allValue = String.format("%.02f", mFavValue);
528 + mTvFavValue.setText(String.format(getString(R.string.cos_value), allValue));
529 +
419 if (WarplyManagerHelper.getActiveDFYCoupons() != null && WarplyManagerHelper.getActiveDFYCoupons().size() > 0) { 530 if (WarplyManagerHelper.getActiveDFYCoupons() != null && WarplyManagerHelper.getActiveDFYCoupons().size() > 0) {
420 String codes = ""; 531 String codes = "";
421 if (WarplyManagerHelper.getActiveDFYCoupons().size() == 1) { 532 if (WarplyManagerHelper.getActiveDFYCoupons().size() == 1) {
...@@ -452,11 +563,11 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -452,11 +563,11 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
452 LinearLayout v = (LinearLayout) vi.inflate(R.layout.item_selectable, null); 563 LinearLayout v = (LinearLayout) vi.inflate(R.layout.item_selectable, null);
453 TextView textView = (TextView) v.findViewById(R.id.tv_code_copy); 564 TextView textView = (TextView) v.findViewById(R.id.tv_code_copy);
454 TextView textViewComma = (TextView) v.findViewById(R.id.tv_code_comma); 565 TextView textViewComma = (TextView) v.findViewById(R.id.tv_code_comma);
455 - CalligraphyTypefaceSpan typefaceBoldSpan = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf")); 566 + CalligraphyTypefaceSpan typefaceBoldSpanDFY = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/PeridotPE-Bold.ttf"));
456 - SpannableStringBuilder sBuilder = new SpannableStringBuilder(WarplyManagerHelper.getActiveDFYCoupons().get(i).getCode()); 567 + SpannableStringBuilder sBuilderDFY = new SpannableStringBuilder(WarplyManagerHelper.getActiveDFYCoupons().get(i).getCode());
457 SpannableStringBuilder sBuilderComma = new SpannableStringBuilder(getString(R.string.cos_comma)); 568 SpannableStringBuilder sBuilderComma = new SpannableStringBuilder(getString(R.string.cos_comma));
458 - sBuilder.setSpan(typefaceBoldSpan, 0, sBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 569 + sBuilderDFY.setSpan(typefaceBoldSpanDFY, 0, sBuilderDFY.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
459 - sBuilderComma.setSpan(typefaceBoldSpan, 0, sBuilderComma.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 570 + sBuilderComma.setSpan(typefaceBoldSpanDFY, 0, sBuilderComma.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
460 textView.setText(sBuilder, TextView.BufferType.SPANNABLE); 571 textView.setText(sBuilder, TextView.BufferType.SPANNABLE);
461 textView.setTextIsSelectable(true); 572 textView.setTextIsSelectable(true);
462 textViewComma.setText(sBuilderComma, TextView.BufferType.SPANNABLE); 573 textViewComma.setText(sBuilderComma, TextView.BufferType.SPANNABLE);
...@@ -467,6 +578,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -467,6 +578,7 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
467 578
468 mScActiveCodes.setVisibility(View.VISIBLE); 579 mScActiveCodes.setVisibility(View.VISIBLE);
469 mLlActiveCodesView.setVisibility(View.VISIBLE); 580 mLlActiveCodesView.setVisibility(View.VISIBLE);
581 + mLlDeals.setVisibility(View.VISIBLE);
470 } 582 }
471 // mTvActiveCode.setText(codes); 583 // mTvActiveCode.setText(codes);
472 } else { 584 } else {
...@@ -498,10 +610,17 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -498,10 +610,17 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
498 } 610 }
499 } 611 }
500 612
501 - if (mClDealsBanner.getVisibility() == View.GONE && mClGiftsBanner.getVisibility() == View.GONE 613 + if (mLlMarketView.getVisibility() == View.GONE
502 - && mLlDeals.getVisibility() == View.GONE && mLlGifts.getVisibility() == View.GONE) { 614 + && WarplyManagerHelper.getDealsCouponsSum() == 0
503 - mLlEmptyWallet.setVisibility(View.VISIBLE); 615 + && (WarplyManagerHelper.getLoyaltyBadge() != null && WarplyManagerHelper.getLoyaltyBadge().getCouponCount() == 0)
504 - } 616 + && mLlDeals.getVisibility() == View.GONE) {
617 + mIvExpArrow.setVisibility(View.GONE);
618 +// mLlEmptyWallet.setVisibility(View.VISIBLE);
619 + mIsStayCollapsed = true;
620 + } else {
621 + mIvExpArrow.setVisibility(View.VISIBLE);
622 + mIsStayCollapsed = false;
623 + } //TODO: change the case
505 624
506 mIvBack.setOnClickListener(this); 625 mIvBack.setOnClickListener(this);
507 mLlQuestionnaire.setOnClickListener(this); 626 mLlQuestionnaire.setOnClickListener(this);
...@@ -510,6 +629,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -510,6 +629,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
510 mClGiftsBanner.setOnClickListener(this); 629 mClGiftsBanner.setOnClickListener(this);
511 mClDealsView.setOnClickListener(this); 630 mClDealsView.setOnClickListener(this);
512 mSvLoyaltyWallet.setOnScrollChangeListener(this); 631 mSvLoyaltyWallet.setOnScrollChangeListener(this);
632 + mClExp.setOnClickListener(this);
633 + mClMarket.setOnClickListener(this);
513 } 634 }
514 635
515 private void nonTelcoDialog() { 636 private void nonTelcoDialog() {
...@@ -526,6 +647,31 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie ...@@ -526,6 +647,31 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener, Vie
526 } 647 }
527 } 648 }
528 649
650 + private final CallbackReceiver<ArrayList<UnifiedCoupon>> mUnifiedCallback = new CallbackReceiver<ArrayList<UnifiedCoupon>>() {
651 + @Override
652 + public void onSuccess(ArrayList<UnifiedCoupon> result) {
653 + final ExecutorService executor = Executors.newFixedThreadPool(1);
654 + executor.submit(() -> {
655 + mUnifiedCouponsAll = result;
656 + ArrayList<UnifiedCoupon> cpnlist = new ArrayList<UnifiedCoupon>();
657 + for (UnifiedCoupon cpn : result) {
658 + if (cpn.getStatus().equals("active")) {
659 + cpnlist.add(cpn);
660 + }
661 + }
662 + mUnifiedCoupons = cpnlist;
663 + WarplyManagerHelper.setMarketCoupons(result);
664 + new Handler(Looper.getMainLooper()).post(() -> initViews());
665 + executor.shutdownNow();
666 + });
667 + }
668 +
669 + @Override
670 + public void onFailure(int errorCode) {
671 + initViews();
672 + }
673 + };
674 +
529 // =========================================================== 675 // ===========================================================
530 // Inner and Anonymous Classes 676 // Inner and Anonymous Classes
531 // =========================================================== 677 // ===========================================================
......
1 +package ly.warp.sdk.activities;
2 +
3 +import android.app.Activity;
4 +import android.content.Context;
5 +import android.content.Intent;
6 +import android.graphics.Bitmap;
7 +import android.graphics.Color;
8 +import android.os.Bundle;
9 +import android.view.View;
10 +import android.widget.ImageView;
11 +import android.widget.LinearLayout;
12 +import android.widget.TextView;
13 +
14 +import androidx.core.content.ContextCompat;
15 +import androidx.recyclerview.widget.LinearLayoutManager;
16 +import androidx.recyclerview.widget.RecyclerView;
17 +
18 +import com.google.android.gms.common.ConnectionResult;
19 +import com.google.android.gms.common.GoogleApiAvailability;
20 +import com.google.zxing.BarcodeFormat;
21 +import com.google.zxing.common.BitMatrix;
22 +import com.google.zxing.oned.EAN13Writer;
23 +
24 +import java.text.ParseException;
25 +import java.text.SimpleDateFormat;
26 +import java.util.Collections;
27 +import java.util.Date;
28 +
29 +import io.github.inflationx.viewpump.ViewPumpContextWrapper;
30 +import ly.warp.sdk.R;
31 +import ly.warp.sdk.io.models.Coupon;
32 +import ly.warp.sdk.io.models.CouponList;
33 +import ly.warp.sdk.io.models.UnifiedCoupon;
34 +import ly.warp.sdk.utils.WarplyManagerHelper;
35 +import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
36 +import ly.warp.sdk.views.adapters.ActiveCouponAdapter;
37 +
38 +
39 +public class UnifiedCouponInfoActivity extends Activity implements View.OnClickListener {
40 +
41 + // ===========================================================
42 + // Constants
43 + // ===========================================================
44 +
45 + // ===========================================================
46 + // Fields
47 + // ===========================================================
48 +
49 + private ImageView mIvBack, mIvBarcode, mIvMarketExpand;
50 + private TextView mTvTerms, mTvCouponCode, mTvCouponDate, mTvMarketExpand,
51 + mTvTermsValue, mTvFullBarcode;
52 + private LinearLayout mLlShops, mLlBarcodeContainer, mLlTerms, mLlMarketCoupons, mLlMarketExpand;
53 + private UnifiedCoupon mCoupon;
54 + private boolean mIsBarcodeShown = false, mIsTermsShown = false, mIsFromWallet = false,
55 + mIsMarketExpand = true;
56 + private RecyclerView mRecyclerCoupons;
57 + private ActiveCouponAdapter mAdapterCoupons;
58 +
59 + // ===========================================================
60 + // Methods for/from SuperClass/Interfaces
61 + // ===========================================================
62 +
63 + @Override
64 + public void onCreate(Bundle savedInstanceState) {
65 + super.onCreate(savedInstanceState);
66 + setContentView(R.layout.activity_unified_coupon_info);
67 +
68 + UnifiedCoupon tempCoupon = (UnifiedCoupon) getIntent().getSerializableExtra("coupon");
69 + if (tempCoupon != null) {
70 + for (UnifiedCoupon couponItem : WarplyManagerHelper.getMarketCoupons()) {
71 + if (couponItem.getBarcode().equals(tempCoupon.getBarcode())) {
72 + mCoupon = couponItem;
73 + break;
74 + }
75 + }
76 + }
77 +// mIsFromWallet = getIntent().getBooleanExtra("isFromWallet", false);
78 +
79 + mIvBack = findViewById(R.id.iv_coupon_info_back);
80 + mTvTerms = findViewById(R.id.tv_terms);
81 + mTvCouponCode = findViewById(R.id.textView16);
82 + mTvCouponDate = findViewById(R.id.textView17);
83 + mIvBarcode = findViewById(R.id.iv_barcode);
84 + mLlShops = findViewById(R.id.ll_shops);
85 + mLlBarcodeContainer = findViewById(R.id.ll_barcode_container_items);
86 + mLlTerms = findViewById(R.id.ll_terms_inner);
87 + mTvTermsValue = findViewById(R.id.tv_terms_value);
88 + mTvFullBarcode = findViewById(R.id.tv_full_barcode);
89 + mLlMarketCoupons = findViewById(R.id.ll_market_coupons);
90 + mLlMarketExpand = findViewById(R.id.ll_market_expand);
91 + mTvMarketExpand = findViewById(R.id.tv_market_expand);
92 + mIvMarketExpand = findViewById(R.id.iv_market_expand);
93 + mRecyclerCoupons = findViewById(R.id.rv_active_market_coupons);
94 + mRecyclerCoupons.setNestedScrollingEnabled(false);
95 + mRecyclerCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
96 +
97 + initViews();
98 + }
99 +
100 + @Override
101 + public void onResume() {
102 + super.onResume();
103 + WarplyAnalyticsManager.logTrackersEvent(this, "screen", "UnifiedCouponScreen");
104 + }
105 +
106 + @Override
107 + public void onClick(View view) {
108 + if (view.getId() == R.id.iv_coupon_info_back) {
109 + onBackPressed();
110 + return;
111 + }
112 + if (view.getId() == R.id.ll_shops) {
113 + WarplyAnalyticsManager.logTrackersEvent(this, "click", "SeeShops");
114 +
115 + if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(UnifiedCouponInfoActivity.this) == ConnectionResult.SUCCESS) {
116 + Intent intent = new Intent(UnifiedCouponInfoActivity.this, ShopsActivity.class);
117 + startActivity(intent);
118 + return;
119 + } else {
120 + Intent intent = new Intent(UnifiedCouponInfoActivity.this, ShopsHuaweiActivity.class);
121 + startActivity(intent);
122 + return;
123 + }
124 + }
125 + if (view.getId() == R.id.ll_terms_inner) {
126 + if (mIsTermsShown) {
127 + mTvTermsValue.setVisibility(View.GONE);
128 + ImageView termsButtonArrow = mLlTerms.findViewById(R.id.iv_terms_arrow);
129 + termsButtonArrow.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_down_dark_new));
130 + mIsTermsShown = false;
131 + } else {
132 + mTvTermsValue.setVisibility(View.VISIBLE);
133 + ImageView termsButtonArrow = mLlTerms.findViewById(R.id.iv_terms_arrow);
134 + termsButtonArrow.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_up_dark_new));
135 + mIsTermsShown = true;
136 + }
137 + return;
138 + }
139 + if (view.getId() == R.id.ll_market_expand) {
140 + if (mIsMarketExpand) {
141 + mLlMarketCoupons.setVisibility(View.GONE);
142 + mTvMarketExpand.setText(getString(R.string.cos_show_market_coupons));
143 + mIvMarketExpand.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_down_dark_new));
144 + mIsMarketExpand = false;
145 + } else {
146 + mLlMarketCoupons.setVisibility(View.VISIBLE);
147 + mTvMarketExpand.setText(getString(R.string.cos_hide_market_coupons));
148 + mIvMarketExpand.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_up_dark_new));
149 + mIsMarketExpand = true;
150 + }
151 + }
152 + }
153 +
154 + @Override
155 + protected void attachBaseContext(Context newBase) {
156 + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
157 + }
158 +
159 + // ===========================================================
160 + // Methods
161 + // ===========================================================
162 +
163 + private void initViews() {
164 + mTvCouponCode.setText(mCoupon.getBarcode());
165 +
166 + mLlMarketCoupons.setVisibility(View.GONE);
167 + mTvMarketExpand.setText(getString(R.string.cos_show_market_coupons));
168 + mIvMarketExpand.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_down_dark_new));
169 + mIsMarketExpand = false;
170 +
171 + if (mCoupon.getCoupons() != null && mCoupon.getCoupons().size() > 0) {
172 + CouponList cpnlist = new CouponList();
173 + for (Coupon cpn : mCoupon.getCoupons()) {
174 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
175 + Date newDate = new Date();
176 + try {
177 + newDate = simpleDateFormat.parse(cpn.getExpiration());
178 + } catch (ParseException e) {
179 + e.printStackTrace();
180 + }
181 + cpn.setExpirationDate(newDate);
182 + cpnlist.add(cpn);
183 + }
184 +
185 + Collections.sort(cpnlist, (coupon1, coupon2) -> coupon1.getExpirationDate().compareTo(coupon2.getExpirationDate()));
186 + for (Coupon tempItem : cpnlist) {
187 + if (tempItem.getStatus() == 1) {
188 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
189 + Date newDate = new Date();
190 + try {
191 + newDate = simpleDateFormat.parse(cpnlist.get(0).getExpiration());
192 + } catch (ParseException e) {
193 + e.printStackTrace();
194 + }
195 + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
196 + mTvCouponDate.setText(String.format(getResources().getString(R.string.cos_mycoupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
197 + break;
198 + }
199 + }
200 +
201 + mAdapterCoupons = new ActiveCouponAdapter(this, cpnlist, false, true);
202 + mRecyclerCoupons.setAdapter(mAdapterCoupons);
203 + mAdapterCoupons.getPositionClicks()
204 + .doOnNext(coupon -> {
205 +// WarplyAnalyticsManager.logTrackersEvent(this, "click", ("MarketCoupon").concat(":").concat(coupon.getName()));
206 +// Intent intent = new Intent(UnifiedCouponInfoActivity.this, CouponInfoActivity.class);
207 +// intent.putExtra("coupon", (Serializable) coupon);
208 +// intent.putExtra("isFromWallet", true);
209 +// startActivityForResult(intent, 1002);
210 + })
211 + .doOnError(error -> {
212 + })
213 + .subscribe();
214 + }
215 +
216 + mIvBack.setOnClickListener(this);
217 + mLlShops.setOnClickListener(this);
218 + mLlTerms.setOnClickListener(this);
219 + mLlMarketExpand.setOnClickListener(this);
220 +
221 + String tempCoupon = "";
222 + int result = 0;
223 + try {
224 + tempCoupon = mCoupon.getBarcode();
225 + for (int i = 0; i < (12 - mCoupon.getBarcode().length()); i++) {
226 + tempCoupon += "0";
227 + }
228 + } catch (Exception e) {
229 + e.printStackTrace();
230 + }
231 +
232 + try {
233 + for (int i = mCoupon.getBarcode().length() - 1; i >= 0; i--) {
234 + result = result + Integer.parseInt(String.valueOf((mCoupon.getBarcode()).charAt(i))) * (1 + (2 * (i % 2)));
235 + }
236 + } catch (Exception e) {
237 + e.printStackTrace();
238 + }
239 +
240 + tempCoupon = tempCoupon + (10 - (result % 10)) % 10;
241 + createBarcodeBitmap(tempCoupon);
242 + }
243 +
244 + private void createBarcodeBitmap(String barcodeString) {
245 + EAN13Writer writer = new EAN13Writer();
246 + try {
247 + BitMatrix bitMatrix = writer.encode(barcodeString, BarcodeFormat.EAN_13, 1024, 512);
248 + int width = bitMatrix.getWidth();
249 + int height = bitMatrix.getHeight();
250 + Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
251 + for (int x = 0; x < width; x++) {
252 + for (int y = 0; y < height; y++) {
253 + bmp.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE);
254 + }
255 + }
256 + mIvBarcode.setImageBitmap(bmp);
257 + mTvFullBarcode.setText(barcodeString);
258 +
259 + } catch (Exception e) {
260 + e.printStackTrace();
261 + mLlBarcodeContainer.setVisibility(View.GONE);
262 + mIvBarcode.setVisibility(View.GONE);
263 + }
264 + }
265 +
266 + // ===========================================================
267 + // Inner and Anonymous Classes
268 + // ===========================================================
269 +
270 +}
1 +/*
2 + * Copyright 2010-2013 Warply Ltd. All rights reserved.
3 + *
4 + * Redistribution and use in source and binary forms, without modification, are
5 + * permitted provided that the following conditions are met:
6 + *
7 + * 1. Redistributions of source code must retain the above copyright notice,
8 + * this list of conditions and the following disclaimer.
9 + *
10 + * 2. Redistributions in binary form must reproduce the above copyright notice,
11 + * this list of conditions and the following disclaimer in the documentation
12 + * and/or other materials provided with the distribution.
13 + *
14 + * THIS SOFTWARE IS PROVIDED BY THE WARPLY LTD ``AS IS'' AND ANY EXPRESS OR
15 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16 + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17 + * EVENT SHALL WARPLY LTD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
18 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19 + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
20 + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21 + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22 + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23 + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 + */
25 +
26 +package ly.warp.sdk.io.models;
27 +
28 +import android.os.Parcel;
29 +import android.os.Parcelable;
30 +
31 +import org.json.JSONArray;
32 +import org.json.JSONException;
33 +import org.json.JSONObject;
34 +
35 +import java.io.Serializable;
36 +import java.util.ArrayList;
37 +import java.util.Date;
38 +
39 +import ly.warp.sdk.utils.WarpUtils;
40 +import ly.warp.sdk.utils.constants.WarpConstants;
41 +
42 +/**
43 + * Created by Panagiotis Triantafyllou on 04-Apr-23.
44 + */
45 +
46 +public class UnifiedCoupon implements Parcelable, Serializable {
47 +
48 + private static final long serialVersionUID = -4754964462459705285L;
49 +
50 + /* Constants used to export the campaign in JSON formal and vice versa */
51 +
52 + private static final String BARCODE = "barcode";
53 + private static final String CODE = "code";
54 + private static final String CREATED = "created";
55 + private static final String COUPONS = "coupons";
56 + private static final String STATUS = "status";
57 + private static final String DESCRIPTION = "description";
58 +
59 + /* Member variables of the Campaign object */
60 +
61 + private String barcode = "";
62 + private String description = "";
63 + private String status = "";
64 + private int code = 0;
65 + private String created = "";
66 + private ArrayList<Coupon> coupons = new ArrayList();
67 + private Date expirationDate = new Date();
68 +
69 + public UnifiedCoupon() {
70 + this.barcode = "";
71 + this.description = "";
72 + this.status = "";
73 + this.code = 0;
74 + this.created = "";
75 + this.coupons = new ArrayList();
76 + this.expirationDate = new Date();
77 + }
78 +
79 + /**
80 + * Basic constructor used to create an object from a String, representing a
81 + * JSON Object
82 + *
83 + * @param json The String, representing the JSON Object
84 + * @throws JSONException Thrown if the String cannot be converted to JSON
85 + */
86 + public UnifiedCoupon(String json) throws JSONException {
87 + this(new JSONObject(json));
88 + }
89 +
90 + /**
91 + * Constructor used to create an Object from a given JSON Object
92 + *
93 + * @param json JSON Object used to create the Coupon
94 + */
95 + public UnifiedCoupon(JSONObject json) {
96 + if (json != null) {
97 + this.barcode = json.optString(BARCODE);
98 + this.description = json.optString(DESCRIPTION);
99 + this.status = json.optString(STATUS);
100 + this.code = json.optInt(CODE);
101 + this.created = json.optString(CREATED);
102 + JSONArray jArray = null;
103 + jArray = json.optJSONArray(COUPONS);
104 + if (jArray != null && jArray.length() > 0) {
105 + for (int i = 0; i < jArray.length(); i++) {
106 + JSONObject jObj = jArray.optJSONObject(i);
107 + this.coupons.add(new Coupon(jObj));
108 + }
109 + }
110 + }
111 + }
112 +
113 + public UnifiedCoupon(Parcel source) {
114 + this.barcode = source.readString();
115 + this.description = source.readString();
116 + this.status = source.readString();
117 + this.code = source.readInt();
118 + this.created = source.readString();
119 + }
120 +
121 + @Override
122 + public void writeToParcel(Parcel dest, int flags) {
123 + dest.writeString(this.barcode);
124 + dest.writeString(this.description);
125 + dest.writeString(this.status);
126 + dest.writeInt(this.code);
127 + dest.writeString(this.created);
128 + }
129 +
130 + /**
131 + * Converts the Unified Coupon into a JSON Object
132 + *
133 + * @return The JSON Object created from this Unified Coupon
134 + */
135 + public JSONObject toJSONObject() {
136 + JSONObject jObj = new JSONObject();
137 + try {
138 + jObj.putOpt(BARCODE, this.barcode);
139 + jObj.putOpt(DESCRIPTION, this.description);
140 + jObj.putOpt(STATUS, this.status);
141 + jObj.putOpt(CODE, this.code);
142 + jObj.putOpt(CREATED, this.created);
143 + jObj.putOpt(COUPONS, this.coupons);
144 + } catch (JSONException e) {
145 + if (WarpConstants.DEBUG) {
146 + e.printStackTrace();
147 + }
148 + }
149 + return jObj;
150 + }
151 +
152 + /**
153 + * String representation of the Unified Coupon, as a JSON object
154 + *
155 + * @return A String representation of JSON object
156 + */
157 + public String toString() {
158 + if (toJSONObject() != null)
159 + return toJSONObject().toString();
160 + return null;
161 + }
162 +
163 + /**
164 + * String representation of the Coupon, as a human readable JSON object
165 + *
166 + * @return A human readable String representation of JSON object
167 + */
168 + public String toHumanReadableString() {
169 + String humanReadableString = null;
170 + try {
171 + humanReadableString = toJSONObject().toString(2);
172 + } catch (JSONException e) {
173 + WarpUtils.warn("Failed converting Unified Coupon JSON object to String", e);
174 + }
175 + return humanReadableString;
176 + }
177 +
178 + // ================================================================================
179 + // Getters
180 + // ================================================================================
181 +
182 +
183 + public String getBarcode() {
184 + return barcode;
185 + }
186 +
187 + public void setBarcode(String barcode) {
188 + this.barcode = barcode;
189 + }
190 +
191 + public int getCode() {
192 + return code;
193 + }
194 +
195 + public void setCode(int code) {
196 + this.code = code;
197 + }
198 +
199 + public String getCreated() {
200 + return created;
201 + }
202 +
203 + public void setCreated(String created) {
204 + this.created = created;
205 + }
206 +
207 + public ArrayList<Coupon> getCoupons() {
208 + return coupons;
209 + }
210 +
211 + public void setCoupons(ArrayList<Coupon> coupons) {
212 + this.coupons = coupons;
213 + }
214 +
215 + public String getStatus() {
216 + return status;
217 + }
218 +
219 + public void setStatus(String status) {
220 + this.status = status;
221 + }
222 +
223 + public String getDescription() {
224 + return description;
225 + }
226 +
227 + public void setDescription(String description) {
228 + this.description = description;
229 + }
230 +
231 + public Date getExpirationDate() {
232 + return expirationDate;
233 + }
234 +
235 + public void setExpirationDate(Date expirationDate) {
236 + this.expirationDate = expirationDate;
237 + }
238 +
239 + @Override
240 + public int describeContents() {
241 + return 0;
242 + }
243 +
244 + public static final Creator<UnifiedCoupon> CREATOR = new Creator<UnifiedCoupon>() {
245 + public UnifiedCoupon createFromParcel(Parcel source) {
246 + return new UnifiedCoupon(source);
247 + }
248 +
249 + public UnifiedCoupon[] newArray(int size) {
250 + return new UnifiedCoupon[size];
251 + }
252 + };
253 +}
...@@ -54,6 +54,18 @@ public interface ApiService { ...@@ -54,6 +54,18 @@ public interface ApiService {
54 @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); 54 @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
55 55
56 @Headers("Content-Type: application/json") 56 @Headers("Content-Type: application/json")
57 + @POST("/oauth/{appUuid}/context")
58 + Call<ResponseBody> getUnifiedCoupons(@Path("appUuid") String appUuid,
59 + @Body RequestBody request,
60 + @Header(WarpConstants.HEADER_DATE) String timeStamp,
61 + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId,
62 + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId,
63 + @Header(WarpConstants.HEADER_CHANNEL) String channel,
64 + @Header(WarpConstants.HEADER_WEB_ID) String webId,
65 + @Header(WarpConstants.HEADER_SIGNATURE) String signature,
66 + @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer);
67 +
68 + @Headers("Content-Type: application/json")
57 @POST("/api/mobile/v2/{appUuid}/context/") 69 @POST("/api/mobile/v2/{appUuid}/context/")
58 Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid, 70 Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid,
59 @Body RequestBody request, 71 @Body RequestBody request,
......
...@@ -74,6 +74,7 @@ import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage; ...@@ -74,6 +74,7 @@ import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage;
74 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel; 74 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel;
75 import ly.warp.sdk.io.models.MerchantList; 75 import ly.warp.sdk.io.models.MerchantList;
76 import ly.warp.sdk.io.models.PushCampaign; 76 import ly.warp.sdk.io.models.PushCampaign;
77 +import ly.warp.sdk.io.models.UnifiedCoupon;
77 import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel; 78 import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel;
78 import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; 79 import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest;
79 import ly.warp.sdk.io.request.CosmoteSharingRequest; 80 import ly.warp.sdk.io.request.CosmoteSharingRequest;
...@@ -123,6 +124,7 @@ public class WarplyManagerHelper { ...@@ -123,6 +124,7 @@ public class WarplyManagerHelper {
123 public static double mMetersWebview = 0.0d; 124 public static double mMetersWebview = 0.0d;
124 public static int mStepsWebview = 0; 125 public static int mStepsWebview = 0;
125 public static int mSteps = 0; 126 public static int mSteps = 0;
127 + private static ArrayList<UnifiedCoupon> mMarketCoupons = new ArrayList<>();
126 128
127 // =========================================================== 129 // ===========================================================
128 // Methods for/from SuperClass/Interfaces 130 // Methods for/from SuperClass/Interfaces
...@@ -1247,6 +1249,13 @@ public class WarplyManagerHelper { ...@@ -1247,6 +1249,13 @@ public class WarplyManagerHelper {
1247 mDealsSum = sum; 1249 mDealsSum = sum;
1248 } 1250 }
1249 1251
1252 + public static ArrayList<UnifiedCoupon> getMarketCoupons() {
1253 + return mMarketCoupons;
1254 + }
1255 + public static void setMarketCoupons( ArrayList<UnifiedCoupon> marketCoupons) {
1256 + mMarketCoupons = marketCoupons;
1257 + }
1258 +
1250 public static boolean checkForLoyaltySDKNotification(Context context, Map<String, String> pushPayload) { 1259 public static boolean checkForLoyaltySDKNotification(Context context, Map<String, String> pushPayload) {
1251 Bundle data = convertToBundle(pushPayload); 1260 Bundle data = convertToBundle(pushPayload);
1252 if (data == null || !data.containsKey("loyalty-action")) 1261 if (data == null || !data.containsKey("loyalty-action"))
......
...@@ -97,6 +97,7 @@ import ly.warp.sdk.io.models.SharingList; ...@@ -97,6 +97,7 @@ import ly.warp.sdk.io.models.SharingList;
97 import ly.warp.sdk.io.models.TagsCategoriesList; 97 import ly.warp.sdk.io.models.TagsCategoriesList;
98 import ly.warp.sdk.io.models.TagsList; 98 import ly.warp.sdk.io.models.TagsList;
99 import ly.warp.sdk.io.models.TransactionsList; 99 import ly.warp.sdk.io.models.TransactionsList;
100 +import ly.warp.sdk.io.models.UnifiedCoupon;
100 import ly.warp.sdk.io.models.WarplyPacingEventModel; 101 import ly.warp.sdk.io.models.WarplyPacingEventModel;
101 import ly.warp.sdk.io.request.CosmoteCouponSharingRequest; 102 import ly.warp.sdk.io.request.CosmoteCouponSharingRequest;
102 import ly.warp.sdk.io.request.CosmotePostEventRequest; 103 import ly.warp.sdk.io.request.CosmotePostEventRequest;
...@@ -1892,6 +1893,71 @@ public class WarplyManager { ...@@ -1892,6 +1893,71 @@ public class WarplyManager {
1892 }); 1893 });
1893 } 1894 }
1894 1895
1896 + public static void getUnifiedCoupons(final CallbackReceiver<ArrayList<UnifiedCoupon>> receiver) {
1897 + WarpUtils.log("************* WARPLY User Coupons Request ********************");
1898 + WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active");
1899 + WarpUtils.log("**************************************************");
1900 + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
1901 + getUnifiedCouponsRetro(service, new Callback<ResponseBody>() {
1902 + @Override
1903 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseCoupons) {
1904 + if (responseCoupons.code() == 200 && responseCoupons.body() != null) {
1905 + JSONObject jobjCouponsResponse = null;
1906 + try {
1907 + jobjCouponsResponse = new JSONObject(responseCoupons.body().string());
1908 + } catch (Exception e) {
1909 + e.printStackTrace();
1910 + }
1911 + if (jobjCouponsResponse != null && jobjCouponsResponse.has("status") && jobjCouponsResponse.optInt("status", 2) == 1) {
1912 + ArrayList<UnifiedCoupon> couponList = new ArrayList<UnifiedCoupon>();
1913 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1914 + dynatraceEvent.setEventName("custom_success_unified_coupons_loyalty");
1915 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1916 + JSONObject finalJobjCouponsResponse = jobjCouponsResponse;
1917 + final ExecutorService executor = Executors.newFixedThreadPool(1);
1918 + executor.submit(() -> {
1919 + JSONObject jCouponsBody = null;
1920 + try {
1921 + jCouponsBody = finalJobjCouponsResponse.optJSONObject("result");
1922 + if (jCouponsBody != null && jCouponsBody.length() > 0) {
1923 + JSONArray jCouponsInnerBody = null;
1924 + jCouponsInnerBody = jCouponsBody.optJSONArray("coupons");
1925 + if (jCouponsInnerBody != null && jCouponsInnerBody.length() > 0) {
1926 + for (int i = 0; i < jCouponsInnerBody.length(); i++) {
1927 + couponList.add(new UnifiedCoupon(jCouponsInnerBody.optJSONObject(i)));
1928 + }
1929 + }
1930 + }
1931 + } catch (Exception e) {
1932 + e.printStackTrace();
1933 + }
1934 + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(couponList));
1935 + executor.shutdownNow();
1936 + });
1937 + } else {
1938 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1939 + dynatraceEvent.setEventName("custom_error_unified_coupons_loyalty");
1940 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1941 + receiver.onFailure(2);
1942 + }
1943 + } else {
1944 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1945 + dynatraceEvent.setEventName("custom_error_unified_coupons_loyalty");
1946 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1947 + receiver.onFailure(responseCoupons.code());
1948 + }
1949 + }
1950 +
1951 + @Override
1952 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
1953 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
1954 + dynatraceEvent.setEventName("custom_error_user_coupons_loyalty");
1955 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
1956 + receiver.onFailure(2);
1957 + }
1958 + });
1959 + }
1960 +
1895 public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) { 1961 public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) {
1896 WarpUtils.log("************* WARPLY User Coupons Request ********************"); 1962 WarpUtils.log("************* WARPLY User Coupons Request ********************");
1897 WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); 1963 WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active");
...@@ -2248,6 +2314,58 @@ public class WarplyManager { ...@@ -2248,6 +2314,58 @@ public class WarplyManager {
2248 }); 2314 });
2249 } 2315 }
2250 2316
2317 + private static void getUnifiedCouponsRetro(ApiService service, Callback<ResponseBody> callback) {
2318 + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
2319 + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
2320 + String webId = WarpUtils.getWebId(Warply.getWarplyContext());
2321 + Map<String, Object> jsonParamsCouponsets = new ArrayMap<>();
2322 + Map<String, Object> jsonParams = new ArrayMap<>();
2323 + jsonParams.put("action", "retrieve_unified_coupons");
2324 + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
2325 + jsonParamsCouponsets.put("coupon", jsonParams);
2326 + RequestBody unifiedCouponsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCouponsets)).toString());
2327 + Call<ResponseBody> unifiedCouponsCall = service.getUnifiedCoupons(
2328 + WarplyProperty.getAppUuid(Warply.getWarplyContext()),
2329 + unifiedCouponsRequest,
2330 + timeStamp,
2331 + "android:" + Warply.getWarplyContext().getPackageName(),
2332 + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
2333 + "mobile",
2334 + webId,
2335 + WarpUtils.produceSignature(apiKey + timeStamp),
2336 + "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token")
2337 + );
2338 + unifiedCouponsCall.enqueue(new Callback<ResponseBody>() {
2339 + @Override
2340 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
2341 + if (response.code() == 401) {
2342 + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() {
2343 + @Override
2344 + public void onSuccess(JSONObject result) {
2345 + int status = result.optInt("status", 2);
2346 + if (status == 1)
2347 + getUnifiedCouponsRetro(service, callback);
2348 + else
2349 + callback.onFailure(call, new Throwable());
2350 + }
2351 +
2352 + @Override
2353 + public void onFailure(int errorCode) {
2354 + callback.onFailure(call, new Throwable());
2355 + }
2356 + });
2357 + } else {
2358 + callback.onResponse(call, response);
2359 + }
2360 + }
2361 +
2362 + @Override
2363 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
2364 + callback.onFailure(call, t);
2365 + }
2366 + });
2367 + }
2368 +
2251 private static void getMerchantsRetro(ApiService service, Callback<ResponseBody> callback) { 2369 private static void getMerchantsRetro(ApiService service, Callback<ResponseBody> callback) {
2252 String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); 2370 String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
2253 String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); 2371 String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
......
1 package ly.warp.sdk.views.adapters; 1 package ly.warp.sdk.views.adapters;
2 -
3 import android.content.Context; 2 import android.content.Context;
3 +import android.os.Build;
4 +import android.text.Html;
4 import android.text.TextUtils; 5 import android.text.TextUtils;
5 import android.view.LayoutInflater; 6 import android.view.LayoutInflater;
6 import android.view.View; 7 import android.view.View;
7 import android.view.ViewGroup; 8 import android.view.ViewGroup;
8 import android.widget.ImageView; 9 import android.widget.ImageView;
10 +import android.widget.LinearLayout;
9 import android.widget.TextView; 11 import android.widget.TextView;
10 - 12 +import androidx.constraintlayout.widget.ConstraintLayout;
11 import androidx.core.content.ContextCompat; 13 import androidx.core.content.ContextCompat;
12 -import androidx.core.text.HtmlCompat;
13 import androidx.recyclerview.widget.RecyclerView; 14 import androidx.recyclerview.widget.RecyclerView;
14 -
15 import com.bumptech.glide.Glide; 15 import com.bumptech.glide.Glide;
16 import com.bumptech.glide.load.engine.DiskCacheStrategy; 16 import com.bumptech.glide.load.engine.DiskCacheStrategy;
17 -
18 import java.text.ParseException; 17 import java.text.ParseException;
19 import java.text.SimpleDateFormat; 18 import java.text.SimpleDateFormat;
20 import java.util.Date; 19 import java.util.Date;
20 +import java.util.Locale;
21 import java.util.concurrent.TimeUnit; 21 import java.util.concurrent.TimeUnit;
22 -
23 import io.reactivex.Observable; 22 import io.reactivex.Observable;
24 import io.reactivex.subjects.PublishSubject; 23 import io.reactivex.subjects.PublishSubject;
25 import ly.warp.sdk.R; 24 import ly.warp.sdk.R;
...@@ -27,30 +26,33 @@ import ly.warp.sdk.io.models.Coupon; ...@@ -27,30 +26,33 @@ import ly.warp.sdk.io.models.Coupon;
27 import ly.warp.sdk.io.models.CouponList; 26 import ly.warp.sdk.io.models.CouponList;
28 import ly.warp.sdk.io.models.Merchant; 27 import ly.warp.sdk.io.models.Merchant;
29 import ly.warp.sdk.utils.WarplyManagerHelper; 28 import ly.warp.sdk.utils.WarplyManagerHelper;
30 -
31 public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapter.ActiveCouponViewHolder> { 29 public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapter.ActiveCouponViewHolder> {
32 -
33 private Context mContext; 30 private Context mContext;
34 private CouponList mCoupons; 31 private CouponList mCoupons;
35 private final PublishSubject<Coupon> onClickSubject = PublishSubject.create(); 32 private final PublishSubject<Coupon> onClickSubject = PublishSubject.create();
36 - private boolean mIsPast = false; 33 + private boolean mIsPast = false, mIsCustom = false;
37 -
38 public ActiveCouponAdapter(Context mContext, CouponList campaignList) { 34 public ActiveCouponAdapter(Context mContext, CouponList campaignList) {
39 this.mContext = mContext; 35 this.mContext = mContext;
40 this.mCoupons = campaignList; 36 this.mCoupons = campaignList;
41 this.mIsPast = false; 37 this.mIsPast = false;
42 } 38 }
43 -
44 public ActiveCouponAdapter(Context mContext, CouponList campaignList, boolean past) { 39 public ActiveCouponAdapter(Context mContext, CouponList campaignList, boolean past) {
45 this.mContext = mContext; 40 this.mContext = mContext;
46 this.mCoupons = campaignList; 41 this.mCoupons = campaignList;
47 this.mIsPast = past; 42 this.mIsPast = past;
48 } 43 }
49 - 44 + public ActiveCouponAdapter(Context mContext, CouponList campaignList, boolean past, boolean custom) {
45 + this.mContext = mContext;
46 + this.mCoupons = campaignList;
47 + this.mIsPast = past;
48 + this.mIsCustom = custom;
49 + }
50 public class ActiveCouponViewHolder extends RecyclerView.ViewHolder { 50 public class ActiveCouponViewHolder extends RecyclerView.ViewHolder {
51 private ImageView ivCouponLogo, ivCouponBackground; 51 private ImageView ivCouponLogo, ivCouponBackground;
52 - private TextView tvCouponTitle, tvCouponValue, tvCouponDate, tvCouponDescription; 52 + private TextView tvCouponTitle, tvCouponValue, tvCouponDate, tvDateLimit,
53 - 53 + tvCouponDescription, tvCouponDateExpired;
54 + private ConstraintLayout clCustomLayout;
55 + private LinearLayout lLDateLimit;
54 public ActiveCouponViewHolder(View view) { 56 public ActiveCouponViewHolder(View view) {
55 super(view); 57 super(view);
56 ivCouponBackground = view.findViewById(R.id.iv_past_coupon_background); 58 ivCouponBackground = view.findViewById(R.id.iv_past_coupon_background);
...@@ -59,9 +61,12 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -59,9 +61,12 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
59 tvCouponValue = view.findViewById(R.id.tv_active_coupons_value); 61 tvCouponValue = view.findViewById(R.id.tv_active_coupons_value);
60 tvCouponDate = view.findViewById(R.id.tv_active_coupons_date); 62 tvCouponDate = view.findViewById(R.id.tv_active_coupons_date);
61 tvCouponDescription = view.findViewById(R.id.tv_active_coupons_description); 63 tvCouponDescription = view.findViewById(R.id.tv_active_coupons_description);
64 + clCustomLayout = view.findViewById(R.id.cl_custom_layout);
65 + tvCouponDateExpired = view.findViewById(R.id.tv_active_coupons_date_expired);
66 + tvDateLimit = view.findViewById(R.id.tv_active_coupons_date_limit);
67 + lLDateLimit = view.findViewById(R.id.ll_date_limit);
62 } 68 }
63 } 69 }
64 -
65 @Override 70 @Override
66 public int getItemCount() { 71 public int getItemCount() {
67 if (mCoupons == null) 72 if (mCoupons == null)
...@@ -69,38 +74,144 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -69,38 +74,144 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
69 else 74 else
70 return mCoupons.size(); 75 return mCoupons.size();
71 } 76 }
72 -
73 -
74 public Coupon getItem(int id) { 77 public Coupon getItem(int id) {
75 return mCoupons.get(id); 78 return mCoupons.get(id);
76 } 79 }
77 -
78 public void updateData(CouponList couponList) { 80 public void updateData(CouponList couponList) {
79 mCoupons.clear(); 81 mCoupons.clear();
80 mCoupons.addAll(couponList); 82 mCoupons.addAll(couponList);
81 notifyDataSetChanged(); 83 notifyDataSetChanged();
82 } 84 }
83 -
84 -
85 @Override 85 @Override
86 public ActiveCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 86 public ActiveCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
87 View itemView; 87 View itemView;
88 if (mIsPast) 88 if (mIsPast)
89 itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.past_coupon_layout, parent, false); 89 itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.past_coupon_layout, parent, false);
90 + else if (mIsCustom)
91 + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_coupon_layout, parent, false);
90 else 92 else
91 itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.active_coupon_layout, parent, false); 93 itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.active_coupon_layout, parent, false);
92 return new ActiveCouponViewHolder(itemView); 94 return new ActiveCouponViewHolder(itemView);
93 } 95 }
94 -
95 @Override 96 @Override
96 public void onBindViewHolder(final ActiveCouponViewHolder holder, int position) { 97 public void onBindViewHolder(final ActiveCouponViewHolder holder, int position) {
97 Coupon couponItem = mCoupons.get(position); 98 Coupon couponItem = mCoupons.get(position);
98 Merchant merchant = new Merchant(); 99 Merchant merchant = new Merchant();
99 -
100 if (mIsPast) 100 if (mIsPast)
101 holder.ivCouponBackground.setColorFilter(ContextCompat.getColor(mContext, R.color.grey_light3), android.graphics.PorterDuff.Mode.MULTIPLY); 101 holder.ivCouponBackground.setColorFilter(ContextCompat.getColor(mContext, R.color.grey_light3), android.graphics.PorterDuff.Mode.MULTIPLY);
102 -
103 if (couponItem != null) { 102 if (couponItem != null) {
103 + if (mIsCustom) {
104 + if (couponItem.getStatus() == 1) {
105 + holder.ivCouponLogo.setAlpha(1.0f);
106 + holder.tvCouponTitle.setAlpha(1.0f);
107 + holder.tvCouponValue.setAlpha(1.0f);
108 + holder.tvCouponDescription.setAlpha(1.0f);
109 + holder.clCustomLayout.setBackgroundResource(R.drawable.ic_coupon_background);
110 + } else {
111 + holder.ivCouponLogo.setAlpha(0.23f);
112 + holder.tvCouponTitle.setAlpha(0.15f);
113 + holder.tvCouponValue.setAlpha(0.15f);
114 + holder.tvCouponDescription.setAlpha(0.15f);
115 + holder.clCustomLayout.setBackgroundResource(R.drawable.ic_coupon_background_gray);
116 + }
117 + if (WarplyManagerHelper.getMerchantList() != null && WarplyManagerHelper.getMerchantList().size() > 0) {
118 + for (Merchant mer : WarplyManagerHelper.getMerchantList()) {
119 + if (mer.getUuid().equals(couponItem.getMerchantUuid())) {
120 + merchant = mer;
121 + break;
122 + }
123 + }
124 + }
125 + if (merchant == null) {
126 + if (!TextUtils.isEmpty(couponItem.getImage())) {
127 + Glide.with(mContext)
128 +// .setDefaultRequestOptions(
129 +// RequestOptions
130 +// .placeholderOf(R.drawable.ic_default_contact_photo)
131 +// .error(R.drawable.ic_default_contact_photo))
132 + .load(couponItem.getImage())
133 + .diskCacheStrategy(DiskCacheStrategy.DATA)
134 + .into(holder.ivCouponLogo);
135 + } else {
136 + Glide.with(mContext)
137 + .load(R.drawable.ic_cosmote_logo_horizontal_grey)
138 + .into(holder.ivCouponLogo);
139 + }
140 + holder.tvCouponTitle.setText(couponItem.getName());
141 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
142 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getDescription().equals("null") || TextUtils.isEmpty(couponItem.getDescription()) ? "" : couponItem.getDescription(), Html.FROM_HTML_MODE_COMPACT));
143 + } else {
144 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getDescription().equals("null") || TextUtils.isEmpty(couponItem.getDescription()) ? "" : couponItem.getDescription()));
145 + }
146 + } else {
147 + if (!TextUtils.isEmpty(merchant.getImgPreview())) {
148 + Glide.with(mContext)
149 +// .setDefaultRequestOptions(
150 +// RequestOptions
151 +// .placeholderOf(R.drawable.ic_default_contact_photo)
152 +// .error(R.drawable.ic_default_contact_photo))
153 + .load(merchant.getImgPreview())
154 + .diskCacheStrategy(DiskCacheStrategy.DATA)
155 + .into(holder.ivCouponLogo);
156 + } else {
157 + Glide.with(mContext)
158 + .load(R.drawable.ic_cosmote_logo_horizontal_grey)
159 + .into(holder.ivCouponLogo);
160 + }
161 + holder.tvCouponTitle.setText(merchant.getAdminName());
162 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
163 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText().equals("null") || TextUtils.isEmpty(couponItem.getInnerText()) ? "" : couponItem.getInnerText(), Html.FROM_HTML_MODE_COMPACT));
164 + } else {
165 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText().equals("null") || TextUtils.isEmpty(couponItem.getInnerText()) ? "" : couponItem.getInnerText()));
166 + }
167 + }
168 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
169 + Date newDate = new Date();
170 + try {
171 + newDate = simpleDateFormat.parse(couponItem.getExpiration());
172 + } catch (ParseException e) {
173 + e.printStackTrace();
174 + }
175 + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
176 + if (mIsPast)
177 + holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_expired_date), simpleDateFormat.format(newDate != null ? newDate : "")));
178 + else {
179 + long days = getDaysBetweenDates(simpleDateFormat.format(new Date()), simpleDateFormat.format(newDate != null ? newDate : ""));
180 + holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
181 + if (couponItem.getStatus() == 1) {
182 + if (days < 15) {
183 + holder.tvCouponDate.setText("");
184 + holder.tvCouponDate.setVisibility(View.VISIBLE);
185 + holder.tvCouponDateExpired.setVisibility(View.GONE);
186 + holder.tvDateLimit.setText(String.format(mContext.getString(R.string.cos_coupon_date_limit2), simpleDateFormat.format(newDate != null ? newDate : "")));
187 + holder.lLDateLimit.setVisibility(View.VISIBLE);
188 + } else {
189 + holder.tvCouponDate.setVisibility(View.VISIBLE);
190 + holder.tvCouponDateExpired.setVisibility(View.GONE);
191 + holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
192 + }
193 + } else {
194 + holder.tvCouponDate.setVisibility(View.GONE);
195 + holder.tvCouponDateExpired.setVisibility(View.VISIBLE);
196 + holder.tvCouponDateExpired.setText(mContext.getString(R.string.cos_market_coupon_expired));
197 + }
198 + }
199 + if (TextUtils.isEmpty(couponItem.getDiscount_type())) {
200 + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
201 + } else {
202 + if (couponItem.getDiscount_type().equals("value")) {
203 + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
204 + } else if (couponItem.getDiscount_type().equals("percentage")) {
205 + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.percentage));
206 + } else if (couponItem.getDiscount_type().equals("plus_one")) {
207 + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.plus_one));
208 + } else {
209 + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
210 + }
211 + }
212 + holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem));
213 + return;
214 + }
104 if (WarplyManagerHelper.getMerchantList() != null && WarplyManagerHelper.getMerchantList().size() > 0) { 215 if (WarplyManagerHelper.getMerchantList() != null && WarplyManagerHelper.getMerchantList().size() > 0) {
105 for (Merchant mer : WarplyManagerHelper.getMerchantList()) { 216 for (Merchant mer : WarplyManagerHelper.getMerchantList()) {
106 if (mer.getUuid().equals(couponItem.getMerchantUuid())) { 217 if (mer.getUuid().equals(couponItem.getMerchantUuid())) {
...@@ -109,7 +220,6 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -109,7 +220,6 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
109 } 220 }
110 } 221 }
111 } 222 }
112 -
113 if (merchant == null) { 223 if (merchant == null) {
114 if (!TextUtils.isEmpty(couponItem.getImage())) { 224 if (!TextUtils.isEmpty(couponItem.getImage())) {
115 Glide.with(mContext) 225 Glide.with(mContext)
...@@ -125,10 +235,13 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -125,10 +235,13 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
125 .load(R.drawable.ic_cosmote_logo_horizontal_grey) 235 .load(R.drawable.ic_cosmote_logo_horizontal_grey)
126 .into(holder.ivCouponLogo); 236 .into(holder.ivCouponLogo);
127 } 237 }
128 -
129 holder.tvCouponTitle.setText(couponItem.getName()); 238 holder.tvCouponTitle.setText(couponItem.getName());
130 if (!mIsPast) { 239 if (!mIsPast) {
131 - holder.tvCouponDescription.setText(HtmlCompat.fromHtml(couponItem.getInnerText(), HtmlCompat.FROM_HTML_MODE_COMPACT)); 240 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
241 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText(), Html.FROM_HTML_MODE_COMPACT));
242 + } else {
243 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText()));
244 + }
132 } 245 }
133 } else { 246 } else {
134 if (!TextUtils.isEmpty(merchant.getImgPreview())) { 247 if (!TextUtils.isEmpty(merchant.getImgPreview())) {
...@@ -145,13 +258,15 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -145,13 +258,15 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
145 .load(R.drawable.ic_cosmote_logo_horizontal_grey) 258 .load(R.drawable.ic_cosmote_logo_horizontal_grey)
146 .into(holder.ivCouponLogo); 259 .into(holder.ivCouponLogo);
147 } 260 }
148 -
149 holder.tvCouponTitle.setText(merchant.getAdminName()); 261 holder.tvCouponTitle.setText(merchant.getAdminName());
150 if (!mIsPast) { 262 if (!mIsPast) {
151 - holder.tvCouponDescription.setText(HtmlCompat.fromHtml(couponItem.getInnerText(), HtmlCompat.FROM_HTML_MODE_COMPACT)); 263 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
264 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText(), Html.FROM_HTML_MODE_COMPACT));
265 + } else {
266 + holder.tvCouponDescription.setText(Html.fromHtml(couponItem.getInnerText()));
267 + }
152 } 268 }
153 } 269 }
154 -
155 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); 270 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
156 Date newDate = new Date(); 271 Date newDate = new Date();
157 try { 272 try {
...@@ -164,7 +279,6 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -164,7 +279,6 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
164 holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_expired_date), simpleDateFormat.format(newDate != null ? newDate : ""))); 279 holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_expired_date), simpleDateFormat.format(newDate != null ? newDate : "")));
165 else 280 else
166 holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : ""))); 281 holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
167 -
168 if (TextUtils.isEmpty(couponItem.getDiscount_type())) { 282 if (TextUtils.isEmpty(couponItem.getDiscount_type())) {
169 holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); 283 holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
170 } else { 284 } else {
...@@ -181,11 +295,26 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte ...@@ -181,11 +295,26 @@ public class ActiveCouponAdapter extends RecyclerView.Adapter<ActiveCouponAdapte
181 holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem)); 295 holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem));
182 } 296 }
183 } 297 }
184 - 298 + private long getDaysBetweenDates(String start, String end) {
299 + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
300 + Date startDate, endDate;
301 + long numberOfDays = 0;
302 + try {
303 + startDate = dateFormat.parse(start);
304 + endDate = dateFormat.parse(end);
305 + numberOfDays = getUnitBetweenDates(startDate, endDate, TimeUnit.DAYS);
306 + } catch (ParseException e) {
307 + e.printStackTrace();
308 + }
309 + return numberOfDays;
310 + }
311 + private long getUnitBetweenDates(Date startDate, Date endDate, TimeUnit unit) {
312 + long timeDiff = endDate.getTime() - startDate.getTime();
313 + return unit.convert(timeDiff, TimeUnit.MILLISECONDS);
314 + }
185 public Observable<Coupon> getPositionClicks() { 315 public Observable<Coupon> getPositionClicks() {
186 return onClickSubject.cache(); 316 return onClickSubject.cache();
187 } 317 }
188 -
189 private long getDifferenceDays(Date d1, Date d2) { 318 private long getDifferenceDays(Date d1, Date d2) {
190 long diff = d2.getTime() - d1.getTime(); 319 long diff = d2.getTime() - d1.getTime();
191 return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); 320 return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
......
1 +package ly.warp.sdk.views.adapters;
2 +
3 +import android.content.Context;
4 +import android.view.LayoutInflater;
5 +import android.view.View;
6 +import android.view.ViewGroup;
7 +import android.widget.ImageView;
8 +import android.widget.TextView;
9 +
10 +import androidx.recyclerview.widget.RecyclerView;
11 +
12 +import java.text.ParseException;
13 +import java.text.SimpleDateFormat;
14 +import java.util.ArrayList;
15 +import java.util.Collections;
16 +import java.util.Date;
17 +import java.util.concurrent.TimeUnit;
18 +
19 +import io.reactivex.Observable;
20 +import io.reactivex.subjects.PublishSubject;
21 +import ly.warp.sdk.R;
22 +import ly.warp.sdk.io.models.Coupon;
23 +import ly.warp.sdk.io.models.UnifiedCoupon;
24 +
25 +public class MarketCouponAdapter extends RecyclerView.Adapter<MarketCouponAdapter.ActiveCouponViewHolder> {
26 +
27 + private Context mContext;
28 + private ArrayList<UnifiedCoupon> mCoupons;
29 + private final PublishSubject<UnifiedCoupon> onClickSubject = PublishSubject.create();
30 + private boolean mIsPast = false;
31 +
32 + public MarketCouponAdapter(Context mContext, ArrayList<UnifiedCoupon> campaignList) {
33 + this.mContext = mContext;
34 + this.mCoupons = campaignList;
35 + this.mIsPast = false;
36 + }
37 +
38 + public MarketCouponAdapter(Context mContext, ArrayList<UnifiedCoupon> campaignList, boolean past) {
39 + this.mContext = mContext;
40 + this.mCoupons = campaignList;
41 + this.mIsPast = past;
42 + }
43 +
44 + public class ActiveCouponViewHolder extends RecyclerView.ViewHolder {
45 + private ImageView ivCouponBackground;
46 + private TextView tvCouponTitle, tvCouponDate, tvCouponCount;
47 +
48 + public ActiveCouponViewHolder(View view) {
49 + super(view);
50 + ivCouponBackground = view.findViewById(R.id.iv_past_coupon_background);
51 + tvCouponTitle = view.findViewById(R.id.tv_market_coupons_title);
52 + tvCouponDate = view.findViewById(R.id.tv_market_coupons_date);
53 + tvCouponCount = view.findViewById(R.id.tv_market_coupons_count);
54 + }
55 + }
56 +
57 + @Override
58 + public int getItemCount() {
59 + if (mCoupons == null)
60 + return 0;
61 + else
62 + return mCoupons.size();
63 + }
64 +
65 +
66 + public UnifiedCoupon getItem(int id) {
67 + return mCoupons.get(id);
68 + }
69 +
70 + public void updateData(ArrayList<UnifiedCoupon> couponList) {
71 + mCoupons.clear();
72 + mCoupons.addAll(couponList);
73 + notifyDataSetChanged();
74 + }
75 +
76 +
77 + @Override
78 + public ActiveCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
79 + View itemView;
80 + if (mIsPast)
81 + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.past_coupon_layout, parent, false);
82 + else
83 + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.market_coupon_layout, parent, false);
84 + return new ActiveCouponViewHolder(itemView);
85 + }
86 +
87 + @Override
88 + public void onBindViewHolder(final ActiveCouponViewHolder holder, int position) {
89 + UnifiedCoupon couponItem = mCoupons.get(position);
90 +
91 + if (couponItem != null) {
92 + int count = 0;
93 + if (couponItem.getCoupons() != null && couponItem.getCoupons().size() > 0) {
94 + ArrayList<Coupon> couponList = new ArrayList<Coupon>();
95 + for (Coupon item : couponItem.getCoupons()) {
96 + if (item.getStatus() == 1) {
97 + count++;
98 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
99 + Date newDate = new Date();
100 + try {
101 + newDate = simpleDateFormat.parse(item.getExpiration());
102 + } catch (ParseException e) {
103 + e.printStackTrace();
104 + }
105 + item.setExpirationDate(newDate);
106 + couponList.add(item);
107 + }
108 + }
109 +
110 + Collections.sort(couponList, (coupon1, coupon2) -> coupon1.getExpirationDate().compareTo(coupon2.getExpirationDate()));
111 +
112 + if (couponList != null && couponList.size() > 0) {
113 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
114 + Date newDate = new Date();
115 + try {
116 + newDate = simpleDateFormat.parse(couponList.get(0).getExpiration());
117 + } catch (ParseException e) {
118 + e.printStackTrace();
119 + }
120 + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
121 + holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
122 + }
123 + }
124 +
125 + if (count > 1) {
126 + holder.tvCouponCount.setText(String.format(mContext.getString(R.string.cos_market_active_coupons), String.valueOf(count)));
127 + } else if (count == 1) {
128 + holder.tvCouponCount.setText(String.format(mContext.getString(R.string.cos_market_active_coupons_single), String.valueOf(count)));
129 + }
130 +
131 +
132 +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
133 +// Date newDate = new Date();
134 +// try {
135 +// newDate = simpleDateFormat.parse(couponItem.getExpiration());
136 +// } catch (ParseException e) {
137 +// e.printStackTrace();
138 +// }
139 +// simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
140 +// if (mIsPast)
141 +// holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_expired_date), simpleDateFormat.format(newDate != null ? newDate : "")));
142 +// else
143 +// holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : "")));
144 +
145 +// if (TextUtils.isEmpty(couponItem.getDiscount_type())) {
146 +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
147 +// } else {
148 +// if (couponItem.getDiscount_type().equals("value")) {
149 +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
150 +// } else if (couponItem.getDiscount_type().equals("percentage")) {
151 +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.percentage));
152 +// } else if (couponItem.getDiscount_type().equals("plus_one")) {
153 +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.plus_one));
154 +// } else {
155 +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro));
156 +// }
157 +// }
158 + holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem));
159 + }
160 + }
161 +
162 + public Observable<UnifiedCoupon> getPositionClicks() {
163 + return onClickSubject.cache();
164 + }
165 +
166 + private long getDifferenceDays(Date d1, Date d2) {
167 + long diff = d2.getTime() - d1.getTime();
168 + return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
169 + }
170 +}
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
3 + <solid android:color="#F0E6E6"/>
4 + <corners android:radius="10dp"/>
5 + <padding android:left="4dp" android:top="2dp" android:right="4dp" android:bottom="2dp" />
6 +</shape>
...\ No newline at end of file ...\ No newline at end of file
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
35 app:layout_constraintTop_toTopOf="parent" /> 35 app:layout_constraintTop_toTopOf="parent" />
36 </androidx.constraintlayout.widget.ConstraintLayout> 36 </androidx.constraintlayout.widget.ConstraintLayout>
37 37
38 - <ScrollView 38 + <androidx.core.widget.NestedScrollView
39 android:id="@+id/sv_loyalty_wallet" 39 android:id="@+id/sv_loyalty_wallet"
40 android:layout_width="match_parent" 40 android:layout_width="match_parent"
41 android:layout_height="match_parent" 41 android:layout_height="match_parent"
42 android:layout_below="@+id/cl_loyalty_wallet_header" 42 android:layout_below="@+id/cl_loyalty_wallet_header"
43 android:fillViewport="true" 43 android:fillViewport="true"
44 - android:scrollbars="none" 44 + android:overScrollMode="never"
45 - android:overScrollMode="never"> 45 + android:scrollbars="none">
46 46
47 <LinearLayout 47 <LinearLayout
48 android:layout_width="match_parent" 48 android:layout_width="match_parent"
...@@ -94,10 +94,10 @@ ...@@ -94,10 +94,10 @@
94 fontPath="fonts/PeridotPE-Bold.ttf" 94 fontPath="fonts/PeridotPE-Bold.ttf"
95 android:layout_width="wrap_content" 95 android:layout_width="wrap_content"
96 android:layout_height="wrap_content" 96 android:layout_height="wrap_content"
97 + android:layout_marginHorizontal="20dp"
97 android:includeFontPadding="false" 98 android:includeFontPadding="false"
98 android:textColor="@color/cos_green12" 99 android:textColor="@color/cos_green12"
99 android:textSize="16sp" 100 android:textSize="16sp"
100 - android:layout_marginHorizontal="20dp"
101 tools:text="@string/cos_profile_preferences_placeholder" /> 101 tools:text="@string/cos_profile_preferences_placeholder" />
102 </LinearLayout> 102 </LinearLayout>
103 103
...@@ -134,70 +134,125 @@ ...@@ -134,70 +134,125 @@
134 android:orientation="vertical"> 134 android:orientation="vertical">
135 135
136 <androidx.constraintlayout.widget.ConstraintLayout 136 <androidx.constraintlayout.widget.ConstraintLayout
137 - android:id="@+id/cl_deals_cos" 137 + android:id="@+id/cl_exp"
138 android:layout_width="match_parent" 138 android:layout_width="match_parent"
139 android:layout_height="wrap_content" 139 android:layout_height="wrap_content"
140 - android:layout_marginHorizontal="8dp" 140 + android:layout_marginHorizontal="4dp"
141 - android:layout_marginTop="24dp"> 141 + android:layout_marginTop="24dp"
142 - 142 + android:background="@drawable/shape_cos_white_border"
143 - <androidx.constraintlayout.widget.Guideline 143 + android:paddingHorizontal="14dp"
144 - android:id="@+id/gl_vertical_06_cos" 144 + android:paddingVertical="14dp">
145 - android:layout_width="wrap_content"
146 - android:layout_height="match_parent"
147 - android:orientation="vertical"
148 - app:layout_constraintGuide_begin="24dp" />
149 145
150 <androidx.constraintlayout.widget.Guideline 146 <androidx.constraintlayout.widget.Guideline
151 - android:id="@+id/gl_horizontal_50_cos" 147 + android:id="@+id/gl_horizontal_64_exp"
152 android:layout_width="wrap_content" 148 android:layout_width="wrap_content"
153 android:layout_height="match_parent" 149 android:layout_height="match_parent"
154 android:orientation="horizontal" 150 android:orientation="horizontal"
155 app:layout_constraintGuide_percent="0.64" /> 151 app:layout_constraintGuide_percent="0.64" />
156 152
157 - <androidx.constraintlayout.widget.ConstraintLayout 153 + <ImageView
158 - android:id="@+id/cl_deals_win_inner_cos" 154 + android:id="@+id/iv_exp_logo"
159 - android:layout_width="0dp" 155 + android:layout_width="76dp"
160 - android:layout_height="0dp" 156 + android:layout_height="76dp"
161 - android:background="@drawable/shape_cos_white_border" 157 + android:layout_marginVertical="4dp"
158 + android:src="@drawable/ic_foryou_polygon_new"
162 app:layout_constraintBottom_toBottomOf="parent" 159 app:layout_constraintBottom_toBottomOf="parent"
163 - app:layout_constraintEnd_toEndOf="parent" 160 + app:layout_constraintStart_toStartOf="parent"
164 - app:layout_constraintStart_toEndOf="@+id/gl_vertical_06_cos" 161 + app:layout_constraintTop_toTopOf="parent" />
165 - app:layout_constraintTop_toTopOf="parent">
166 162
167 - <androidx.constraintlayout.widget.Guideline 163 + <TextView
168 - android:id="@+id/gl_vertical_16_cos" 164 + android:id="@+id/tv_exp_value"
165 + fontPath="fonts/PeridotPE-Bold.ttf"
169 android:layout_width="wrap_content" 166 android:layout_width="wrap_content"
170 - android:layout_height="match_parent" 167 + android:layout_height="wrap_content"
171 - android:orientation="vertical" 168 + android:includeFontPadding="false"
172 - app:layout_constraintGuide_percent="0.17" /> 169 + android:textColor="@color/cos_light_black"
170 + android:textSize="14sp"
171 + app:layout_constraintEnd_toEndOf="@+id/iv_exp_logo"
172 + app:layout_constraintStart_toStartOf="@+id/iv_exp_logo"
173 + app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_64_exp"
174 + tools:text="18.00€" />
173 175
174 <TextView 176 <TextView
175 - android:id="@+id/tv_deals_value_all" 177 + android:id="@+id/tv_exp_value_all"
176 fontPath="fonts/PeridotPE-Regular.ttf" 178 fontPath="fonts/PeridotPE-Regular.ttf"
177 android:layout_width="0dp" 179 android:layout_width="0dp"
178 android:layout_height="wrap_content" 180 android:layout_height="wrap_content"
179 - android:layout_marginEnd="16dp" 181 + android:layout_marginHorizontal="8dp"
180 android:includeFontPadding="false" 182 android:includeFontPadding="false"
181 - android:text="@string/cos_deals_win_title_cos" 183 + android:text="@string/cos_for_you_all"
182 android:textColor="@color/cos_light_black" 184 android:textColor="@color/cos_light_black"
183 android:textSize="15sp" 185 android:textSize="15sp"
184 app:layout_constraintBottom_toBottomOf="parent" 186 app:layout_constraintBottom_toBottomOf="parent"
185 - app:layout_constraintEnd_toEndOf="parent" 187 + app:layout_constraintEnd_toStartOf="@+id/iv_exp_arrow"
186 - app:layout_constraintStart_toStartOf="@+id/gl_vertical_16_cos" 188 + app:layout_constraintStart_toEndOf="@+id/iv_exp_logo"
187 app:layout_constraintTop_toTopOf="parent" /> 189 app:layout_constraintTop_toTopOf="parent" />
190 +
191 + <ImageView
192 + android:id="@+id/iv_exp_arrow"
193 + android:layout_width="14dp"
194 + android:layout_height="14dp"
195 + android:src="@drawable/ic_down_dark_new"
196 + app:layout_constraintBottom_toBottomOf="parent"
197 + app:layout_constraintEnd_toEndOf="parent"
198 + app:layout_constraintTop_toTopOf="parent"
199 + android:visibility="gone"/>
188 </androidx.constraintlayout.widget.ConstraintLayout> 200 </androidx.constraintlayout.widget.ConstraintLayout>
189 201
202 + <net.cachapa.expandablelayout.ExpandableLayout
203 + android:id="@+id/el_exp"
204 + android:layout_width="match_parent"
205 + android:layout_height="wrap_content"
206 + app:el_duration="300"
207 + app:el_expanded="false"
208 + app:el_parallax="0.5">
209 +
210 + <RelativeLayout
211 + android:layout_width="match_parent"
212 + android:layout_height="wrap_content">
213 +
214 + <androidx.constraintlayout.widget.ConstraintLayout
215 + android:id="@+id/cl_deals_win_inner_cos"
216 + android:layout_width="match_parent"
217 + android:layout_height="wrap_content"
218 + android:layout_marginHorizontal="16dp"
219 + android:layout_marginTop="6dp"
220 + android:background="@drawable/shape_cos_white_border"
221 + android:paddingHorizontal="6dp"
222 + android:paddingVertical="4dp">
223 +
224 + <androidx.constraintlayout.widget.Guideline
225 + android:id="@+id/gl_horizontal_50_cos"
226 + android:layout_width="wrap_content"
227 + android:layout_height="match_parent"
228 + android:orientation="horizontal"
229 + app:layout_constraintGuide_percent="0.64" />
230 +
190 <ImageView 231 <ImageView
191 android:id="@+id/iv_deals_logo" 232 android:id="@+id/iv_deals_logo"
192 android:layout_width="76dp" 233 android:layout_width="76dp"
193 android:layout_height="76dp" 234 android:layout_height="76dp"
194 - android:layout_marginVertical="4dp"
195 android:src="@drawable/ic_deals_polygon_new" 235 android:src="@drawable/ic_deals_polygon_new"
196 app:layout_constraintBottom_toBottomOf="parent" 236 app:layout_constraintBottom_toBottomOf="parent"
197 app:layout_constraintStart_toStartOf="parent" 237 app:layout_constraintStart_toStartOf="parent"
198 app:layout_constraintTop_toTopOf="parent" /> 238 app:layout_constraintTop_toTopOf="parent" />
199 239
200 <TextView 240 <TextView
241 + android:id="@+id/tv_deals_value_all"
242 + fontPath="fonts/PeridotPE-Regular.ttf"
243 + android:layout_width="0dp"
244 + android:layout_height="wrap_content"
245 + android:layout_marginHorizontal="8dp"
246 + android:includeFontPadding="false"
247 + android:text="@string/cos_deals_win_title_cos"
248 + android:textColor="@color/cos_light_black"
249 + android:textSize="15sp"
250 + app:layout_constraintBottom_toBottomOf="parent"
251 + app:layout_constraintEnd_toEndOf="parent"
252 + app:layout_constraintStart_toEndOf="@+id/iv_deals_logo"
253 + app:layout_constraintTop_toTopOf="parent" />
254 +
255 + <TextView
201 android:id="@+id/tv_deals_value" 256 android:id="@+id/tv_deals_value"
202 fontPath="fonts/PeridotPE-Bold.ttf" 257 fontPath="fonts/PeridotPE-Bold.ttf"
203 android:layout_width="wrap_content" 258 android:layout_width="wrap_content"
...@@ -209,22 +264,18 @@ ...@@ -209,22 +264,18 @@
209 app:layout_constraintStart_toStartOf="@+id/iv_deals_logo" 264 app:layout_constraintStart_toStartOf="@+id/iv_deals_logo"
210 app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_50_cos" 265 app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_50_cos"
211 tools:text="18.00€" /> 266 tools:text="18.00€" />
212 -
213 </androidx.constraintlayout.widget.ConstraintLayout> 267 </androidx.constraintlayout.widget.ConstraintLayout>
214 268
215 <androidx.constraintlayout.widget.ConstraintLayout 269 <androidx.constraintlayout.widget.ConstraintLayout
216 - android:id="@+id/cl_deals_win" 270 + android:id="@+id/cl_deals_win_inner"
217 android:layout_width="match_parent" 271 android:layout_width="match_parent"
218 android:layout_height="wrap_content" 272 android:layout_height="wrap_content"
219 - android:layout_marginHorizontal="8dp" 273 + android:layout_below="@+id/cl_deals_win_inner_cos"
220 - android:layout_marginTop="12dp"> 274 + android:layout_marginHorizontal="16dp"
221 - 275 + android:layout_marginTop="6dp"
222 - <androidx.constraintlayout.widget.Guideline 276 + android:background="@drawable/shape_cos_white_border"
223 - android:id="@+id/gl_vertical_06" 277 + android:paddingHorizontal="6dp"
224 - android:layout_width="wrap_content" 278 + android:paddingVertical="4dp">
225 - android:layout_height="match_parent"
226 - android:orientation="vertical"
227 - app:layout_constraintGuide_begin="24dp" />
228 279
229 <androidx.constraintlayout.widget.Guideline 280 <androidx.constraintlayout.widget.Guideline
230 android:id="@+id/gl_horizontal_50" 281 android:id="@+id/gl_horizontal_50"
...@@ -233,63 +284,131 @@ ...@@ -233,63 +284,131 @@
233 android:orientation="horizontal" 284 android:orientation="horizontal"
234 app:layout_constraintGuide_percent="0.64" /> 285 app:layout_constraintGuide_percent="0.64" />
235 286
236 - <androidx.constraintlayout.widget.ConstraintLayout 287 + <ImageView
237 - android:id="@+id/cl_deals_win_inner" 288 + android:id="@+id/iv_gifts_logo"
238 - android:layout_width="0dp" 289 + android:layout_width="76dp"
239 - android:layout_height="0dp" 290 + android:layout_height="76dp"
240 - android:background="@drawable/shape_cos_white_border" 291 + android:src="@drawable/ic_gifts_polygon_new"
241 app:layout_constraintBottom_toBottomOf="parent" 292 app:layout_constraintBottom_toBottomOf="parent"
242 - app:layout_constraintEnd_toEndOf="parent" 293 + app:layout_constraintStart_toStartOf="parent"
243 - app:layout_constraintStart_toEndOf="@+id/gl_vertical_06" 294 + app:layout_constraintTop_toTopOf="parent" />
244 - app:layout_constraintTop_toTopOf="parent">
245 -
246 - <androidx.constraintlayout.widget.Guideline
247 - android:id="@+id/gl_vertical_16"
248 - android:layout_width="wrap_content"
249 - android:layout_height="match_parent"
250 - android:orientation="vertical"
251 - app:layout_constraintGuide_percent="0.17" />
252 295
253 <TextView 296 <TextView
254 android:id="@+id/tv_gifts_value_all" 297 android:id="@+id/tv_gifts_value_all"
255 fontPath="fonts/PeridotPE-Regular.ttf" 298 fontPath="fonts/PeridotPE-Regular.ttf"
256 android:layout_width="0dp" 299 android:layout_width="0dp"
257 android:layout_height="wrap_content" 300 android:layout_height="wrap_content"
258 - android:layout_marginEnd="16dp" 301 + android:layout_marginHorizontal="8dp"
259 android:includeFontPadding="false" 302 android:includeFontPadding="false"
260 android:text="@string/cos_deals_win_title" 303 android:text="@string/cos_deals_win_title"
261 android:textColor="@color/cos_light_black" 304 android:textColor="@color/cos_light_black"
262 android:textSize="15sp" 305 android:textSize="15sp"
263 app:layout_constraintBottom_toBottomOf="parent" 306 app:layout_constraintBottom_toBottomOf="parent"
264 app:layout_constraintEnd_toEndOf="parent" 307 app:layout_constraintEnd_toEndOf="parent"
265 - app:layout_constraintStart_toStartOf="@+id/gl_vertical_16" 308 + app:layout_constraintStart_toEndOf="@+id/iv_gifts_logo"
266 app:layout_constraintTop_toTopOf="parent" /> 309 app:layout_constraintTop_toTopOf="parent" />
310 +
311 + <TextView
312 + android:id="@+id/tv_gifts_value"
313 + fontPath="fonts/PeridotPE-Bold.ttf"
314 + android:layout_width="wrap_content"
315 + android:layout_height="wrap_content"
316 + android:includeFontPadding="false"
317 + android:textColor="@color/cos_light_black"
318 + android:textSize="14sp"
319 + app:layout_constraintEnd_toEndOf="@+id/iv_gifts_logo"
320 + app:layout_constraintStart_toStartOf="@+id/iv_gifts_logo"
321 + app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_50"
322 + tools:text="20.00€" />
267 </androidx.constraintlayout.widget.ConstraintLayout> 323 </androidx.constraintlayout.widget.ConstraintLayout>
268 324
325 + <androidx.constraintlayout.widget.ConstraintLayout
326 + android:id="@+id/cl_market_inner"
327 + android:layout_width="match_parent"
328 + android:layout_height="wrap_content"
329 + android:layout_below="@+id/cl_deals_win_inner"
330 + android:layout_marginHorizontal="16dp"
331 + android:layout_marginTop="6dp"
332 + android:background="@drawable/shape_cos_white_border"
333 + android:paddingHorizontal="6dp"
334 + android:paddingVertical="4dp">
335 +
336 + <androidx.constraintlayout.widget.Guideline
337 + android:id="@+id/gl_horizontal_50_market"
338 + android:layout_width="wrap_content"
339 + android:layout_height="match_parent"
340 + android:orientation="horizontal"
341 + app:layout_constraintGuide_percent="0.64" />
342 +
269 <ImageView 343 <ImageView
270 - android:id="@+id/iv_gifts_logo" 344 + android:id="@+id/iv_market_logo"
271 android:layout_width="76dp" 345 android:layout_width="76dp"
272 android:layout_height="76dp" 346 android:layout_height="76dp"
273 - android:layout_marginVertical="4dp" 347 + android:src="@drawable/ic_market_polygon"
274 - android:src="@drawable/ic_gifts_polygon_new"
275 app:layout_constraintBottom_toBottomOf="parent" 348 app:layout_constraintBottom_toBottomOf="parent"
276 app:layout_constraintStart_toStartOf="parent" 349 app:layout_constraintStart_toStartOf="parent"
277 app:layout_constraintTop_toTopOf="parent" /> 350 app:layout_constraintTop_toTopOf="parent" />
278 351
279 <TextView 352 <TextView
280 - android:id="@+id/tv_gifts_value" 353 + android:id="@+id/tv_market_value_all"
354 + fontPath="fonts/PeridotPE-Regular.ttf"
355 + android:layout_width="0dp"
356 + android:layout_height="wrap_content"
357 + android:layout_marginHorizontal="8dp"
358 + android:includeFontPadding="false"
359 + android:text="@string/cos_supermarket_win"
360 + android:textColor="@color/cos_light_black"
361 + android:textSize="15sp"
362 + app:layout_constraintBottom_toBottomOf="parent"
363 + app:layout_constraintEnd_toEndOf="parent"
364 + app:layout_constraintStart_toEndOf="@+id/iv_market_logo"
365 + app:layout_constraintTop_toTopOf="parent" />
366 +
367 + <TextView
368 + android:id="@+id/tv_market_value"
281 fontPath="fonts/PeridotPE-Bold.ttf" 369 fontPath="fonts/PeridotPE-Bold.ttf"
282 android:layout_width="wrap_content" 370 android:layout_width="wrap_content"
283 android:layout_height="wrap_content" 371 android:layout_height="wrap_content"
284 android:includeFontPadding="false" 372 android:includeFontPadding="false"
285 android:textColor="@color/cos_light_black" 373 android:textColor="@color/cos_light_black"
286 android:textSize="14sp" 374 android:textSize="14sp"
287 - app:layout_constraintEnd_toEndOf="@+id/iv_gifts_logo" 375 + app:layout_constraintEnd_toEndOf="@+id/iv_market_logo"
288 - app:layout_constraintStart_toStartOf="@+id/iv_gifts_logo" 376 + app:layout_constraintStart_toStartOf="@+id/iv_market_logo"
289 - app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_50" 377 + app:layout_constraintTop_toBottomOf="@+id/gl_horizontal_50_market"
290 tools:text="20.00€" /> 378 tools:text="20.00€" />
291 -
292 </androidx.constraintlayout.widget.ConstraintLayout> 379 </androidx.constraintlayout.widget.ConstraintLayout>
380 + </RelativeLayout>
381 + </net.cachapa.expandablelayout.ExpandableLayout>
382 +
383 + <LinearLayout
384 + android:id="@+id/ll_market_view"
385 + android:layout_width="match_parent"
386 + android:layout_height="wrap_content"
387 + android:layout_marginTop="24dp"
388 + android:orientation="vertical"
389 + android:visibility="gone"
390 + tools:visibility="visible">
391 +
392 + <TextView
393 + android:id="@+id/tv_market_header"
394 + fontPath="fonts/BTCosmo-Bold.ttf"
395 + android:layout_width="wrap_content"
396 + android:layout_height="wrap_content"
397 + android:layout_gravity="start"
398 + android:layout_marginHorizontal="16dp"
399 + android:layout_marginBottom="10dp"
400 + android:text="@string/cos_market_title"
401 + android:textColor="@color/cos_light_black"
402 + android:textSize="20sp" />
403 +
404 + <androidx.recyclerview.widget.RecyclerView
405 + android:id="@+id/rv_market_coupons"
406 + android:layout_width="match_parent"
407 + android:layout_height="wrap_content"
408 + android:layout_marginHorizontal="2dp"
409 + android:overScrollMode="never"
410 + android:scrollbars="none" />
411 + </LinearLayout>
293 412
294 <LinearLayout 413 <LinearLayout
295 android:id="@+id/ll_mygifts" 414 android:id="@+id/ll_mygifts"
...@@ -393,7 +512,9 @@ ...@@ -393,7 +512,9 @@
393 android:layout_width="match_parent" 512 android:layout_width="match_parent"
394 android:layout_height="wrap_content" 513 android:layout_height="wrap_content"
395 android:layout_marginTop="24dp" 514 android:layout_marginTop="24dp"
396 - android:orientation="vertical"> 515 + android:orientation="vertical"
516 + android:visibility="gone"
517 + tools:visibility="visible">
397 518
398 <TextView 519 <TextView
399 android:id="@+id/tv_active_coupons_header" 520 android:id="@+id/tv_active_coupons_header"
...@@ -413,7 +534,8 @@ ...@@ -413,7 +534,8 @@
413 android:layout_height="wrap_content" 534 android:layout_height="wrap_content"
414 android:layout_marginHorizontal="2dp" 535 android:layout_marginHorizontal="2dp"
415 android:overScrollMode="never" 536 android:overScrollMode="never"
416 - android:paddingBottom="40dp" /> 537 + android:paddingBottom="40dp"
538 + android:scrollbars="none" />
417 539
418 <LinearLayout 540 <LinearLayout
419 android:id="@+id/ll_empty_wallet" 541 android:id="@+id/ll_empty_wallet"
...@@ -444,5 +566,5 @@ ...@@ -444,5 +566,5 @@
444 </LinearLayout> 566 </LinearLayout>
445 </RelativeLayout> 567 </RelativeLayout>
446 </LinearLayout> 568 </LinearLayout>
447 - </ScrollView> 569 + </androidx.core.widget.NestedScrollView>
448 </RelativeLayout> 570 </RelativeLayout>
......
1 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 + xmlns:app="http://schemas.android.com/apk/res-auto"
3 + xmlns:tools="http://schemas.android.com/tools"
4 + android:layout_width="match_parent"
5 + android:layout_height="match_parent"
6 + android:background="@android:color/white">
7 +
8 + <androidx.constraintlayout.widget.ConstraintLayout
9 + android:id="@+id/cl_loyalty_wallet_header"
10 + android:layout_width="match_parent"
11 + android:layout_height="48dp"
12 + android:background="@android:color/white">
13 +
14 + <ImageView
15 + android:id="@+id/iv_coupon_info_back"
16 + android:layout_width="48dp"
17 + android:layout_height="48dp"
18 + android:layout_marginStart="16dp"
19 + android:scaleType="centerInside"
20 + android:src="@drawable/ic_back"
21 + app:layout_constraintBottom_toBottomOf="parent"
22 + app:layout_constraintStart_toStartOf="parent"
23 + app:layout_constraintTop_toTopOf="parent" />
24 +
25 + <TextView
26 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
27 + android:layout_width="wrap_content"
28 + android:layout_height="wrap_content"
29 + android:text="@string/cos_coupon_info_title"
30 + android:textColor="@color/grey"
31 + android:textSize="17sp"
32 + app:layout_constraintBottom_toBottomOf="parent"
33 + app:layout_constraintEnd_toEndOf="parent"
34 + app:layout_constraintStart_toStartOf="parent"
35 + app:layout_constraintTop_toTopOf="parent" />
36 + </androidx.constraintlayout.widget.ConstraintLayout>
37 +
38 + <RelativeLayout
39 + android:layout_width="match_parent"
40 + android:layout_height="match_parent"
41 + android:layout_below="@+id/cl_loyalty_wallet_header">
42 +
43 + <ScrollView
44 + android:layout_width="match_parent"
45 + android:layout_height="match_parent"
46 + android:overScrollMode="never">
47 +
48 + <LinearLayout
49 + android:id="@+id/cl_loyalty_info_view_inner"
50 + android:layout_width="match_parent"
51 + android:layout_height="wrap_content"
52 + android:background="@android:color/white"
53 + android:orientation="vertical"
54 + android:paddingBottom="48dp">
55 +
56 +<!-- <ImageView-->
57 +<!-- android:id="@+id/imageView6"-->
58 +<!-- android:layout_width="match_parent"-->
59 +<!-- android:layout_height="253dp"-->
60 +<!-- android:layout_marginTop="0.5dp"-->
61 +<!-- android:scaleType="centerCrop"-->
62 +<!-- android:src="@drawable/unified_coupon_banner" />-->
63 +
64 + <TextView
65 + android:id="@+id/textView13"
66 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
67 + android:layout_width="match_parent"
68 + android:layout_height="wrap_content"
69 + android:layout_marginTop="32dp"
70 + android:gravity="center"
71 + android:paddingHorizontal="32dp"
72 + android:text="@string/cos_unified_title"
73 + android:textColor="#415564"
74 + android:textSize="18sp" />
75 +
76 + <TextView
77 + android:id="@+id/textView14"
78 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
79 + android:layout_width="match_parent"
80 + android:layout_height="wrap_content"
81 + android:layout_marginTop="16dp"
82 + android:gravity="center"
83 + android:paddingHorizontal="32dp"
84 + android:text="@string/cos_unified_subtitle"
85 + android:textColor="#415564"
86 + android:textSize="16sp" />
87 +
88 + <TextView
89 + android:id="@+id/textView15"
90 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
91 + android:layout_width="wrap_content"
92 + android:layout_height="wrap_content"
93 + android:layout_gravity="center"
94 + android:layout_marginTop="36dp"
95 + android:text="Κωδικός Κουπονιού"
96 + android:textColor="#415564"
97 + android:textSize="18sp" />
98 +
99 + <TextView
100 + android:id="@+id/textView16"
101 + fontPath="fonts/pf_square_sans_pro_bold.ttf"
102 + android:layout_width="match_parent"
103 + android:layout_height="50dp"
104 + android:layout_marginHorizontal="32dp"
105 + android:layout_marginTop="12dp"
106 + android:background="@drawable/banner_border_light_grey"
107 + android:gravity="center"
108 + android:textColor="@color/grey"
109 + android:textIsSelectable="true"
110 + android:textSize="25dp"
111 + tools:text="1A2C378" />
112 +
113 + <LinearLayout
114 + android:id="@+id/ll_barcode_container"
115 + android:layout_width="match_parent"
116 + android:layout_height="wrap_content"
117 + android:layout_marginTop="20dp"
118 + android:gravity="center"
119 + android:orientation="vertical">
120 +
121 + <LinearLayout
122 + android:id="@+id/ll_barcode_container_items"
123 + android:layout_width="match_parent"
124 + android:layout_height="wrap_content"
125 + android:gravity="center"
126 + android:orientation="vertical"
127 + tools:visibility="visible">
128 +
129 + <View
130 + android:id="@+id/view5"
131 + android:layout_width="320dp"
132 + android:layout_height="0.8dp"
133 + android:background="#E6E6E6" />
134 +
135 + <ImageView
136 + android:id="@+id/iv_barcode"
137 + android:layout_width="284dp"
138 + android:layout_height="86dp"
139 + android:layout_marginTop="16dp"
140 + android:scaleType="fitXY"
141 + tools:srcCompat="@tools:sample/avatars" />
142 +
143 + <TextView
144 + android:id="@+id/tv_full_barcode"
145 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
146 + android:layout_width="wrap_content"
147 + android:layout_height="wrap_content"
148 + android:layout_marginTop="12dp"
149 + android:textColor="@color/grey"
150 + android:textSize="20sp"
151 + android:visibility="gone"
152 + tools:text="@string/cos_show_barcode" />
153 +
154 + <View
155 + android:id="@+id/view4"
156 + android:layout_width="320dp"
157 + android:layout_height="0.8dp"
158 + android:layout_marginTop="20dp"
159 + android:background="#E6E6E6" />
160 + </LinearLayout>
161 + </LinearLayout>
162 +
163 + <TextView
164 + android:id="@+id/textView17"
165 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
166 + android:layout_width="wrap_content"
167 + android:layout_height="wrap_content"
168 + android:layout_gravity="center"
169 + android:layout_marginTop="16dp"
170 + android:textColor="#415564"
171 + tools:text="@string/cos_coupon_date" />
172 +
173 + <LinearLayout
174 + android:id="@+id/ll_market_expand"
175 + android:layout_width="wrap_content"
176 + android:layout_height="wrap_content"
177 + android:layout_gravity="center_horizontal"
178 + android:layout_marginTop="48dp"
179 + android:gravity="center"
180 + android:orientation="horizontal">
181 +
182 + <TextView
183 + android:id="@+id/tv_market_expand"
184 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
185 + android:layout_width="wrap_content"
186 + android:layout_height="wrap_content"
187 + android:text="@string/cos_hide_market_coupons"
188 + android:textColor="@color/grey"
189 + android:textSize="16sp" />
190 +
191 + <ImageView
192 + android:id="@+id/iv_market_expand"
193 + android:layout_width="14dp"
194 + android:layout_height="14dp"
195 + android:layout_marginStart="6dp"
196 + android:src="@drawable/ic_up_dark_new" />
197 + </LinearLayout>
198 +
199 + <LinearLayout
200 + android:id="@+id/ll_market_coupons"
201 + android:layout_width="match_parent"
202 + android:layout_height="wrap_content"
203 + android:layout_marginTop="16dp"
204 + android:orientation="vertical">
205 +
206 + <androidx.recyclerview.widget.RecyclerView
207 + android:id="@+id/rv_active_market_coupons"
208 + android:layout_width="match_parent"
209 + android:layout_height="wrap_content"
210 + android:layout_marginHorizontal="2dp"
211 + android:overScrollMode="never" />
212 + </LinearLayout>
213 +
214 +
215 + <LinearLayout
216 + android:id="@+id/ll_shops"
217 + android:layout_width="220dp"
218 + android:layout_height="wrap_content"
219 + android:layout_gravity="center"
220 + android:layout_marginHorizontal="32dp"
221 + android:layout_marginTop="24dp"
222 + android:background="@drawable/selector_button_green"
223 + android:gravity="center"
224 + android:orientation="horizontal"
225 + android:paddingVertical="8dp">
226 +
227 + <TextView
228 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
229 + android:layout_width="wrap_content"
230 + android:layout_height="wrap_content"
231 + android:gravity="center"
232 + android:text="@string/cos_markets"
233 + android:textColor="@color/white"
234 + android:textSize="17dp" />
235 + </LinearLayout>
236 +
237 + <RelativeLayout
238 + android:id="@+id/rl_terms"
239 + android:layout_width="wrap_content"
240 + android:layout_height="wrap_content"
241 + android:layout_gravity="center"
242 + android:layout_marginTop="32dp"
243 + android:gravity="center">
244 +
245 + <LinearLayout
246 + android:id="@+id/ll_terms_inner"
247 + android:layout_width="wrap_content"
248 + android:layout_height="wrap_content"
249 + android:layout_centerHorizontal="true"
250 + android:gravity="center"
251 + android:orientation="horizontal">
252 +
253 + <TextView
254 + android:id="@+id/tv_terms"
255 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
256 + android:layout_width="wrap_content"
257 + android:layout_height="wrap_content"
258 + android:text="@string/cos_coupon_terms_title"
259 + android:textColor="@color/grey"
260 + android:textSize="16sp" />
261 +
262 + <ImageView
263 + android:id="@+id/iv_terms_arrow"
264 + android:layout_width="14dp"
265 + android:layout_height="14dp"
266 + android:layout_marginStart="6dp"
267 + android:src="@drawable/ic_down_dark_new" />
268 + </LinearLayout>
269 +
270 + <TextView
271 + android:id="@+id/tv_terms_value"
272 + fontPath="fonts/pf_square_sans_pro_regular.ttf"
273 + android:layout_width="wrap_content"
274 + android:layout_height="wrap_content"
275 + android:layout_below="@+id/ll_terms_inner"
276 + android:layout_marginHorizontal="32dp"
277 + android:layout_marginTop="16dp"
278 + android:text="@string/cos_market_terms"
279 + android:textColor="#415564"
280 + android:visibility="gone" />
281 + </RelativeLayout>
282 + </LinearLayout>
283 + </ScrollView>
284 +
285 + <LinearLayout
286 + android:layout_width="match_parent"
287 + android:layout_height="wrap_content"
288 + android:background="@drawable/ic_line">
289 +
290 + </LinearLayout>
291 + </RelativeLayout>
292 +</RelativeLayout>
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 + xmlns:app="http://schemas.android.com/apk/res-auto"
4 + xmlns:tools="http://schemas.android.com/tools"
5 + android:id="@+id/cl_custom_layout"
6 + android:layout_width="match_parent"
7 + android:layout_height="130dp"
8 + android:layout_marginHorizontal="4dp"
9 + android:layout_marginVertical="4dp"
10 + android:background="@drawable/ic_coupon_background">
11 +
12 + <androidx.constraintlayout.widget.Guideline
13 + android:id="@+id/gl_vertical_72_percent"
14 + android:layout_width="wrap_content"
15 + android:layout_height="wrap_content"
16 + android:orientation="vertical"
17 + app:layout_constraintGuide_percent="0.72" />
18 +
19 + <ImageView
20 + android:id="@+id/iv_active_coupon"
21 + android:layout_width="80dp"
22 + android:layout_height="80dp"
23 + android:layout_marginStart="24dp"
24 + app:layout_constraintBottom_toBottomOf="parent"
25 + app:layout_constraintStart_toStartOf="parent"
26 + app:layout_constraintTop_toTopOf="parent"
27 + tools:src="@drawable/ic_gifts_for_you" />
28 +
29 + <View
30 + android:id="@+id/v_separator"
31 + android:layout_width="1dp"
32 + android:layout_height="match_parent"
33 + android:layout_marginVertical="16dp"
34 + android:layout_marginStart="8dp"
35 + android:background="@drawable/shape_dashed_vertical"
36 + app:layout_constraintBottom_toBottomOf="parent"
37 + app:layout_constraintStart_toEndOf="@+id/iv_active_coupon"
38 + app:layout_constraintTop_toTopOf="parent" />
39 +
40 + <LinearLayout
41 + android:id="@+id/ll_coupon_info"
42 + android:layout_width="0dp"
43 + android:layout_height="wrap_content"
44 + android:layout_marginStart="16dp"
45 + android:orientation="vertical"
46 + app:layout_constraintBottom_toBottomOf="parent"
47 + app:layout_constraintEnd_toStartOf="@+id/gl_vertical_72_percent"
48 + app:layout_constraintStart_toEndOf="@+id/v_separator"
49 + app:layout_constraintTop_toTopOf="parent">
50 +
51 + <TextView
52 + android:id="@+id/tv_active_coupons_title"
53 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
54 + android:layout_width="wrap_content"
55 + android:layout_height="wrap_content"
56 + android:ellipsize="end"
57 + android:maxLines="1"
58 + android:textColor="#3A5266"
59 + android:textSize="16sp"
60 + tools:text="Εκπτωτικο κουπονι 10$ για αγορες στα ΙΚΕΑ" />
61 +
62 + <TextView
63 + android:id="@+id/tv_active_coupons_value"
64 + fontPath="fonts/pf_square_sans_pro_bold.ttf"
65 + android:layout_width="wrap_content"
66 + android:layout_height="wrap_content"
67 + android:textColor="#3A5266"
68 + android:textSize="42sp"
69 + tools:text="10$" />
70 +
71 + <TextView
72 + android:id="@+id/tv_active_coupons_date"
73 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
74 + android:layout_width="wrap_content"
75 + android:layout_height="wrap_content"
76 + android:textColor="#617181"
77 + android:textSize="12sp"
78 + android:visibility="gone"
79 + tools:text="@string/cos_active_coupon_date" />
80 +
81 + <TextView
82 + android:id="@+id/tv_active_coupons_date_expired"
83 + fontPath="fonts/pf_square_sans_pro_bold.ttf"
84 + android:layout_width="wrap_content"
85 + android:layout_height="wrap_content"
86 + android:textColor="#617181"
87 + android:textSize="12sp"
88 + android:visibility="gone"
89 + tools:text="@string/cos_market_coupon_expired" />
90 + </LinearLayout>
91 +
92 + <LinearLayout
93 + android:id="@+id/ll_date_limit"
94 + android:layout_width="wrap_content"
95 + android:layout_height="wrap_content"
96 + android:background="@drawable/shape_market_limit"
97 + android:gravity="center_vertical"
98 + android:orientation="horizontal"
99 + android:visibility="gone"
100 + android:layout_marginBottom="36dp"
101 + android:layout_marginStart="8dp"
102 + app:layout_constraintBottom_toBottomOf="parent"
103 + app:layout_constraintTop_toBottomOf="@+id/ll_coupon_info"
104 + app:layout_constraintStart_toEndOf="@+id/v_separator"
105 + tools:visibility="visible">
106 +
107 +<!-- <ImageView-->
108 +<!-- android:layout_width="14dp"-->
109 +<!-- android:layout_height="14dp"-->
110 +<!-- android:layout_marginEnd="4dp"-->
111 +<!-- android:src="@drawable/timer_red" />-->
112 +
113 + <TextView
114 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
115 + android:layout_width="wrap_content"
116 + android:layout_height="wrap_content"
117 + android:text="@string/cos_coupon_date_limit"
118 + android:textColor="#617181"
119 + android:textSize="12sp" />
120 +
121 + <TextView
122 + android:id="@+id/tv_active_coupons_date_limit"
123 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
124 + android:layout_width="wrap_content"
125 + android:layout_height="wrap_content"
126 + android:text="@string/cos_coupon_date_limit"
127 + android:textColor="#FF6B6B"
128 + android:textSize="12sp"
129 + tools:text="@string/cos_coupon_date_limit2" />
130 + </LinearLayout>
131 +
132 + <TextView
133 + android:id="@+id/tv_active_coupons_description"
134 + fontPath="fonts/pf_square_sans_pro_medium.ttf"
135 + android:layout_width="0dp"
136 + android:layout_height="wrap_content"
137 + android:layout_marginStart="8dp"
138 + android:layout_marginEnd="32dp"
139 + android:maxLines="4"
140 + android:textColor="#617181"
141 + android:textSize="12sp"
142 + app:layout_constraintBottom_toBottomOf="parent"
143 + app:layout_constraintEnd_toEndOf="parent"
144 + app:layout_constraintStart_toEndOf="@+id/gl_vertical_72_percent"
145 + app:layout_constraintTop_toTopOf="parent"
146 + tools:text="Εκπτωση με ελάχιστες αγορές 100€" />
147 +</androidx.constraintlayout.widget.ConstraintLayout>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 + xmlns:app="http://schemas.android.com/apk/res-auto"
4 + xmlns:tools="http://schemas.android.com/tools"
5 + android:layout_width="match_parent"
6 + android:layout_height="130dp"
7 + android:layout_marginHorizontal="4dp"
8 + android:layout_marginVertical="4dp"
9 + android:background="@drawable/ic_coupon_background_new2">
10 +
11 + <androidx.constraintlayout.widget.Guideline
12 + android:id="@+id/gl_vertical_72_percent"
13 + android:layout_width="wrap_content"
14 + android:layout_height="wrap_content"
15 + android:orientation="vertical"
16 + app:layout_constraintGuide_percent="0.72" />
17 +
18 + <ImageView
19 + android:id="@+id/iv_market_coupon"
20 + android:layout_width="80dp"
21 + android:layout_height="80dp"
22 + android:layout_marginStart="24dp"
23 + android:padding="18dp"
24 + android:src="@drawable/ic_market_trolley"
25 + app:layout_constraintBottom_toBottomOf="parent"
26 + app:layout_constraintStart_toStartOf="parent"
27 + app:layout_constraintTop_toTopOf="parent" />
28 +
29 + <View
30 + android:id="@+id/v_separator"
31 + android:layout_width="1dp"
32 + android:layout_height="match_parent"
33 + android:layout_marginVertical="16dp"
34 + android:layout_marginStart="8dp"
35 + android:background="@drawable/shape_dashed_vertical"
36 + app:layout_constraintBottom_toBottomOf="parent"
37 + app:layout_constraintStart_toEndOf="@+id/iv_market_coupon"
38 + app:layout_constraintTop_toTopOf="parent" />
39 +
40 + <LinearLayout
41 + android:id="@+id/ll_coupon_info"
42 + android:layout_width="0dp"
43 + android:layout_height="wrap_content"
44 + android:layout_marginStart="16dp"
45 + android:orientation="vertical"
46 + app:layout_constraintBottom_toBottomOf="parent"
47 + app:layout_constraintEnd_toStartOf="@+id/gl_vertical_72_percent"
48 + app:layout_constraintStart_toEndOf="@+id/v_separator"
49 + app:layout_constraintTop_toTopOf="parent">
50 +
51 + <TextView
52 + android:id="@+id/tv_market_coupons_title"
53 + fontPath="fonts/BTCosmo-Bold.ttf"
54 + android:layout_width="wrap_content"
55 + android:layout_height="wrap_content"
56 + android:ellipsize="end"
57 + android:maxLines="3"
58 + android:textColor="@color/cos_light_black"
59 + android:textSize="16sp"
60 + android:text="@string/cos_market_item_title" />
61 +
62 + <TextView
63 + fontPath="fonts/pf_square_sans_pro_bold.ttf"
64 + android:layout_width="wrap_content"
65 + android:layout_height="wrap_content"
66 + android:textColor="#3A5266"
67 + android:textSize="22sp"
68 + android:text="" />
69 +
70 + <TextView
71 + android:id="@+id/tv_market_coupons_date"
72 + fontPath="fonts/PeridotPE-Regular.ttf"
73 + android:layout_width="wrap_content"
74 + android:layout_height="wrap_content"
75 + android:textColor="@color/cos_light_black"
76 + android:textSize="12sp"
77 + tools:text="@string/cos_active_coupon_date" />
78 + </LinearLayout>
79 +
80 + <TextView
81 + android:id="@+id/tv_market_coupons_count"
82 + fontPath="fonts/PeridotPE-Regular.ttf"
83 + android:layout_width="0dp"
84 + android:layout_height="wrap_content"
85 + android:layout_marginStart="8dp"
86 + android:layout_marginEnd="32dp"
87 + android:maxLines="4"
88 + android:textColor="@color/cos_light_black"
89 + android:textSize="12sp"
90 + app:layout_constraintBottom_toBottomOf="parent"
91 + app:layout_constraintEnd_toEndOf="parent"
92 + app:layout_constraintStart_toEndOf="@+id/gl_vertical_72_percent"
93 + app:layout_constraintTop_toTopOf="parent"
94 + tools:text="@string/cos_market_active_coupons" />
95 +</androidx.constraintlayout.widget.ConstraintLayout>
...\ No newline at end of file ...\ No newline at end of file
...@@ -71,4 +71,5 @@ ...@@ -71,4 +71,5 @@
71 <color name="cos_gray">#9D9D9C</color> 71 <color name="cos_gray">#9D9D9C</color>
72 <color name="cos_gray2">#848484</color> 72 <color name="cos_gray2">#848484</color>
73 <color name="cos_light_blue">#00A5E3</color> 73 <color name="cos_light_blue">#00A5E3</color>
74 + <color name="cos_grey_dark2">#32485A</color>
74 </resources> 75 </resources>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -73,8 +73,8 @@ ...@@ -73,8 +73,8 @@
73 <string name="cos_gift_it">Δώρισέ το</string> 73 <string name="cos_gift_it">Δώρισέ το</string>
74 <string name="cos_popup_more_title">COSMOTE MORE FOR YOU</string> 74 <string name="cos_popup_more_title">COSMOTE MORE FOR YOU</string>
75 <string name="cos_popup_more_subtitle">Σε αυτή την ενότητα βρες έρευνες, παιχνίδια, διαγωνισμούς και επιβραβεύσεις για τις αθλητικές σου δραστηριότητες!</string> 75 <string name="cos_popup_more_subtitle">Σε αυτή την ενότητα βρες έρευνες, παιχνίδια, διαγωνισμούς και επιβραβεύσεις για τις αθλητικές σου δραστηριότητες!</string>
76 - <string name="cos_deals_win_title">Μέχρι τώρα έχεις κερδίσει %1$s€ σε προσφορές από %2$s κουπόνια!</string> 76 + <string name="cos_deals_win_title">Έχεις κερδίσει&#160;%1$s€&#160;με το\nGIFTS for YOU!</string>
77 - <string name="cos_deals_win_title_cos">Μέχρι τώρα έχεις κερδίσει %1$s€ με το DEALS for YOU!</string> 77 + <string name="cos_deals_win_title_cos">Έχεις κερδίσει&#160;%1$s€&#160;με το\nDEALS for YOU!</string>
78 <string name="cos_mygifts">Τα δώρα μου</string> 78 <string name="cos_mygifts">Τα δώρα μου</string>
79 <string name="cos_gifts_banner_title">Δώρα:</string> 79 <string name="cos_gifts_banner_title">Δώρα:</string>
80 <string name="cos_see_more">Δες περισσότερα</string> 80 <string name="cos_see_more">Δες περισσότερα</string>
...@@ -150,6 +150,25 @@ ...@@ -150,6 +150,25 @@
150 <string name="cos_dlg_no_shops_title">Καταστήματα συνεργάτη</string> 150 <string name="cos_dlg_no_shops_title">Καταστήματα συνεργάτη</string>
151 <string name="cos_dlg_no_shops_positive">Δες το eshop</string> 151 <string name="cos_dlg_no_shops_positive">Δες το eshop</string>
152 <string name="cos_profile_preferences_placeholder">Οι προτιμήσεις μου</string> 152 <string name="cos_profile_preferences_placeholder">Οι προτιμήσεις μου</string>
153 + <string name="cos_market_title">SuperMarket Deals</string>
154 + <string name="cos_rewards_title2">COSMOTE Επιβράβευση</string>
155 + <string name="cos_market_item_title">COSMOTE\nSuperMarket\nDeals</string>
156 + <string name="cos_market_active_coupons">έχεις %1$s ενεργά κουπόνια</string>
157 + <string name="cos_market_active_coupons_single">έχεις %1$s ενεργό κουπόνι</string>
158 + <string name="cos_unified_title">Εκπτωτικό κουπόνι COSMOTE SuperMarket Deals!</string>
159 + <string name="cos_unified_subtitle">Χρησιμοποίησε τον παρακάτω κωδικό και πάρε έκπτωση στα ενεργά κουπόνια προσφορών.</string>
160 + <string name="cos_markets">Δες τα supermarket</string>
161 + <string name="cos_show_market_coupons">Εμφάνιση κουπονιών</string>
162 + <string name="cos_hide_market_coupons">Απόκρυψη κουπονιών</string>
163 + <string name="cos_market_terms">1. Το εκπτωτικό κουπόνι ισχύει έως την ημερομηνία που αναφέρεται παραπάνω\n
164 +2. To εκπτωτικό κουπόνι αφορά στα ενεργά κουπόνια προσφορών όπως αναφέρονται παραπάνω.\n
165 +3. Το εκπτωτικό κουπόνι μπορεί να χρησιμοποιηθεί σε μια μόνο συναλλαγή.\n
166 +4. Εάν δεν γίνει χρήση ενός επιμέρους κουπονιού προσφοράς από το εκπτωτικό κουπόνι, το κουπόνι προσφοράς επιστρέφει στο καλάθι στην ενότητα COSMOTE SuperMarket Deals</string>
167 + <string name="cos_market_coupon_expired">Το κουπόνι έληξε</string>
168 + <string name="cos_coupon_date_limit">Ισχύει έως&#160;</string>
169 + <string name="cos_coupon_date_limit2">%1$s</string>
170 + <string name="cos_for_you_all">Μέχρι τώρα έχεις κερδίσει&#160;%1$s€&#160;στο For You!</string>
171 + <string name="cos_supermarket_win">Έχεις κερδίσει&#160;%1$s€&#160;με τα\nSuperMarket Deals!</string>
153 172
154 <string-array name="coupons_array"> 173 <string-array name="coupons_array">
155 <item>Κουπόνια</item> 174 <item>Κουπόνια</item>
......