@capawesome/capacitor-live-update 6.7.2 → 7.0.0-dev.1765885034

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CapawesomeCapacitorLiveUpdate.podspec +3 -3
  2. package/Package.swift +32 -0
  3. package/README.md +419 -83
  4. package/android/build.gradle +12 -12
  5. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +758 -273
  6. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java +29 -27
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java +40 -7
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java +212 -68
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePreferences.java +52 -3
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetLatestBundleResponse.java +27 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/DownloadBundleProgressEvent.java +32 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/{results/GetBundleResult.java → events/NextBundleSetEvent.java} +9 -7
  13. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/DownloadBundleOptions.java +16 -1
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetConfigOptions.java +19 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SyncOptions.java +4 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +29 -1
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
  23. package/dist/docs.json +630 -103
  24. package/dist/esm/definitions.d.ts +365 -39
  25. package/dist/esm/definitions.js.map +1 -1
  26. package/dist/esm/index.js +1 -1
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/web.d.ts +9 -2
  29. package/dist/esm/web.js +21 -0
  30. package/dist/esm/web.js.map +1 -1
  31. package/dist/plugin.cjs.js +22 -3
  32. package/dist/plugin.cjs.js.map +1 -1
  33. package/dist/plugin.js +22 -3
  34. package/dist/plugin.js.map +1 -1
  35. package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
  36. package/ios/Plugin/Classes/{Results/GetBundleResult.swift → Events/NextBundleSetEvent.swift} +3 -3
  37. package/ios/Plugin/Classes/Options/DownloadBundleOptions.swift +7 -1
  38. package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
  39. package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
  40. package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +16 -1
  41. package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
  42. package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
  43. package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
  44. package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
  45. package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
  46. package/ios/Plugin/LiveUpdate.swift +370 -151
  47. package/ios/Plugin/LiveUpdateConfig.swift +4 -4
  48. package/ios/Plugin/LiveUpdateHttpClient.swift +10 -4
  49. package/ios/Plugin/LiveUpdatePlugin.swift +138 -35
  50. package/ios/Plugin/LiveUpdatePreferences.swift +56 -14
  51. package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +3 -0
  52. package/package.json +19 -20
  53. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetBundleOptions.java +0 -18
  54. package/ios/Plugin/Classes/Options/SetBundleOptions.swift +0 -14
  55. package/ios/Plugin/LiveUpdatePlugin.h +0 -10
  56. package/ios/Plugin/LiveUpdatePlugin.m +0 -27
@@ -1,21 +1,32 @@
1
1
  package io.capawesome.capacitorjs.plugins.liveupdate;
2
2
 
3
+ import android.webkit.WebView;
4
+ import androidx.annotation.NonNull;
3
5
  import androidx.annotation.Nullable;
6
+ import com.getcapacitor.JSObject;
4
7
  import com.getcapacitor.Logger;
5
8
  import com.getcapacitor.Plugin;
6
9
  import com.getcapacitor.PluginCall;
7
10
  import com.getcapacitor.PluginMethod;
11
+ import com.getcapacitor.WebViewListener;
8
12
  import com.getcapacitor.annotation.CapacitorPlugin;
13
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.events.DownloadBundleProgressEvent;
14
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.events.NextBundleSetEvent;
9
15
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.DeleteBundleOptions;
10
16
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.DownloadBundleOptions;
11
17
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.FetchLatestBundleOptions;
12
- import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetBundleOptions;
13
18
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetChannelOptions;
19
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetConfigOptions;
14
20
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetCustomIdOptions;
15
21
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetNextBundleOptions;
16
22
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SyncOptions;
23
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.FetchLatestBundleResult;
24
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetBlockedBundlesResult;
25
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetConfigResult;
17
26
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetCurrentBundleResult;
27
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetDownloadedBundlesResult;
18
28
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetNextBundleResult;
29
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.IsSyncingResult;
19
30
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.EmptyCallback;
20
31
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.NonEmptyCallback;
21
32
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.Result;
@@ -24,7 +35,7 @@ import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.Result;
24
35
  public class LiveUpdatePlugin extends Plugin {
25
36
 
26
37
  public static final String TAG = "LiveUpdate";
27
- public static final String VERSION = "6.7.2";
38
+ public static final String VERSION = "7.4.0";
28
39
  public static final String SHARED_PREFERENCES_NAME = "CapawesomeLiveUpdate"; // DO NOT CHANGE
29
40
  public static final String ERROR_APP_ID_MISSING = "appId must be configured.";
30
41
  public static final String ERROR_BUNDLE_EXISTS = "bundle already exists.";
@@ -42,8 +53,9 @@ public class LiveUpdatePlugin extends Plugin {
42
53
  public static final String ERROR_SIGNATURE_MISSING = "Bundle does not contain a signature.";
43
54
  public static final String ERROR_SYNC_IN_PROGRESS = "Sync is already in progress.";
44
55
  public static final String ERROR_UNKNOWN_ERROR = "An unknown error has occurred.";
45
-
46
- private boolean syncInProgress = false;
56
+ public static final String EVENT_DOWNLOAD_BUNDLE_PROGRESS = "downloadBundleProgress";
57
+ public static final String EVENT_NEXT_BUNDLE_SET = "nextBundleSet";
58
+ public static final String EVENT_RELOADED = "reloaded";
47
59
 
48
60
  @Nullable
49
61
  private LiveUpdateConfig config;
@@ -51,6 +63,8 @@ public class LiveUpdatePlugin extends Plugin {
51
63
  @Nullable
52
64
  private LiveUpdate implementation;
53
65
 
66
+ private boolean webViewListenerRegistered = false;
67
+
54
68
  public void load() {
55
69
  try {
56
70
  config = getLiveUpdateConfig();
@@ -60,6 +74,46 @@ public class LiveUpdatePlugin extends Plugin {
60
74
  }
61
75
  }
62
76
 
77
+ @Override
78
+ protected void handleOnResume() {
79
+ super.handleOnResume();
80
+ try {
81
+ // Notify the implementation that the app has resumed
82
+ if (implementation != null) {
83
+ implementation.handleOnResume();
84
+ }
85
+ // Register WebView listener to trigger auto-update when page is loaded
86
+ // Important: For some reason, the listener CANNOT be registered in the load() method
87
+ // or constructor, it MUST be done here in onResume().
88
+ if (!webViewListenerRegistered) {
89
+ webViewListenerRegistered = true;
90
+ getBridge()
91
+ .addWebViewListener(
92
+ new WebViewListener() {
93
+ @Override
94
+ public void onPageLoaded(WebView webView) {
95
+ if (implementation != null) {
96
+ implementation.handleOnPageLoaded();
97
+ }
98
+ }
99
+ }
100
+ );
101
+ }
102
+ } catch (Exception exception) {
103
+ Logger.error(TAG, exception.getMessage(), exception);
104
+ }
105
+ }
106
+
107
+ @PluginMethod
108
+ public void clearBlockedBundles(PluginCall call) {
109
+ try {
110
+ implementation.clearBlockedBundles();
111
+ resolveCall(call);
112
+ } catch (Exception exception) {
113
+ rejectCall(call, exception);
114
+ }
115
+ }
116
+
63
117
  @PluginMethod
64
118
  public void deleteBundle(PluginCall call) {
65
119
  try {
@@ -73,7 +127,7 @@ public class LiveUpdatePlugin extends Plugin {
73
127
  EmptyCallback callback = new EmptyCallback() {
74
128
  @Override
75
129
  public void success() {
76
- call.resolve();
130
+ resolveCall(call);
77
131
  }
78
132
 
79
133
  @Override
@@ -98,17 +152,18 @@ public class LiveUpdatePlugin extends Plugin {
98
152
  return;
99
153
  }
100
154
  String checksum = call.getString("checksum");
155
+ String signature = call.getString("signature");
101
156
  String url = call.getString("url");
102
157
  if (url == null) {
103
158
  call.reject(ERROR_URL_MISSING);
104
159
  return;
105
160
  }
106
161
 
107
- DownloadBundleOptions options = new DownloadBundleOptions(artifactType, bundleId, checksum, url);
162
+ DownloadBundleOptions options = new DownloadBundleOptions(artifactType, bundleId, checksum, signature, url);
108
163
  EmptyCallback callback = new EmptyCallback() {
109
164
  @Override
110
165
  public void success() {
111
- call.resolve();
166
+ resolveCall(call);
112
167
  }
113
168
 
114
169
  @Override
@@ -126,11 +181,17 @@ public class LiveUpdatePlugin extends Plugin {
126
181
  @PluginMethod
127
182
  public void fetchLatestBundle(PluginCall call) {
128
183
  try {
184
+ String appId = config.getAppId();
185
+ if (appId == null || appId.isEmpty()) {
186
+ call.reject(ERROR_APP_ID_MISSING);
187
+ return;
188
+ }
189
+
129
190
  FetchLatestBundleOptions options = new FetchLatestBundleOptions(call);
130
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
191
+ NonEmptyCallback<FetchLatestBundleResult> callback = new NonEmptyCallback<>() {
131
192
  @Override
132
- public void success(Result result) {
133
- call.resolve(result.toJSObject());
193
+ public void success(FetchLatestBundleResult result) {
194
+ resolveCall(call, result.toJSObject());
134
195
  }
135
196
 
136
197
  @Override
@@ -146,12 +207,12 @@ public class LiveUpdatePlugin extends Plugin {
146
207
  }
147
208
 
148
209
  @PluginMethod
149
- public void getBundle(PluginCall call) {
210
+ public void getBlockedBundles(PluginCall call) {
150
211
  try {
151
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
212
+ NonEmptyCallback<GetBlockedBundlesResult> callback = new NonEmptyCallback<>() {
152
213
  @Override
153
- public void success(Result result) {
154
- call.resolve(result.toJSObject());
214
+ public void success(GetBlockedBundlesResult result) {
215
+ resolveCall(call, result.toJSObject());
155
216
  }
156
217
 
157
218
  @Override
@@ -160,7 +221,8 @@ public class LiveUpdatePlugin extends Plugin {
160
221
  }
161
222
  };
162
223
 
163
- implementation.getBundle(callback);
224
+ assert implementation != null;
225
+ implementation.getBlockedBundles(callback);
164
226
  } catch (Exception exception) {
165
227
  rejectCall(call, exception);
166
228
  }
@@ -172,7 +234,7 @@ public class LiveUpdatePlugin extends Plugin {
172
234
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
173
235
  @Override
174
236
  public void success(Result result) {
175
- call.resolve(result.toJSObject());
237
+ resolveCall(call, result.toJSObject());
176
238
  }
177
239
 
178
240
  @Override
@@ -187,13 +249,35 @@ public class LiveUpdatePlugin extends Plugin {
187
249
  }
188
250
  }
189
251
 
252
+ @PluginMethod
253
+ public void getDownloadedBundles(PluginCall call) {
254
+ try {
255
+ NonEmptyCallback<GetDownloadedBundlesResult> callback = new NonEmptyCallback<>() {
256
+ @Override
257
+ public void success(GetDownloadedBundlesResult result) {
258
+ resolveCall(call, result.toJSObject());
259
+ }
260
+
261
+ @Override
262
+ public void error(Exception exception) {
263
+ rejectCall(call, exception);
264
+ }
265
+ };
266
+
267
+ assert implementation != null;
268
+ implementation.getDownloadedBundles(callback);
269
+ } catch (Exception exception) {
270
+ rejectCall(call, exception);
271
+ }
272
+ }
273
+
190
274
  @PluginMethod
191
275
  public void getChannel(PluginCall call) {
192
276
  try {
193
277
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
194
278
  @Override
195
279
  public void success(Result result) {
196
- call.resolve(result.toJSObject());
280
+ resolveCall(call, result.toJSObject());
197
281
  }
198
282
 
199
283
  @Override
@@ -208,13 +292,35 @@ public class LiveUpdatePlugin extends Plugin {
208
292
  }
209
293
  }
210
294
 
295
+ @PluginMethod
296
+ public void getConfig(PluginCall call) {
297
+ try {
298
+ NonEmptyCallback<GetConfigResult> callback = new NonEmptyCallback<>() {
299
+ @Override
300
+ public void success(GetConfigResult result) {
301
+ resolveCall(call, result.toJSObject());
302
+ }
303
+
304
+ @Override
305
+ public void error(Exception exception) {
306
+ rejectCall(call, exception);
307
+ }
308
+ };
309
+
310
+ assert implementation != null;
311
+ implementation.getConfig(callback);
312
+ } catch (Exception exception) {
313
+ rejectCall(call, exception);
314
+ }
315
+ }
316
+
211
317
  @PluginMethod
212
318
  public void getCurrentBundle(PluginCall call) {
213
319
  try {
214
320
  NonEmptyCallback<GetCurrentBundleResult> callback = new NonEmptyCallback<>() {
215
321
  @Override
216
322
  public void success(GetCurrentBundleResult result) {
217
- call.resolve(result.toJSObject());
323
+ resolveCall(call, result.toJSObject());
218
324
  }
219
325
 
220
326
  @Override
@@ -236,7 +342,7 @@ public class LiveUpdatePlugin extends Plugin {
236
342
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
237
343
  @Override
238
344
  public void success(Result result) {
239
- call.resolve(result.toJSObject());
345
+ resolveCall(call, result.toJSObject());
240
346
  }
241
347
 
242
348
  @Override
@@ -257,7 +363,7 @@ public class LiveUpdatePlugin extends Plugin {
257
363
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
258
364
  @Override
259
365
  public void success(Result result) {
260
- call.resolve(result.toJSObject());
366
+ resolveCall(call, result.toJSObject());
261
367
  }
262
368
 
263
369
  @Override
@@ -278,7 +384,7 @@ public class LiveUpdatePlugin extends Plugin {
278
384
  NonEmptyCallback<GetNextBundleResult> callback = new NonEmptyCallback<>() {
279
385
  @Override
280
386
  public void success(GetNextBundleResult result) {
281
- call.resolve(result.toJSObject());
387
+ resolveCall(call, result.toJSObject());
282
388
  }
283
389
 
284
390
  @Override
@@ -300,7 +406,7 @@ public class LiveUpdatePlugin extends Plugin {
300
406
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
301
407
  @Override
302
408
  public void success(Result result) {
303
- call.resolve(result.toJSObject());
409
+ resolveCall(call, result.toJSObject());
304
410
  }
305
411
 
306
412
  @Override
@@ -321,7 +427,7 @@ public class LiveUpdatePlugin extends Plugin {
321
427
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
322
428
  @Override
323
429
  public void success(Result result) {
324
- call.resolve(result.toJSObject());
430
+ resolveCall(call, result.toJSObject());
325
431
  }
326
432
 
327
433
  @Override
@@ -336,11 +442,44 @@ public class LiveUpdatePlugin extends Plugin {
336
442
  }
337
443
  }
338
444
 
445
+ @PluginMethod
446
+ public void isSyncing(PluginCall call) {
447
+ try {
448
+ NonEmptyCallback<IsSyncingResult> callback = new NonEmptyCallback<>() {
449
+ @Override
450
+ public void success(IsSyncingResult result) {
451
+ resolveCall(call, result.toJSObject());
452
+ }
453
+
454
+ @Override
455
+ public void error(Exception exception) {
456
+ rejectCall(call, exception);
457
+ }
458
+ };
459
+
460
+ assert implementation != null;
461
+ implementation.isSyncing(callback);
462
+ } catch (Exception exception) {
463
+ rejectCall(call, exception);
464
+ }
465
+ }
466
+
339
467
  @PluginMethod
340
468
  public void ready(PluginCall call) {
341
469
  try {
342
- implementation.ready();
343
- call.resolve();
470
+ NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
471
+ @Override
472
+ public void success(Result result) {
473
+ resolveCall(call, result.toJSObject());
474
+ }
475
+
476
+ @Override
477
+ public void error(Exception exception) {
478
+ rejectCall(call, exception);
479
+ }
480
+ };
481
+
482
+ implementation.ready(callback);
344
483
  } catch (Exception exception) {
345
484
  rejectCall(call, exception);
346
485
  }
@@ -350,7 +489,7 @@ public class LiveUpdatePlugin extends Plugin {
350
489
  public void reload(PluginCall call) {
351
490
  try {
352
491
  implementation.reload();
353
- call.resolve();
492
+ resolveCall(call);
354
493
  } catch (Exception exception) {
355
494
  rejectCall(call, exception);
356
495
  }
@@ -360,35 +499,17 @@ public class LiveUpdatePlugin extends Plugin {
360
499
  public void reset(PluginCall call) {
361
500
  try {
362
501
  implementation.reset();
363
- call.resolve();
502
+ resolveCall(call);
364
503
  } catch (Exception exception) {
365
504
  rejectCall(call, exception);
366
505
  }
367
506
  }
368
507
 
369
508
  @PluginMethod
370
- public void setBundle(PluginCall call) {
509
+ public void resetConfig(PluginCall call) {
371
510
  try {
372
- String bundleId = call.getString("bundleId");
373
- if (bundleId == null) {
374
- call.reject(ERROR_BUNDLE_ID_MISSING);
375
- return;
376
- }
377
-
378
- SetBundleOptions options = new SetBundleOptions(bundleId);
379
- EmptyCallback callback = new EmptyCallback() {
380
- @Override
381
- public void success() {
382
- call.resolve();
383
- }
384
-
385
- @Override
386
- public void error(Exception exception) {
387
- rejectCall(call, exception);
388
- }
389
- };
390
-
391
- implementation.setBundle(options, callback);
511
+ implementation.resetConfig();
512
+ resolveCall(call);
392
513
  } catch (Exception exception) {
393
514
  rejectCall(call, exception);
394
515
  }
@@ -403,7 +524,7 @@ public class LiveUpdatePlugin extends Plugin {
403
524
  EmptyCallback callback = new EmptyCallback() {
404
525
  @Override
405
526
  public void success() {
406
- call.resolve();
527
+ resolveCall(call);
407
528
  }
408
529
 
409
530
  @Override
@@ -418,6 +539,17 @@ public class LiveUpdatePlugin extends Plugin {
418
539
  }
419
540
  }
420
541
 
542
+ @PluginMethod
543
+ public void setConfig(PluginCall call) {
544
+ try {
545
+ SetConfigOptions options = new SetConfigOptions(call);
546
+ implementation.setConfig(options);
547
+ resolveCall(call);
548
+ } catch (Exception exception) {
549
+ rejectCall(call, exception);
550
+ }
551
+ }
552
+
421
553
  @PluginMethod
422
554
  public void setCustomId(PluginCall call) {
423
555
  try {
@@ -431,7 +563,7 @@ public class LiveUpdatePlugin extends Plugin {
431
563
  EmptyCallback callback = new EmptyCallback() {
432
564
  @Override
433
565
  public void success() {
434
- call.resolve();
566
+ resolveCall(call);
435
567
  }
436
568
 
437
569
  @Override
@@ -453,7 +585,7 @@ public class LiveUpdatePlugin extends Plugin {
453
585
  EmptyCallback callback = new EmptyCallback() {
454
586
  @Override
455
587
  public void success() {
456
- call.resolve();
588
+ resolveCall(call);
457
589
  }
458
590
 
459
591
  @Override
@@ -472,64 +604,76 @@ public class LiveUpdatePlugin extends Plugin {
472
604
  public void sync(PluginCall call) {
473
605
  try {
474
606
  String appId = config.getAppId();
475
- if (appId == null) {
607
+ if (appId == null || appId.isEmpty()) {
476
608
  call.reject(ERROR_APP_ID_MISSING);
477
609
  return;
478
610
  }
479
611
 
480
- if (syncInProgress) {
481
- call.reject(ERROR_SYNC_IN_PROGRESS);
482
- return;
483
- }
484
- syncInProgress = true;
485
-
486
612
  SyncOptions options = new SyncOptions(call);
487
613
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
488
614
  @Override
489
615
  public void success(Result result) {
490
- syncInProgress = false;
491
- call.resolve(result.toJSObject());
616
+ resolveCall(call, result.toJSObject());
492
617
  }
493
618
 
494
619
  @Override
495
620
  public void error(Exception exception) {
496
- syncInProgress = false;
497
621
  rejectCall(call, exception);
498
622
  }
499
623
  };
500
624
 
501
625
  implementation.sync(options, callback);
502
626
  } catch (Exception exception) {
503
- syncInProgress = false;
504
627
  rejectCall(call, exception);
505
628
  }
506
629
  }
507
630
 
631
+ public void notifyDownloadBundleProgressListeners(@NonNull DownloadBundleProgressEvent event) {
632
+ notifyListeners(EVENT_DOWNLOAD_BUNDLE_PROGRESS, event.toJSObject(), false);
633
+ }
634
+
635
+ public void notifyNextBundleSetListeners(@NonNull NextBundleSetEvent event) {
636
+ notifyListeners(EVENT_NEXT_BUNDLE_SET, event.toJSObject(), false);
637
+ }
638
+
639
+ public void notifyReloadedListeners() {
640
+ JSObject event = new JSObject();
641
+ notifyListeners(EVENT_RELOADED, event, true);
642
+ }
643
+
508
644
  private LiveUpdateConfig getLiveUpdateConfig() {
509
645
  LiveUpdateConfig config = new LiveUpdateConfig();
510
646
 
511
647
  String appId = getConfig().getString("appId", config.getAppId());
512
648
  config.setAppId(appId);
649
+ boolean autoBlockRolledBackBundles = getConfig().getBoolean("autoBlockRolledBackBundles", config.getAutoBlockRolledBackBundles());
650
+ config.setAutoBlockRolledBackBundles(autoBlockRolledBackBundles);
513
651
  boolean autoDeleteBundles = getConfig().getBoolean("autoDeleteBundles", config.getAutoDeleteBundles());
514
652
  config.setAutoDeleteBundles(autoDeleteBundles);
653
+ String autoUpdateStrategy = getConfig().getString("autoUpdateStrategy", config.getAutoUpdateStrategy());
654
+ config.setAutoUpdateStrategy(autoUpdateStrategy);
515
655
  String defaultChannel = getConfig().getString("defaultChannel", config.getDefaultChannel());
516
656
  config.setDefaultChannel(defaultChannel);
517
- boolean enabled = getConfig().getBoolean("enabled", config.getEnabled());
518
- config.setEnabled(enabled);
519
657
  int httpTimeout = getConfig().getInt("httpTimeout", config.getHttpTimeout());
520
658
  config.setHttpTimeout(httpTimeout);
521
- String location = getConfig().getString("location", config.getLocation());
522
- config.setLocation(location);
523
659
  String publicKey = getConfig().getString("publicKey", config.getPublicKey());
524
660
  config.setPublicKey(publicKey);
525
661
  int readyTimeout = getConfig().getInt("readyTimeout", config.getReadyTimeout());
526
662
  config.setReadyTimeout(readyTimeout);
527
- boolean resetOnUpdate = getConfig().getBoolean("resetOnUpdate", config.getResetOnUpdate());
528
- config.setResetOnUpdate(resetOnUpdate);
663
+ String serverDomain = getConfig().getString("serverDomain", config.getServerDomain());
664
+ config.setServerDomain(serverDomain);
529
665
 
530
666
  return config;
531
667
  }
532
668
 
669
+ private void resolveCall(@NonNull PluginCall call) {
670
+ call.resolve();
671
+ }
672
+
673
+ private void resolveCall(@NonNull PluginCall call, @NonNull JSObject result) {
674
+ call.resolve(result);
675
+ }
676
+
533
677
  private void rejectCall(PluginCall call, Exception exception) {
534
678
  String message = exception.getMessage();
535
679
  if (exception instanceof java.net.SocketTimeoutException) {
@@ -15,16 +15,24 @@ public class LiveUpdatePreferences {
15
15
  @NonNull
16
16
  private final SharedPreferences.Editor settingsEditor;
17
17
 
18
+ private final String appIdKey = "appId"; // DO NOT CHANGE
19
+ private final String blockedBundleIdsKey = "blockedBundleIds"; // DO NOT CHANGE
18
20
  private final String channelKey = "channel"; // DO NOT CHANGE
19
21
  private final String deviceIdKey = "deviceId"; // DO NOT CHANGE
20
22
  private final String customIdKey = "customId"; // DO NOT CHANGE
21
23
  private final String lastVersionCodeKey = "lastVersionCode"; // DO NOT CHANGE
24
+ private final String previousBundleIdKey = "previousBundleId"; // DO NOT CHANGE
22
25
 
23
26
  public LiveUpdatePreferences(@NonNull Context context) {
24
27
  this.context = context;
25
28
  this.settingsEditor = context.getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE).edit();
26
29
  }
27
30
 
31
+ @Nullable
32
+ public String getAppId() {
33
+ return context.getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE).getString(appIdKey, null);
34
+ }
35
+
28
36
  @Nullable
29
37
  public String getChannel() {
30
38
  return context.getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE).getString(channelKey, null);
@@ -49,7 +57,39 @@ public class LiveUpdatePreferences {
49
57
  }
50
58
 
51
59
  public int getLastVersionCode() {
52
- return context.getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE).getInt(lastVersionCodeKey, 0);
60
+ return context.getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE).getInt(lastVersionCodeKey, -1);
61
+ }
62
+
63
+ @Nullable
64
+ public String getPreviousBundleId() {
65
+ return context
66
+ .getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE)
67
+ .getString(previousBundleIdKey, null);
68
+ }
69
+
70
+ @Nullable
71
+ public String getBlockedBundleIds() {
72
+ return context
73
+ .getSharedPreferences(LiveUpdatePlugin.SHARED_PREFERENCES_NAME, Activity.MODE_PRIVATE)
74
+ .getString(blockedBundleIdsKey, null);
75
+ }
76
+
77
+ public void setAppId(@Nullable String appId) {
78
+ if (appId == null) {
79
+ settingsEditor.remove(appIdKey);
80
+ } else {
81
+ settingsEditor.putString(appIdKey, appId);
82
+ }
83
+ settingsEditor.apply();
84
+ }
85
+
86
+ public void setBlockedBundleIds(@Nullable String blockedBundleIds) {
87
+ if (blockedBundleIds == null) {
88
+ settingsEditor.remove(blockedBundleIdsKey);
89
+ } else {
90
+ settingsEditor.putString(blockedBundleIdsKey, blockedBundleIds);
91
+ }
92
+ settingsEditor.apply();
53
93
  }
54
94
 
55
95
  public void setChannel(@Nullable String channel) {
@@ -79,8 +119,17 @@ public class LiveUpdatePreferences {
79
119
  settingsEditor.apply();
80
120
  }
81
121
 
82
- public void setLastVersionCode(int lastVersionCode) {
83
- settingsEditor.putInt(lastVersionCodeKey, lastVersionCode);
122
+ public void setLastVersionCode(int versionCode) {
123
+ settingsEditor.putInt(lastVersionCodeKey, versionCode);
124
+ settingsEditor.apply();
125
+ }
126
+
127
+ public void setPreviousBundleId(@Nullable String bundleId) {
128
+ if (bundleId == null) {
129
+ settingsEditor.remove(previousBundleIdKey);
130
+ } else {
131
+ settingsEditor.putString(previousBundleIdKey, bundleId);
132
+ }
84
133
  settingsEditor.apply();
85
134
  }
86
135
  }
@@ -16,6 +16,15 @@ public class GetLatestBundleResponse {
16
16
  @NonNull
17
17
  private String bundleId;
18
18
 
19
+ @Nullable
20
+ private String checksum;
21
+
22
+ @Nullable
23
+ private JSONObject customProperties;
24
+
25
+ @Nullable
26
+ private String signature;
27
+
19
28
  @NonNull
20
29
  private String url;
21
30
 
@@ -27,6 +36,9 @@ public class GetLatestBundleResponse {
27
36
  this.artifactType = ArtifactType.ZIP;
28
37
  }
29
38
  this.bundleId = responseJson.optString("bundleId");
39
+ this.checksum = responseJson.isNull("checksum") ? null : responseJson.optString("checksum");
40
+ this.customProperties = responseJson.optJSONObject("customProperties");
41
+ this.signature = responseJson.isNull("signature") ? null : responseJson.optString("signature");
30
42
  this.url = responseJson.optString("url");
31
43
  }
32
44
 
@@ -40,6 +52,21 @@ public class GetLatestBundleResponse {
40
52
  return bundleId;
41
53
  }
42
54
 
55
+ @Nullable
56
+ public JSONObject getCustomProperties() {
57
+ return customProperties;
58
+ }
59
+
60
+ @Nullable
61
+ public String getChecksum() {
62
+ return checksum;
63
+ }
64
+
65
+ @Nullable
66
+ public String getSignature() {
67
+ return signature;
68
+ }
69
+
43
70
  @NonNull
44
71
  public String getUrl() {
45
72
  return url;