Showing
23 changed files
with
847 additions
and
2 deletions
| ... | @@ -104,6 +104,9 @@ dependencies { | ... | @@ -104,6 +104,9 @@ dependencies { |
| 104 | //------------------------------ Retrofit -----------------------------// | 104 | //------------------------------ Retrofit -----------------------------// |
| 105 | implementation 'com.squareup.retrofit2:retrofit:2.9.0' | 105 | implementation 'com.squareup.retrofit2:retrofit:2.9.0' |
| 106 | implementation 'com.squareup.retrofit2:converter-gson:2.9.0' | 106 | implementation 'com.squareup.retrofit2:converter-gson:2.9.0' |
| 107 | + | ||
| 108 | + //------------------------------ Expandable Layout -----------------------------// | ||
| 109 | + api 'net.cachapa.expandablelayout:expandablelayout:2.9.2' | ||
| 107 | } | 110 | } |
| 108 | 111 | ||
| 109 | // In every export please update the version number | 112 | // In every export please update the version number | ... | ... |
| ... | @@ -48,6 +48,18 @@ | ... | @@ -48,6 +48,18 @@ |
| 48 | android:theme="@style/SDKAppTheme" /> | 48 | android:theme="@style/SDKAppTheme" /> |
| 49 | 49 | ||
| 50 | <activity | 50 | <activity |
| 51 | + android:name="ly.warp.sdk.activities.LoyaltyMarketAnalysisActivity" | ||
| 52 | + android:exported="false" | ||
| 53 | + android:screenOrientation="portrait" | ||
| 54 | + android:theme="@style/SDKAppTheme" /> | ||
| 55 | + | ||
| 56 | + <activity | ||
| 57 | + android:name="ly.warp.sdk.activities.UnifiedCouponInfoActivity" | ||
| 58 | + android:exported="false" | ||
| 59 | + android:screenOrientation="portrait" | ||
| 60 | + android:theme="@style/SDKAppTheme" /> | ||
| 61 | + | ||
| 62 | + <activity | ||
| 51 | android:name="ly.warp.sdk.activities.ActiveCouponsActivity" | 63 | android:name="ly.warp.sdk.activities.ActiveCouponsActivity" |
| 52 | android:exported="false" | 64 | android:exported="false" |
| 53 | android:screenOrientation="portrait" | 65 | android:screenOrientation="portrait" | ... | ... |
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
| 1 | +/* | ||
| 2 | + * Copyright 2010-2013 Warply Ltd. All rights reserved. | ||
| 3 | + * | ||
| 4 | + * Redistribution and use in source and binary forms, without modification, are | ||
| 5 | + * permitted provided that the following conditions are met: | ||
| 6 | + * | ||
| 7 | + * 1. Redistributions of source code must retain the above copyright notice, | ||
| 8 | + * this list of conditions and the following disclaimer. | ||
| 9 | + * | ||
| 10 | + * 2. Redistributions in binary form must reproduce the above copyright notice, | ||
| 11 | + * this list of conditions and the following disclaimer in the documentation | ||
| 12 | + * and/or other materials provided with the distribution. | ||
| 13 | + * | ||
| 14 | + * THIS SOFTWARE IS PROVIDED BY THE WARPLY LTD ``AS IS'' AND ANY EXPRESS OR | ||
| 15 | + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
| 16 | + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | ||
| 17 | + * EVENT SHALL WARPLY LTD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| 18 | + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| 19 | + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||
| 20 | + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
| 21 | + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
| 22 | + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
| 23 | + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 24 | + */ | ||
| 25 | + | ||
| 26 | +package ly.warp.sdk.io.models; | ||
| 27 | + | ||
| 28 | +import android.os.Parcel; | ||
| 29 | +import android.os.Parcelable; | ||
| 30 | + | ||
| 31 | +import org.json.JSONArray; | ||
| 32 | +import org.json.JSONException; | ||
| 33 | +import org.json.JSONObject; | ||
| 34 | + | ||
| 35 | +import java.io.Serializable; | ||
| 36 | +import java.util.ArrayList; | ||
| 37 | +import java.util.Date; | ||
| 38 | + | ||
| 39 | +import ly.warp.sdk.utils.WarpUtils; | ||
| 40 | +import ly.warp.sdk.utils.constants.WarpConstants; | ||
| 41 | + | ||
| 42 | +/** | ||
| 43 | + * Created by Panagiotis Triantafyllou on 04-Apr-23. | ||
| 44 | + */ | ||
| 45 | + | ||
| 46 | +public class UnifiedCoupon implements Parcelable, Serializable { | ||
| 47 | + | ||
| 48 | + private static final long serialVersionUID = -4754964462459705285L; | ||
| 49 | + | ||
| 50 | + /* Constants used to export the campaign in JSON formal and vice versa */ | ||
| 51 | + | ||
| 52 | + private static final String BARCODE = "barcode"; | ||
| 53 | + private static final String CODE = "code"; | ||
| 54 | + private static final String CREATED = "created"; | ||
| 55 | + private static final String COUPONS = "coupons"; | ||
| 56 | + private static final String STATUS = "status"; | ||
| 57 | + private static final String DESCRIPTION = "description"; | ||
| 58 | + | ||
| 59 | + /* Member variables of the Campaign object */ | ||
| 60 | + | ||
| 61 | + private String barcode = ""; | ||
| 62 | + private String description = ""; | ||
| 63 | + private String status = ""; | ||
| 64 | + private int code = 0; | ||
| 65 | + private String created = ""; | ||
| 66 | + private ArrayList<Coupon> coupons = new ArrayList(); | ||
| 67 | + private Date expirationDate = new Date(); | ||
| 68 | + | ||
| 69 | + public UnifiedCoupon() { | ||
| 70 | + this.barcode = ""; | ||
| 71 | + this.description = ""; | ||
| 72 | + this.status = ""; | ||
| 73 | + this.code = 0; | ||
| 74 | + this.created = ""; | ||
| 75 | + this.coupons = new ArrayList(); | ||
| 76 | + this.expirationDate = new Date(); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * Basic constructor used to create an object from a String, representing a | ||
| 81 | + * JSON Object | ||
| 82 | + * | ||
| 83 | + * @param json The String, representing the JSON Object | ||
| 84 | + * @throws JSONException Thrown if the String cannot be converted to JSON | ||
| 85 | + */ | ||
| 86 | + public UnifiedCoupon(String json) throws JSONException { | ||
| 87 | + this(new JSONObject(json)); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * Constructor used to create an Object from a given JSON Object | ||
| 92 | + * | ||
| 93 | + * @param json JSON Object used to create the Coupon | ||
| 94 | + */ | ||
| 95 | + public UnifiedCoupon(JSONObject json) { | ||
| 96 | + if (json != null) { | ||
| 97 | + this.barcode = json.optString(BARCODE); | ||
| 98 | + this.description = json.optString(DESCRIPTION); | ||
| 99 | + this.status = json.optString(STATUS); | ||
| 100 | + this.code = json.optInt(CODE); | ||
| 101 | + this.created = json.optString(CREATED); | ||
| 102 | + JSONArray jArray = null; | ||
| 103 | + jArray = json.optJSONArray(COUPONS); | ||
| 104 | + if (jArray != null && jArray.length() > 0) { | ||
| 105 | + for (int i = 0; i < jArray.length(); i++) { | ||
| 106 | + JSONObject jObj = jArray.optJSONObject(i); | ||
| 107 | + this.coupons.add(new Coupon(jObj)); | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + public UnifiedCoupon(Parcel source) { | ||
| 114 | + this.barcode = source.readString(); | ||
| 115 | + this.description = source.readString(); | ||
| 116 | + this.status = source.readString(); | ||
| 117 | + this.code = source.readInt(); | ||
| 118 | + this.created = source.readString(); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + @Override | ||
| 122 | + public void writeToParcel(Parcel dest, int flags) { | ||
| 123 | + dest.writeString(this.barcode); | ||
| 124 | + dest.writeString(this.description); | ||
| 125 | + dest.writeString(this.status); | ||
| 126 | + dest.writeInt(this.code); | ||
| 127 | + dest.writeString(this.created); | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + /** | ||
| 131 | + * Converts the Unified Coupon into a JSON Object | ||
| 132 | + * | ||
| 133 | + * @return The JSON Object created from this Unified Coupon | ||
| 134 | + */ | ||
| 135 | + public JSONObject toJSONObject() { | ||
| 136 | + JSONObject jObj = new JSONObject(); | ||
| 137 | + try { | ||
| 138 | + jObj.putOpt(BARCODE, this.barcode); | ||
| 139 | + jObj.putOpt(DESCRIPTION, this.description); | ||
| 140 | + jObj.putOpt(STATUS, this.status); | ||
| 141 | + jObj.putOpt(CODE, this.code); | ||
| 142 | + jObj.putOpt(CREATED, this.created); | ||
| 143 | + jObj.putOpt(COUPONS, this.coupons); | ||
| 144 | + } catch (JSONException e) { | ||
| 145 | + if (WarpConstants.DEBUG) { | ||
| 146 | + e.printStackTrace(); | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + return jObj; | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + /** | ||
| 153 | + * String representation of the Unified Coupon, as a JSON object | ||
| 154 | + * | ||
| 155 | + * @return A String representation of JSON object | ||
| 156 | + */ | ||
| 157 | + public String toString() { | ||
| 158 | + if (toJSONObject() != null) | ||
| 159 | + return toJSONObject().toString(); | ||
| 160 | + return null; | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + /** | ||
| 164 | + * String representation of the Coupon, as a human readable JSON object | ||
| 165 | + * | ||
| 166 | + * @return A human readable String representation of JSON object | ||
| 167 | + */ | ||
| 168 | + public String toHumanReadableString() { | ||
| 169 | + String humanReadableString = null; | ||
| 170 | + try { | ||
| 171 | + humanReadableString = toJSONObject().toString(2); | ||
| 172 | + } catch (JSONException e) { | ||
| 173 | + WarpUtils.warn("Failed converting Unified Coupon JSON object to String", e); | ||
| 174 | + } | ||
| 175 | + return humanReadableString; | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + // ================================================================================ | ||
| 179 | + // Getters | ||
| 180 | + // ================================================================================ | ||
| 181 | + | ||
| 182 | + | ||
| 183 | + public String getBarcode() { | ||
| 184 | + return barcode; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + public void setBarcode(String barcode) { | ||
| 188 | + this.barcode = barcode; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + public int getCode() { | ||
| 192 | + return code; | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + public void setCode(int code) { | ||
| 196 | + this.code = code; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + public String getCreated() { | ||
| 200 | + return created; | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + public void setCreated(String created) { | ||
| 204 | + this.created = created; | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + public ArrayList<Coupon> getCoupons() { | ||
| 208 | + return coupons; | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + public void setCoupons(ArrayList<Coupon> coupons) { | ||
| 212 | + this.coupons = coupons; | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + public String getStatus() { | ||
| 216 | + return status; | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + public void setStatus(String status) { | ||
| 220 | + this.status = status; | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + public String getDescription() { | ||
| 224 | + return description; | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + public void setDescription(String description) { | ||
| 228 | + this.description = description; | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + public Date getExpirationDate() { | ||
| 232 | + return expirationDate; | ||
| 233 | + } | ||
| 234 | + | ||
| 235 | + public void setExpirationDate(Date expirationDate) { | ||
| 236 | + this.expirationDate = expirationDate; | ||
| 237 | + } | ||
| 238 | + | ||
| 239 | + @Override | ||
| 240 | + public int describeContents() { | ||
| 241 | + return 0; | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + public static final Creator<UnifiedCoupon> CREATOR = new Creator<UnifiedCoupon>() { | ||
| 245 | + public UnifiedCoupon createFromParcel(Parcel source) { | ||
| 246 | + return new UnifiedCoupon(source); | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + public UnifiedCoupon[] newArray(int size) { | ||
| 250 | + return new UnifiedCoupon[size]; | ||
| 251 | + } | ||
| 252 | + }; | ||
| 253 | +} |
| ... | @@ -54,6 +54,18 @@ public interface ApiService { | ... | @@ -54,6 +54,18 @@ public interface ApiService { |
| 54 | @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); | 54 | @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); |
| 55 | 55 | ||
| 56 | @Headers("Content-Type: application/json") | 56 | @Headers("Content-Type: application/json") |
| 57 | + @POST("/oauth/{appUuid}/context") | ||
| 58 | + Call<ResponseBody> getUnifiedCoupons(@Path("appUuid") String appUuid, | ||
| 59 | + @Body RequestBody request, | ||
| 60 | + @Header(WarpConstants.HEADER_DATE) String timeStamp, | ||
| 61 | + @Header(WarpConstants.HEADER_LOYALTY_BUNDLE_ID) String bundleId, | ||
| 62 | + @Header(WarpConstants.HEADER_UNIQUE_DEVICE_ID) String deviceId, | ||
| 63 | + @Header(WarpConstants.HEADER_CHANNEL) String channel, | ||
| 64 | + @Header(WarpConstants.HEADER_WEB_ID) String webId, | ||
| 65 | + @Header(WarpConstants.HEADER_SIGNATURE) String signature, | ||
| 66 | + @Header(WarpConstants.HEADER_AUTHORIZATION) String bearer); | ||
| 67 | + | ||
| 68 | + @Headers("Content-Type: application/json") | ||
| 57 | @POST("/api/mobile/v2/{appUuid}/context/") | 69 | @POST("/api/mobile/v2/{appUuid}/context/") |
| 58 | Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid, | 70 | Call<ResponseBody> getMerchants(@Path("appUuid") String appUuid, |
| 59 | @Body RequestBody request, | 71 | @Body RequestBody request, | ... | ... |
| ... | @@ -74,6 +74,7 @@ import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage; | ... | @@ -74,6 +74,7 @@ import ly.warp.sdk.io.models.LoyaltyGiftsForYouPackage; |
| 74 | import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel; | 74 | import ly.warp.sdk.io.models.LoyaltySDKFirebaseEventModel; |
| 75 | import ly.warp.sdk.io.models.MerchantList; | 75 | import ly.warp.sdk.io.models.MerchantList; |
| 76 | import ly.warp.sdk.io.models.PushCampaign; | 76 | import ly.warp.sdk.io.models.PushCampaign; |
| 77 | +import ly.warp.sdk.io.models.UnifiedCoupon; | ||
| 77 | import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel; | 78 | import ly.warp.sdk.io.models.WarplyCouponsChangedEventModel; |
| 78 | import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; | 79 | import ly.warp.sdk.io.request.CosmoteRetrieveSharingRequest; |
| 79 | import ly.warp.sdk.io.request.CosmoteSharingRequest; | 80 | import ly.warp.sdk.io.request.CosmoteSharingRequest; |
| ... | @@ -123,6 +124,7 @@ public class WarplyManagerHelper { | ... | @@ -123,6 +124,7 @@ public class WarplyManagerHelper { |
| 123 | public static double mMetersWebview = 0.0d; | 124 | public static double mMetersWebview = 0.0d; |
| 124 | public static int mStepsWebview = 0; | 125 | public static int mStepsWebview = 0; |
| 125 | public static int mSteps = 0; | 126 | public static int mSteps = 0; |
| 127 | + private static ArrayList<UnifiedCoupon> mMarketCoupons = new ArrayList<>(); | ||
| 126 | 128 | ||
| 127 | // =========================================================== | 129 | // =========================================================== |
| 128 | // Methods for/from SuperClass/Interfaces | 130 | // Methods for/from SuperClass/Interfaces |
| ... | @@ -1247,6 +1249,13 @@ public class WarplyManagerHelper { | ... | @@ -1247,6 +1249,13 @@ public class WarplyManagerHelper { |
| 1247 | mDealsSum = sum; | 1249 | mDealsSum = sum; |
| 1248 | } | 1250 | } |
| 1249 | 1251 | ||
| 1252 | + public static ArrayList<UnifiedCoupon> getMarketCoupons() { | ||
| 1253 | + return mMarketCoupons; | ||
| 1254 | + } | ||
| 1255 | + public static void setMarketCoupons( ArrayList<UnifiedCoupon> marketCoupons) { | ||
| 1256 | + mMarketCoupons = marketCoupons; | ||
| 1257 | + } | ||
| 1258 | + | ||
| 1250 | public static boolean checkForLoyaltySDKNotification(Context context, Map<String, String> pushPayload) { | 1259 | public static boolean checkForLoyaltySDKNotification(Context context, Map<String, String> pushPayload) { |
| 1251 | Bundle data = convertToBundle(pushPayload); | 1260 | Bundle data = convertToBundle(pushPayload); |
| 1252 | if (data == null || !data.containsKey("loyalty-action")) | 1261 | if (data == null || !data.containsKey("loyalty-action")) | ... | ... |
| ... | @@ -97,6 +97,7 @@ import ly.warp.sdk.io.models.SharingList; | ... | @@ -97,6 +97,7 @@ import ly.warp.sdk.io.models.SharingList; |
| 97 | import ly.warp.sdk.io.models.TagsCategoriesList; | 97 | import ly.warp.sdk.io.models.TagsCategoriesList; |
| 98 | import ly.warp.sdk.io.models.TagsList; | 98 | import ly.warp.sdk.io.models.TagsList; |
| 99 | import ly.warp.sdk.io.models.TransactionsList; | 99 | import ly.warp.sdk.io.models.TransactionsList; |
| 100 | +import ly.warp.sdk.io.models.UnifiedCoupon; | ||
| 100 | import ly.warp.sdk.io.models.WarplyPacingEventModel; | 101 | import ly.warp.sdk.io.models.WarplyPacingEventModel; |
| 101 | import ly.warp.sdk.io.request.CosmoteCouponSharingRequest; | 102 | import ly.warp.sdk.io.request.CosmoteCouponSharingRequest; |
| 102 | import ly.warp.sdk.io.request.CosmotePostEventRequest; | 103 | import ly.warp.sdk.io.request.CosmotePostEventRequest; |
| ... | @@ -1892,6 +1893,71 @@ public class WarplyManager { | ... | @@ -1892,6 +1893,71 @@ public class WarplyManager { |
| 1892 | }); | 1893 | }); |
| 1893 | } | 1894 | } |
| 1894 | 1895 | ||
| 1896 | + public static void getUnifiedCoupons(final CallbackReceiver<ArrayList<UnifiedCoupon>> receiver) { | ||
| 1897 | + WarpUtils.log("************* WARPLY User Coupons Request ********************"); | ||
| 1898 | + WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); | ||
| 1899 | + WarpUtils.log("**************************************************"); | ||
| 1900 | + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class); | ||
| 1901 | + getUnifiedCouponsRetro(service, new Callback<ResponseBody>() { | ||
| 1902 | + @Override | ||
| 1903 | + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseCoupons) { | ||
| 1904 | + if (responseCoupons.code() == 200 && responseCoupons.body() != null) { | ||
| 1905 | + JSONObject jobjCouponsResponse = null; | ||
| 1906 | + try { | ||
| 1907 | + jobjCouponsResponse = new JSONObject(responseCoupons.body().string()); | ||
| 1908 | + } catch (Exception e) { | ||
| 1909 | + e.printStackTrace(); | ||
| 1910 | + } | ||
| 1911 | + if (jobjCouponsResponse != null && jobjCouponsResponse.has("status") && jobjCouponsResponse.optInt("status", 2) == 1) { | ||
| 1912 | + ArrayList<UnifiedCoupon> couponList = new ArrayList<UnifiedCoupon>(); | ||
| 1913 | + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); | ||
| 1914 | + dynatraceEvent.setEventName("custom_success_unified_coupons_loyalty"); | ||
| 1915 | + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); | ||
| 1916 | + JSONObject finalJobjCouponsResponse = jobjCouponsResponse; | ||
| 1917 | + final ExecutorService executor = Executors.newFixedThreadPool(1); | ||
| 1918 | + executor.submit(() -> { | ||
| 1919 | + JSONObject jCouponsBody = null; | ||
| 1920 | + try { | ||
| 1921 | + jCouponsBody = finalJobjCouponsResponse.optJSONObject("result"); | ||
| 1922 | + if (jCouponsBody != null && jCouponsBody.length() > 0) { | ||
| 1923 | + JSONArray jCouponsInnerBody = null; | ||
| 1924 | + jCouponsInnerBody = jCouponsBody.optJSONArray("coupons"); | ||
| 1925 | + if (jCouponsInnerBody != null && jCouponsInnerBody.length() > 0) { | ||
| 1926 | + for (int i = 0; i < jCouponsInnerBody.length(); i++) { | ||
| 1927 | + couponList.add(new UnifiedCoupon(jCouponsInnerBody.optJSONObject(i))); | ||
| 1928 | + } | ||
| 1929 | + } | ||
| 1930 | + } | ||
| 1931 | + } catch (Exception e) { | ||
| 1932 | + e.printStackTrace(); | ||
| 1933 | + } | ||
| 1934 | + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(couponList)); | ||
| 1935 | + executor.shutdownNow(); | ||
| 1936 | + }); | ||
| 1937 | + } else { | ||
| 1938 | + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); | ||
| 1939 | + dynatraceEvent.setEventName("custom_error_unified_coupons_loyalty"); | ||
| 1940 | + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); | ||
| 1941 | + receiver.onFailure(2); | ||
| 1942 | + } | ||
| 1943 | + } else { | ||
| 1944 | + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); | ||
| 1945 | + dynatraceEvent.setEventName("custom_error_unified_coupons_loyalty"); | ||
| 1946 | + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); | ||
| 1947 | + receiver.onFailure(responseCoupons.code()); | ||
| 1948 | + } | ||
| 1949 | + } | ||
| 1950 | + | ||
| 1951 | + @Override | ||
| 1952 | + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { | ||
| 1953 | + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel(); | ||
| 1954 | + dynatraceEvent.setEventName("custom_error_user_coupons_loyalty"); | ||
| 1955 | + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent)); | ||
| 1956 | + receiver.onFailure(2); | ||
| 1957 | + } | ||
| 1958 | + }); | ||
| 1959 | + } | ||
| 1960 | + | ||
| 1895 | public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) { | 1961 | public static void getUserCouponsWithCouponsets(WarplyUserCouponsRequest request, final CallbackReceiver<CouponList> receiver) { |
| 1896 | WarpUtils.log("************* WARPLY User Coupons Request ********************"); | 1962 | WarpUtils.log("************* WARPLY User Coupons Request ********************"); |
| 1897 | WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); | 1963 | WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); |
| ... | @@ -2248,6 +2314,58 @@ public class WarplyManager { | ... | @@ -2248,6 +2314,58 @@ public class WarplyManager { |
| 2248 | }); | 2314 | }); |
| 2249 | } | 2315 | } |
| 2250 | 2316 | ||
| 2317 | + private static void getUnifiedCouponsRetro(ApiService service, Callback<ResponseBody> callback) { | ||
| 2318 | + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | ||
| 2319 | + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ||
| 2320 | + String webId = WarpUtils.getWebId(Warply.getWarplyContext()); | ||
| 2321 | + Map<String, Object> jsonParamsCouponsets = new ArrayMap<>(); | ||
| 2322 | + Map<String, Object> jsonParams = new ArrayMap<>(); | ||
| 2323 | + jsonParams.put("action", "retrieve_unified_coupons"); | ||
| 2324 | + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext())); | ||
| 2325 | + jsonParamsCouponsets.put("coupon", jsonParams); | ||
| 2326 | + RequestBody unifiedCouponsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsCouponsets)).toString()); | ||
| 2327 | + Call<ResponseBody> unifiedCouponsCall = service.getUnifiedCoupons( | ||
| 2328 | + WarplyProperty.getAppUuid(Warply.getWarplyContext()), | ||
| 2329 | + unifiedCouponsRequest, | ||
| 2330 | + timeStamp, | ||
| 2331 | + "android:" + Warply.getWarplyContext().getPackageName(), | ||
| 2332 | + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(), | ||
| 2333 | + "mobile", | ||
| 2334 | + webId, | ||
| 2335 | + WarpUtils.produceSignature(apiKey + timeStamp), | ||
| 2336 | + "Bearer " + WarplyDBHelper.getInstance(Warply.getWarplyContext()).getAuthValue("access_token") | ||
| 2337 | + ); | ||
| 2338 | + unifiedCouponsCall.enqueue(new Callback<ResponseBody>() { | ||
| 2339 | + @Override | ||
| 2340 | + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { | ||
| 2341 | + if (response.code() == 401) { | ||
| 2342 | + refreshToken(new WarplyRefreshTokenRequest(), new CallbackReceiver<JSONObject>() { | ||
| 2343 | + @Override | ||
| 2344 | + public void onSuccess(JSONObject result) { | ||
| 2345 | + int status = result.optInt("status", 2); | ||
| 2346 | + if (status == 1) | ||
| 2347 | + getUnifiedCouponsRetro(service, callback); | ||
| 2348 | + else | ||
| 2349 | + callback.onFailure(call, new Throwable()); | ||
| 2350 | + } | ||
| 2351 | + | ||
| 2352 | + @Override | ||
| 2353 | + public void onFailure(int errorCode) { | ||
| 2354 | + callback.onFailure(call, new Throwable()); | ||
| 2355 | + } | ||
| 2356 | + }); | ||
| 2357 | + } else { | ||
| 2358 | + callback.onResponse(call, response); | ||
| 2359 | + } | ||
| 2360 | + } | ||
| 2361 | + | ||
| 2362 | + @Override | ||
| 2363 | + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) { | ||
| 2364 | + callback.onFailure(call, t); | ||
| 2365 | + } | ||
| 2366 | + }); | ||
| 2367 | + } | ||
| 2368 | + | ||
| 2251 | private static void getMerchantsRetro(ApiService service, Callback<ResponseBody> callback) { | 2369 | private static void getMerchantsRetro(ApiService service, Callback<ResponseBody> callback) { |
| 2252 | String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); | 2370 | String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); |
| 2253 | String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | 2371 | String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); | ... | ... |
This diff is collapsed. Click to expand it.
| 1 | +package ly.warp.sdk.views.adapters; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.view.LayoutInflater; | ||
| 5 | +import android.view.View; | ||
| 6 | +import android.view.ViewGroup; | ||
| 7 | +import android.widget.ImageView; | ||
| 8 | +import android.widget.TextView; | ||
| 9 | + | ||
| 10 | +import androidx.recyclerview.widget.RecyclerView; | ||
| 11 | + | ||
| 12 | +import java.text.ParseException; | ||
| 13 | +import java.text.SimpleDateFormat; | ||
| 14 | +import java.util.ArrayList; | ||
| 15 | +import java.util.Collections; | ||
| 16 | +import java.util.Date; | ||
| 17 | +import java.util.concurrent.TimeUnit; | ||
| 18 | + | ||
| 19 | +import io.reactivex.Observable; | ||
| 20 | +import io.reactivex.subjects.PublishSubject; | ||
| 21 | +import ly.warp.sdk.R; | ||
| 22 | +import ly.warp.sdk.io.models.Coupon; | ||
| 23 | +import ly.warp.sdk.io.models.UnifiedCoupon; | ||
| 24 | + | ||
| 25 | +public class MarketCouponAdapter extends RecyclerView.Adapter<MarketCouponAdapter.ActiveCouponViewHolder> { | ||
| 26 | + | ||
| 27 | + private Context mContext; | ||
| 28 | + private ArrayList<UnifiedCoupon> mCoupons; | ||
| 29 | + private final PublishSubject<UnifiedCoupon> onClickSubject = PublishSubject.create(); | ||
| 30 | + private boolean mIsPast = false; | ||
| 31 | + | ||
| 32 | + public MarketCouponAdapter(Context mContext, ArrayList<UnifiedCoupon> campaignList) { | ||
| 33 | + this.mContext = mContext; | ||
| 34 | + this.mCoupons = campaignList; | ||
| 35 | + this.mIsPast = false; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public MarketCouponAdapter(Context mContext, ArrayList<UnifiedCoupon> campaignList, boolean past) { | ||
| 39 | + this.mContext = mContext; | ||
| 40 | + this.mCoupons = campaignList; | ||
| 41 | + this.mIsPast = past; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + public class ActiveCouponViewHolder extends RecyclerView.ViewHolder { | ||
| 45 | + private ImageView ivCouponBackground; | ||
| 46 | + private TextView tvCouponTitle, tvCouponDate, tvCouponCount; | ||
| 47 | + | ||
| 48 | + public ActiveCouponViewHolder(View view) { | ||
| 49 | + super(view); | ||
| 50 | + ivCouponBackground = view.findViewById(R.id.iv_past_coupon_background); | ||
| 51 | + tvCouponTitle = view.findViewById(R.id.tv_market_coupons_title); | ||
| 52 | + tvCouponDate = view.findViewById(R.id.tv_market_coupons_date); | ||
| 53 | + tvCouponCount = view.findViewById(R.id.tv_market_coupons_count); | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public int getItemCount() { | ||
| 59 | + if (mCoupons == null) | ||
| 60 | + return 0; | ||
| 61 | + else | ||
| 62 | + return mCoupons.size(); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + | ||
| 66 | + public UnifiedCoupon getItem(int id) { | ||
| 67 | + return mCoupons.get(id); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public void updateData(ArrayList<UnifiedCoupon> couponList) { | ||
| 71 | + mCoupons.clear(); | ||
| 72 | + mCoupons.addAll(couponList); | ||
| 73 | + notifyDataSetChanged(); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + | ||
| 77 | + @Override | ||
| 78 | + public ActiveCouponViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | ||
| 79 | + View itemView; | ||
| 80 | + if (mIsPast) | ||
| 81 | + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.past_coupon_layout, parent, false); | ||
| 82 | + else | ||
| 83 | + itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.market_coupon_layout, parent, false); | ||
| 84 | + return new ActiveCouponViewHolder(itemView); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + @Override | ||
| 88 | + public void onBindViewHolder(final ActiveCouponViewHolder holder, int position) { | ||
| 89 | + UnifiedCoupon couponItem = mCoupons.get(position); | ||
| 90 | + | ||
| 91 | + if (couponItem != null) { | ||
| 92 | + int count = 0; | ||
| 93 | + if (couponItem.getCoupons() != null && couponItem.getCoupons().size() > 0) { | ||
| 94 | + ArrayList<Coupon> couponList = new ArrayList<Coupon>(); | ||
| 95 | + for (Coupon item : couponItem.getCoupons()) { | ||
| 96 | + if (item.getStatus() == 1) { | ||
| 97 | + count++; | ||
| 98 | + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); | ||
| 99 | + Date newDate = new Date(); | ||
| 100 | + try { | ||
| 101 | + newDate = simpleDateFormat.parse(item.getExpiration()); | ||
| 102 | + } catch (ParseException e) { | ||
| 103 | + e.printStackTrace(); | ||
| 104 | + } | ||
| 105 | + item.setExpirationDate(newDate); | ||
| 106 | + couponList.add(item); | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + Collections.sort(couponList, (coupon1, coupon2) -> coupon1.getExpirationDate().compareTo(coupon2.getExpirationDate())); | ||
| 111 | + | ||
| 112 | + if (couponList != null && couponList.size() > 0) { | ||
| 113 | + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); | ||
| 114 | + Date newDate = new Date(); | ||
| 115 | + try { | ||
| 116 | + newDate = simpleDateFormat.parse(couponList.get(0).getExpiration()); | ||
| 117 | + } catch (ParseException e) { | ||
| 118 | + e.printStackTrace(); | ||
| 119 | + } | ||
| 120 | + simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); | ||
| 121 | + holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : ""))); | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + if (count > 1) { | ||
| 126 | + holder.tvCouponCount.setText(String.format(mContext.getString(R.string.cos_market_active_coupons), String.valueOf(count))); | ||
| 127 | + } else if (count == 1) { | ||
| 128 | + holder.tvCouponCount.setText(String.format(mContext.getString(R.string.cos_market_active_coupons_single), String.valueOf(count))); | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + | ||
| 132 | +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); | ||
| 133 | +// Date newDate = new Date(); | ||
| 134 | +// try { | ||
| 135 | +// newDate = simpleDateFormat.parse(couponItem.getExpiration()); | ||
| 136 | +// } catch (ParseException e) { | ||
| 137 | +// e.printStackTrace(); | ||
| 138 | +// } | ||
| 139 | +// simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); | ||
| 140 | +// if (mIsPast) | ||
| 141 | +// holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_expired_date), simpleDateFormat.format(newDate != null ? newDate : ""))); | ||
| 142 | +// else | ||
| 143 | +// holder.tvCouponDate.setText(String.format(mContext.getString(R.string.cos_coupon_date), simpleDateFormat.format(newDate != null ? newDate : ""))); | ||
| 144 | + | ||
| 145 | +// if (TextUtils.isEmpty(couponItem.getDiscount_type())) { | ||
| 146 | +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); | ||
| 147 | +// } else { | ||
| 148 | +// if (couponItem.getDiscount_type().equals("value")) { | ||
| 149 | +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); | ||
| 150 | +// } else if (couponItem.getDiscount_type().equals("percentage")) { | ||
| 151 | +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.percentage)); | ||
| 152 | +// } else if (couponItem.getDiscount_type().equals("plus_one")) { | ||
| 153 | +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.plus_one)); | ||
| 154 | +// } else { | ||
| 155 | +// holder.tvCouponValue.setText(couponItem.getDiscount() + mContext.getResources().getString(R.string.euro)); | ||
| 156 | +// } | ||
| 157 | +// } | ||
| 158 | + holder.itemView.setOnClickListener(v -> onClickSubject.onNext(couponItem)); | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + public Observable<UnifiedCoupon> getPositionClicks() { | ||
| 163 | + return onClickSubject.cache(); | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + private long getDifferenceDays(Date d1, Date d2) { | ||
| 167 | + long diff = d2.getTime() - d1.getTime(); | ||
| 168 | + return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); | ||
| 169 | + } | ||
| 170 | +} |
12 KB
3.09 KB
3.51 KB
6.61 KB
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<shape xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + <solid android:color="#F0E6E6"/> | ||
| 4 | + <corners android:radius="10dp"/> | ||
| 5 | + <padding android:left="4dp" android:top="2dp" android:right="4dp" android:bottom="2dp" /> | ||
| 6 | +</shape> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| 4 | + xmlns:tools="http://schemas.android.com/tools" | ||
| 5 | + android:id="@+id/cl_custom_layout" | ||
| 6 | + android:layout_width="match_parent" | ||
| 7 | + android:layout_height="130dp" | ||
| 8 | + android:layout_marginHorizontal="4dp" | ||
| 9 | + android:layout_marginVertical="4dp" | ||
| 10 | + android:background="@drawable/ic_coupon_background"> | ||
| 11 | + | ||
| 12 | + <androidx.constraintlayout.widget.Guideline | ||
| 13 | + android:id="@+id/gl_vertical_72_percent" | ||
| 14 | + android:layout_width="wrap_content" | ||
| 15 | + android:layout_height="wrap_content" | ||
| 16 | + android:orientation="vertical" | ||
| 17 | + app:layout_constraintGuide_percent="0.72" /> | ||
| 18 | + | ||
| 19 | + <ImageView | ||
| 20 | + android:id="@+id/iv_active_coupon" | ||
| 21 | + android:layout_width="80dp" | ||
| 22 | + android:layout_height="80dp" | ||
| 23 | + android:layout_marginStart="24dp" | ||
| 24 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 25 | + app:layout_constraintStart_toStartOf="parent" | ||
| 26 | + app:layout_constraintTop_toTopOf="parent" | ||
| 27 | + tools:src="@drawable/ic_gifts_for_you" /> | ||
| 28 | + | ||
| 29 | + <View | ||
| 30 | + android:id="@+id/v_separator" | ||
| 31 | + android:layout_width="1dp" | ||
| 32 | + android:layout_height="match_parent" | ||
| 33 | + android:layout_marginVertical="16dp" | ||
| 34 | + android:layout_marginStart="8dp" | ||
| 35 | + android:background="@drawable/shape_dashed_vertical" | ||
| 36 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 37 | + app:layout_constraintStart_toEndOf="@+id/iv_active_coupon" | ||
| 38 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 39 | + | ||
| 40 | + <LinearLayout | ||
| 41 | + android:id="@+id/ll_coupon_info" | ||
| 42 | + android:layout_width="0dp" | ||
| 43 | + android:layout_height="wrap_content" | ||
| 44 | + android:layout_marginStart="16dp" | ||
| 45 | + android:orientation="vertical" | ||
| 46 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 47 | + app:layout_constraintEnd_toStartOf="@+id/gl_vertical_72_percent" | ||
| 48 | + app:layout_constraintStart_toEndOf="@+id/v_separator" | ||
| 49 | + app:layout_constraintTop_toTopOf="parent"> | ||
| 50 | + | ||
| 51 | + <TextView | ||
| 52 | + android:id="@+id/tv_active_coupons_title" | ||
| 53 | + fontPath="fonts/pf_square_sans_pro_medium.ttf" | ||
| 54 | + android:layout_width="wrap_content" | ||
| 55 | + android:layout_height="wrap_content" | ||
| 56 | + android:ellipsize="end" | ||
| 57 | + android:maxLines="1" | ||
| 58 | + android:textColor="#3A5266" | ||
| 59 | + android:textSize="16sp" | ||
| 60 | + tools:text="Εκπτωτικο κουπονι 10$ για αγορες στα ΙΚΕΑ" /> | ||
| 61 | + | ||
| 62 | + <TextView | ||
| 63 | + android:id="@+id/tv_active_coupons_value" | ||
| 64 | + fontPath="fonts/pf_square_sans_pro_bold.ttf" | ||
| 65 | + android:layout_width="wrap_content" | ||
| 66 | + android:layout_height="wrap_content" | ||
| 67 | + android:textColor="#3A5266" | ||
| 68 | + android:textSize="42sp" | ||
| 69 | + tools:text="10$" /> | ||
| 70 | + | ||
| 71 | + <TextView | ||
| 72 | + android:id="@+id/tv_active_coupons_date" | ||
| 73 | + fontPath="fonts/pf_square_sans_pro_medium.ttf" | ||
| 74 | + android:layout_width="wrap_content" | ||
| 75 | + android:layout_height="wrap_content" | ||
| 76 | + android:textColor="#617181" | ||
| 77 | + android:textSize="12sp" | ||
| 78 | + android:visibility="gone" | ||
| 79 | + tools:text="@string/cos_active_coupon_date" /> | ||
| 80 | + | ||
| 81 | + <TextView | ||
| 82 | + android:id="@+id/tv_active_coupons_date_expired" | ||
| 83 | + fontPath="fonts/pf_square_sans_pro_bold.ttf" | ||
| 84 | + android:layout_width="wrap_content" | ||
| 85 | + android:layout_height="wrap_content" | ||
| 86 | + android:textColor="#617181" | ||
| 87 | + android:textSize="12sp" | ||
| 88 | + android:visibility="gone" | ||
| 89 | + tools:text="@string/cos_market_coupon_expired" /> | ||
| 90 | + </LinearLayout> | ||
| 91 | + | ||
| 92 | + <LinearLayout | ||
| 93 | + android:id="@+id/ll_date_limit" | ||
| 94 | + android:layout_width="wrap_content" | ||
| 95 | + android:layout_height="wrap_content" | ||
| 96 | + android:background="@drawable/shape_market_limit" | ||
| 97 | + android:gravity="center_vertical" | ||
| 98 | + android:orientation="horizontal" | ||
| 99 | + android:visibility="gone" | ||
| 100 | + android:layout_marginBottom="36dp" | ||
| 101 | + android:layout_marginStart="8dp" | ||
| 102 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 103 | + app:layout_constraintTop_toBottomOf="@+id/ll_coupon_info" | ||
| 104 | + app:layout_constraintStart_toEndOf="@+id/v_separator" | ||
| 105 | + tools:visibility="visible"> | ||
| 106 | + | ||
| 107 | +<!-- <ImageView--> | ||
| 108 | +<!-- android:layout_width="14dp"--> | ||
| 109 | +<!-- android:layout_height="14dp"--> | ||
| 110 | +<!-- android:layout_marginEnd="4dp"--> | ||
| 111 | +<!-- android:src="@drawable/timer_red" />--> | ||
| 112 | + | ||
| 113 | + <TextView | ||
| 114 | + fontPath="fonts/pf_square_sans_pro_medium.ttf" | ||
| 115 | + android:layout_width="wrap_content" | ||
| 116 | + android:layout_height="wrap_content" | ||
| 117 | + android:text="@string/cos_coupon_date_limit" | ||
| 118 | + android:textColor="#617181" | ||
| 119 | + android:textSize="12sp" /> | ||
| 120 | + | ||
| 121 | + <TextView | ||
| 122 | + android:id="@+id/tv_active_coupons_date_limit" | ||
| 123 | + fontPath="fonts/pf_square_sans_pro_medium.ttf" | ||
| 124 | + android:layout_width="wrap_content" | ||
| 125 | + android:layout_height="wrap_content" | ||
| 126 | + android:text="@string/cos_coupon_date_limit" | ||
| 127 | + android:textColor="#FF6B6B" | ||
| 128 | + android:textSize="12sp" | ||
| 129 | + tools:text="@string/cos_coupon_date_limit2" /> | ||
| 130 | + </LinearLayout> | ||
| 131 | + | ||
| 132 | + <TextView | ||
| 133 | + android:id="@+id/tv_active_coupons_description" | ||
| 134 | + fontPath="fonts/pf_square_sans_pro_medium.ttf" | ||
| 135 | + android:layout_width="0dp" | ||
| 136 | + android:layout_height="wrap_content" | ||
| 137 | + android:layout_marginStart="8dp" | ||
| 138 | + android:layout_marginEnd="32dp" | ||
| 139 | + android:maxLines="4" | ||
| 140 | + android:textColor="#617181" | ||
| 141 | + android:textSize="12sp" | ||
| 142 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 143 | + app:layout_constraintEnd_toEndOf="parent" | ||
| 144 | + app:layout_constraintStart_toEndOf="@+id/gl_vertical_72_percent" | ||
| 145 | + app:layout_constraintTop_toTopOf="parent" | ||
| 146 | + tools:text="Εκπτωση με ελάχιστες αγορές 100€" /> | ||
| 147 | +</androidx.constraintlayout.widget.ConstraintLayout> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| 4 | + xmlns:tools="http://schemas.android.com/tools" | ||
| 5 | + android:layout_width="match_parent" | ||
| 6 | + android:layout_height="130dp" | ||
| 7 | + android:layout_marginHorizontal="4dp" | ||
| 8 | + android:layout_marginVertical="4dp" | ||
| 9 | + android:background="@drawable/ic_coupon_background_new2"> | ||
| 10 | + | ||
| 11 | + <androidx.constraintlayout.widget.Guideline | ||
| 12 | + android:id="@+id/gl_vertical_72_percent" | ||
| 13 | + android:layout_width="wrap_content" | ||
| 14 | + android:layout_height="wrap_content" | ||
| 15 | + android:orientation="vertical" | ||
| 16 | + app:layout_constraintGuide_percent="0.72" /> | ||
| 17 | + | ||
| 18 | + <ImageView | ||
| 19 | + android:id="@+id/iv_market_coupon" | ||
| 20 | + android:layout_width="80dp" | ||
| 21 | + android:layout_height="80dp" | ||
| 22 | + android:layout_marginStart="24dp" | ||
| 23 | + android:padding="18dp" | ||
| 24 | + android:src="@drawable/ic_market_trolley" | ||
| 25 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 26 | + app:layout_constraintStart_toStartOf="parent" | ||
| 27 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 28 | + | ||
| 29 | + <View | ||
| 30 | + android:id="@+id/v_separator" | ||
| 31 | + android:layout_width="1dp" | ||
| 32 | + android:layout_height="match_parent" | ||
| 33 | + android:layout_marginVertical="16dp" | ||
| 34 | + android:layout_marginStart="8dp" | ||
| 35 | + android:background="@drawable/shape_dashed_vertical" | ||
| 36 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 37 | + app:layout_constraintStart_toEndOf="@+id/iv_market_coupon" | ||
| 38 | + app:layout_constraintTop_toTopOf="parent" /> | ||
| 39 | + | ||
| 40 | + <LinearLayout | ||
| 41 | + android:id="@+id/ll_coupon_info" | ||
| 42 | + android:layout_width="0dp" | ||
| 43 | + android:layout_height="wrap_content" | ||
| 44 | + android:layout_marginStart="16dp" | ||
| 45 | + android:orientation="vertical" | ||
| 46 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 47 | + app:layout_constraintEnd_toStartOf="@+id/gl_vertical_72_percent" | ||
| 48 | + app:layout_constraintStart_toEndOf="@+id/v_separator" | ||
| 49 | + app:layout_constraintTop_toTopOf="parent"> | ||
| 50 | + | ||
| 51 | + <TextView | ||
| 52 | + android:id="@+id/tv_market_coupons_title" | ||
| 53 | + fontPath="fonts/BTCosmo-Bold.ttf" | ||
| 54 | + android:layout_width="wrap_content" | ||
| 55 | + android:layout_height="wrap_content" | ||
| 56 | + android:ellipsize="end" | ||
| 57 | + android:maxLines="3" | ||
| 58 | + android:textColor="@color/cos_light_black" | ||
| 59 | + android:textSize="16sp" | ||
| 60 | + android:text="@string/cos_market_item_title" /> | ||
| 61 | + | ||
| 62 | + <TextView | ||
| 63 | + fontPath="fonts/pf_square_sans_pro_bold.ttf" | ||
| 64 | + android:layout_width="wrap_content" | ||
| 65 | + android:layout_height="wrap_content" | ||
| 66 | + android:textColor="#3A5266" | ||
| 67 | + android:textSize="22sp" | ||
| 68 | + android:text="" /> | ||
| 69 | + | ||
| 70 | + <TextView | ||
| 71 | + android:id="@+id/tv_market_coupons_date" | ||
| 72 | + fontPath="fonts/PeridotPE-Regular.ttf" | ||
| 73 | + android:layout_width="wrap_content" | ||
| 74 | + android:layout_height="wrap_content" | ||
| 75 | + android:textColor="@color/cos_light_black" | ||
| 76 | + android:textSize="12sp" | ||
| 77 | + tools:text="@string/cos_active_coupon_date" /> | ||
| 78 | + </LinearLayout> | ||
| 79 | + | ||
| 80 | + <TextView | ||
| 81 | + android:id="@+id/tv_market_coupons_count" | ||
| 82 | + fontPath="fonts/PeridotPE-Regular.ttf" | ||
| 83 | + android:layout_width="0dp" | ||
| 84 | + android:layout_height="wrap_content" | ||
| 85 | + android:layout_marginStart="8dp" | ||
| 86 | + android:layout_marginEnd="32dp" | ||
| 87 | + android:maxLines="4" | ||
| 88 | + android:textColor="@color/cos_light_black" | ||
| 89 | + android:textSize="12sp" | ||
| 90 | + app:layout_constraintBottom_toBottomOf="parent" | ||
| 91 | + app:layout_constraintEnd_toEndOf="parent" | ||
| 92 | + app:layout_constraintStart_toEndOf="@+id/gl_vertical_72_percent" | ||
| 93 | + app:layout_constraintTop_toTopOf="parent" | ||
| 94 | + tools:text="@string/cos_market_active_coupons" /> | ||
| 95 | +</androidx.constraintlayout.widget.ConstraintLayout> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -71,4 +71,5 @@ | ... | @@ -71,4 +71,5 @@ |
| 71 | <color name="cos_gray">#9D9D9C</color> | 71 | <color name="cos_gray">#9D9D9C</color> |
| 72 | <color name="cos_gray2">#848484</color> | 72 | <color name="cos_gray2">#848484</color> |
| 73 | <color name="cos_light_blue">#00A5E3</color> | 73 | <color name="cos_light_blue">#00A5E3</color> |
| 74 | + <color name="cos_grey_dark2">#32485A</color> | ||
| 74 | </resources> | 75 | </resources> |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -73,8 +73,8 @@ | ... | @@ -73,8 +73,8 @@ |
| 73 | <string name="cos_gift_it">Δώρισέ το</string> | 73 | <string name="cos_gift_it">Δώρισέ το</string> |
| 74 | <string name="cos_popup_more_title">COSMOTE MORE FOR YOU</string> | 74 | <string name="cos_popup_more_title">COSMOTE MORE FOR YOU</string> |
| 75 | <string name="cos_popup_more_subtitle">Σε αυτή την ενότητα βρες έρευνες, παιχνίδια, διαγωνισμούς και επιβραβεύσεις για τις αθλητικές σου δραστηριότητες!</string> | 75 | <string name="cos_popup_more_subtitle">Σε αυτή την ενότητα βρες έρευνες, παιχνίδια, διαγωνισμούς και επιβραβεύσεις για τις αθλητικές σου δραστηριότητες!</string> |
| 76 | - <string name="cos_deals_win_title">Μέχρι τώρα έχεις κερδίσει %1$s€ σε προσφορές από %2$s κουπόνια!</string> | 76 | + <string name="cos_deals_win_title">Έχεις κερδίσει %1$s€ με το\nGIFTS for YOU!</string> |
| 77 | - <string name="cos_deals_win_title_cos">Μέχρι τώρα έχεις κερδίσει %1$s€ με το DEALS for YOU!</string> | 77 | + <string name="cos_deals_win_title_cos">Έχεις κερδίσει %1$s€ με το\nDEALS for YOU!</string> |
| 78 | <string name="cos_mygifts">Τα δώρα μου</string> | 78 | <string name="cos_mygifts">Τα δώρα μου</string> |
| 79 | <string name="cos_gifts_banner_title">Δώρα:</string> | 79 | <string name="cos_gifts_banner_title">Δώρα:</string> |
| 80 | <string name="cos_see_more">Δες περισσότερα</string> | 80 | <string name="cos_see_more">Δες περισσότερα</string> |
| ... | @@ -150,6 +150,25 @@ | ... | @@ -150,6 +150,25 @@ |
| 150 | <string name="cos_dlg_no_shops_title">Καταστήματα συνεργάτη</string> | 150 | <string name="cos_dlg_no_shops_title">Καταστήματα συνεργάτη</string> |
| 151 | <string name="cos_dlg_no_shops_positive">Δες το eshop</string> | 151 | <string name="cos_dlg_no_shops_positive">Δες το eshop</string> |
| 152 | <string name="cos_profile_preferences_placeholder">Οι προτιμήσεις μου</string> | 152 | <string name="cos_profile_preferences_placeholder">Οι προτιμήσεις μου</string> |
| 153 | + <string name="cos_market_title">SuperMarket Deals</string> | ||
| 154 | + <string name="cos_rewards_title2">COSMOTE Επιβράβευση</string> | ||
| 155 | + <string name="cos_market_item_title">COSMOTE\nSuperMarket\nDeals</string> | ||
| 156 | + <string name="cos_market_active_coupons">έχεις %1$s ενεργά κουπόνια</string> | ||
| 157 | + <string name="cos_market_active_coupons_single">έχεις %1$s ενεργό κουπόνι</string> | ||
| 158 | + <string name="cos_unified_title">Εκπτωτικό κουπόνι COSMOTE SuperMarket Deals!</string> | ||
| 159 | + <string name="cos_unified_subtitle">Χρησιμοποίησε τον παρακάτω κωδικό και πάρε έκπτωση στα ενεργά κουπόνια προσφορών.</string> | ||
| 160 | + <string name="cos_markets">Δες τα supermarket</string> | ||
| 161 | + <string name="cos_show_market_coupons">Εμφάνιση κουπονιών</string> | ||
| 162 | + <string name="cos_hide_market_coupons">Απόκρυψη κουπονιών</string> | ||
| 163 | + <string name="cos_market_terms">1. Το εκπτωτικό κουπόνι ισχύει έως την ημερομηνία που αναφέρεται παραπάνω\n | ||
| 164 | +2. To εκπτωτικό κουπόνι αφορά στα ενεργά κουπόνια προσφορών όπως αναφέρονται παραπάνω.\n | ||
| 165 | +3. Το εκπτωτικό κουπόνι μπορεί να χρησιμοποιηθεί σε μια μόνο συναλλαγή.\n | ||
| 166 | +4. Εάν δεν γίνει χρήση ενός επιμέρους κουπονιού προσφοράς από το εκπτωτικό κουπόνι, το κουπόνι προσφοράς επιστρέφει στο καλάθι στην ενότητα COSMOTE SuperMarket Deals</string> | ||
| 167 | + <string name="cos_market_coupon_expired">Το κουπόνι έληξε</string> | ||
| 168 | + <string name="cos_coupon_date_limit">Ισχύει έως </string> | ||
| 169 | + <string name="cos_coupon_date_limit2">%1$s</string> | ||
| 170 | + <string name="cos_for_you_all">Μέχρι τώρα έχεις κερδίσει %1$s€ στο For You!</string> | ||
| 171 | + <string name="cos_supermarket_win">Έχεις κερδίσει %1$s€ με τα\nSuperMarket Deals!</string> | ||
| 153 | 172 | ||
| 154 | <string-array name="coupons_array"> | 173 | <string-array name="coupons_array"> |
| 155 | <item>Κουπόνια</item> | 174 | <item>Κουπόνια</item> | ... | ... |
-
Please register or login to post a comment