Showing
5 changed files
with
148 additions
and
6 deletions
... | @@ -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.6rc35' | 5 | + PUBLISH_VERSION = '4.5.4.6rc36' |
6 | PUBLISH_ARTIFACT_ID = 'warply-android-sdk' | 6 | PUBLISH_ARTIFACT_ID = 'warply-android-sdk' |
7 | } | 7 | } |
8 | 8 | ... | ... |
... | @@ -432,7 +432,7 @@ public enum Warply { | ... | @@ -432,7 +432,7 @@ public enum Warply { |
432 | requestsInQueueCount = WarplyDBHelper.getInstance(context).addRequest( | 432 | requestsInQueueCount = WarplyDBHelper.getInstance(context).addRequest( |
433 | microappName, jObj.toString(), force); | 433 | microappName, jObj.toString(), force); |
434 | } | 434 | } |
435 | - tryWakingSendingTaskInternal(requestsInQueueCount); | 435 | + tryWakingSendingTaskInternal(context, requestsInQueueCount); |
436 | } | 436 | } |
437 | 437 | ||
438 | public static void postMicroappPush(String microappName, JSONObject jObj, boolean force) { | 438 | public static void postMicroappPush(String microappName, JSONObject jObj, boolean force) { |
... | @@ -1157,6 +1157,109 @@ public enum Warply { | ... | @@ -1157,6 +1157,109 @@ public enum Warply { |
1157 | } | 1157 | } |
1158 | } | 1158 | } |
1159 | 1159 | ||
1160 | + private void tryWakingSendingTaskInternal(Context context, long requestsInQueue) { | ||
1161 | + if (!WarpUtils.isRegisteredWarply(mContext)) { | ||
1162 | + WarpUtils | ||
1163 | + .log("************* WARPLY Registration ********************"); | ||
1164 | + WarpUtils | ||
1165 | + .log("[WARP TRace] Not registered yet, not waking post task!"); | ||
1166 | + WarpUtils | ||
1167 | + .log("******************************************************"); | ||
1168 | + return; | ||
1169 | + } | ||
1170 | + | ||
1171 | +// if (WarplyDBHelper.getInstance(mContext.get()).isForceRequestsExist() | ||
1172 | +// || (requestsInQueue >= MINIMUM_REQUESTS_FOR_SENDING)) { | ||
1173 | + | ||
1174 | + if (WarplyDBHelper.getInstance(mContext).isForceRequestsExist() | ||
1175 | + || (requestsInQueue > 0)) { | ||
1176 | + | ||
1177 | + WarpUtils.log("Waking post task!"); | ||
1178 | + wakeSendingTask(context); | ||
1179 | + } else { | ||
1180 | + WarpUtils.log("Criteria not matched, not waking post task!"); | ||
1181 | + } | ||
1182 | + } | ||
1183 | + | ||
1184 | + private void wakeSendingTask(Context context) { | ||
1185 | + | ||
1186 | + if (!acquirePostLockInternal()) | ||
1187 | + return; | ||
1188 | + | ||
1189 | + ArrayList<Long> ids = new ArrayList<>(); | ||
1190 | + JSONArray jArray = new JSONArray(); | ||
1191 | + Cursor c = WarplyDBHelper.getInstance(mContext).getAllRequests(); | ||
1192 | + while (c.moveToNext()) { | ||
1193 | + JSONObject jObj = new JSONObject(); | ||
1194 | + try { | ||
1195 | + jObj.putOpt( | ||
1196 | + c.getString(c | ||
1197 | + .getColumnIndex(WarplyDBHelper.KEY_REQUESTS_MICROAPP)), | ||
1198 | + new JSONObject(c.getString(c | ||
1199 | + .getColumnIndex(WarplyDBHelper.KEY_REQUESTS_ENTITY)))); | ||
1200 | + jArray.put(jObj); | ||
1201 | + } catch (JSONException e) { | ||
1202 | + if (WarpConstants.DEBUG) { | ||
1203 | + WarpUtils | ||
1204 | + .warn("[WARP Trace] Exception thrown when creating the JSON from DB with id: " | ||
1205 | + + c.getLong(c | ||
1206 | + .getColumnIndex(WarplyDBHelper.KEY_REQUESTS_ID)), | ||
1207 | + e); | ||
1208 | + } | ||
1209 | + } finally { | ||
1210 | + ids.add(c.getLong(c.getColumnIndex(WarplyDBHelper.KEY_REQUESTS_ID))); | ||
1211 | + } | ||
1212 | + } | ||
1213 | + c.close(); | ||
1214 | + PostHook ph = new PostHook(getWarplyContext(), ids); | ||
1215 | + postToServerInternal(context, null, jArray, ph, null); | ||
1216 | + getFromServerInternal(null, null, null, null);/** get context **/ | ||
1217 | + } | ||
1218 | + | ||
1219 | + private void postToServerInternal(Context context, String warplyPath, JSONArray data, | ||
1220 | + CallbackReceiver<JSONObject> listener, Object tag) { | ||
1221 | + String url = buildWarplyRequestUrl(context, warplyPath); | ||
1222 | + | ||
1223 | + JSONArray tempAnalytics = new JSONArray(); | ||
1224 | + JSONArray tempDeviceInfo = new JSONArray(); | ||
1225 | + JSONArray tempOther = new JSONArray(); | ||
1226 | + if (data.length() > 0) { | ||
1227 | + for (int i = 0; i < data.length(); i++) { | ||
1228 | + JSONObject microappItem = data.optJSONObject(i); | ||
1229 | + if (microappItem != null) { | ||
1230 | + if (microappItem.has("inapp_analytics")) { | ||
1231 | + tempAnalytics.put(microappItem); | ||
1232 | + } else if (microappItem.has("device_info") || microappItem.has("application_data")) { | ||
1233 | + tempDeviceInfo.put(microappItem); | ||
1234 | + } else { | ||
1235 | + tempOther.put(microappItem); | ||
1236 | + } | ||
1237 | + } | ||
1238 | + } | ||
1239 | + } | ||
1240 | + | ||
1241 | + if (tempAnalytics != null && tempAnalytics.length() > 0) { | ||
1242 | + url = WarplyProperty.getBaseUrl(mContext) + WarpConstants.WARPLY_ASYNC + WarpConstants.WARPLY_ANALYTICS + WarplyProperty.getAppUuid(mContext) + "/"; | ||
1243 | + } | ||
1244 | + if (tempDeviceInfo != null && tempDeviceInfo.length() > 0) { | ||
1245 | + url = WarplyProperty.getBaseUrl(mContext) + WarpConstants.WARPLY_ASYNC + WarpConstants.WARPLY_DEVICE_INFO + WarplyProperty.getAppUuid(mContext) + "/"; | ||
1246 | + } | ||
1247 | + if (tempOther != null && tempOther.length() > 0) { | ||
1248 | + url = buildWarplyRequestUrl(warplyPath); | ||
1249 | + } | ||
1250 | + | ||
1251 | + requestToServerInternal(Method.POST, url, data, listener, tag); | ||
1252 | + } | ||
1253 | + | ||
1254 | + private String buildWarplyRequestUrl(Context context, String warplyPath) { | ||
1255 | + StringBuilder sb = new StringBuilder(WarplyProperty.getBaseUrl(context) + WarpConstants.BASE_URL_MOBILE); | ||
1256 | + sb.append(WarplyProperty.getAppUuid(mContext)).append("/") | ||
1257 | + .append(WarpConstants.PATH_CONTEXT).append("/"); | ||
1258 | + if (warplyPath != null) | ||
1259 | + sb.append("?path=").append(warplyPath); | ||
1260 | + return sb.toString(); | ||
1261 | + } | ||
1262 | + | ||
1160 | public static void tryWakingSendingPushTask(boolean force) { | 1263 | public static void tryWakingSendingPushTask(boolean force) { |
1161 | INSTANCE.isInitializedOrThrow(); | 1264 | INSTANCE.isInitializedOrThrow(); |
1162 | INSTANCE.tryWakingSendingPushTaskInternal(WarplyDBHelper.getInstance( | 1265 | INSTANCE.tryWakingSendingPushTaskInternal(WarplyDBHelper.getInstance( | ... | ... |
... | @@ -97,7 +97,7 @@ public class GiftsForYouActivity extends AppCompatActivity implements View.OnCli | ... | @@ -97,7 +97,7 @@ public class GiftsForYouActivity extends AppCompatActivity implements View.OnCli |
97 | @Override | 97 | @Override |
98 | public void onResume() { | 98 | public void onResume() { |
99 | super.onResume(); | 99 | super.onResume(); |
100 | - WarplyAnalyticsManager.logTrackersEvent(this, "screen", "GiftsForYouScreen"); | 100 | + WarplyAnalyticsManager.logTrackersEvent(GiftsForYouActivity.this, "screen", "GiftsForYouScreen"); |
101 | mTimer = 0; | 101 | mTimer = 0; |
102 | mSecondsHandler.post(new Runnable() { | 102 | mSecondsHandler.post(new Runnable() { |
103 | @Override | 103 | @Override | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package ly.warp.sdk.io.volley.toolbox; | 17 | package ly.warp.sdk.io.volley.toolbox; |
18 | 18 | ||
19 | +import java.io.ByteArrayOutputStream; | ||
19 | import java.io.EOFException; | 20 | import java.io.EOFException; |
20 | import java.io.File; | 21 | import java.io.File; |
21 | import java.io.FileInputStream; | 22 | import java.io.FileInputStream; |
... | @@ -34,6 +35,8 @@ import ly.warp.sdk.io.volley.Cache; | ... | @@ -34,6 +35,8 @@ import ly.warp.sdk.io.volley.Cache; |
34 | import ly.warp.sdk.io.volley.VolleyLog; | 35 | import ly.warp.sdk.io.volley.VolleyLog; |
35 | import android.os.SystemClock; | 36 | import android.os.SystemClock; |
36 | 37 | ||
38 | +import com.google.android.gms.common.util.IOUtils; | ||
39 | + | ||
37 | /** | 40 | /** |
38 | * Cache implementation that caches files directly onto the hard disk in the specified | 41 | * Cache implementation that caches files directly onto the hard disk in the specified |
39 | * directory. The default disk usage size is 5MB, but is configurable. | 42 | * directory. The default disk usage size is 5MB, but is configurable. |
... | @@ -114,6 +117,7 @@ public class DiskBasedCache implements Cache { | ... | @@ -114,6 +117,7 @@ public class DiskBasedCache implements Cache { |
114 | cis = new CountingInputStream(new FileInputStream(file)); | 117 | cis = new CountingInputStream(new FileInputStream(file)); |
115 | CacheHeader.readHeader(cis); // eat header | 118 | CacheHeader.readHeader(cis); // eat header |
116 | byte[] data = streamToBytes(cis, (int) Math.abs((int)(file.length() - cis.bytesRead))); | 119 | byte[] data = streamToBytes(cis, (int) Math.abs((int)(file.length() - cis.bytesRead))); |
120 | +// byte[] data = readAllBytes(cis); | ||
117 | return entry.toCacheEntry(data); | 121 | return entry.toCacheEntry(data); |
118 | } catch (IOException e) { | 122 | } catch (IOException e) { |
119 | VolleyLog.d("%s: %s", file.getAbsolutePath(), e.toString()); | 123 | VolleyLog.d("%s: %s", file.getAbsolutePath(), e.toString()); |
... | @@ -312,7 +316,12 @@ public class DiskBasedCache implements Cache { | ... | @@ -312,7 +316,12 @@ public class DiskBasedCache implements Cache { |
312 | * Reads the contents of an InputStream into a byte[]. | 316 | * Reads the contents of an InputStream into a byte[]. |
313 | * */ | 317 | * */ |
314 | private static byte[] streamToBytes(InputStream in, int length) throws IOException { | 318 | private static byte[] streamToBytes(InputStream in, int length) throws IOException { |
315 | - byte[] bytes = new byte[length]; | 319 | + byte[] bytes = new byte[1]; |
320 | + try { | ||
321 | + bytes = IOUtils.toByteArray(in); | ||
322 | + } catch (OutOfMemoryError e) { | ||
323 | + e.printStackTrace(); | ||
324 | + } | ||
316 | int count; | 325 | int count; |
317 | int pos = 0; | 326 | int pos = 0; |
318 | while (pos < length && ((count = in.read(bytes, pos, length - pos)) != -1)) { | 327 | while (pos < length && ((count = in.read(bytes, pos, length - pos)) != -1)) { |
... | @@ -324,6 +333,32 @@ public class DiskBasedCache implements Cache { | ... | @@ -324,6 +333,32 @@ public class DiskBasedCache implements Cache { |
324 | return bytes; | 333 | return bytes; |
325 | } | 334 | } |
326 | 335 | ||
336 | + public static byte[] readAllBytes(InputStream inputStream) throws IOException { | ||
337 | + final int bufLen = 4 * 0x400; // 4KB | ||
338 | + byte[] buf = new byte[bufLen]; | ||
339 | + int readLen; | ||
340 | + IOException exception = null; | ||
341 | + | ||
342 | + try { | ||
343 | + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { | ||
344 | + while ((readLen = inputStream.read(buf, 0, bufLen)) != -1) | ||
345 | + outputStream.write(buf, 0, readLen); | ||
346 | + | ||
347 | + return outputStream.toByteArray(); | ||
348 | + } | ||
349 | + } catch (IOException e) { | ||
350 | + exception = e; | ||
351 | + throw e; | ||
352 | + } finally { | ||
353 | + if (exception == null) inputStream.close(); | ||
354 | + else try { | ||
355 | + inputStream.close(); | ||
356 | + } catch (IOException e) { | ||
357 | + exception.addSuppressed(e); | ||
358 | + } | ||
359 | + } | ||
360 | + } | ||
361 | + | ||
327 | /** | 362 | /** |
328 | * Handles holding onto the cache headers for an entry. | 363 | * Handles holding onto the cache headers for an entry. |
329 | */ | 364 | */ |
... | @@ -522,7 +557,7 @@ public class DiskBasedCache implements Cache { | ... | @@ -522,7 +557,7 @@ public class DiskBasedCache implements Cache { |
522 | 557 | ||
523 | static String readString(InputStream is) throws IOException { | 558 | static String readString(InputStream is) throws IOException { |
524 | int n = (int) readLong(is); | 559 | int n = (int) readLong(is); |
525 | - byte[] b = streamToBytes(is, n); | 560 | + byte[] b = readAllBytes(is); |
526 | return new String(b, "UTF-8"); | 561 | return new String(b, "UTF-8"); |
527 | } | 562 | } |
528 | 563 | ... | ... |
... | @@ -56,15 +56,19 @@ public class WarplyProperty { | ... | @@ -56,15 +56,19 @@ public class WarplyProperty { |
56 | // =========================================================== | 56 | // =========================================================== |
57 | 57 | ||
58 | private static String getWarplyProperty(Context context, String propertyKey) { | 58 | private static String getWarplyProperty(Context context, String propertyKey) { |
59 | + if(context == null) { | ||
60 | + return ""; | ||
61 | + } | ||
59 | try { | 62 | try { |
60 | Properties properties = new Properties(); | 63 | Properties properties = new Properties(); |
61 | properties.load(context.getResources().getAssets().open(PROPERTIES_FILE)); | 64 | properties.load(context.getResources().getAssets().open(PROPERTIES_FILE)); |
62 | return properties.getProperty(propertyKey); | 65 | return properties.getProperty(propertyKey); |
63 | } catch (IOException e) { | 66 | } catch (IOException e) { |
64 | WarpUtils.log(e.getMessage()); | 67 | WarpUtils.log(e.getMessage()); |
65 | - } | ||
66 | return ""; | 68 | return ""; |
67 | } | 69 | } |
70 | +// return ""; | ||
71 | + } | ||
68 | 72 | ||
69 | @Nullable | 73 | @Nullable |
70 | private static Bundle getMetaData(Context context) { | 74 | private static Bundle getMetaData(Context context) { | ... | ... |
-
Please register or login to post a comment