Showing
23 changed files
with
1338 additions
and
93 deletions
... | @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' | ... | @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' |
2 | 2 | ||
3 | ext { | 3 | ext { |
4 | PUBLISH_GROUP_ID = 'ly.warp' | 4 | PUBLISH_GROUP_ID = 'ly.warp' |
5 | - PUBLISH_VERSION = '4.5.4-cosbeta35' | 5 | + PUBLISH_VERSION = '4.5.4-cosbeta36' |
6 | PUBLISH_ARTIFACT_ID = 'warply-android-sdk' | 6 | PUBLISH_ARTIFACT_ID = 'warply-android-sdk' |
7 | } | 7 | } |
8 | 8 | ... | ... |
... | @@ -28,7 +28,7 @@ | ... | @@ -28,7 +28,7 @@ |
28 | android:screenOrientation="portrait" /> | 28 | android:screenOrientation="portrait" /> |
29 | 29 | ||
30 | <activity | 30 | <activity |
31 | - android:name="ly.warp.sdk.activities.LoyaltyActivity" | 31 | + android:name="ly.warp.sdk.activities.LoyaltyAnalysisActivity" |
32 | android:exported="false" | 32 | android:exported="false" |
33 | android:screenOrientation="portrait" /> | 33 | android:screenOrientation="portrait" /> |
34 | 34 | ... | ... |
... | @@ -73,6 +73,7 @@ import ly.warp.sdk.io.volley.toolbox.Volley; | ... | @@ -73,6 +73,7 @@ import ly.warp.sdk.io.volley.toolbox.Volley; |
73 | import ly.warp.sdk.receivers.WarplyBeaconsApplication; | 73 | import ly.warp.sdk.receivers.WarplyBeaconsApplication; |
74 | import ly.warp.sdk.utils.GCMRegistrar; | 74 | import ly.warp.sdk.utils.GCMRegistrar; |
75 | import ly.warp.sdk.utils.ObjectSerializer; | 75 | import ly.warp.sdk.utils.ObjectSerializer; |
76 | +import ly.warp.sdk.utils.WarpJSONParser; | ||
76 | import ly.warp.sdk.utils.WarpUtils; | 77 | import ly.warp.sdk.utils.WarpUtils; |
77 | import ly.warp.sdk.utils.WarplyDeviceInfoCollector; | 78 | import ly.warp.sdk.utils.WarplyDeviceInfoCollector; |
78 | import ly.warp.sdk.utils.WarplyInitializer; | 79 | import ly.warp.sdk.utils.WarplyInitializer; |
... | @@ -540,7 +541,7 @@ public enum Warply { | ... | @@ -540,7 +541,7 @@ public enum Warply { |
540 | // " \"UACIOfferTrackingCode\": \"51ed.e10.2c006f18.71e96d08\",\n" + | 541 | // " \"UACIOfferTrackingCode\": \"51ed.e10.2c006f18.71e96d08\",\n" + |
541 | // " \"businessAdditionalId\": \"\",\n" + | 542 | // " \"businessAdditionalId\": \"\",\n" + |
542 | // " \"dataCategory\": \"Data\",\n" + | 543 | // " \"dataCategory\": \"Data\",\n" + |
543 | -// " \"dataValue\": \"None\",\n" + | 544 | +// " \"dataValue\": \"233\",\n" + |
544 | // " \"discount\": \"None\",\n" + | 545 | // " \"discount\": \"None\",\n" + |
545 | // " \"eligibleAssets\": [\n" + | 546 | // " \"eligibleAssets\": [\n" + |
546 | // " \"306945218770\",\n" + | 547 | // " \"306945218770\",\n" + |
... | @@ -988,9 +989,24 @@ public enum Warply { | ... | @@ -988,9 +989,24 @@ public enum Warply { |
988 | objectSerializer.serialize(result, File.separator + requestSignature); | 989 | objectSerializer.serialize(result, File.separator + requestSignature); |
989 | warplyPreferences.saveInboxLastCachedTimeStamp(requestSignature, System.currentTimeMillis()); | 990 | warplyPreferences.saveInboxLastCachedTimeStamp(requestSignature, System.currentTimeMillis()); |
990 | 991 | ||
992 | + CampaignList campaignLoyaltyList = new CampaignList(); | ||
993 | + campaignLoyaltyList.clear(); | ||
994 | + for (Campaign camp : result) { | ||
995 | + try { | ||
996 | + JSONObject extraFields = WarpJSONParser.getJSONFromString(camp.getExtraFields()); | ||
997 | + if (extraFields != null) { | ||
998 | + if (extraFields.length() == 0 || !extraFields.has("ccms_offer")) { | ||
999 | + campaignLoyaltyList.add(camp); | ||
1000 | + } | ||
1001 | + } | ||
1002 | + } catch (Exception exception) { | ||
1003 | + campaignLoyaltyList.add(camp); | ||
1004 | + } | ||
1005 | + } | ||
1006 | + | ||
991 | INSTANCE.mLastReceivedCampaigns = result; | 1007 | INSTANCE.mLastReceivedCampaigns = result; |
992 | if (receiver != null) { | 1008 | if (receiver != null) { |
993 | - receiver.onSuccess(result); | 1009 | + receiver.onSuccess(/*result*/campaignLoyaltyList); |
994 | } | 1010 | } |
995 | } | 1011 | } |
996 | } | 1012 | } |
... | @@ -1950,7 +1966,7 @@ public enum Warply { | ... | @@ -1950,7 +1966,7 @@ public enum Warply { |
1950 | url = buildWarplyAuthRequestUrl(path, true); | 1966 | url = buildWarplyAuthRequestUrl(path, true); |
1951 | else if (path.equals("campaigns")) | 1967 | else if (path.equals("campaigns")) |
1952 | url = buildWarplyRequestUrl(null); | 1968 | url = buildWarplyRequestUrl(null); |
1953 | - else if(path.equals("campaignsPersonalized")) | 1969 | + else if (path.equals("campaignsPersonalized")) |
1954 | url = buildWarplyRequestUrl(null, true); | 1970 | url = buildWarplyRequestUrl(null, true); |
1955 | else | 1971 | else |
1956 | url = buildWarplyAuthRequestUrl(path, false); | 1972 | url = buildWarplyAuthRequestUrl(path, false); | ... | ... |
1 | package ly.warp.sdk.activities; | 1 | package ly.warp.sdk.activities; |
2 | 2 | ||
3 | import android.app.Activity; | 3 | import android.app.Activity; |
4 | +import android.graphics.Typeface; | ||
4 | import android.os.Bundle; | 5 | import android.os.Bundle; |
5 | import android.view.View; | 6 | import android.view.View; |
6 | import android.widget.ImageView; | 7 | import android.widget.ImageView; |
8 | +import android.widget.LinearLayout; | ||
9 | +import android.widget.RelativeLayout; | ||
10 | +import android.widget.TextView; | ||
11 | + | ||
12 | +import androidx.core.content.ContextCompat; | ||
13 | +import androidx.recyclerview.widget.LinearLayoutManager; | ||
14 | +import androidx.recyclerview.widget.RecyclerView; | ||
7 | 15 | ||
8 | import ly.warp.sdk.R; | 16 | import ly.warp.sdk.R; |
17 | +import ly.warp.sdk.io.callbacks.CallbackReceiver; | ||
18 | +import ly.warp.sdk.io.models.Couponset; | ||
19 | +import ly.warp.sdk.io.models.SharingCoupon; | ||
20 | +import ly.warp.sdk.io.models.SharingList; | ||
21 | +import ly.warp.sdk.io.request.WarplySharingHistoryRequest; | ||
22 | +import ly.warp.sdk.utils.WarpUtils; | ||
23 | +import ly.warp.sdk.utils.WarplyManagerHelper; | ||
24 | +import ly.warp.sdk.utils.managers.WarplyManager; | ||
25 | +import ly.warp.sdk.views.adapters.ExpiredCouponAdapter; | ||
26 | +import ly.warp.sdk.views.adapters.SharedCouponAdapter; | ||
9 | 27 | ||
10 | 28 | ||
11 | public class LoyaltyAnalysisActivity extends Activity implements View.OnClickListener { | 29 | public class LoyaltyAnalysisActivity extends Activity implements View.OnClickListener { |
... | @@ -19,6 +37,13 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis | ... | @@ -19,6 +37,13 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis |
19 | // =========================================================== | 37 | // =========================================================== |
20 | 38 | ||
21 | private ImageView mIvBack; | 39 | private ImageView mIvBack; |
40 | + private TextView mTvCouponsValueAll; | ||
41 | + private RecyclerView mRvExpiredCoupons, mRvSharedCoupons; | ||
42 | + private ExpiredCouponAdapter mAdapterExpiredCoupons; | ||
43 | + private SharedCouponAdapter mAdapterSharedCoupons; | ||
44 | + private LinearLayout mLlExpiredTab, mLlSharedTab; | ||
45 | + private RelativeLayout mRlExpiredView, mRlSharedView; | ||
46 | + private SharingList mSharedCoupons = new SharingList(); | ||
22 | 47 | ||
23 | // =========================================================== | 48 | // =========================================================== |
24 | // Methods for/from SuperClass/Interfaces | 49 | // Methods for/from SuperClass/Interfaces |
... | @@ -30,6 +55,13 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis | ... | @@ -30,6 +55,13 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis |
30 | setContentView(R.layout.activity_loyalty_analysis); | 55 | setContentView(R.layout.activity_loyalty_analysis); |
31 | 56 | ||
32 | mIvBack = findViewById(R.id.iv_loyalty_analysis_close); | 57 | mIvBack = findViewById(R.id.iv_loyalty_analysis_close); |
58 | + mTvCouponsValueAll = findViewById(R.id.tv_expired_coupons_title); | ||
59 | + mRvExpiredCoupons = findViewById(R.id.rv_expired_coupons); | ||
60 | + mLlExpiredTab = findViewById(R.id.cl_tab_coupon_analysis).findViewById(R.id.ll_tab_expired); | ||
61 | + mLlSharedTab = findViewById(R.id.cl_tab_coupon_analysis).findViewById(R.id.ll_tab_shared); | ||
62 | + mRlExpiredView = findViewById(R.id.rl_expired_view); | ||
63 | + mRlSharedView = findViewById(R.id.rl_shared_view); | ||
64 | + mRvSharedCoupons = findViewById(R.id.rv_shared_coupons); | ||
33 | 65 | ||
34 | initViews(); | 66 | initViews(); |
35 | } | 67 | } |
... | @@ -37,12 +69,51 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis | ... | @@ -37,12 +69,51 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis |
37 | @Override | 69 | @Override |
38 | public void onResume() { | 70 | public void onResume() { |
39 | super.onResume(); | 71 | super.onResume(); |
72 | + mSharedCoupons.clear(); | ||
73 | + | ||
74 | + new Thread(() -> { | ||
75 | + if (!Thread.currentThread().isInterrupted()) { | ||
76 | + WarplyManager.getSharingHistory(new WarplySharingHistoryRequest() | ||
77 | + , mSharingHistoryCallback); | ||
78 | + } | ||
79 | + Thread.currentThread().interrupt(); | ||
80 | + }).start(); | ||
40 | } | 81 | } |
41 | 82 | ||
42 | @Override | 83 | @Override |
43 | public void onClick(View view) { | 84 | public void onClick(View view) { |
44 | if (view.getId() == R.id.iv_loyalty_analysis_close) { | 85 | if (view.getId() == R.id.iv_loyalty_analysis_close) { |
45 | onBackPressed(); | 86 | onBackPressed(); |
87 | + return; | ||
88 | + } | ||
89 | + if (view.getId() == R.id.ll_tab_expired) { | ||
90 | + mLlExpiredTab.setBackgroundResource(R.drawable.bottom_border_gradient2); | ||
91 | + TextView expiredTab = findViewById(R.id.tv_expired_tab); | ||
92 | + expiredTab.setTextColor(ContextCompat.getColor(this, R.color.cos_cyan4)); | ||
93 | + expiredTab.setTypeface(null, Typeface.BOLD); | ||
94 | + | ||
95 | + mLlSharedTab.setBackgroundResource(R.drawable.bottom_border_transparent); | ||
96 | + TextView sharedTab = findViewById(R.id.tv_shared_tab); | ||
97 | + sharedTab.setTextColor(ContextCompat.getColor(this, R.color.cos_dark_grey)); | ||
98 | + sharedTab.setTypeface(null, Typeface.NORMAL); | ||
99 | + | ||
100 | + mRlSharedView.setVisibility(View.GONE); | ||
101 | + mRlExpiredView.setVisibility(View.VISIBLE); | ||
102 | + return; | ||
103 | + } | ||
104 | + if (view.getId() == R.id.ll_tab_shared) { | ||
105 | + mLlSharedTab.setBackgroundResource(R.drawable.bottom_border_gradient2); | ||
106 | + TextView sharedTab = findViewById(R.id.tv_shared_tab); | ||
107 | + sharedTab.setTextColor(ContextCompat.getColor(this, R.color.cos_cyan4)); | ||
108 | + sharedTab.setTypeface(null, Typeface.BOLD); | ||
109 | + | ||
110 | + mLlExpiredTab.setBackgroundResource(R.drawable.bottom_border_transparent); | ||
111 | + TextView expiredTab = findViewById(R.id.tv_expired_tab); | ||
112 | + expiredTab.setTextColor(ContextCompat.getColor(this, R.color.cos_dark_grey)); | ||
113 | + expiredTab.setTypeface(null, Typeface.NORMAL); | ||
114 | + | ||
115 | + mRlExpiredView.setVisibility(View.GONE); | ||
116 | + mRlSharedView.setVisibility(View.VISIBLE); | ||
46 | } | 117 | } |
47 | } | 118 | } |
48 | 119 | ||
... | @@ -52,10 +123,60 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis | ... | @@ -52,10 +123,60 @@ public class LoyaltyAnalysisActivity extends Activity implements View.OnClickLis |
52 | 123 | ||
53 | private void initViews() { | 124 | private void initViews() { |
54 | mIvBack.setOnClickListener(this); | 125 | mIvBack.setOnClickListener(this); |
126 | + mLlExpiredTab.setOnClickListener(this); | ||
127 | + mLlSharedTab.setOnClickListener(this); | ||
128 | + | ||
129 | + mTvCouponsValueAll.setText(String.format(getString(R.string.cos_deals_win_title), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getValue()), String.valueOf(WarplyManagerHelper.getLoyaltyBadge().getCouponCount()))); | ||
130 | + | ||
131 | + if (WarplyManagerHelper.getCouponExpiredList() != null && WarplyManagerHelper.getCouponExpiredList().size() > 0) { | ||
132 | + mRvExpiredCoupons.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); | ||
133 | + mAdapterExpiredCoupons = new ExpiredCouponAdapter(this, WarplyManagerHelper.getCouponExpiredList()); | ||
134 | + mRvExpiredCoupons.setAdapter(mAdapterExpiredCoupons); | ||
135 | +// mAdapterCoupons.getPositionClicks() | ||
136 | +// .doOnNext(coupon -> { | ||
137 | +// Intent intent = new Intent(ActiveCouponsActivity.this, CouponInfoActivity.class); | ||
138 | +// intent.putExtra("coupon", (Serializable) coupon); | ||
139 | +// startActivity(intent); | ||
140 | +// }) | ||
141 | +// .doOnError(error -> { | ||
142 | +// }) | ||
143 | +// .subscribe(); | ||
144 | + } | ||
55 | } | 145 | } |
56 | 146 | ||
57 | // =========================================================== | 147 | // =========================================================== |
58 | // Inner and Anonymous Classes | 148 | // Inner and Anonymous Classes |
59 | // =========================================================== | 149 | // =========================================================== |
60 | 150 | ||
151 | + private CallbackReceiver<SharingList> mSharingHistoryCallback = new CallbackReceiver<SharingList>() { | ||
152 | + @Override | ||
153 | + public void onSuccess(SharingList result) { | ||
154 | + if (result != null && result.size() > 0) { | ||
155 | + if (WarplyManagerHelper.getCouponsets() != null && WarplyManagerHelper.getCouponsets().size() > 0) { | ||
156 | + for (SharingCoupon shCoupon : result) { | ||
157 | + for (Couponset cpnset : WarplyManagerHelper.getCouponsets()) { | ||
158 | + if (shCoupon.getCouponsetUuid().equals(cpnset.getUuid())) { | ||
159 | + SharingCoupon newShCoupon = new SharingCoupon(); | ||
160 | + newShCoupon = shCoupon; | ||
161 | + newShCoupon.setName(cpnset.getName()); | ||
162 | + mSharedCoupons.add(newShCoupon); | ||
163 | + break; | ||
164 | + } | ||
165 | + } | ||
166 | + } | ||
167 | + } | ||
168 | + } | ||
169 | + | ||
170 | + runOnUiThread(() -> { | ||
171 | + mRvSharedCoupons.setLayoutManager(new LinearLayoutManager(LoyaltyAnalysisActivity.this, LinearLayoutManager.VERTICAL, false)); | ||
172 | + mAdapterSharedCoupons = new SharedCouponAdapter(LoyaltyAnalysisActivity.this, mSharedCoupons); | ||
173 | + mRvSharedCoupons.setAdapter(mAdapterSharedCoupons); | ||
174 | + }); | ||
175 | + } | ||
176 | + | ||
177 | + @Override | ||
178 | + public void onFailure(int errorCode) { | ||
179 | + WarpUtils.log("SHARED_COUPONS_ERROR " + String.valueOf(errorCode)); | ||
180 | + } | ||
181 | + }; | ||
61 | } | 182 | } | ... | ... |
... | @@ -125,8 +125,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { | ... | @@ -125,8 +125,8 @@ public class LoyaltyWallet extends Activity implements View.OnClickListener { |
125 | return; | 125 | return; |
126 | } | 126 | } |
127 | if (view.getId() == R.id.cl_deals_win) { | 127 | if (view.getId() == R.id.cl_deals_win) { |
128 | - //TODO: Loyalty history | 128 | + Intent intent = new Intent(LoyaltyWallet.this, LoyaltyAnalysisActivity.class); |
129 | - | 129 | + startActivity(intent); |
130 | return; | 130 | return; |
131 | } | 131 | } |
132 | if (view.getId() == R.id.cl_mygifts) { | 132 | if (view.getId() == R.id.cl_mygifts) { | ... | ... |
... | @@ -16,13 +16,17 @@ import androidx.recyclerview.widget.RecyclerView; | ... | @@ -16,13 +16,17 @@ import androidx.recyclerview.widget.RecyclerView; |
16 | 16 | ||
17 | import org.json.JSONObject; | 17 | import org.json.JSONObject; |
18 | 18 | ||
19 | +import java.io.Serializable; | ||
20 | + | ||
19 | import ly.warp.sdk.R; | 21 | import ly.warp.sdk.R; |
20 | import ly.warp.sdk.activities.GiftsForYouActivity; | 22 | import ly.warp.sdk.activities.GiftsForYouActivity; |
21 | import ly.warp.sdk.activities.LoyaltyWallet; | 23 | import ly.warp.sdk.activities.LoyaltyWallet; |
22 | import ly.warp.sdk.activities.MoreForYouActivity; | 24 | import ly.warp.sdk.activities.MoreForYouActivity; |
25 | +import ly.warp.sdk.activities.TelcoActivity; | ||
23 | import ly.warp.sdk.activities.WarpViewActivity; | 26 | import ly.warp.sdk.activities.WarpViewActivity; |
24 | import ly.warp.sdk.io.models.Campaign; | 27 | import ly.warp.sdk.io.models.Campaign; |
25 | import ly.warp.sdk.io.models.CampaignList; | 28 | import ly.warp.sdk.io.models.CampaignList; |
29 | +import ly.warp.sdk.io.models.LoyaltyContextualOfferModel; | ||
26 | import ly.warp.sdk.utils.WarpJSONParser; | 30 | import ly.warp.sdk.utils.WarpJSONParser; |
27 | import ly.warp.sdk.utils.WarplyManagerHelper; | 31 | import ly.warp.sdk.utils.WarplyManagerHelper; |
28 | import ly.warp.sdk.views.adapters.ProfileCampaignAdapter; | 32 | import ly.warp.sdk.views.adapters.ProfileCampaignAdapter; |
... | @@ -103,6 +107,19 @@ public class LoyaltyFragment extends Fragment implements View.OnClickListener { | ... | @@ -103,6 +107,19 @@ public class LoyaltyFragment extends Fragment implements View.OnClickListener { |
103 | mRecyclerGifts.setAdapter(mAdapterGifts); | 107 | mRecyclerGifts.setAdapter(mAdapterGifts); |
104 | mAdapterGifts.getPositionClicks() | 108 | mAdapterGifts.getPositionClicks() |
105 | .doOnNext(gift -> { | 109 | .doOnNext(gift -> { |
110 | + try { | ||
111 | + JSONObject extraFields = WarpJSONParser.getJSONFromString(gift.getExtraFields()); | ||
112 | + if (extraFields != null) { | ||
113 | + if (extraFields.has("type") && extraFields.optString("type").equals("telco")) { | ||
114 | + WarplyManagerHelper.openTelco(getContext(), gift); | ||
115 | + return; | ||
116 | + } | ||
117 | + } | ||
118 | + } catch (Exception exception) { | ||
119 | + startActivity(WarpViewActivity.createIntentFromURL(getContext(), WarplyManagerHelper.constructCampaignUrl(gift))); | ||
120 | + return; | ||
121 | + } | ||
122 | + | ||
106 | if (gift.getType().equals("coupon")) { | 123 | if (gift.getType().equals("coupon")) { |
107 | WarplyManagerHelper.openCouponset(getContext(), gift); | 124 | WarplyManagerHelper.openCouponset(getContext(), gift); |
108 | } else | 125 | } else |
... | @@ -130,6 +147,19 @@ public class LoyaltyFragment extends Fragment implements View.OnClickListener { | ... | @@ -130,6 +147,19 @@ public class LoyaltyFragment extends Fragment implements View.OnClickListener { |
130 | mRecyclerMore.setAdapter(mAdapterMore); | 147 | mRecyclerMore.setAdapter(mAdapterMore); |
131 | mAdapterMore.getPositionClicks() | 148 | mAdapterMore.getPositionClicks() |
132 | .doOnNext(more -> { | 149 | .doOnNext(more -> { |
150 | + try { | ||
151 | + JSONObject extraFields = WarpJSONParser.getJSONFromString(more.getExtraFields()); | ||
152 | + if (extraFields != null) { | ||
153 | + if (extraFields.has("type") && extraFields.optString("type").equals("telco")) { | ||
154 | + WarplyManagerHelper.openTelco(getContext(), more); | ||
155 | + return; | ||
156 | + } | ||
157 | + } | ||
158 | + } catch (Exception exception) { | ||
159 | + startActivity(WarpViewActivity.createIntentFromURL(getContext(), WarplyManagerHelper.constructCampaignUrl(more))); | ||
160 | + return; | ||
161 | + } | ||
162 | + | ||
133 | if (more.getType().equals("coupon")) { | 163 | if (more.getType().equals("coupon")) { |
134 | WarplyManagerHelper.openCouponset(getContext(), more); | 164 | WarplyManagerHelper.openCouponset(getContext(), more); |
135 | } else | 165 | } else | ... | ... |
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.callbacks; | ||
27 | + | ||
28 | +import org.json.JSONArray; | ||
29 | +import org.json.JSONObject; | ||
30 | + | ||
31 | +import ly.warp.sdk.io.models.SharingList; | ||
32 | + | ||
33 | +/** | ||
34 | + * Created by Panagiotis Triantafyllou on 19-July-22. | ||
35 | + */ | ||
36 | + | ||
37 | +public class SharingHook implements CallbackReceiver<JSONObject> { | ||
38 | + | ||
39 | + private final CallbackReceiver<SharingList> mListener; | ||
40 | + private final String mRequestSignature; | ||
41 | + | ||
42 | + public SharingHook(CallbackReceiver<SharingList> listener, String requestSignature) { | ||
43 | + this.mListener = listener; | ||
44 | + this.mRequestSignature = requestSignature; | ||
45 | + } | ||
46 | + | ||
47 | + @Override | ||
48 | + public void onSuccess(JSONObject result) { | ||
49 | + if (mListener != null) { | ||
50 | + int status = result.optInt("status", 2); | ||
51 | + if (status == 1) { | ||
52 | + JSONArray jArrayResult = result.optJSONArray("result"); | ||
53 | + if (jArrayResult == null) { | ||
54 | + mListener.onFailure(2); | ||
55 | + return; | ||
56 | + } | ||
57 | + mListener.onSuccess(new SharingList(result, mRequestSignature)); | ||
58 | + } else | ||
59 | + mListener.onFailure(status); | ||
60 | + } | ||
61 | + | ||
62 | + } | ||
63 | + | ||
64 | + @Override | ||
65 | + public void onFailure(int errorCode) { | ||
66 | + if (mListener != null) | ||
67 | + mListener.onFailure(errorCode); | ||
68 | + } | ||
69 | +} |
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.JSONException; | ||
32 | +import org.json.JSONObject; | ||
33 | + | ||
34 | +import java.io.Serializable; | ||
35 | + | ||
36 | +import ly.warp.sdk.utils.WarpUtils; | ||
37 | +import ly.warp.sdk.utils.constants.WarpConstants; | ||
38 | + | ||
39 | +/** | ||
40 | + * Created by Panagiotis Triantafyllou on 19-July-22. | ||
41 | + */ | ||
42 | + | ||
43 | +public class SharingCoupon implements Parcelable, Serializable { | ||
44 | + | ||
45 | + private static final long serialVersionUID = -4754964462459705285L; | ||
46 | + | ||
47 | + /* Constants used to export the campaign in JSON formal and vice versa */ | ||
48 | + | ||
49 | + private static final String TRANSACTION_METADATA = "transaction_metadata"; | ||
50 | + private static final String SHARING_TYPE = "sharing_type"; | ||
51 | + private static final String DISCOUNT = "discount"; | ||
52 | + private static final String DATE = "date"; | ||
53 | + private static final String COUPONSET_UUID = "couponset_uuid"; | ||
54 | + private static final String NAME = "name"; | ||
55 | + | ||
56 | + /* Member variables of the Campaign object */ | ||
57 | + | ||
58 | + private String transactionMetadata = ""; | ||
59 | + private String sharingType = ""; | ||
60 | + private String discount = ""; | ||
61 | + private String date = ""; | ||
62 | + private String couponsetUuid = ""; | ||
63 | + private String name = ""; | ||
64 | + | ||
65 | + /** | ||
66 | + * Basic constructor used to create an object from a String, representing a | ||
67 | + * JSON Object | ||
68 | + * | ||
69 | + * @param json The String, representing the JSON Object | ||
70 | + * @throws JSONException Thrown if the String cannot be converted to JSON | ||
71 | + */ | ||
72 | + public SharingCoupon(String json) throws JSONException { | ||
73 | + this(new JSONObject(json)); | ||
74 | + } | ||
75 | + | ||
76 | + public SharingCoupon() { | ||
77 | + this.transactionMetadata = ""; | ||
78 | + this.sharingType = ""; | ||
79 | + this.discount = ""; | ||
80 | + this.date = ""; | ||
81 | + this.couponsetUuid = ""; | ||
82 | + this.name = ""; | ||
83 | + } | ||
84 | + | ||
85 | + /** | ||
86 | + * Constructor used to create an Object from a given JSON Object | ||
87 | + * | ||
88 | + * @param json JSON Object used to create the Coupon | ||
89 | + */ | ||
90 | + public SharingCoupon(JSONObject json) { | ||
91 | + if (json != null) { | ||
92 | + this.discount = json.optString(DISCOUNT); | ||
93 | + this.couponsetUuid = json.optString(COUPONSET_UUID); | ||
94 | + this.date = json.optString(DATE); | ||
95 | + this.sharingType = json.optString(SHARING_TYPE); | ||
96 | + this.transactionMetadata = json.optString(TRANSACTION_METADATA); | ||
97 | + this.name = json.optString(NAME); | ||
98 | + } | ||
99 | + } | ||
100 | + | ||
101 | + public SharingCoupon(Parcel source) { | ||
102 | + this.discount = source.readString(); | ||
103 | + this.couponsetUuid = source.readString(); | ||
104 | + this.date = source.readString(); | ||
105 | + this.sharingType = source.readString(); | ||
106 | + this.transactionMetadata = source.readString(); | ||
107 | + this.name = source.readString(); | ||
108 | + } | ||
109 | + | ||
110 | + @Override | ||
111 | + public void writeToParcel(Parcel dest, int flags) { | ||
112 | + dest.writeString(this.discount); | ||
113 | + dest.writeString(this.couponsetUuid); | ||
114 | + dest.writeString(this.date); | ||
115 | + dest.writeString(this.sharingType); | ||
116 | + dest.writeString(this.transactionMetadata); | ||
117 | + dest.writeString(this.name); | ||
118 | + } | ||
119 | + | ||
120 | + /** | ||
121 | + * Converts the Coupon into a JSON Object | ||
122 | + * | ||
123 | + * @return The JSON Object created from this Coupon | ||
124 | + */ | ||
125 | + public JSONObject toJSONObject() { | ||
126 | + JSONObject jObj = new JSONObject(); | ||
127 | + try { | ||
128 | + jObj.putOpt(DISCOUNT, this.discount); | ||
129 | + jObj.putOpt(COUPONSET_UUID, this.couponsetUuid); | ||
130 | + jObj.putOpt(DATE, this.date); | ||
131 | + jObj.putOpt(SHARING_TYPE, this.sharingType); | ||
132 | + jObj.putOpt(TRANSACTION_METADATA, this.transactionMetadata); | ||
133 | + jObj.putOpt(NAME, this.name); | ||
134 | + } catch (JSONException e) { | ||
135 | + if (WarpConstants.DEBUG) { | ||
136 | + e.printStackTrace(); | ||
137 | + } | ||
138 | + } | ||
139 | + return jObj; | ||
140 | + } | ||
141 | + | ||
142 | + /** | ||
143 | + * String representation of the Coupon, as a JSON object | ||
144 | + * | ||
145 | + * @return A String representation of JSON object | ||
146 | + */ | ||
147 | + public String toString() { | ||
148 | + if (toJSONObject() != null) | ||
149 | + return toJSONObject().toString(); | ||
150 | + return null; | ||
151 | + } | ||
152 | + | ||
153 | + /** | ||
154 | + * String representation of the Coupon, as a human readable JSON object | ||
155 | + * | ||
156 | + * @return A human readable String representation of JSON object | ||
157 | + */ | ||
158 | + public String toHumanReadableString() { | ||
159 | + String humanReadableString = null; | ||
160 | + try { | ||
161 | + humanReadableString = toJSONObject().toString(2); | ||
162 | + } catch (JSONException e) { | ||
163 | + WarpUtils.warn("Failed converting Coupon JSON object to String", e); | ||
164 | + } | ||
165 | + return humanReadableString; | ||
166 | + } | ||
167 | + | ||
168 | + // ================================================================================ | ||
169 | + // Getters | ||
170 | + // ================================================================================ | ||
171 | + | ||
172 | + | ||
173 | + public String getTransactionMetadata() { | ||
174 | + return transactionMetadata; | ||
175 | + } | ||
176 | + | ||
177 | + public void setTransactionMetadata(String transactionMetadata) { | ||
178 | + this.transactionMetadata = transactionMetadata; | ||
179 | + } | ||
180 | + | ||
181 | + public String getSharingType() { | ||
182 | + return sharingType; | ||
183 | + } | ||
184 | + | ||
185 | + public void setSharingType(String sharingType) { | ||
186 | + this.sharingType = sharingType; | ||
187 | + } | ||
188 | + | ||
189 | + public String getDiscount() { | ||
190 | + return discount; | ||
191 | + } | ||
192 | + | ||
193 | + public void setDiscount(String discount) { | ||
194 | + this.discount = discount; | ||
195 | + } | ||
196 | + | ||
197 | + public String getDate() { | ||
198 | + return date; | ||
199 | + } | ||
200 | + | ||
201 | + public void setDate(String date) { | ||
202 | + this.date = date; | ||
203 | + } | ||
204 | + | ||
205 | + public String getCouponsetUuid() { | ||
206 | + return couponsetUuid; | ||
207 | + } | ||
208 | + | ||
209 | + public void setCouponsetUuid(String couponsetUuid) { | ||
210 | + this.couponsetUuid = couponsetUuid; | ||
211 | + } | ||
212 | + | ||
213 | + public String getName() { | ||
214 | + return name; | ||
215 | + } | ||
216 | + | ||
217 | + public void setName(String name) { | ||
218 | + this.name = name; | ||
219 | + } | ||
220 | + | ||
221 | + @Override | ||
222 | + public int describeContents() { | ||
223 | + return 0; | ||
224 | + } | ||
225 | + | ||
226 | + public static final Creator<SharingCoupon> CREATOR = new Creator<SharingCoupon>() { | ||
227 | + public SharingCoupon createFromParcel(Parcel source) { | ||
228 | + return new SharingCoupon(source); | ||
229 | + } | ||
230 | + | ||
231 | + public SharingCoupon[] newArray(int size) { | ||
232 | + return new SharingCoupon[size]; | ||
233 | + } | ||
234 | + }; | ||
235 | +} |
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 androidx.annotation.NonNull; | ||
29 | + | ||
30 | +import org.json.JSONArray; | ||
31 | +import org.json.JSONObject; | ||
32 | + | ||
33 | +import java.util.ArrayList; | ||
34 | + | ||
35 | +/** | ||
36 | + * Created by Panagiotis Triantafyllou on 19-July-22. | ||
37 | + */ | ||
38 | + | ||
39 | +public class SharingList extends ArrayList<SharingCoupon> { | ||
40 | + | ||
41 | + /** | ||
42 | + * Generated for serialized class | ||
43 | + */ | ||
44 | + private static final long serialVersionUID = -188843583823948267L; | ||
45 | + | ||
46 | + private static final String JSON_KEY_RESULT = "result"; | ||
47 | + | ||
48 | + private String mRequestSignature = ""; | ||
49 | + | ||
50 | + private SharingList(String requestSignature) { | ||
51 | + this.mRequestSignature = requestSignature; | ||
52 | + } | ||
53 | + | ||
54 | + public SharingList() { | ||
55 | + super(); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Constructor used to create the CouponList from a JSON Object. | ||
60 | + * | ||
61 | + * @param couponListJSONObject The JSON Object, used to create the CouponList | ||
62 | + */ | ||
63 | + public SharingList(JSONObject couponListJSONObject, String requestSignature) { | ||
64 | + this(requestSignature); | ||
65 | + | ||
66 | + if (couponListJSONObject == null) | ||
67 | + return; | ||
68 | + | ||
69 | + JSONArray jArray = couponListJSONObject.optJSONArray(JSON_KEY_RESULT); | ||
70 | + if (jArray != null) { | ||
71 | + for (int i = 0, lim = jArray.length(); i < lim; ++i) { | ||
72 | + add(new SharingCoupon(jArray.optJSONObject(i))); | ||
73 | + } | ||
74 | + } | ||
75 | + } | ||
76 | + | ||
77 | + @NonNull | ||
78 | + public String getRequestSignature() { | ||
79 | + return mRequestSignature; | ||
80 | + } | ||
81 | +} |
1 | +package ly.warp.sdk.io.request; | ||
2 | + | ||
3 | +import android.util.Base64; | ||
4 | + | ||
5 | +import org.json.JSONException; | ||
6 | +import org.json.JSONObject; | ||
7 | + | ||
8 | +import java.io.UnsupportedEncodingException; | ||
9 | +import java.security.MessageDigest; | ||
10 | +import java.security.NoSuchAlgorithmException; | ||
11 | +import java.util.HashMap; | ||
12 | + | ||
13 | +import ly.warp.sdk.utils.constants.WarpConstants; | ||
14 | + | ||
15 | +/** | ||
16 | + * Created by Panagiotis Triantafyllou on 19-July-22. | ||
17 | + */ | ||
18 | + | ||
19 | +public class WarplySharingHistoryRequest { | ||
20 | + | ||
21 | + // =========================================================== | ||
22 | + // Constants | ||
23 | + // =========================================================== | ||
24 | + | ||
25 | + private final String KEY_ACTION = "action"; | ||
26 | + private final String KEY_ACTION_VALUE = "sharing_history"; | ||
27 | + | ||
28 | + // =========================================================== | ||
29 | + // Fields | ||
30 | + // =========================================================== | ||
31 | + | ||
32 | + private HashMap<String, String> mFilters; | ||
33 | + private long mCacheUpdateInterval = 0; | ||
34 | + | ||
35 | + // =========================================================== | ||
36 | + // Constructor | ||
37 | + // =========================================================== | ||
38 | + | ||
39 | + /** | ||
40 | + * Default constructor of WarplySharingHistoryRequest, initializes an empty filters HashMap | ||
41 | + */ | ||
42 | + public WarplySharingHistoryRequest() { | ||
43 | + mFilters = new HashMap<>(); | ||
44 | + } | ||
45 | + | ||
46 | + public WarplySharingHistoryRequest(WarplySharingHistoryRequest copy) { | ||
47 | + if (copy != null) { | ||
48 | + this.mFilters = copy.mFilters; | ||
49 | + this.mCacheUpdateInterval = copy.mCacheUpdateInterval; | ||
50 | + } | ||
51 | + } | ||
52 | + | ||
53 | + // =========================================================== | ||
54 | + // Methods for/from SuperClass/Interfaces | ||
55 | + // =========================================================== | ||
56 | + | ||
57 | + @Override | ||
58 | + public boolean equals(Object object) { | ||
59 | + if (object instanceof WarplySharingHistoryRequest) { | ||
60 | + WarplySharingHistoryRequest other = (WarplySharingHistoryRequest) object; | ||
61 | + return other == this || (this.mFilters == other.mFilters || (this.mFilters != null && this.mFilters.equals(other.mFilters))); | ||
62 | + } | ||
63 | + return false; | ||
64 | + } | ||
65 | + | ||
66 | + @Override | ||
67 | + public int hashCode() { | ||
68 | + return mFilters.hashCode(); | ||
69 | + } | ||
70 | + | ||
71 | + // =========================================================== | ||
72 | + // Methods | ||
73 | + // =========================================================== | ||
74 | + | ||
75 | + // =========================================================== | ||
76 | + // Getter & Setter | ||
77 | + // =========================================================== | ||
78 | + | ||
79 | + /** | ||
80 | + * Call this to get how often the cached data will be updated. | ||
81 | + * | ||
82 | + * @return mCacheUpdateInterval | ||
83 | + */ | ||
84 | + public long getCacheUpdateInterval() { | ||
85 | + return mCacheUpdateInterval; | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * Call this to set how often the cached data will be updated. | ||
90 | + * | ||
91 | + * @param updateInterval The time that data will be cached | ||
92 | + * @return WarplySharingHistoryRequest | ||
93 | + */ | ||
94 | + public WarplySharingHistoryRequest setCacheUpdateInterval(long updateInterval) { | ||
95 | + | ||
96 | + this.mCacheUpdateInterval = updateInterval; | ||
97 | + if (mCacheUpdateInterval < 0) { | ||
98 | + mCacheUpdateInterval = 0; | ||
99 | + } | ||
100 | + return this; | ||
101 | + } | ||
102 | + | ||
103 | + /** | ||
104 | + * Call this to check if the Application uses Cache | ||
105 | + * | ||
106 | + * @return <p>true - the Application is using Cache</p> | ||
107 | + * <p>false - the Application is not using Cache</p> | ||
108 | + */ | ||
109 | + public boolean isUseCache() { | ||
110 | + return mCacheUpdateInterval > 0; | ||
111 | + } | ||
112 | + | ||
113 | + /** | ||
114 | + * Call this to check whether the cached data need to be updated | ||
115 | + * | ||
116 | + * @param useCache <p>true - the Application is using Cache</p> | ||
117 | + * <p>false - the Application is not using Cache</p> | ||
118 | + * @return WarplySharingHistoryRequest | ||
119 | + */ | ||
120 | + public WarplySharingHistoryRequest setUseCache(boolean useCache) { | ||
121 | + | ||
122 | + if (useCache) { | ||
123 | + mCacheUpdateInterval = mCacheUpdateInterval > 0 ? mCacheUpdateInterval | ||
124 | + : WarpConstants.INBOX_UPDATE_INTERVAL; | ||
125 | + } else { | ||
126 | + mCacheUpdateInterval = 0; | ||
127 | + } | ||
128 | + return this; | ||
129 | + } | ||
130 | + | ||
131 | + /** | ||
132 | + * Call this to build the offers Json object | ||
133 | + * | ||
134 | + * @return bodyJsonObject | ||
135 | + */ | ||
136 | + public JSONObject toJson() { | ||
137 | + JSONObject bodyJsonObject = new JSONObject(); | ||
138 | + try { | ||
139 | + bodyJsonObject.putOpt(KEY_ACTION, KEY_ACTION_VALUE); | ||
140 | + } catch (JSONException e) { | ||
141 | + if (WarpConstants.DEBUG) | ||
142 | + e.printStackTrace(); | ||
143 | + } | ||
144 | + return bodyJsonObject; | ||
145 | + } | ||
146 | + | ||
147 | + public String getSignature() { | ||
148 | + String signature = mFilters != null && mFilters.size() > 0 ? String.valueOf(mFilters.hashCode()) : "default_sharing_history_request"; | ||
149 | + try { | ||
150 | + byte[] hash = MessageDigest.getInstance("SHA-256").digest(signature.getBytes("UTF-8")); | ||
151 | + signature = Base64.encodeToString(hash, Base64.NO_WRAP); | ||
152 | + } catch (NullPointerException | NoSuchAlgorithmException | ||
153 | + | UnsupportedEncodingException e) { | ||
154 | + e.printStackTrace(); | ||
155 | + } | ||
156 | + return signature; | ||
157 | + } | ||
158 | +} |
... | @@ -45,6 +45,7 @@ import ly.warp.sdk.R; | ... | @@ -45,6 +45,7 @@ import ly.warp.sdk.R; |
45 | import ly.warp.sdk.Warply; | 45 | import ly.warp.sdk.Warply; |
46 | import ly.warp.sdk.activities.CouponsetInfoActivity; | 46 | import ly.warp.sdk.activities.CouponsetInfoActivity; |
47 | import ly.warp.sdk.activities.GiftsForYouActivity; | 47 | import ly.warp.sdk.activities.GiftsForYouActivity; |
48 | +import ly.warp.sdk.activities.TelcoActivity; | ||
48 | import ly.warp.sdk.activities.WarpViewActivity; | 49 | import ly.warp.sdk.activities.WarpViewActivity; |
49 | import ly.warp.sdk.db.WarplyDBHelper; | 50 | import ly.warp.sdk.db.WarplyDBHelper; |
50 | import ly.warp.sdk.io.callbacks.CallbackReceiver; | 51 | import ly.warp.sdk.io.callbacks.CallbackReceiver; |
... | @@ -85,6 +86,7 @@ public class WarplyManagerHelper { | ... | @@ -85,6 +86,7 @@ public class WarplyManagerHelper { |
85 | private static Consumer mConsumer = new Consumer(); | 86 | private static Consumer mConsumer = new Consumer(); |
86 | private static HashMap<String, CampaignList> mUniqueCampaignList = new HashMap<String, CampaignList>(); | 87 | private static HashMap<String, CampaignList> mUniqueCampaignList = new HashMap<String, CampaignList>(); |
87 | private static CouponList mCouponList = new CouponList(); | 88 | private static CouponList mCouponList = new CouponList(); |
89 | + private static CouponList mCouponListExpired = new CouponList(); | ||
88 | private static CouponsetsList mCouponsetsList = new CouponsetsList(); | 90 | private static CouponsetsList mCouponsetsList = new CouponsetsList(); |
89 | private static CustomerStateModel mCustomerStateModel = new CustomerStateModel(); | 91 | private static CustomerStateModel mCustomerStateModel = new CustomerStateModel(); |
90 | private static CampaignList mCampaignList = new CampaignList(); | 92 | private static CampaignList mCampaignList = new CampaignList(); |
... | @@ -423,75 +425,6 @@ public class WarplyManagerHelper { | ... | @@ -423,75 +425,6 @@ public class WarplyManagerHelper { |
423 | 425 | ||
424 | OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(EventService.class).build(); | 426 | OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(EventService.class).build(); |
425 | WorkManager.getInstance(Warply.getWarplyContext()).enqueue(mywork); | 427 | WorkManager.getInstance(Warply.getWarplyContext()).enqueue(mywork); |
426 | - | ||
427 | -// ContexualEventModel ccmsAdded = new ContexualEventModel(); | ||
428 | -// EventBus.getDefault().post(new WarplyEventBusManager(ccmsAdded)); | ||
429 | - | ||
430 | -// if (list == null || list.size() == 0) { | ||
431 | -// CampaignList tempGifts = new CampaignList(); | ||
432 | -// if (mUniqueCampaignList != null && mUniqueCampaignList.get("gifts_for_you") != null && mUniqueCampaignList.get("gifts_for_you").size() > 0) { | ||
433 | -// for (Campaign camp : mUniqueCampaignList.get("gifts_for_you")) { | ||
434 | -// try { | ||
435 | -// String key = WarpJSONParser.getJSONFromString(camp.getExtraFields()).keys().next(); | ||
436 | -// if (!TextUtils.isEmpty(key)) { | ||
437 | -// String value = WarpJSONParser.getJSONFromString(camp.getExtraFields()).optString(key); | ||
438 | -// if (!(key.equals("ccms_offer") && value.equals("true"))) { | ||
439 | -// tempGifts.add(camp); | ||
440 | -// } | ||
441 | -// } | ||
442 | -// } catch (Exception exception) { | ||
443 | -// tempGifts.add(camp); | ||
444 | -// } | ||
445 | -// } | ||
446 | -// | ||
447 | -// Log.v("Got L:{" + String.valueOf(mCampaignList.size()) + "}", " LOYALTY campaigns"); | ||
448 | -// Log.v("Got C:{0}", " CCMS campaigns"); | ||
449 | -// Log.v("Matched M:{0}", " CCMS campaigns"); | ||
450 | -// Log.v("=====================================", ""); | ||
451 | -// Log.v("TOTAL: Campaigns Sum=" + String.valueOf(mCampaignList.size()), " campaigns to display"); | ||
452 | -// mUniqueCampaignList.get("gifts_for_you").removeAll(tempGifts); | ||
453 | -// } | ||
454 | -// return; | ||
455 | -// } | ||
456 | -// | ||
457 | -// CampaignList tempGifts = new CampaignList(); | ||
458 | -// if (mUniqueCampaignList != null && mUniqueCampaignList.get("gifts_for_you") != null && mUniqueCampaignList.get("gifts_for_you").size() > 0) { | ||
459 | -// int ccmsCount = 0; | ||
460 | -// int loyaltyCount = 0; | ||
461 | -// for (Campaign camp : mUniqueCampaignList.get("gifts_for_you")) { | ||
462 | -// try { | ||
463 | -// String key = WarpJSONParser.getJSONFromString(camp.getExtraFields()).keys().next(); | ||
464 | -// if (!TextUtils.isEmpty(key) && key.equals("ccms_offer")) { | ||
465 | -// String value = WarpJSONParser.getJSONFromString(camp.getExtraFields()).optString(key); | ||
466 | -// if (!TextUtils.isEmpty(value) && value.equals("true")) { | ||
467 | -// for (LoyaltyContextualOfferModel ccms : list) { | ||
468 | -// if (ccms.getLoyaltyCampaignId().equals(camp.getSessionUUID())) { | ||
469 | -// tempGifts.add(camp); | ||
470 | -// ccmsCount++; | ||
471 | -// break; | ||
472 | -// } | ||
473 | -// } | ||
474 | -// } else { | ||
475 | -// tempGifts.add(camp); | ||
476 | -// loyaltyCount++; | ||
477 | -// } | ||
478 | -// } else { | ||
479 | -// tempGifts.add(camp); | ||
480 | -// loyaltyCount++; | ||
481 | -// } | ||
482 | -// } catch (Exception exception) { | ||
483 | -// tempGifts.add(camp); | ||
484 | -// loyaltyCount++; | ||
485 | -// } | ||
486 | -// } | ||
487 | -// | ||
488 | -// Log.v("Got L:{" + String.valueOf(mCampaignList.size()) + "}", " LOYALTY campaigns"); | ||
489 | -// Log.v("Got C:{" + String.valueOf(list.size()) + "}", " CCMS campaigns"); | ||
490 | -// Log.v("Matched M:{" + String.valueOf(ccmsCount) + "}", " CCMS campaigns"); | ||
491 | -// Log.v("=====================================", ""); | ||
492 | -// Log.v("TOTAL: Campaigns Sum=" + String.valueOf(mCampaignList.size() - loyaltyCount + ccmsCount), " campaigns to display"); | ||
493 | -// mUniqueCampaignList.get("gifts_for_you").retainAll(tempGifts); | ||
494 | -// } | ||
495 | } | 428 | } |
496 | 429 | ||
497 | /** | 430 | /** |
... | @@ -571,6 +504,18 @@ public class WarplyManagerHelper { | ... | @@ -571,6 +504,18 @@ public class WarplyManagerHelper { |
571 | } | 504 | } |
572 | } | 505 | } |
573 | 506 | ||
507 | + public static void openTelco(Context context, Campaign item) { | ||
508 | + for (LoyaltyContextualOfferModel ccms : mCCMSList) { | ||
509 | + if (ccms.getLoyaltyCampaignId().equals(item.getSessionUUID())) { | ||
510 | + Intent intent = new Intent(context, TelcoActivity.class); | ||
511 | + intent.putExtra("ccms", ccms); | ||
512 | + intent.putExtra("loyalty", (Serializable) item); | ||
513 | + context.startActivity(intent); | ||
514 | + break; | ||
515 | + } | ||
516 | + } | ||
517 | + } | ||
518 | + | ||
574 | /** | 519 | /** |
575 | * Save if customer is nonTelco and if he/she has accepted the consents, | 520 | * Save if customer is nonTelco and if he/she has accepted the consents, |
576 | * And his msisdn list | 521 | * And his msisdn list |
... | @@ -642,6 +587,15 @@ public class WarplyManagerHelper { | ... | @@ -642,6 +587,15 @@ public class WarplyManagerHelper { |
642 | return mCouponList; | 587 | return mCouponList; |
643 | } | 588 | } |
644 | 589 | ||
590 | + public static CouponList getCouponExpiredList() { | ||
591 | + if (mCouponListExpired != null && mCouponListExpired.size() > 0) { | ||
592 | + WarpUtils.log("GET_COUPON_EXPIRED_LIST size: " + String.valueOf(mCouponListExpired.size())); | ||
593 | + } else { | ||
594 | + WarpUtils.log("GET_COUPON_EXPIRED_LIST size: 0"); | ||
595 | + } | ||
596 | + return mCouponListExpired; | ||
597 | + } | ||
598 | + | ||
645 | public static void setConsumer(Consumer consumer) { | 599 | public static void setConsumer(Consumer consumer) { |
646 | mConsumer = consumer; | 600 | mConsumer = consumer; |
647 | } | 601 | } |
... | @@ -699,12 +653,14 @@ public class WarplyManagerHelper { | ... | @@ -699,12 +653,14 @@ public class WarplyManagerHelper { |
699 | public static void setCouponList(CouponList couponList) { | 653 | public static void setCouponList(CouponList couponList) { |
700 | LoyaltyBadgeModel badge = new LoyaltyBadgeModel(); | 654 | LoyaltyBadgeModel badge = new LoyaltyBadgeModel(); |
701 | CouponList cpnlist = new CouponList(); | 655 | CouponList cpnlist = new CouponList(); |
656 | + CouponList cpnlistExpired = new CouponList(); | ||
702 | float couponValue = 0.0f; | 657 | float couponValue = 0.0f; |
703 | int couponCount = 0; | 658 | int couponCount = 0; |
704 | for (Coupon coupon : couponList) { | 659 | for (Coupon coupon : couponList) { |
705 | if (coupon.getStatus() == 1) { | 660 | if (coupon.getStatus() == 1) { |
706 | cpnlist.add(coupon); | 661 | cpnlist.add(coupon); |
707 | } else if (coupon.getStatus() == 0) { | 662 | } else if (coupon.getStatus() == 0) { |
663 | + cpnlistExpired.add(coupon); | ||
708 | try { | 664 | try { |
709 | couponCount += 1; | 665 | couponCount += 1; |
710 | couponValue += Float.parseFloat(coupon.getDiscount()); | 666 | couponValue += Float.parseFloat(coupon.getDiscount()); |
... | @@ -718,6 +674,8 @@ public class WarplyManagerHelper { | ... | @@ -718,6 +674,8 @@ public class WarplyManagerHelper { |
718 | mLoyaltyBadge = badge; | 674 | mLoyaltyBadge = badge; |
719 | mCouponList.clear(); | 675 | mCouponList.clear(); |
720 | mCouponList.addAll(cpnlist); | 676 | mCouponList.addAll(cpnlist); |
677 | + mCouponListExpired.clear(); | ||
678 | + mCouponListExpired.addAll(cpnlistExpired); | ||
721 | } | 679 | } |
722 | 680 | ||
723 | public static LoyaltyBadgeModel getLoyaltyBadge() { | 681 | public static LoyaltyBadgeModel getLoyaltyBadge() { | ... | ... |
... | @@ -47,6 +47,7 @@ import ly.warp.sdk.io.callbacks.NewCampaignsHook; | ... | @@ -47,6 +47,7 @@ import ly.warp.sdk.io.callbacks.NewCampaignsHook; |
47 | import ly.warp.sdk.io.callbacks.PacingDetailsHook; | 47 | import ly.warp.sdk.io.callbacks.PacingDetailsHook; |
48 | import ly.warp.sdk.io.callbacks.PointsHook; | 48 | import ly.warp.sdk.io.callbacks.PointsHook; |
49 | import ly.warp.sdk.io.callbacks.ProductsHook; | 49 | import ly.warp.sdk.io.callbacks.ProductsHook; |
50 | +import ly.warp.sdk.io.callbacks.SharingHook; | ||
50 | import ly.warp.sdk.io.callbacks.TagsCategoriesHook; | 51 | import ly.warp.sdk.io.callbacks.TagsCategoriesHook; |
51 | import ly.warp.sdk.io.callbacks.TagsHook; | 52 | import ly.warp.sdk.io.callbacks.TagsHook; |
52 | import ly.warp.sdk.io.callbacks.TransactionsHook; | 53 | import ly.warp.sdk.io.callbacks.TransactionsHook; |
... | @@ -69,6 +70,7 @@ import ly.warp.sdk.io.models.NewCampaignList; | ... | @@ -69,6 +70,7 @@ import ly.warp.sdk.io.models.NewCampaignList; |
69 | import ly.warp.sdk.io.models.PacingDetails; | 70 | import ly.warp.sdk.io.models.PacingDetails; |
70 | import ly.warp.sdk.io.models.PointsList; | 71 | import ly.warp.sdk.io.models.PointsList; |
71 | import ly.warp.sdk.io.models.ProductList; | 72 | import ly.warp.sdk.io.models.ProductList; |
73 | +import ly.warp.sdk.io.models.SharingList; | ||
72 | import ly.warp.sdk.io.models.TagsCategoriesList; | 74 | import ly.warp.sdk.io.models.TagsCategoriesList; |
73 | import ly.warp.sdk.io.models.TagsList; | 75 | import ly.warp.sdk.io.models.TagsList; |
74 | import ly.warp.sdk.io.models.TransactionsList; | 76 | import ly.warp.sdk.io.models.TransactionsList; |
... | @@ -106,6 +108,7 @@ import ly.warp.sdk.io.request.WarplyRefreshTokenRequest; | ... | @@ -106,6 +108,7 @@ import ly.warp.sdk.io.request.WarplyRefreshTokenRequest; |
106 | import ly.warp.sdk.io.request.WarplyRegisterRequest; | 108 | import ly.warp.sdk.io.request.WarplyRegisterRequest; |
107 | import ly.warp.sdk.io.request.WarplyRequestOTPRequest; | 109 | import ly.warp.sdk.io.request.WarplyRequestOTPRequest; |
108 | import ly.warp.sdk.io.request.WarplyResetPasswordRequest; | 110 | import ly.warp.sdk.io.request.WarplyResetPasswordRequest; |
111 | +import ly.warp.sdk.io.request.WarplySharingHistoryRequest; | ||
109 | import ly.warp.sdk.io.request.WarplyTagsCategoriesRequest; | 112 | import ly.warp.sdk.io.request.WarplyTagsCategoriesRequest; |
110 | import ly.warp.sdk.io.request.WarplyTagsRequest; | 113 | import ly.warp.sdk.io.request.WarplyTagsRequest; |
111 | import ly.warp.sdk.io.request.WarplyTokenAuthorizeRequest; | 114 | import ly.warp.sdk.io.request.WarplyTokenAuthorizeRequest; |
... | @@ -2147,7 +2150,14 @@ public class WarplyManager { | ... | @@ -2147,7 +2150,14 @@ public class WarplyManager { |
2147 | } | 2150 | } |
2148 | } | 2151 | } |
2149 | WarplyManagerHelper.setCouponList(mCouponList); | 2152 | WarplyManagerHelper.setCouponList(mCouponList); |
2150 | - receiver.onSuccess(mCouponList); | 2153 | + |
2154 | + CouponList mActiveCouponList = new CouponList(); | ||
2155 | + for (Coupon coupon : mCouponList) { | ||
2156 | + if (coupon.getStatus() == 1) | ||
2157 | + mActiveCouponList.add(coupon); | ||
2158 | + } | ||
2159 | + | ||
2160 | + receiver.onSuccess(mActiveCouponList); | ||
2151 | } | 2161 | } |
2152 | 2162 | ||
2153 | @Override | 2163 | @Override |
... | @@ -2267,4 +2277,40 @@ public class WarplyManager { | ... | @@ -2267,4 +2277,40 @@ public class WarplyManager { |
2267 | } | 2277 | } |
2268 | }); | 2278 | }); |
2269 | } | 2279 | } |
2280 | + | ||
2281 | + public static void getSharingHistory(WarplySharingHistoryRequest request, final CallbackReceiver<SharingList> receiver) { | ||
2282 | + WarpUtils.log("************* WARPLY Sharing History Request ********************"); | ||
2283 | + WarpUtils.log("[WARP Trace] WARPLY Sharing History Request is active"); | ||
2284 | + WarpUtils.log("**************************************************"); | ||
2285 | + | ||
2286 | + Warply.postReceiveMicroappData(WarpConstants.MICROAPP_COUPONS, true, "context", request.toJson(), new SharingHook(new CallbackReceiver<SharingList>() { | ||
2287 | + @Override | ||
2288 | + public void onSuccess(SharingList response) { | ||
2289 | + receiver.onSuccess(response); | ||
2290 | + } | ||
2291 | + | ||
2292 | + @Override | ||
2293 | + public void onFailure(int errorCode) { | ||
2294 | + if (errorCode == 401) { | ||
2295 | + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() { | ||
2296 | + @Override | ||
2297 | + public void onSuccess(JSONObject result) { | ||
2298 | + int status = result.optInt("status", 2); | ||
2299 | + if (status == 1) | ||
2300 | + getSharingHistory(request, receiver); | ||
2301 | + else | ||
2302 | + receiver.onFailure(status); | ||
2303 | + } | ||
2304 | + | ||
2305 | + @Override | ||
2306 | + public void onFailure(int errorCode) { | ||
2307 | + receiver.onFailure(errorCode); | ||
2308 | + } | ||
2309 | + }); | ||
2310 | + } else | ||
2311 | + receiver.onFailure(errorCode); | ||
2312 | + } | ||
2313 | + }, | ||
2314 | + request.getSignature())); | ||
2315 | + } | ||
2270 | } | 2316 | } | ... | ... |
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.Date; | ||
15 | +import java.util.concurrent.TimeUnit; | ||
16 | + | ||
17 | +import io.reactivex.Observable; | ||
18 | +import io.reactivex.subjects.PublishSubject; | ||
19 | +import ly.warp.sdk.R; | ||
20 | +import ly.warp.sdk.io.models.Coupon; | ||
21 | +import ly.warp.sdk.io.models.CouponList; | ||
22 | + | ||
23 | +public class ExpiredCouponAdapter extends RecyclerView.Adapter<ExpiredCouponAdapter.ExpiredCouponViewHolder> { | ||
24 | + | ||
25 | + private Context mContext; | ||
26 | + private CouponList mCoupons; | ||
27 | + private final PublishSubject<Coupon> onClickSubject = PublishSubject.create(); | ||
28 | + | ||
29 | + public ExpiredCouponAdapter(Context mContext, CouponList campaignList) { | ||
30 | + this.mContext = mContext; | ||
31 | + this.mCoupons = campaignList; | ||
32 | + } | ||
33 | + | ||
34 | + public class ExpiredCouponViewHolder extends RecyclerView.ViewHolder { | ||
35 | + private TextView tvCouponTitle, tvCouponValue, tvCouponDate; | ||
36 | + | ||
37 | + public ExpiredCouponViewHolder(View view) { | ||
38 | + super(view); | ||
39 | + tvCouponTitle = view.findViewById(R.id.tv_expired_coupons_title); | ||
40 | + tvCouponValue = view.findViewById(R.id.tv_expired_coupons_value); | ||
41 | + tvCouponDate = view.findViewById(R.id.tv_expired_coupons_date); | ||
42 | + } | ||
43 | + } | ||
44 | + | ||
45 | + @Override | ||
46 | + public int getItemCount() { | ||
47 | + if (mCoupons == null) | ||
48 | + return 0; | ||
49 | + else | ||
50 | + return mCoupons.size(); | ||
51 | + } | ||
52 | + | ||
53 | + | ||
54 | + public Coupon getItem(int id) { | ||
55 | + return mCoupons.get(id); | ||
56 | + } | ||
57 | + | ||
58 | + public void updateData(CouponList couponList) { | ||
59 | + mCoupons.clear(); | ||
60 | + mCoupons.addAll(couponList); | ||
61 | + notifyDataSetChanged(); | ||
62 | + } | ||
63 | + | ||
64 | + | ||
65 | + @Override | ||
66 | + public ExpiredCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | ||
67 | + View itemView; | ||
68 | + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.expired_coupon_layout, parent, false); | ||
69 | + return new ExpiredCouponViewHolder(itemView); | ||
70 | + } | ||
71 | + | ||
72 | + @Override | ||
73 | + public void onBindViewHolder(final ExpiredCouponViewHolder holder, int position) { | ||
74 | + Coupon couponItem = mCoupons.get(position); | ||
75 | + | ||
76 | + if (couponItem != null) { | ||
77 | + holder.tvCouponTitle.setText(couponItem.getName()); | ||
78 | + | ||
79 | + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); | ||
80 | + Date newDate = new Date(); | ||
81 | + try { | ||
82 | + newDate = simpleDateFormat.parse(couponItem.getExpiration()); | ||
83 | + } catch (ParseException e) { | ||
84 | + e.printStackTrace(); | ||
85 | + } | ||
86 | + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); | ||
87 | + holder.tvCouponDate.setText(simpleDateFormat.format(newDate != null ? newDate : "")); | ||
88 | + | ||
89 | + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); | ||
90 | + holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem)); | ||
91 | + } | ||
92 | + } | ||
93 | + | ||
94 | + public Observable<Coupon> getPositionClicks() { | ||
95 | + return onClickSubject.cache(); | ||
96 | + } | ||
97 | + | ||
98 | + private long getDifferenceDays(Date d1, Date d2) { | ||
99 | + long diff = d2.getTime() - d1.getTime(); | ||
100 | + return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); | ||
101 | + } | ||
102 | +} |
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.TextView; | ||
8 | + | ||
9 | +import androidx.recyclerview.widget.RecyclerView; | ||
10 | + | ||
11 | +import org.json.JSONObject; | ||
12 | + | ||
13 | +import java.text.ParseException; | ||
14 | +import java.text.SimpleDateFormat; | ||
15 | +import java.util.Date; | ||
16 | +import java.util.concurrent.TimeUnit; | ||
17 | + | ||
18 | +import io.reactivex.Observable; | ||
19 | +import io.reactivex.subjects.PublishSubject; | ||
20 | +import ly.warp.sdk.R; | ||
21 | +import ly.warp.sdk.io.models.SharingCoupon; | ||
22 | +import ly.warp.sdk.io.models.SharingList; | ||
23 | +import ly.warp.sdk.utils.WarpJSONParser; | ||
24 | + | ||
25 | +public class SharedCouponAdapter extends RecyclerView.Adapter<SharedCouponAdapter.SharedCouponViewHolder> { | ||
26 | + | ||
27 | + private Context mContext; | ||
28 | + private SharingList mCoupons; | ||
29 | + private final PublishSubject<SharingCoupon> onClickSubject = PublishSubject.create(); | ||
30 | + | ||
31 | + public SharedCouponAdapter(Context mContext, SharingList campaignList) { | ||
32 | + this.mContext = mContext; | ||
33 | + this.mCoupons = campaignList; | ||
34 | + } | ||
35 | + | ||
36 | + public class SharedCouponViewHolder extends RecyclerView.ViewHolder { | ||
37 | + private TextView tvCouponTitle, tvCouponValue, tvCouponDate, tvCouponLabel, tvCouponPhone; | ||
38 | + | ||
39 | + public SharedCouponViewHolder(View view) { | ||
40 | + super(view); | ||
41 | + tvCouponTitle = view.findViewById(R.id.tv_shared_coupons_title); | ||
42 | + tvCouponValue = view.findViewById(R.id.tv_shared_coupons_value); | ||
43 | + tvCouponDate = view.findViewById(R.id.tv_shared_coupons_date); | ||
44 | + tvCouponLabel = view.findViewById(R.id.tv_shared_coupons_label); | ||
45 | + tvCouponPhone = view.findViewById(R.id.tv_shared_coupons_phone); | ||
46 | + } | ||
47 | + } | ||
48 | + | ||
49 | + @Override | ||
50 | + public int getItemCount() { | ||
51 | + if (mCoupons == null) | ||
52 | + return 0; | ||
53 | + else | ||
54 | + return mCoupons.size(); | ||
55 | + } | ||
56 | + | ||
57 | + | ||
58 | + public SharingCoupon getItem(int id) { | ||
59 | + return mCoupons.get(id); | ||
60 | + } | ||
61 | + | ||
62 | + public void updateData(SharingList couponList) { | ||
63 | + mCoupons.clear(); | ||
64 | + mCoupons.addAll(couponList); | ||
65 | + notifyDataSetChanged(); | ||
66 | + } | ||
67 | + | ||
68 | + | ||
69 | + @Override | ||
70 | + public SharedCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | ||
71 | + View itemView; | ||
72 | + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.shared_coupon_layout, parent, false); | ||
73 | + return new SharedCouponViewHolder(itemView); | ||
74 | + } | ||
75 | + | ||
76 | + @Override | ||
77 | + public void onBindViewHolder(final SharedCouponViewHolder holder, int position) { | ||
78 | + SharingCoupon couponItem = mCoupons.get(position); | ||
79 | + | ||
80 | + if (couponItem != null) { | ||
81 | + JSONObject extraFields = WarpJSONParser.getJSONFromString(couponItem.getTransactionMetadata()); | ||
82 | + | ||
83 | + holder.tvCouponTitle.setText(couponItem.getName()); | ||
84 | + | ||
85 | + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); | ||
86 | + Date newDate = new Date(); | ||
87 | + try { | ||
88 | + newDate = simpleDateFormat.parse(couponItem.getDate()); | ||
89 | + } catch (ParseException e) { | ||
90 | + e.printStackTrace(); | ||
91 | + } | ||
92 | + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); | ||
93 | + holder.tvCouponDate.setText(simpleDateFormat.format(newDate != null ? newDate : "")); | ||
94 | + | ||
95 | + if (couponItem.getSharingType().equals("sent")) { | ||
96 | + holder.tvCouponLabel.setText(R.string.cos_shared_coupon_receiver); | ||
97 | + if (extraFields != null && extraFields.has("receiver_msisdn")) { | ||
98 | + holder.tvCouponLabel.setText(extraFields.optString("receiver_msisdn")); | ||
99 | + } | ||
100 | + } else if (couponItem.getSharingType().equals("received")) { | ||
101 | + holder.tvCouponLabel.setText(R.string.cos_shared_coupon_sender); | ||
102 | + if (extraFields != null && extraFields.has("sender_msisdn")) { | ||
103 | + holder.tvCouponLabel.setText(extraFields.optString("sender_msisdn")); | ||
104 | + } | ||
105 | + } | ||
106 | + | ||
107 | + holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); | ||
108 | + holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem)); | ||
109 | + } | ||
110 | + } | ||
111 | + | ||
112 | + public Observable<SharingCoupon> getPositionClicks() { | ||
113 | + return onClickSubject.cache(); | ||
114 | + } | ||
115 | + | ||
116 | + private long getDifferenceDays(Date d1, Date d2) { | ||
117 | + long diff = d2.getTime() - d1.getTime(); | ||
118 | + return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); | ||
119 | + } | ||
120 | +} |
22.6 KB
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||
3 | + <item> | ||
4 | + <shape android:shape="rectangle"> | ||
5 | + <gradient | ||
6 | + android:angle="180" | ||
7 | + android:endColor="@color/cos_cyan2" | ||
8 | + android:startColor="@color/cos_green7" /> | ||
9 | + <corners android:radius="4dp" /> | ||
10 | + </shape> | ||
11 | + </item> | ||
12 | + | ||
13 | + <item | ||
14 | + android:bottom="1dp" | ||
15 | + android:end="1dp" | ||
16 | + android:start="1dp" | ||
17 | + android:top="1dp"> | ||
18 | + <shape android:shape="rectangle"> | ||
19 | + <solid android:color="@android:color/white" /> | ||
20 | + <corners android:radius="4dp" /> | ||
21 | + </shape> | ||
22 | + </item> | ||
23 | + | ||
24 | +</layer-list> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||
3 | + <item> | ||
4 | + <shape android:shape="rectangle"> | ||
5 | + <gradient | ||
6 | + android:angle="180" | ||
7 | + android:endColor="@color/cos_cyan2" | ||
8 | + android:startColor="@color/cos_green7" /> | ||
9 | + </shape> | ||
10 | + </item> | ||
11 | + | ||
12 | + <item android:bottom="2dp"> | ||
13 | + <shape android:shape="rectangle"> | ||
14 | + <solid android:color="@android:color/white" /> | ||
15 | + </shape> | ||
16 | + </item> | ||
17 | + | ||
18 | +</layer-list> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
3 | xmlns:app="http://schemas.android.com/apk/res-auto" | 3 | xmlns:app="http://schemas.android.com/apk/res-auto" |
4 | - android:id="@+id/cl_bill_payment" | 4 | + xmlns:tools="http://schemas.android.com/tools" |
5 | + android:id="@+id/rl_analysis_payment" | ||
5 | android:layout_width="match_parent" | 6 | android:layout_width="match_parent" |
6 | - android:layout_height="match_parent"> | 7 | + android:layout_height="match_parent" |
8 | + android:background="@android:color/white"> | ||
7 | 9 | ||
8 | <androidx.constraintlayout.widget.ConstraintLayout | 10 | <androidx.constraintlayout.widget.ConstraintLayout |
9 | - android:id="@+id/cl_bill_header" | 11 | + android:id="@+id/cl_loyalty_analysis_header" |
10 | android:layout_width="match_parent" | 12 | android:layout_width="match_parent" |
11 | - android:layout_height="80dp" | 13 | + android:layout_height="50dp" |
12 | - app:layout_constraintTop_toTopOf="parent" | ||
13 | android:background="@android:color/white"> | 14 | android:background="@android:color/white"> |
14 | 15 | ||
15 | <ImageView | 16 | <ImageView |
16 | android:id="@+id/iv_loyalty_analysis_close" | 17 | android:id="@+id/iv_loyalty_analysis_close" |
17 | - android:layout_width="21dp" | 18 | + android:layout_width="20dp" |
18 | android:layout_height="20dp" | 19 | android:layout_height="20dp" |
19 | - android:layout_marginStart="24dp" | 20 | + android:layout_marginStart="16dp" |
20 | - android:layout_marginTop="4dp" | ||
21 | android:src="@drawable/ic_back" | 21 | android:src="@drawable/ic_back" |
22 | + app:layout_constraintBottom_toBottomOf="parent" | ||
22 | app:layout_constraintStart_toStartOf="parent" | 23 | app:layout_constraintStart_toStartOf="parent" |
23 | - app:layout_constraintTop_toTopOf="parent" | 24 | + app:layout_constraintTop_toTopOf="parent" /> |
24 | - app:layout_constraintBottom_toBottomOf="parent"/> | ||
25 | 25 | ||
26 | <TextView | 26 | <TextView |
27 | - android:id="@+id/textView3" | 27 | + android:layout_width="wrap_content" |
28 | - android:layout_width="206dp" | 28 | + android:layout_height="wrap_content" |
29 | - android:layout_height="32dp" | 29 | + android:text="@string/cos_analysis" |
30 | - android:gravity="center" | ||
31 | - android:text="@string/cos_loyalty_analysis" | ||
32 | android:textColor="@color/grey" | 30 | android:textColor="@color/grey" |
33 | android:textSize="17sp" | 31 | android:textSize="17sp" |
34 | android:textStyle="bold" | 32 | android:textStyle="bold" |
... | @@ -37,4 +35,98 @@ | ... | @@ -37,4 +35,98 @@ |
37 | app:layout_constraintStart_toStartOf="parent" | 35 | app:layout_constraintStart_toStartOf="parent" |
38 | app:layout_constraintTop_toTopOf="parent" /> | 36 | app:layout_constraintTop_toTopOf="parent" /> |
39 | </androidx.constraintlayout.widget.ConstraintLayout> | 37 | </androidx.constraintlayout.widget.ConstraintLayout> |
38 | + | ||
39 | + <include | ||
40 | + android:id="@+id/cl_tab_coupon_analysis" | ||
41 | + layout="@layout/tab_coupon_analysis" | ||
42 | + android:layout_width="match_parent" | ||
43 | + android:layout_height="wrap_content" | ||
44 | + android:layout_below="@+id/cl_loyalty_analysis_header" | ||
45 | + android:layout_marginHorizontal="12dp" | ||
46 | + android:layout_marginVertical="24dp" /> | ||
47 | + | ||
48 | + <ImageView | ||
49 | + android:id="@+id/iv_gift_circle_logo" | ||
50 | + android:layout_width="140dp" | ||
51 | + android:layout_height="140dp" | ||
52 | + android:layout_below="@+id/cl_tab_coupon_analysis" | ||
53 | + android:layout_centerHorizontal="true" | ||
54 | + android:src="@drawable/ic_gift_circle" /> | ||
55 | + | ||
56 | + <RelativeLayout | ||
57 | + android:id="@+id/rl_expired_view" | ||
58 | + android:layout_width="match_parent" | ||
59 | + android:layout_height="wrap_content" | ||
60 | + android:layout_below="@+id/iv_gift_circle_logo" | ||
61 | + android:layout_marginTop="32dp" | ||
62 | + tools:visibility="gone"> | ||
63 | + | ||
64 | + <LinearLayout | ||
65 | + android:id="@+id/ll_expired_coupons_title" | ||
66 | + android:layout_width="wrap_content" | ||
67 | + android:layout_height="wrap_content" | ||
68 | + android:layout_marginHorizontal="12dp" | ||
69 | + android:background="@drawable/banner_border_gradient"> | ||
70 | + | ||
71 | + <TextView | ||
72 | + android:id="@+id/tv_expired_coupons_title" | ||
73 | + android:layout_width="wrap_content" | ||
74 | + android:layout_height="wrap_content" | ||
75 | + android:layout_marginHorizontal="32dp" | ||
76 | + android:layout_marginVertical="8dp" | ||
77 | + android:gravity="center" | ||
78 | + android:textColor="@color/cos_blue_dark" | ||
79 | + android:textSize="16sp" | ||
80 | + tools:text="@string/cos_deals_win_title" /> | ||
81 | + </LinearLayout> | ||
82 | + | ||
83 | + <TextView | ||
84 | + android:id="@+id/tv_expired_title" | ||
85 | + android:layout_width="wrap_content" | ||
86 | + android:layout_height="wrap_content" | ||
87 | + android:layout_below="@+id/ll_expired_coupons_title" | ||
88 | + android:layout_centerHorizontal="true" | ||
89 | + android:layout_marginTop="32dp" | ||
90 | + android:text="@string/cos_analysis2" | ||
91 | + android:textColor="@color/cos_blue_dark" | ||
92 | + android:textSize="16sp" | ||
93 | + android:textStyle="bold" /> | ||
94 | + | ||
95 | + <androidx.recyclerview.widget.RecyclerView | ||
96 | + android:id="@+id/rv_expired_coupons" | ||
97 | + android:layout_width="match_parent" | ||
98 | + android:layout_height="match_parent" | ||
99 | + android:layout_below="@+id/tv_expired_title" | ||
100 | + android:layout_marginHorizontal="8dp" | ||
101 | + android:layout_marginTop="24dp" | ||
102 | + android:orientation="vertical" /> | ||
103 | + </RelativeLayout> | ||
104 | + | ||
105 | + <RelativeLayout | ||
106 | + android:id="@+id/rl_shared_view" | ||
107 | + android:layout_width="match_parent" | ||
108 | + android:layout_height="wrap_content" | ||
109 | + android:layout_below="@+id/iv_gift_circle_logo" | ||
110 | + android:layout_marginTop="32dp" | ||
111 | + android:visibility="gone"> | ||
112 | + | ||
113 | + <TextView | ||
114 | + android:id="@+id/tv_shared_title" | ||
115 | + android:layout_width="wrap_content" | ||
116 | + android:layout_height="wrap_content" | ||
117 | + android:layout_centerHorizontal="true" | ||
118 | + android:text="@string/cos_analysis2" | ||
119 | + android:textColor="@color/cos_blue_dark" | ||
120 | + android:textSize="16sp" | ||
121 | + android:textStyle="bold" /> | ||
122 | + | ||
123 | + <androidx.recyclerview.widget.RecyclerView | ||
124 | + android:id="@+id/rv_shared_coupons" | ||
125 | + android:layout_width="match_parent" | ||
126 | + android:layout_height="match_parent" | ||
127 | + android:layout_below="@+id/tv_shared_title" | ||
128 | + android:layout_marginHorizontal="8dp" | ||
129 | + android:layout_marginTop="24dp" | ||
130 | + android:orientation="vertical" /> | ||
131 | + </RelativeLayout> | ||
40 | </RelativeLayout> | 132 | </RelativeLayout> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | + xmlns:tools="http://schemas.android.com/tools" | ||
4 | + android:layout_width="match_parent" | ||
5 | + android:layout_height="wrap_content" | ||
6 | + android:layout_marginBottom="32dp"> | ||
7 | + | ||
8 | + <TextView | ||
9 | + android:id="@+id/tv_expired_coupons_date" | ||
10 | + android:layout_width="wrap_content" | ||
11 | + android:layout_height="wrap_content" | ||
12 | + android:textColor="@color/cos_blue_dark2" | ||
13 | + android:textSize="13sp" | ||
14 | + android:textStyle="bold" | ||
15 | + tools:text="05/05/2022" /> | ||
16 | + | ||
17 | + <LinearLayout | ||
18 | + android:id="@+id/ll_expired_info_view" | ||
19 | + android:layout_width="match_parent" | ||
20 | + android:layout_height="wrap_content" | ||
21 | + android:layout_below="@+id/tv_expired_coupons_date" | ||
22 | + android:layout_marginTop="8dp" | ||
23 | + android:orientation="horizontal" | ||
24 | + android:weightSum="1"> | ||
25 | + | ||
26 | + <TextView | ||
27 | + android:id="@+id/tv_expired_coupons_title" | ||
28 | + android:layout_width="0dp" | ||
29 | + android:layout_height="wrap_content" | ||
30 | + android:layout_weight="0.5" | ||
31 | + android:maxLines="2" | ||
32 | + android:textColor="@color/cos_blue_dark2" | ||
33 | + android:textFontWeight="600" | ||
34 | + android:textSize="16sp" | ||
35 | + tools:text="Box" /> | ||
36 | + | ||
37 | + <TextView | ||
38 | + android:id="@+id/tv_expired_coupons_value" | ||
39 | + android:layout_width="wrap_content" | ||
40 | + android:layout_height="wrap_content" | ||
41 | + android:layout_weight="0.5" | ||
42 | + android:gravity="end" | ||
43 | + android:textColor="@color/cos_blue_dark2" | ||
44 | + android:textSize="16sp" | ||
45 | + android:textStyle="bold" | ||
46 | + tools:text="4$" /> | ||
47 | + </LinearLayout> | ||
48 | + | ||
49 | + <TextView | ||
50 | + android:id="@+id/tv_expired_coupons_label" | ||
51 | + android:layout_width="wrap_content" | ||
52 | + android:layout_height="wrap_content" | ||
53 | + android:layout_below="@+id/ll_expired_info_view" | ||
54 | + android:text="@string/cos_expired_coupon_label" | ||
55 | + android:textColor="@color/cos_light_grey2" | ||
56 | + android:textSize="16sp" /> | ||
57 | +</RelativeLayout> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | + xmlns:tools="http://schemas.android.com/tools" | ||
4 | + android:layout_width="match_parent" | ||
5 | + android:layout_height="wrap_content" | ||
6 | + android:layout_marginBottom="32dp"> | ||
7 | + | ||
8 | + <TextView | ||
9 | + android:id="@+id/tv_shared_coupons_date" | ||
10 | + android:layout_width="wrap_content" | ||
11 | + android:layout_height="wrap_content" | ||
12 | + android:textColor="@color/cos_blue_dark2" | ||
13 | + android:textSize="13sp" | ||
14 | + android:textStyle="bold" | ||
15 | + tools:text="05/05/2022" /> | ||
16 | + | ||
17 | + <LinearLayout | ||
18 | + android:id="@+id/ll_expired_info_view" | ||
19 | + android:layout_width="match_parent" | ||
20 | + android:layout_height="wrap_content" | ||
21 | + android:layout_below="@+id/tv_shared_coupons_date" | ||
22 | + android:layout_marginTop="8dp" | ||
23 | + android:orientation="horizontal" | ||
24 | + android:weightSum="1"> | ||
25 | + | ||
26 | + <TextView | ||
27 | + android:id="@+id/tv_shared_coupons_title" | ||
28 | + android:layout_width="0dp" | ||
29 | + android:layout_height="wrap_content" | ||
30 | + android:layout_weight="0.5" | ||
31 | + android:maxLines="2" | ||
32 | + android:textColor="@color/cos_blue_dark2" | ||
33 | + android:textFontWeight="600" | ||
34 | + android:textSize="16sp" | ||
35 | + tools:text="Box" /> | ||
36 | + | ||
37 | + <TextView | ||
38 | + android:id="@+id/tv_shared_coupons_value" | ||
39 | + android:layout_width="wrap_content" | ||
40 | + android:layout_height="wrap_content" | ||
41 | + android:layout_weight="0.5" | ||
42 | + android:gravity="end" | ||
43 | + android:textColor="@color/cos_blue_dark2" | ||
44 | + android:textSize="16sp" | ||
45 | + android:textStyle="bold" | ||
46 | + tools:text="4$" /> | ||
47 | + </LinearLayout> | ||
48 | + | ||
49 | + <TextView | ||
50 | + android:id="@+id/tv_shared_coupons_label" | ||
51 | + android:layout_width="wrap_content" | ||
52 | + android:layout_height="wrap_content" | ||
53 | + android:layout_below="@+id/ll_expired_info_view" | ||
54 | + android:textColor="@color/cos_light_grey2" | ||
55 | + android:textSize="16sp" | ||
56 | + tools:text="@string/cos_expired_coupon_label" /> | ||
57 | + | ||
58 | + <TextView | ||
59 | + android:id="@+id/tv_shared_coupons_phone" | ||
60 | + android:layout_width="wrap_content" | ||
61 | + android:layout_height="wrap_content" | ||
62 | + android:layout_below="@+id/tv_shared_coupons_label" | ||
63 | + android:textColor="@color/cos_light_grey2" | ||
64 | + android:textSize="16sp" | ||
65 | + tools:text="@string/cos_expired_coupon_label" /> | ||
66 | +</RelativeLayout> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | + android:layout_width="match_parent" | ||
4 | + android:layout_height="wrap_content" | ||
5 | + android:orientation="horizontal" | ||
6 | + android:weightSum="1"> | ||
7 | + | ||
8 | + <LinearLayout | ||
9 | + android:id="@+id/ll_tab_expired" | ||
10 | + android:layout_width="wrap_content" | ||
11 | + android:layout_height="32dp" | ||
12 | + android:layout_weight="0.2" | ||
13 | + android:background="@drawable/bottom_border_gradient2" | ||
14 | + android:gravity="center_horizontal"> | ||
15 | + | ||
16 | + <TextView | ||
17 | + android:id="@+id/tv_expired_tab" | ||
18 | + android:layout_width="wrap_content" | ||
19 | + android:layout_height="wrap_content" | ||
20 | + android:text="@string/cos_redeemed_coupons_tab" | ||
21 | + android:textColor="@color/cos_cyan4" | ||
22 | + android:textSize="14sp" | ||
23 | + android:textStyle="bold" /> | ||
24 | + </LinearLayout> | ||
25 | + | ||
26 | + <LinearLayout | ||
27 | + android:id="@+id/ll_tab_shared" | ||
28 | + android:layout_width="wrap_content" | ||
29 | + android:layout_height="32dp" | ||
30 | + android:layout_weight="0.2" | ||
31 | + android:background="@drawable/bottom_border_transparent" | ||
32 | + android:gravity="center_horizontal"> | ||
33 | + | ||
34 | + <TextView | ||
35 | + android:id="@+id/tv_shared_tab" | ||
36 | + android:layout_width="wrap_content" | ||
37 | + android:layout_height="wrap_content" | ||
38 | + android:text="@string/cos_shared_gifts_tab" | ||
39 | + android:textColor="@color/cos_dark_grey" | ||
40 | + android:textSize="14sp" /> | ||
41 | + </LinearLayout> | ||
42 | +</LinearLayout> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -50,4 +50,9 @@ | ... | @@ -50,4 +50,9 @@ |
50 | <color name="cos_grey_tr">#00000029</color> | 50 | <color name="cos_grey_tr">#00000029</color> |
51 | <color name="cos_grey7">#C0C7CD</color> | 51 | <color name="cos_grey7">#C0C7CD</color> |
52 | <color name="cos_grey8">#AEAEAE</color> | 52 | <color name="cos_grey8">#AEAEAE</color> |
53 | + <color name="cos_blue_dark">#3C4F5E</color> | ||
54 | + <color name="cos_blue_dark2">#435563</color> | ||
55 | + <color name="cos_light_grey2">#8B97A3</color> | ||
56 | + <color name="cos_cyan4">#2EAFB9</color> | ||
57 | + <color name="cos_dark_grey">#394A5B</color> | ||
53 | </resources> | 58 | </resources> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -54,7 +54,7 @@ | ... | @@ -54,7 +54,7 @@ |
54 | <string name="cos_monthly">Μηνιαία</string> | 54 | <string name="cos_monthly">Μηνιαία</string> |
55 | <string name="cos_six_months">6Μηνο</string> | 55 | <string name="cos_six_months">6Μηνο</string> |
56 | <string name="cos_annual">12Μηνο</string> | 56 | <string name="cos_annual">12Μηνο</string> |
57 | - <string name="cos_analysis2">Αναλυτικά</string> | 57 | + <string name="cos_analysis2">Αναλυτικά:</string> |
58 | <string name="euro">€</string> | 58 | <string name="euro">€</string> |
59 | <string name="cos_profile_questionnaire">Ερωτηματολόγιο</string> | 59 | <string name="cos_profile_questionnaire">Ερωτηματολόγιο</string> |
60 | <string name="cos_active_all_coupons">Ενεργά κουπόνια</string> | 60 | <string name="cos_active_all_coupons">Ενεργά κουπόνια</string> |
... | @@ -108,6 +108,11 @@ | ... | @@ -108,6 +108,11 @@ |
108 | <string name="cos_dlg_activate_telco_subtitle">Θέλετε να γίνει ενεργοποίηση στο Κινητό μου;</string> | 108 | <string name="cos_dlg_activate_telco_subtitle">Θέλετε να γίνει ενεργοποίηση στο Κινητό μου;</string> |
109 | <string name="cos_dlg_activate_success_title">Το αίτημά σου ολοκληρώθηκε επιτυχώς!</string> | 109 | <string name="cos_dlg_activate_success_title">Το αίτημά σου ολοκληρώθηκε επιτυχώς!</string> |
110 | <string name="cos_dlg_activate_success_subtitle">Θα ενημερωθείς άμεσα για την ενεργοποίηση του πακέτου σου.</string> | 110 | <string name="cos_dlg_activate_success_subtitle">Θα ενημερωθείς άμεσα για την ενεργοποίηση του πακέτου σου.</string> |
111 | + <string name="cos_expired_coupon_label">Εκπτωτικό κουπόνι</string> | ||
112 | + <string name="cos_redeemed_coupons_tab">Εξαργυρωμένα</string> | ||
113 | + <string name="cos_shared_gifts_tab">Μοιρασμένα δώρα</string> | ||
114 | + <string name="cos_shared_coupon_receiver">Εκπτωτικό κουπόνι προς</string> | ||
115 | + <string name="cos_shared_coupon_sender">Έκπτωτικό κουπόνι από</string> | ||
111 | 116 | ||
112 | <string-array name="coupons_array"> | 117 | <string-array name="coupons_array"> |
113 | <item>Κουπόνια</item> | 118 | <item>Κουπόνια</item> | ... | ... |
-
Please register or login to post a comment