Panagiotis Triantafyllou

sm pass fixes and new gradle

1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="CompilerConfiguration"> 3 <component name="CompilerConfiguration">
4 - <bytecodeTargetLevel target="17" /> 4 + <bytecodeTargetLevel target="21" />
5 </component> 5 </component>
6 </project> 6 </project>
...\ No newline at end of file ...\ No newline at end of file
......
1 +<?xml version="1.0" encoding="UTF-8"?>
1 <project version="4"> 2 <project version="4">
2 <component name="DesignSurface"> 3 <component name="DesignSurface">
3 <option name="filePathToZoomLevelMap"> 4 <option name="filePathToZoomLevelMap">
...@@ -183,7 +184,7 @@ ...@@ -183,7 +184,7 @@
183 </map> 184 </map>
184 </option> 185 </option>
185 </component> 186 </component>
186 - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> 187 + <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
187 <output url="file://$PROJECT_DIR$/build/classes" /> 188 <output url="file://$PROJECT_DIR$/build/classes" />
188 </component> 189 </component>
189 <component name="ProjectType"> 190 <component name="ProjectType">
......
...@@ -47,6 +47,14 @@ android { ...@@ -47,6 +47,14 @@ android {
47 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 47 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
48 } 48 }
49 } 49 }
50 +
51 + namespace "warp.ly.android_sdk"
52 +
53 + packaging {
54 + jniLibs {
55 + useLegacyPackaging true
56 + }
57 + }
50 } 58 }
51 59
52 dependencies { 60 dependencies {
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 android:name="warp.ly.android_sdk.WarplyAndroidSDKApplication" 16 android:name="warp.ly.android_sdk.WarplyAndroidSDKApplication"
17 android:allowBackup="false" 17 android:allowBackup="false"
18 android:exported="true" 18 android:exported="true"
19 - android:extractNativeLibs="true"
20 android:fullBackupContent="false" 19 android:fullBackupContent="false"
21 android:hardwareAccelerated="true" 20 android:hardwareAccelerated="true"
22 android:icon="@mipmap/ic_launcher" 21 android:icon="@mipmap/ic_launcher"
......
...@@ -8,9 +8,9 @@ buildscript { ...@@ -8,9 +8,9 @@ buildscript {
8 maven { url 'https://plugins.gradle.org/m2/' } 8 maven { url 'https://plugins.gradle.org/m2/' }
9 } 9 }
10 dependencies { 10 dependencies {
11 - classpath 'com.android.tools.build:gradle:7.1.3' 11 + classpath 'com.android.tools.build:gradle:8.8.0'
12 classpath 'com.google.gms:google-services:4.3.10' 12 classpath 'com.google.gms:google-services:4.3.10'
13 - classpath 'com.huawei.agconnect:agcp:1.7.2.300' 13 + classpath 'com.huawei.agconnect:agcp:1.9.1.300'
14 classpath 'io.github.gradle-nexus:publish-plugin:1.1.0' 14 classpath 'io.github.gradle-nexus:publish-plugin:1.1.0'
15 15
16 // NOTE: Do not place your application dependencies here; they belong 16 // NOTE: Do not place your application dependencies here; they belong
......
1 #Fri Jul 26 17:08:44 EEST 2024 1 #Fri Jul 26 17:08:44 EEST 2024
2 distributionBase=GRADLE_USER_HOME 2 distributionBase=GRADLE_USER_HOME
3 distributionPath=wrapper/dists 3 distributionPath=wrapper/dists
4 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 4 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
5 zipStoreBase=GRADLE_USER_HOME 5 zipStoreBase=GRADLE_USER_HOME
6 zipStorePath=wrapper/dists 6 zipStorePath=wrapper/dists
......
...@@ -32,12 +32,12 @@ afterEvaluate { ...@@ -32,12 +32,12 @@ afterEvaluate {
32 32
33 // Two artifacts, the `aar` (or `jar`) and the sources 33 // Two artifacts, the `aar` (or `jar`) and the sources
34 if (project.plugins.findPlugin("com.android.library")) { 34 if (project.plugins.findPlugin("com.android.library")) {
35 - from components.release 35 + from(project.components.findByName("release"))
36 } else { 36 } else {
37 from components.java 37 from components.java
38 } 38 }
39 39
40 - artifact androidSourcesJar 40 + // Sources are now handled by the android block's singleVariant
41 // artifact javadocJar 41 // artifact javadocJar
42 42
43 // Mostly self-explanatory metadata 43 // Mostly self-explanatory metadata
......
1 apply plugin: 'com.android.library' 1 apply plugin: 'com.android.library'
2 +apply plugin: 'maven-publish'
3 +
4 +android.buildFeatures.buildConfig = true
2 5
3 ext { 6 ext {
4 PUBLISH_GROUP_ID = 'ly.warp' 7 PUBLISH_GROUP_ID = 'ly.warp'
5 - PUBLISH_VERSION = '4.5.5.4r43' 8 + PUBLISH_VERSION = '4.5.5.4r47'
6 PUBLISH_ARTIFACT_ID = 'warply-android-sdk' 9 PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
7 } 10 }
8 11
...@@ -14,6 +17,14 @@ android { ...@@ -14,6 +17,14 @@ android {
14 17
15 useLibrary 'org.apache.http.legacy' 18 useLibrary 'org.apache.http.legacy'
16 19
20 + publishing {
21 + // Configure all components to be published
22 + singleVariant('release') {
23 + // Publish the release variant with sources
24 + withSourcesJar()
25 + }
26 + }
27 +
17 defaultConfig { 28 defaultConfig {
18 minSdkVersion 23 29 minSdkVersion 23
19 targetSdkVersion 34 30 targetSdkVersion 34
...@@ -44,6 +55,8 @@ android { ...@@ -44,6 +55,8 @@ android {
44 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 55 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
45 } 56 }
46 } 57 }
58 +
59 + namespace "ly.warp.sdk"
47 } 60 }
48 61
49 dependencies { 62 dependencies {
...@@ -114,33 +127,17 @@ dependencies { ...@@ -114,33 +127,17 @@ dependencies {
114 } 127 }
115 128
116 // In every export please update the version number 129 // In every export please update the version number
117 -task deleteJarLibrary(type: Delete) { 130 +tasks.register('deleteJarLibrary', Delete) {
118 delete 'jar/warply_android_sdk_v4.5.0.jar' 131 delete 'jar/warply_android_sdk_v4.5.0.jar'
119 } 132 }
120 133
121 -//from('build/intermediates/compile_library_classes/release/') 134 +tasks.register('createJarLibrary', Jar) {
122 - 135 + dependsOn('assembleRelease')
123 -//Old version 136 + from(fileTree('build/intermediates/aar/release/'))
124 -// Gradle Tasks -> warply_android_sdk -> Tasks -> other -> createJarLibrary 137 + destinationDirectory = file('jar')
125 -//task createJarLibrary(type: Copy) { 138 + archiveFileName = "warply_android_sdk_v${PUBLISH_VERSION}.jar"
126 -// from fileTree('build/intermediates/bundles/release/')
127 -// into('jar/')
128 -// include('classes.jar')
129 -// rename('classes.jar', 'warply_android_sdk_v4.4.2.jar')
130 -//}
131 -
132 -// New version
133 -// Gradle -> warplyDemo -> libraries -> warply_android_sdk -> Run Configurations -> assembleRelease
134 -// When finished it copies the .jar into
135 -// warply_android_sdk -> build -> intermediates -> full_jar -> release/debug -> full.jar
136 -
137 -// 24 - Jan - 2022
138 -// Gradle -> warplyDemo -> libraries -> warply_android_sdk -> Tasks -> build -> build
139 -// When finished it copies the .aar into
140 -// warply_android_sdk -> build -> outputs -> aar -> warply_android_sdk-release.aar
141 -
142 -task createJarLibrary(type: Jar, dependsOn: 'assembleRelease') {
143 - from fileTree('build/intermediates/bundles/release/')
144 } 139 }
145 140
146 -createJarLibrary.dependsOn(deleteJarLibrary, build) 141 +tasks.named('createJarLibrary') {
142 + dependsOn('deleteJarLibrary', 'build')
143 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -27,7 +27,6 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver; ...@@ -27,7 +27,6 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver;
27 import ly.warp.sdk.io.models.Campaign; 27 import ly.warp.sdk.io.models.Campaign;
28 import ly.warp.sdk.io.models.CouponList; 28 import ly.warp.sdk.io.models.CouponList;
29 import ly.warp.sdk.io.models.MarketPassDetailsModel; 29 import ly.warp.sdk.io.models.MarketPassDetailsModel;
30 -import ly.warp.sdk.io.models.UnifiedCoupon;
31 import ly.warp.sdk.utils.managers.WarplyManager; 30 import ly.warp.sdk.utils.managers.WarplyManager;
32 31
33 public class BaseFragmentActivity extends FragmentActivity implements NavigationBarView.OnItemSelectedListener { 32 public class BaseFragmentActivity extends FragmentActivity implements NavigationBarView.OnItemSelectedListener {
...@@ -58,7 +57,6 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation ...@@ -58,7 +57,6 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation
58 if (WarplyDBHelper.getInstance(this).isTableNotEmpty("auth")) { 57 if (WarplyDBHelper.getInstance(this).isTableNotEmpty("auth")) {
59 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver); 58 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver);
60 WarplyManager.getCampaigns(mCampaignsCallback); 59 WarplyManager.getCampaigns(mCampaignsCallback);
61 - WarplyManager.getUnifiedCouponsDeals(mUnifiedCallback);
62 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback); 60 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback);
63 } 61 }
64 62
...@@ -182,18 +180,6 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation ...@@ -182,18 +180,6 @@ public class BaseFragmentActivity extends FragmentActivity implements Navigation
182 } 180 }
183 }; 181 };
184 182
185 - private final CallbackReceiver<ArrayList<UnifiedCoupon>> mUnifiedCallback = new CallbackReceiver<ArrayList<UnifiedCoupon>>() {
186 - @Override
187 - public void onSuccess(ArrayList<UnifiedCoupon> result) {
188 - Toast.makeText(BaseFragmentActivity.this, "Unified Coupons Success " + String.valueOf(result.size()), Toast.LENGTH_SHORT).show();
189 - }
190 -
191 - @Override
192 - public void onFailure(int errorCode) {
193 - Toast.makeText(BaseFragmentActivity.this, "Unified Coupons Error", Toast.LENGTH_SHORT).show();
194 - }
195 - };
196 -
197 private final CallbackReceiver<MarketPassDetailsModel> mMarketPassDetailsCallback = new CallbackReceiver<MarketPassDetailsModel>() { 183 private final CallbackReceiver<MarketPassDetailsModel> mMarketPassDetailsCallback = new CallbackReceiver<MarketPassDetailsModel>() {
198 @Override 184 @Override
199 public void onSuccess(MarketPassDetailsModel result) { 185 public void onSuccess(MarketPassDetailsModel result) {
......
...@@ -291,10 +291,9 @@ public class LoyaltyHistoryActivity extends Activity implements View.OnClickList ...@@ -291,10 +291,9 @@ public class LoyaltyHistoryActivity extends Activity implements View.OnClickList
291 /** First Banner */ 291 /** First Banner */
292 292
293 /** Second Expandable Banner */ 293 /** Second Expandable Banner */
294 - if (WarplyManagerHelper.getMarketCoupons() != null && WarplyManagerHelper.getMarketCoupons().size() > 0) { 294 + if (WarplyManagerHelper.getCouponRedeemedList() != null && !WarplyManagerHelper.getCouponRedeemedList().isEmpty()) {
295 countValue = 0.0f; 295 countValue = 0.0f;
296 296
297 - if (WarplyManagerHelper.getCouponRedeemedList().size() > 0) {
298 for (Coupon cou : WarplyManagerHelper.getCouponRedeemedList()) { 297 for (Coupon cou : WarplyManagerHelper.getCouponRedeemedList()) {
299 if (cou.getCouponsetDetails().getCouponsetType().equals("supermarket")) { 298 if (cou.getCouponsetDetails().getCouponsetType().equals("supermarket")) {
300 countValue += Float.parseFloat(cou.getDiscount()); 299 countValue += Float.parseFloat(cou.getDiscount());
...@@ -307,7 +306,6 @@ public class LoyaltyHistoryActivity extends Activity implements View.OnClickList ...@@ -307,7 +306,6 @@ public class LoyaltyHistoryActivity extends Activity implements View.OnClickList
307 cou.setFinal_price(cou.getCouponsetDetails().getFinal_price()); 306 cou.setFinal_price(cou.getCouponsetDetails().getFinal_price());
308 } 307 }
309 } 308 }
310 - }
311 309
312 mFavValue += countValue; 310 mFavValue += countValue;
313 String badgeValue = String.format(Locale.GERMAN, "%.02f", countValue); 311 String badgeValue = String.format(Locale.GERMAN, "%.02f", countValue);
......
...@@ -39,12 +39,10 @@ import ly.warp.sdk.io.models.CustomTypefaceSpan; ...@@ -39,12 +39,10 @@ import ly.warp.sdk.io.models.CustomTypefaceSpan;
39 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel; 39 import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel;
40 import ly.warp.sdk.io.models.SharingCoupon; 40 import ly.warp.sdk.io.models.SharingCoupon;
41 import ly.warp.sdk.io.models.SharingList; 41 import ly.warp.sdk.io.models.SharingList;
42 -import ly.warp.sdk.io.request.WarplySharingHistoryRequest;
43 import ly.warp.sdk.utils.WarpUtils; 42 import ly.warp.sdk.utils.WarpUtils;
44 import ly.warp.sdk.utils.WarplyManagerHelper; 43 import ly.warp.sdk.utils.WarplyManagerHelper;
45 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager; 44 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
46 import ly.warp.sdk.utils.managers.WarplyEventBusManager; 45 import ly.warp.sdk.utils.managers.WarplyEventBusManager;
47 -import ly.warp.sdk.utils.managers.WarplyManager;
48 import ly.warp.sdk.views.adapters.ExpiredCouponAdapter; 46 import ly.warp.sdk.views.adapters.ExpiredCouponAdapter;
49 import ly.warp.sdk.views.adapters.SharedCouponAdapter; 47 import ly.warp.sdk.views.adapters.SharedCouponAdapter;
50 48
...@@ -155,28 +153,16 @@ public class LoyaltyMarketAnalysisActivity extends Activity implements View.OnCl ...@@ -155,28 +153,16 @@ public class LoyaltyMarketAnalysisActivity extends Activity implements View.OnCl
155 } 153 }
156 }); 154 });
157 155
158 - if (WarplyManagerHelper.getMarketCoupons() != null && WarplyManagerHelper.getMarketCoupons().size() > 0) { 156 + if (WarplyManagerHelper.getCouponRedeemedList() != null && !WarplyManagerHelper.getCouponRedeemedList().isEmpty()) {
159 final ExecutorService executor = Executors.newFixedThreadPool(1); 157 final ExecutorService executor = Executors.newFixedThreadPool(1);
160 executor.submit(() -> { 158 executor.submit(() -> {
161 -// for (UnifiedCoupon unicoupon : WarplyManagerHelper.getMarketCoupons()) {
162 -// if (unicoupon.getCoupons() != null && unicoupon.getCoupons().size() > 0) {
163 -// for (Coupon inncoupon : unicoupon.getCoupons()) {
164 -// if (inncoupon.getStatus() == 0) {
165 -// countValue += Float.valueOf(inncoupon.getDiscount());
166 -// mExpiredMarketCoupons.add(inncoupon);
167 -// }
168 -// }
169 -// }
170 -// }
171 -
172 - if (WarplyManagerHelper.getCouponRedeemedList().size() > 0) {
173 for (Coupon cou : WarplyManagerHelper.getCouponRedeemedList()) { 159 for (Coupon cou : WarplyManagerHelper.getCouponRedeemedList()) {
174 if (cou.getCouponsetDetails().getCouponsetType().equals("supermarket")) { 160 if (cou.getCouponsetDetails().getCouponsetType().equals("supermarket")) {
175 countValue += Float.valueOf(cou.getDiscount()); 161 countValue += Float.valueOf(cou.getDiscount());
176 mExpiredMarketCoupons.add(cou); 162 mExpiredMarketCoupons.add(cou);
177 } 163 }
178 } 164 }
179 - } 165 +
180 Collections.sort(mExpiredMarketCoupons, (coupon1, coupon2) -> coupon2.getChangesDates().optString("redeemed").compareTo(coupon1.getChangesDates().optString("redeemed"))); 166 Collections.sort(mExpiredMarketCoupons, (coupon1, coupon2) -> coupon2.getChangesDates().optString("redeemed").compareTo(coupon1.getChangesDates().optString("redeemed")));
181 new Handler(Looper.getMainLooper()).post(this::initViews); 167 new Handler(Looper.getMainLooper()).post(this::initViews);
182 executor.shutdownNow(); 168 executor.shutdownNow();
......
...@@ -28,7 +28,6 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver; ...@@ -28,7 +28,6 @@ import ly.warp.sdk.io.callbacks.CallbackReceiver;
28 import ly.warp.sdk.io.models.Campaign; 28 import ly.warp.sdk.io.models.Campaign;
29 import ly.warp.sdk.io.models.CouponList; 29 import ly.warp.sdk.io.models.CouponList;
30 import ly.warp.sdk.io.models.MarketPassDetailsModel; 30 import ly.warp.sdk.io.models.MarketPassDetailsModel;
31 -import ly.warp.sdk.io.models.UnifiedCoupon;
32 import ly.warp.sdk.utils.WarpJSONParser; 31 import ly.warp.sdk.utils.WarpJSONParser;
33 import ly.warp.sdk.utils.WarplyManagerHelper; 32 import ly.warp.sdk.utils.WarplyManagerHelper;
34 import ly.warp.sdk.utils.managers.WarplyManager; 33 import ly.warp.sdk.utils.managers.WarplyManager;
...@@ -128,7 +127,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip ...@@ -128,7 +127,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip
128 if (WarplyDBHelper.getInstance(getActivity()).isTableNotEmpty("auth")) { 127 if (WarplyDBHelper.getInstance(getActivity()).isTableNotEmpty("auth")) {
129 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver); 128 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver);
130 WarplyManager.getCampaigns(mCampaignsCallback); 129 WarplyManager.getCampaigns(mCampaignsCallback);
131 - WarplyManager.getUnifiedCouponsDeals(mUnifiedCallback);
132 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback); 130 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback);
133 mSwipeRefresh.setRefreshing(false); 131 mSwipeRefresh.setRefreshing(false);
134 } else { 132 } else {
...@@ -191,18 +189,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip ...@@ -191,18 +189,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip
191 } 189 }
192 }; 190 };
193 191
194 - private final CallbackReceiver<ArrayList<UnifiedCoupon>> mUnifiedCallback = new CallbackReceiver<ArrayList<UnifiedCoupon>>() {
195 - @Override
196 - public void onSuccess(ArrayList<UnifiedCoupon> result) {
197 - Toast.makeText(getActivity(), "Unified Coupons Success " + String.valueOf(result.size()), Toast.LENGTH_SHORT).show();
198 - }
199 -
200 - @Override
201 - public void onFailure(int errorCode) {
202 - Toast.makeText(getActivity(), "Unified Coupons Error", Toast.LENGTH_SHORT).show();
203 - }
204 - };
205 -
206 private final CallbackReceiver<JSONObject> mLogoutReceiver = new CallbackReceiver<JSONObject>() { 192 private final CallbackReceiver<JSONObject> mLogoutReceiver = new CallbackReceiver<JSONObject>() {
207 @Override 193 @Override
208 public void onSuccess(JSONObject result) { 194 public void onSuccess(JSONObject result) {
...@@ -240,7 +226,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip ...@@ -240,7 +226,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener, Swip
240 226
241 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver); 227 WarplyManager.getUserCouponsWithCouponsets(mUserCouponsReceiver);
242 WarplyManager.getCampaigns(mCampaignsCallback); 228 WarplyManager.getCampaigns(mCampaignsCallback);
243 - WarplyManager.getUnifiedCouponsDeals(mUnifiedCallback);
244 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback); 229 WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback);
245 } 230 }
246 231
......
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
191 <string name="cos_market_ab_subtitle">1. Eνεργοποίησε τον κωδικό στην κάρτα ΑΒ PLUS στο kiosk του καταστήματος ή μέσω eshop / app στην ενοτητα στην ενότητα Συνεργασίες – SUPERMARKET DEALS.\n\n2. Κάνε τις αγορές σου και κέρδισε απευθείας έκπτωση με χρήση της AB PLUS από τα διαθέσιμα κουπόνια.</string> 191 <string name="cos_market_ab_subtitle">1. Eνεργοποίησε τον κωδικό στην κάρτα ΑΒ PLUS στο kiosk του καταστήματος ή μέσω eshop / app στην ενοτητα στην ενότητα Συνεργασίες – SUPERMARKET DEALS.\n\n2. Κάνε τις αγορές σου και κέρδισε απευθείας έκπτωση με χρήση της AB PLUS από τα διαθέσιμα κουπόνια.</string>
192 <string name="cos_market_pass_title">SUPERMARKET DEALS CARD</string> 192 <string name="cos_market_pass_title">SUPERMARKET DEALS CARD</string>
193 <string name="cos_market_pass_subtitle">Χρησιμοποίησε τον κωδικό σου και κέρδισε έκπτωση στις αγορές σου!</string> 193 <string name="cos_market_pass_subtitle">Χρησιμοποίησε τον κωδικό σου και κέρδισε έκπτωση στις αγορές σου!</string>
194 - <string name="cos_market_pass_return">Επιστροφή στο Supermarket Deals</string> 194 + <string name="cos_market_pass_return">Επιστροφή</string>
195 <string name="cos_market_pass_coupons_title">Έχεις κουπόνια συνολικής αξίας %1$s€</string> 195 <string name="cos_market_pass_coupons_title">Έχεις κουπόνια συνολικής αξίας %1$s€</string>
196 <string name="cos_market_subtitle">Δημιούργησε το δικό σου ενιαίο κουπόνι προσφορών, και εξαργύρωσέ το στα supermarket της επιλογής σου γρήγορα και εύκολα με ένα μόνο κωδικό κουπονιού!</string> 196 <string name="cos_market_subtitle">Δημιούργησε το δικό σου ενιαίο κουπόνι προσφορών, και εξαργύρωσέ το στα supermarket της επιλογής σου γρήγορα και εύκολα με ένα μόνο κωδικό κουπονιού!</string>
197 <string name="cos_market_close">Τέλος</string> 197 <string name="cos_market_close">Τέλος</string>
......