Panagiotis Triantafyllou

sm deals map fixes

...@@ -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.6rc65' 5 + PUBLISH_VERSION = '4.5.4.6rc66'
6 PUBLISH_ARTIFACT_ID = 'warply-android-sdk' 6 PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
7 } 7 }
8 8
......
...@@ -36,7 +36,11 @@ import com.google.android.material.bottomsheet.BottomSheetDialog; ...@@ -36,7 +36,11 @@ import com.google.android.material.bottomsheet.BottomSheetDialog;
36 import com.google.maps.android.clustering.Cluster; 36 import com.google.maps.android.clustering.Cluster;
37 import com.google.maps.android.clustering.ClusterManager; 37 import com.google.maps.android.clustering.ClusterManager;
38 38
39 +import org.json.JSONArray;
40 +
39 import java.util.ArrayList; 41 import java.util.ArrayList;
42 +import java.util.concurrent.ExecutorService;
43 +import java.util.concurrent.Executors;
40 44
41 import io.github.inflationx.viewpump.ViewPumpContextWrapper; 45 import io.github.inflationx.viewpump.ViewPumpContextWrapper;
42 import ly.warp.sdk.R; 46 import ly.warp.sdk.R;
...@@ -73,7 +77,7 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -73,7 +77,7 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
73 private SupportMapFragment mMapView; 77 private SupportMapFragment mMapView;
74 private MerchantList mMerchantList = new MerchantList(); 78 private MerchantList mMerchantList = new MerchantList();
75 private AlertDialog mAlertDialogNoShopsAvailable; 79 private AlertDialog mAlertDialogNoShopsAvailable;
76 - private Merchant mMerchant; 80 + private Merchant mMerchant, mMerchantParent;
77 81
78 // =========================================================== 82 // ===========================================================
79 // Methods for/from SuperClass/Interfaces 83 // Methods for/from SuperClass/Interfaces
...@@ -194,16 +198,8 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -194,16 +198,8 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
194 }).start(); 198 }).start();
195 } else { 199 } else {
196 ArrayList<String> catuuids = new ArrayList<>(); 200 ArrayList<String> catuuids = new ArrayList<>();
197 - catuuids.add(WarplyProperty.getAppUuid(this).equals("0086a2088301440792091b9f814c2267") ? "" : "adcace6cab6049c7b7271bc85bc2b26d"); //TODO: add live cat uuid 201 + catuuids.add(WarplyProperty.getAppUuid(this).equals("0086a2088301440792091b9f814c2267") ? "2a6adade35f1484994a3d4c8f006b909" : "adcace6cab6049c7b7271bc85bc2b26d");
198 - new Thread(() -> { 202 + WarplyManager.getMerchantsMultilingual(catuuids, mMerchantsDealsCallback);
199 - if (!Thread.currentThread().isInterrupted()) {
200 - WarplyManager.getMerchantsMultilingual(new WarplyMerchantsRequest()
201 - .setIsMultilingual(true)
202 - .setCategories(catuuids)
203 - , mMerchantsCallback);
204 - }
205 - Thread.currentThread().interrupt();
206 - }).start();
207 } 203 }
208 } 204 }
209 205
...@@ -357,6 +353,70 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -357,6 +353,70 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
357 } 353 }
358 }; 354 };
359 355
356 + private final CallbackReceiver<MerchantList> mMerchantsDealsCallback = new CallbackReceiver<MerchantList>() {
357 + @Override
358 + public void onSuccess(MerchantList result) {
359 + if (result.size() == 0) {
360 + showNoShopsAvailableDialog();
361 + return;
362 + }
363 +
364 + mMerchantList.clear();
365 + mMerchantList.addAll(result);
366 +
367 + // if (mClusterManager != null) {
368 +// mMap.clear();
369 +// mClusterManager.clearItems();
370 +// if (result != null) {
371 +// mClusterManager.addItems(result);
372 +// }
373 +// mClusterManager.cluster();
374 +// }
375 +
376 + int nonNullCoords = 0;
377 + for (Merchant merchCoords : result) {
378 + if (merchCoords.getLatitude() != 0.0 && merchCoords.getLongitude() != 0.0) {
379 + nonNullCoords++;
380 + } else {
381 + mMerchantParent = merchCoords;
382 + }
383 + }
384 +
385 + if (nonNullCoords == 0) {
386 + showNoShopsAvailableDialog();
387 + return;
388 + }
389 +
390 + if (mMerchantParent != null) {
391 + for (Merchant merch : result) {
392 + merch.setImg_preview(mMerchantParent.getImgPreview());
393 + if (merch.getLatitude() != 0.0 && merch.getLongitude() != 0.0) {
394 + mMap.addMarker(new MarkerOptions()
395 + .position(new LatLng(merch.getLatitude(), merch.getLongitude()))
396 + .anchor(0.5f, 0.5f)
397 + .title(merch.getTitle())
398 + .snippet(merch.getUuid()));
399 + }
400 + }
401 + } else {
402 + for (Merchant merch : result) {
403 + if (merch.getLatitude() != 0.0 && merch.getLongitude() != 0.0) {
404 + mMap.addMarker(new MarkerOptions()
405 + .position(new LatLng(merch.getLatitude(), merch.getLongitude()))
406 + .anchor(0.5f, 0.5f)
407 + .title(merch.getTitle())
408 + .snippet(merch.getUuid()));
409 + }
410 + }
411 + }
412 + }
413 +
414 + @Override
415 + public void onFailure(int errorCode) {
416 + Log.v("SHOPS_ACTIVITY", String.valueOf(errorCode));
417 + }
418 + };
419 +
360 // =========================================================== 420 // ===========================================================
361 // Inner and Anonymous Classes 421 // Inner and Anonymous Classes
362 // =========================================================== 422 // ===========================================================
......
...@@ -71,7 +71,7 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -71,7 +71,7 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
71 private SupportMapFragment mSupportMapFragment; 71 private SupportMapFragment mSupportMapFragment;
72 private MerchantList mMerchantList = new MerchantList(); 72 private MerchantList mMerchantList = new MerchantList();
73 private AlertDialog mAlertDialogNoShopsAvailable; 73 private AlertDialog mAlertDialogNoShopsAvailable;
74 - private Merchant mMerchant; 74 + private Merchant mMerchant, mMerchantParent;
75 75
76 // =========================================================== 76 // ===========================================================
77 // Methods for/from SuperClass/Interfaces 77 // Methods for/from SuperClass/Interfaces
...@@ -195,16 +195,8 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -195,16 +195,8 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
195 }).start(); 195 }).start();
196 } else { 196 } else {
197 ArrayList<String> catuuids = new ArrayList<>(); 197 ArrayList<String> catuuids = new ArrayList<>();
198 - catuuids.add(WarplyProperty.getAppUuid(this).equals("0086a2088301440792091b9f814c2267") ? "" : "adcace6cab6049c7b7271bc85bc2b26d"); //TODO: add live cat uuid 198 + catuuids.add(WarplyProperty.getAppUuid(this).equals("0086a2088301440792091b9f814c2267") ? "2a6adade35f1484994a3d4c8f006b909" : "adcace6cab6049c7b7271bc85bc2b26d");
199 - new Thread(() -> { 199 + WarplyManager.getMerchantsMultilingual(catuuids, mMerchantsDealsCallback);
200 - if (!Thread.currentThread().isInterrupted()) {
201 - WarplyManager.getMerchantsMultilingual(new WarplyMerchantsRequest()
202 - .setIsMultilingual(true)
203 - .setCategories(catuuids)
204 - , mMerchantsCallback);
205 - }
206 - Thread.currentThread().interrupt();
207 - }).start();
208 } 200 }
209 } 201 }
210 202
...@@ -375,6 +367,72 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -375,6 +367,72 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
375 } 367 }
376 }; 368 };
377 369
370 + private final CallbackReceiver<MerchantList> mMerchantsDealsCallback = new CallbackReceiver<MerchantList>() {
371 + @Override
372 + public void onSuccess(MerchantList result) {
373 + if (result.size() == 0) {
374 + showNoShopsAvailableDialog();
375 + return;
376 + }
377 +
378 + mMerchantList.clear();
379 + mMerchantList.addAll(result);
380 +
381 + // if (mClusterManager != null) {
382 +// mMap.clear();
383 +// mClusterManager.clearItems();
384 +// if (result != null) {
385 +// mClusterManager.addItems(result);
386 +// }
387 +// mClusterManager.cluster();
388 +// }
389 +
390 + int nonNullCoords = 0;
391 + for (Merchant merchCoords : result) {
392 + if (merchCoords.getLatitude() != 0.0 && merchCoords.getLongitude() != 0.0) {
393 + nonNullCoords++;
394 + } else {
395 + mMerchantParent = merchCoords;
396 + }
397 + }
398 +
399 + if (nonNullCoords == 0) {
400 + showNoShopsAvailableDialog();
401 + return;
402 + }
403 +
404 + if (mMerchantParent != null) {
405 + for (Merchant merch : result) {
406 + merch.setImg_preview(mMerchantParent.getImgPreview());
407 + if (merch.getLatitude() != 0.0 && merch.getLongitude() != 0.0) {
408 + mMap.addMarker(new MarkerOptions()
409 + .position(new LatLng(merch.getLatitude(), merch.getLongitude()))
410 + .anchor(0.5f, 0.5f)
411 + .title(merch.getTitle())
412 + .snippet(merch.getUuid())
413 + .clusterable(true));
414 + }
415 + }
416 + } else {
417 + for (Merchant merch : result) {
418 + if (merch.getLatitude() != 0.0 && merch.getLongitude() != 0.0) {
419 + mMap.addMarker(new MarkerOptions()
420 + .position(new LatLng(merch.getLatitude(), merch.getLongitude()))
421 + .anchor(0.5f, 0.5f)
422 + .title(merch.getTitle())
423 + .snippet(merch.getUuid())
424 + .clusterable(true));
425 + }
426 + }
427 + }
428 + }
429 +
430 + @Override
431 + public void onFailure(int errorCode) {
432 + Log.v("SHOPS_ACTIVITY", String.valueOf(errorCode));
433 + }
434 + };
435 +
378 // =========================================================== 436 // ===========================================================
379 // Inner and Anonymous Classes 437 // Inner and Anonymous Classes
380 // =========================================================== 438 // ===========================================================
......
...@@ -2066,6 +2066,76 @@ public class WarplyManager { ...@@ -2066,6 +2066,76 @@ public class WarplyManager {
2066 }); 2066 });
2067 } 2067 }
2068 2068
2069 + public static void getMerchantsMultilingual(ArrayList<String> catuuids, final CallbackReceiver<MerchantList> receiver) {
2070 + WarpUtils.log("************* WARPLY Merchants Request ********************");
2071 + WarpUtils.log("[WARP Trace] WARPLY Merchants Request is active");
2072 + WarpUtils.log("**************************************************");
2073 +
2074 + ApiService service = ApiClient.getRetrofitInstance().create(ApiService.class);
2075 +
2076 + getMerchantsRetro(service, catuuids, new Callback<ResponseBody>() {
2077 + @Override
2078 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> responseMerchants) {
2079 + if (responseMerchants.code() == 200 && responseMerchants.body() != null) {
2080 + JSONObject jobjMerchantsResponse = null;
2081 + try {
2082 + jobjMerchantsResponse = new JSONObject(responseMerchants.body().string());
2083 + } catch (Exception e) {
2084 + e.printStackTrace();
2085 + }
2086 +
2087 + if (jobjMerchantsResponse != null && jobjMerchantsResponse.has("status") && jobjMerchantsResponse.optString("status", "2").equals("1")) {
2088 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
2089 + dynatraceEvent.setEventName("custom_success_shops_loyalty");
2090 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
2091 +
2092 + JSONArray jMerchantsBody = null;
2093 + try {
2094 + jMerchantsBody = jobjMerchantsResponse.optJSONObject("context").optJSONObject("MAPP_SHOPS").optJSONArray("result");
2095 + } catch (Exception e) {
2096 + e.printStackTrace();
2097 + }
2098 +
2099 + if (jMerchantsBody != null) {
2100 + MerchantList mMerchantList = new MerchantList();
2101 +
2102 + final ExecutorService executorShops = Executors.newFixedThreadPool(1);
2103 + JSONArray finalMerchantsJBody = jMerchantsBody;
2104 + executorShops.submit(() -> {
2105 + for (int i = 0; i < finalMerchantsJBody.length(); ++i) {
2106 + mMerchantList.add(new Merchant(finalMerchantsJBody.optJSONObject(i)));
2107 + }
2108 + new Handler(Looper.getMainLooper()).post(() -> receiver.onSuccess(mMerchantList));
2109 + executorShops.shutdownNow();
2110 + });
2111 + }
2112 + } else {
2113 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
2114 + dynatraceEvent.setEventName("custom_error_shops_loyalty");
2115 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
2116 +
2117 + receiver.onFailure(2);
2118 + }
2119 + } else {
2120 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
2121 + dynatraceEvent.setEventName("custom_error_shops_loyalty");
2122 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
2123 +
2124 + receiver.onFailure(responseMerchants.code());
2125 + }
2126 + }
2127 +
2128 + @Override
2129 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
2130 + LoyaltySDKDynatraceEventModel dynatraceEvent = new LoyaltySDKDynatraceEventModel();
2131 + dynatraceEvent.setEventName("custom_error_shops_loyalty");
2132 + EventBus.getDefault().post(new WarplyEventBusManager(dynatraceEvent));
2133 +
2134 + receiver.onFailure(2);
2135 + }
2136 + });
2137 + }
2138 +
2069 public static void getUserCouponsWithCouponsets(final CallbackReceiver<CouponList> receiver) { 2139 public static void getUserCouponsWithCouponsets(final CallbackReceiver<CouponList> receiver) {
2070 WarpUtils.log("************* WARPLY User Coupons Request ********************"); 2140 WarpUtils.log("************* WARPLY User Coupons Request ********************");
2071 WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active"); 2141 WarpUtils.log("[WARP Trace] WARPLY User Coupons Request is active");
...@@ -2424,6 +2494,49 @@ public class WarplyManager { ...@@ -2424,6 +2494,49 @@ public class WarplyManager {
2424 }); 2494 });
2425 } 2495 }
2426 2496
2497 + private static void getMerchantsRetro(ApiService service, ArrayList<String> catuuids, Callback<ResponseBody> callback) {
2498 + String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
2499 + String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
2500 + String webId = WarpUtils.getWebId(Warply.getWarplyContext());
2501 +
2502 + Map<String, Object> jsonParamsShops = new ArrayMap<>();
2503 + Map<String, Object> jsonParams = new ArrayMap<>();
2504 + jsonParams.put("action", "retrieve_multilingual");
2505 + jsonParams.put("categories", new JSONArray(catuuids));
2506 + jsonParams.put("active", true);
2507 + jsonParams.put("location", null);
2508 + jsonParams.put("parent_uuids", null);
2509 + jsonParams.put("tags", null);
2510 + jsonParams.put("default_shown", null);
2511 + jsonParams.put("language", WarplyProperty.getLanguage(Warply.getWarplyContext()));
2512 +
2513 + jsonParamsShops.put("shops", jsonParams);
2514 + RequestBody merchantsRequest = RequestBody.create(MediaType.get("application/json; charset=utf-8"), (new JSONObject(jsonParamsShops)).toString());
2515 +
2516 + Call<ResponseBody> merchantsCall = service.getMerchants(
2517 + WarplyProperty.getAppUuid(Warply.getWarplyContext()),
2518 + merchantsRequest,
2519 + timeStamp,
2520 + "android:" + Warply.getWarplyContext().getPackageName(),
2521 + new WarplyDeviceInfoCollector(Warply.getWarplyContext()).getUniqueDeviceId(),
2522 + "mobile",
2523 + webId,
2524 + WarpUtils.produceSignature(apiKey + timeStamp)
2525 + );
2526 +
2527 + merchantsCall.enqueue(new Callback<ResponseBody>() {
2528 + @Override
2529 + public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
2530 + callback.onResponse(call, response);
2531 + }
2532 +
2533 + @Override
2534 + public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
2535 + callback.onFailure(call, t);
2536 + }
2537 + });
2538 + }
2539 +
2427 private static void getUserCouponsRetro(ApiService service, Callback<ResponseBody> callback) { 2540 private static void getUserCouponsRetro(ApiService service, Callback<ResponseBody> callback) {
2428 String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString(); 2541 String timeStamp = DateFormat.format("yyyy-MM-dd hh:mm:ss", System.currentTimeMillis()).toString();
2429 String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext()); 2542 String apiKey = WarpUtils.getApiKey(Warply.getWarplyContext());
......