|
19 | 19 | import com.segment.analytics.integrations.TrackPayload;
|
20 | 20 | import com.segment.analytics.integrations.ScreenPayload;
|
21 | 21 |
|
| 22 | +import java.util.ArrayList; |
22 | 23 | import java.util.HashMap;
|
| 24 | +import java.util.List; |
23 | 25 | import java.util.Map;
|
24 | 26 |
|
25 | 27 | import static com.segment.analytics.internal.Utils.hasPermission;
|
@@ -104,6 +106,19 @@ private static Map<String, String> createPropertyMap() {
|
104 | 106 | return PROPERTY_MAPPER;
|
105 | 107 | }
|
106 | 108 |
|
| 109 | + private static final Map<String, String> PRODUCT_MAPPER = createProductMap(); |
| 110 | + |
| 111 | + private static Map<String, String> createProductMap() { |
| 112 | + Map<String, String> MAPPER = new HashMap<>(); |
| 113 | + MAPPER.put("category", Param.ITEM_CATEGORY); |
| 114 | + MAPPER.put("product_id", Param.ITEM_ID); |
| 115 | + MAPPER.put("id", Param.ITEM_ID); |
| 116 | + MAPPER.put("name", Param.ITEM_NAME); |
| 117 | + MAPPER.put("price", Param.PRICE); |
| 118 | + MAPPER.put("quantity", Param.QUANTITY); |
| 119 | + return MAPPER; |
| 120 | + } |
| 121 | + |
107 | 122 | public FirebaseIntegration(Context context, Logger logger) {
|
108 | 123 | this.logger = logger;
|
109 | 124 | this.firebaseAnalytics = FirebaseAnalytics.getInstance(context);
|
@@ -196,23 +211,52 @@ && isNullOrEmpty(properties.currency())) {
|
196 | 211 | } else {
|
197 | 212 | property = makeKey(property);
|
198 | 213 | }
|
199 |
| - if (value instanceof Integer) { |
200 |
| - int intValue = (int) value; |
201 |
| - bundle.putInt(property, intValue); |
202 |
| - } else if (value instanceof Double) { |
203 |
| - double doubleValue = (double) value; |
204 |
| - bundle.putDouble(property, doubleValue); |
205 |
| - } else if (value instanceof Long) { |
206 |
| - long longValue = (long) value; |
207 |
| - bundle.putLong(property, longValue); |
| 214 | + if (property.equals(Param.ITEMS)) { |
| 215 | + List<ValueMap> products = properties.getList("products", ValueMap.class); |
| 216 | + ArrayList<Bundle> mappedProducts = formatProducts(products); |
| 217 | + bundle.putParcelableArrayList(property, mappedProducts); |
208 | 218 | } else {
|
209 |
| - String stringValue = String.valueOf(value); |
210 |
| - bundle.putString(property, stringValue); |
| 219 | + putValue(bundle, property, value); |
211 | 220 | }
|
212 | 221 | }
|
213 | 222 | return bundle;
|
214 | 223 | }
|
215 | 224 |
|
| 225 | + private static ArrayList<Bundle> formatProducts(List<ValueMap> products) { |
| 226 | + ArrayList<Bundle> mappedProducts = new ArrayList<>(); |
| 227 | + for (ValueMap product : products) { |
| 228 | + Bundle mappedProduct = new Bundle(); |
| 229 | + for (Map.Entry<String, Object> innerEntry : product.entrySet()) { |
| 230 | + String key = innerEntry.getKey(); |
| 231 | + Object value = innerEntry.getValue(); |
| 232 | + if (PRODUCT_MAPPER.containsKey(key)) { |
| 233 | + key = PRODUCT_MAPPER.get(key); |
| 234 | + } else { |
| 235 | + key = makeKey(key); |
| 236 | + } |
| 237 | + putValue(mappedProduct, key, value); |
| 238 | + } |
| 239 | + mappedProducts.add(mappedProduct); |
| 240 | + } |
| 241 | + return mappedProducts; |
| 242 | + } |
| 243 | + |
| 244 | + private static void putValue(Bundle bundle, String key, Object value) { |
| 245 | + if (value instanceof Integer) { |
| 246 | + int intValue = (int) value; |
| 247 | + bundle.putInt(key, intValue); |
| 248 | + } else if (value instanceof Double) { |
| 249 | + double doubleValue = (double) value; |
| 250 | + bundle.putDouble(key, doubleValue); |
| 251 | + } else if (value instanceof Long) { |
| 252 | + long longValue = (long) value; |
| 253 | + bundle.putLong(key, longValue); |
| 254 | + } else { |
| 255 | + String stringValue = String.valueOf(value); |
| 256 | + bundle.putString(key, stringValue); |
| 257 | + } |
| 258 | + } |
| 259 | + |
216 | 260 | public static String makeKey(String key) {
|
217 | 261 | String[] forbiddenChars = {".", "-", " "};
|
218 | 262 | for (String forbidden : forbiddenChars) {
|
|
0 commit comments