|
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