Skip to content

Commit 897be2a

Browse files
authored
E2-1815: download files directly from URL instead of API call (#355)
* filename to URL parsing * fcu * fixes * add parse test * rename method and var * add null check
1 parent 7a072b5 commit 897be2a

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,8 @@ protected Void doInBackground(Void... params) {
811811
if (variants == null) {
812812
Log.d("No variants received from the server.");
813813
}
814+
Map<String, String> filenameToURLs = parseFilenameToURLs(response);
815+
FileManager.setFilenameToURLs(filenameToURLs);
814816

815817
if (BuildUtil.isNotificationChannelSupported(context)) {
816818
// Get notification channels and groups.
@@ -2109,6 +2111,8 @@ public void response(JSONObject response) {
21092111
}
21102112

21112113
parseVariantDebugInfo(response);
2114+
Map<String, String> filenameToURLs = parseFilenameToURLs(response);
2115+
FileManager.setFilenameToURLs(filenameToURLs);
21122116
}
21132117
if (callback != null) {
21142118
OsHandler.getInstance().post(callback);
@@ -2303,6 +2307,16 @@ public static Set<String> parseFeatureFlags(JSONObject response) {
23032307
return featureFlagSet;
23042308
}
23052309

2310+
@VisibleForTesting
2311+
public static Map<String, String> parseFilenameToURLs(JSONObject response) {
2312+
JSONObject filesObject = response.optJSONObject(
2313+
Constants.Keys.FILES);
2314+
if (filesObject != null) {
2315+
return JsonConverter.mapFromJson(filesObject);
2316+
}
2317+
return null;
2318+
}
2319+
23062320
private static Set<String> toSet(JSONArray array) {
23072321
Set<String> set = new HashSet<>();
23082322
if (array != null) {

AndroidSDKCore/src/main/java/com/leanplum/internal/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ public static class Keys {
212212
public static final String LOGGING_ENABLED = "loggingEnabled";
213213
public static final String ENABLED_COUNTERS = "enabledSdkCounters";
214214
public static final String ENABLED_FEATURE_FLAGS = "enabledFeatureFlags";
215+
public static final String FILES = "files";
215216
public static final String TIMEZONE = "timezone";
216217
public static final String TIMEZONE_OFFSET_SECONDS = "timezoneOffsetSeconds";
217218
public static final String TITLE = "Title";

AndroidSDKCore/src/main/java/com/leanplum/internal/FileManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ interface ResourceUpdateCallback {
6666
private static boolean initializing = false;
6767
static final Object initializingLock = new Object();
6868
public static Var<HashMap<String, Object>> resources = null;
69+
public static Map<String, String> filenameToURLs = null;
6970

7071
public enum DownloadFileResult {
7172
NONE,
@@ -108,6 +109,9 @@ public static DownloadFileResult maybeDownloadFile(boolean isResource, String st
108109
if (!FileManager.fileExistsAtPath(realPath)) {
109110
realPath = FileManager.fileRelativeToDocuments(stringValue);
110111
if (!FileManager.fileExistsAtPath(realPath)) {
112+
if (FileManager.filenameToURLs != null && FileManager.filenameToURLs.containsKey(stringValue) && urlValue == null) {
113+
urlValue = FileManager.filenameToURLs.get(stringValue);
114+
}
111115
RequestOld downloadRequest = RequestOld.get(Constants.Methods.DOWNLOAD_FILE, null);
112116
downloadRequest.onResponse(new RequestOld.ResponseCallback() {
113117
@Override
@@ -185,6 +189,10 @@ public static boolean fileExistsAtPath(String path) {
185189
return path != null && new File(path).exists();
186190
}
187191

192+
public static void setFilenameToURLs(Map<String, String> filenameToURLs) {
193+
FileManager.filenameToURLs = filenameToURLs;
194+
}
195+
188196
@SuppressWarnings("SameReturnValue")
189197
private static String appBundlePath() {
190198
return "";

AndroidSDKTests/src/test/java/com/leanplum/LeanplumTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,31 @@ public void testParseSdkCounters() throws JSONException {
13581358
assertEquals(new HashSet<>(Arrays.asList("test")), parsedCounters);
13591359
}
13601360

1361+
@Test
1362+
public void testParseFilenameToURLs() throws JSONException {
1363+
JSONObject response = new JSONObject();
1364+
JSONObject files = new JSONObject();
1365+
files.put("file.jpg", "https://www.domain.com/file.jpg");
1366+
response.put(Constants.Keys.FILES, files);
1367+
1368+
Map<String, String> parsedFiles= Leanplum.parseFilenameToURLs(response);
1369+
assertEquals(JsonConverter.mapFromJson(files), parsedFiles);
1370+
}
1371+
1372+
/**
1373+
* Tests for parsing filenameToURLs
1374+
*/
1375+
@Test
1376+
public void testStartResponseShouldParseFilenameToURLs() {
1377+
// Setup sdk.
1378+
setupSDK(mContext, "/responses/simple_start_response.json");
1379+
1380+
Map<String, String> files = new HashMap<>();
1381+
files.put("file1.jpg", "http://www.domain.com/file1.jpg");
1382+
files.put("file2.jpg", "http://www.domain.com/file2.jpg");
1383+
1384+
assertEquals(files, FileManager.filenameToURLs);
1385+
}
13611386

13621387
/**
13631388
* Tests for parsing feature flags

AndroidSDKTests/src/test/resources/responses/simple_start_response.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,10 @@
332332
"testFeatureFlag1",
333333
"testFeatureFlag2"
334334
],
335+
"files": {
336+
"file1.jpg" : "http://www.domain.com/file1.jpg",
337+
"file2.jpg" : "http://www.domain.com/file2.jpg"
338+
},
335339
"syncNewsfeed": false,
336340
"success": true,
337341
"interfaceEvents": [

0 commit comments

Comments
 (0)