@capawesome/capacitor-live-update 6.8.0 → 7.0.0-dev.2633ff2.1765953041

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 (54) hide show
  1. package/CapawesomeCapacitorLiveUpdate.podspec +3 -3
  2. package/Package.swift +32 -0
  3. package/README.md +438 -86
  4. package/android/build.gradle +12 -12
  5. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +754 -279
  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 +210 -67
  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 +11 -2
  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/SetConfigOptions.java +19 -0
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SyncOptions.java +4 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +8 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
  22. package/dist/docs.json +597 -102
  23. package/dist/esm/definitions.d.ts +338 -39
  24. package/dist/esm/definitions.js.map +1 -1
  25. package/dist/esm/index.js +1 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/web.d.ts +9 -2
  28. package/dist/esm/web.js +21 -0
  29. package/dist/esm/web.js.map +1 -1
  30. package/dist/plugin.cjs.js +22 -3
  31. package/dist/plugin.cjs.js.map +1 -1
  32. package/dist/plugin.js +22 -3
  33. package/dist/plugin.js.map +1 -1
  34. package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
  35. package/ios/Plugin/Classes/{Results/GetBundleResult.swift → Events/NextBundleSetEvent.swift} +3 -3
  36. package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
  37. package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
  38. package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +6 -1
  39. package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
  40. package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
  41. package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
  42. package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
  43. package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
  44. package/ios/Plugin/LiveUpdate.swift +365 -149
  45. package/ios/Plugin/LiveUpdateConfig.swift +4 -4
  46. package/ios/Plugin/LiveUpdateHttpClient.swift +10 -4
  47. package/ios/Plugin/LiveUpdatePlugin.swift +136 -34
  48. package/ios/Plugin/LiveUpdatePreferences.swift +54 -12
  49. package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +1 -0
  50. package/package.json +19 -20
  51. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetBundleOptions.java +0 -18
  52. package/ios/Plugin/Classes/Options/SetBundleOptions.swift +0 -14
  53. package/ios/Plugin/LiveUpdatePlugin.h +0 -10
  54. 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.8.0";
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
@@ -109,7 +163,7 @@ public class LiveUpdatePlugin extends Plugin {
109
163
  EmptyCallback callback = new EmptyCallback() {
110
164
  @Override
111
165
  public void success() {
112
- call.resolve();
166
+ resolveCall(call);
113
167
  }
114
168
 
115
169
  @Override
@@ -127,11 +181,17 @@ public class LiveUpdatePlugin extends Plugin {
127
181
  @PluginMethod
128
182
  public void fetchLatestBundle(PluginCall call) {
129
183
  try {
184
+ String appId = config.getAppId();
185
+ if (appId == null || appId.isEmpty()) {
186
+ call.reject(ERROR_APP_ID_MISSING);
187
+ return;
188
+ }
189
+
130
190
  FetchLatestBundleOptions options = new FetchLatestBundleOptions(call);
131
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
191
+ NonEmptyCallback<FetchLatestBundleResult> callback = new NonEmptyCallback<>() {
132
192
  @Override
133
- public void success(Result result) {
134
- call.resolve(result.toJSObject());
193
+ public void success(FetchLatestBundleResult result) {
194
+ resolveCall(call, result.toJSObject());
135
195
  }
136
196
 
137
197
  @Override
@@ -147,12 +207,12 @@ public class LiveUpdatePlugin extends Plugin {
147
207
  }
148
208
 
149
209
  @PluginMethod
150
- public void getBundle(PluginCall call) {
210
+ public void getBlockedBundles(PluginCall call) {
151
211
  try {
152
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
212
+ NonEmptyCallback<GetBlockedBundlesResult> callback = new NonEmptyCallback<>() {
153
213
  @Override
154
- public void success(Result result) {
155
- call.resolve(result.toJSObject());
214
+ public void success(GetBlockedBundlesResult result) {
215
+ resolveCall(call, result.toJSObject());
156
216
  }
157
217
 
158
218
  @Override
@@ -161,7 +221,8 @@ public class LiveUpdatePlugin extends Plugin {
161
221
  }
162
222
  };
163
223
 
164
- implementation.getBundle(callback);
224
+ assert implementation != null;
225
+ implementation.getBlockedBundles(callback);
165
226
  } catch (Exception exception) {
166
227
  rejectCall(call, exception);
167
228
  }
@@ -173,7 +234,7 @@ public class LiveUpdatePlugin extends Plugin {
173
234
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
174
235
  @Override
175
236
  public void success(Result result) {
176
- call.resolve(result.toJSObject());
237
+ resolveCall(call, result.toJSObject());
177
238
  }
178
239
 
179
240
  @Override
@@ -188,13 +249,35 @@ public class LiveUpdatePlugin extends Plugin {
188
249
  }
189
250
  }
190
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
+
191
274
  @PluginMethod
192
275
  public void getChannel(PluginCall call) {
193
276
  try {
194
277
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
195
278
  @Override
196
279
  public void success(Result result) {
197
- call.resolve(result.toJSObject());
280
+ resolveCall(call, result.toJSObject());
198
281
  }
199
282
 
200
283
  @Override
@@ -209,13 +292,35 @@ public class LiveUpdatePlugin extends Plugin {
209
292
  }
210
293
  }
211
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
+
212
317
  @PluginMethod
213
318
  public void getCurrentBundle(PluginCall call) {
214
319
  try {
215
320
  NonEmptyCallback<GetCurrentBundleResult> callback = new NonEmptyCallback<>() {
216
321
  @Override
217
322
  public void success(GetCurrentBundleResult result) {
218
- call.resolve(result.toJSObject());
323
+ resolveCall(call, result.toJSObject());
219
324
  }
220
325
 
221
326
  @Override
@@ -237,7 +342,7 @@ public class LiveUpdatePlugin extends Plugin {
237
342
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
238
343
  @Override
239
344
  public void success(Result result) {
240
- call.resolve(result.toJSObject());
345
+ resolveCall(call, result.toJSObject());
241
346
  }
242
347
 
243
348
  @Override
@@ -258,7 +363,7 @@ public class LiveUpdatePlugin extends Plugin {
258
363
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
259
364
  @Override
260
365
  public void success(Result result) {
261
- call.resolve(result.toJSObject());
366
+ resolveCall(call, result.toJSObject());
262
367
  }
263
368
 
264
369
  @Override
@@ -279,7 +384,7 @@ public class LiveUpdatePlugin extends Plugin {
279
384
  NonEmptyCallback<GetNextBundleResult> callback = new NonEmptyCallback<>() {
280
385
  @Override
281
386
  public void success(GetNextBundleResult result) {
282
- call.resolve(result.toJSObject());
387
+ resolveCall(call, result.toJSObject());
283
388
  }
284
389
 
285
390
  @Override
@@ -301,7 +406,7 @@ public class LiveUpdatePlugin extends Plugin {
301
406
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
302
407
  @Override
303
408
  public void success(Result result) {
304
- call.resolve(result.toJSObject());
409
+ resolveCall(call, result.toJSObject());
305
410
  }
306
411
 
307
412
  @Override
@@ -322,7 +427,7 @@ public class LiveUpdatePlugin extends Plugin {
322
427
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
323
428
  @Override
324
429
  public void success(Result result) {
325
- call.resolve(result.toJSObject());
430
+ resolveCall(call, result.toJSObject());
326
431
  }
327
432
 
328
433
  @Override
@@ -337,11 +442,44 @@ public class LiveUpdatePlugin extends Plugin {
337
442
  }
338
443
  }
339
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
+
340
467
  @PluginMethod
341
468
  public void ready(PluginCall call) {
342
469
  try {
343
- implementation.ready();
344
- 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);
345
483
  } catch (Exception exception) {
346
484
  rejectCall(call, exception);
347
485
  }
@@ -351,7 +489,7 @@ public class LiveUpdatePlugin extends Plugin {
351
489
  public void reload(PluginCall call) {
352
490
  try {
353
491
  implementation.reload();
354
- call.resolve();
492
+ resolveCall(call);
355
493
  } catch (Exception exception) {
356
494
  rejectCall(call, exception);
357
495
  }
@@ -361,35 +499,17 @@ public class LiveUpdatePlugin extends Plugin {
361
499
  public void reset(PluginCall call) {
362
500
  try {
363
501
  implementation.reset();
364
- call.resolve();
502
+ resolveCall(call);
365
503
  } catch (Exception exception) {
366
504
  rejectCall(call, exception);
367
505
  }
368
506
  }
369
507
 
370
508
  @PluginMethod
371
- public void setBundle(PluginCall call) {
509
+ public void resetConfig(PluginCall call) {
372
510
  try {
373
- String bundleId = call.getString("bundleId");
374
- if (bundleId == null) {
375
- call.reject(ERROR_BUNDLE_ID_MISSING);
376
- return;
377
- }
378
-
379
- SetBundleOptions options = new SetBundleOptions(bundleId);
380
- EmptyCallback callback = new EmptyCallback() {
381
- @Override
382
- public void success() {
383
- call.resolve();
384
- }
385
-
386
- @Override
387
- public void error(Exception exception) {
388
- rejectCall(call, exception);
389
- }
390
- };
391
-
392
- implementation.setBundle(options, callback);
511
+ implementation.resetConfig();
512
+ resolveCall(call);
393
513
  } catch (Exception exception) {
394
514
  rejectCall(call, exception);
395
515
  }
@@ -404,7 +524,7 @@ public class LiveUpdatePlugin extends Plugin {
404
524
  EmptyCallback callback = new EmptyCallback() {
405
525
  @Override
406
526
  public void success() {
407
- call.resolve();
527
+ resolveCall(call);
408
528
  }
409
529
 
410
530
  @Override
@@ -419,6 +539,17 @@ public class LiveUpdatePlugin extends Plugin {
419
539
  }
420
540
  }
421
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
+
422
553
  @PluginMethod
423
554
  public void setCustomId(PluginCall call) {
424
555
  try {
@@ -432,7 +563,7 @@ public class LiveUpdatePlugin extends Plugin {
432
563
  EmptyCallback callback = new EmptyCallback() {
433
564
  @Override
434
565
  public void success() {
435
- call.resolve();
566
+ resolveCall(call);
436
567
  }
437
568
 
438
569
  @Override
@@ -454,7 +585,7 @@ public class LiveUpdatePlugin extends Plugin {
454
585
  EmptyCallback callback = new EmptyCallback() {
455
586
  @Override
456
587
  public void success() {
457
- call.resolve();
588
+ resolveCall(call);
458
589
  }
459
590
 
460
591
  @Override
@@ -473,64 +604,76 @@ public class LiveUpdatePlugin extends Plugin {
473
604
  public void sync(PluginCall call) {
474
605
  try {
475
606
  String appId = config.getAppId();
476
- if (appId == null) {
607
+ if (appId == null || appId.isEmpty()) {
477
608
  call.reject(ERROR_APP_ID_MISSING);
478
609
  return;
479
610
  }
480
611
 
481
- if (syncInProgress) {
482
- call.reject(ERROR_SYNC_IN_PROGRESS);
483
- return;
484
- }
485
- syncInProgress = true;
486
-
487
612
  SyncOptions options = new SyncOptions(call);
488
613
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
489
614
  @Override
490
615
  public void success(Result result) {
491
- syncInProgress = false;
492
- call.resolve(result.toJSObject());
616
+ resolveCall(call, result.toJSObject());
493
617
  }
494
618
 
495
619
  @Override
496
620
  public void error(Exception exception) {
497
- syncInProgress = false;
498
621
  rejectCall(call, exception);
499
622
  }
500
623
  };
501
624
 
502
625
  implementation.sync(options, callback);
503
626
  } catch (Exception exception) {
504
- syncInProgress = false;
505
627
  rejectCall(call, exception);
506
628
  }
507
629
  }
508
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
+
509
644
  private LiveUpdateConfig getLiveUpdateConfig() {
510
645
  LiveUpdateConfig config = new LiveUpdateConfig();
511
646
 
512
647
  String appId = getConfig().getString("appId", config.getAppId());
513
648
  config.setAppId(appId);
649
+ boolean autoBlockRolledBackBundles = getConfig().getBoolean("autoBlockRolledBackBundles", config.getAutoBlockRolledBackBundles());
650
+ config.setAutoBlockRolledBackBundles(autoBlockRolledBackBundles);
514
651
  boolean autoDeleteBundles = getConfig().getBoolean("autoDeleteBundles", config.getAutoDeleteBundles());
515
652
  config.setAutoDeleteBundles(autoDeleteBundles);
653
+ String autoUpdateStrategy = getConfig().getString("autoUpdateStrategy", config.getAutoUpdateStrategy());
654
+ config.setAutoUpdateStrategy(autoUpdateStrategy);
516
655
  String defaultChannel = getConfig().getString("defaultChannel", config.getDefaultChannel());
517
656
  config.setDefaultChannel(defaultChannel);
518
- boolean enabled = getConfig().getBoolean("enabled", config.getEnabled());
519
- config.setEnabled(enabled);
520
657
  int httpTimeout = getConfig().getInt("httpTimeout", config.getHttpTimeout());
521
658
  config.setHttpTimeout(httpTimeout);
522
- String location = getConfig().getString("location", config.getLocation());
523
- config.setLocation(location);
524
659
  String publicKey = getConfig().getString("publicKey", config.getPublicKey());
525
660
  config.setPublicKey(publicKey);
526
661
  int readyTimeout = getConfig().getInt("readyTimeout", config.getReadyTimeout());
527
662
  config.setReadyTimeout(readyTimeout);
528
- boolean resetOnUpdate = getConfig().getBoolean("resetOnUpdate", config.getResetOnUpdate());
529
- config.setResetOnUpdate(resetOnUpdate);
663
+ String serverDomain = getConfig().getString("serverDomain", config.getServerDomain());
664
+ config.setServerDomain(serverDomain);
530
665
 
531
666
  return config;
532
667
  }
533
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
+
534
677
  private void rejectCall(PluginCall call, Exception exception) {
535
678
  String message = exception.getMessage();
536
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
  }
@@ -19,6 +19,9 @@ public class GetLatestBundleResponse {
19
19
  @Nullable
20
20
  private String checksum;
21
21
 
22
+ @Nullable
23
+ private JSONObject customProperties;
24
+
22
25
  @Nullable
23
26
  private String signature;
24
27
 
@@ -33,8 +36,9 @@ public class GetLatestBundleResponse {
33
36
  this.artifactType = ArtifactType.ZIP;
34
37
  }
35
38
  this.bundleId = responseJson.optString("bundleId");
36
- this.checksum = responseJson.optString("checksum");
37
- this.signature = responseJson.optString("signature");
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");
38
42
  this.url = responseJson.optString("url");
39
43
  }
40
44
 
@@ -48,6 +52,11 @@ public class GetLatestBundleResponse {
48
52
  return bundleId;
49
53
  }
50
54
 
55
+ @Nullable
56
+ public JSONObject getCustomProperties() {
57
+ return customProperties;
58
+ }
59
+
51
60
  @Nullable
52
61
  public String getChecksum() {
53
62
  return checksum;
@@ -0,0 +1,32 @@
1
+ package io.capawesome.capacitorjs.plugins.liveupdate.classes.events;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import com.getcapacitor.JSObject;
5
+ import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.Result;
6
+
7
+ public class DownloadBundleProgressEvent implements Result {
8
+
9
+ @NonNull
10
+ private final String bundleId;
11
+
12
+ private final long downloadedBytes;
13
+ private final long totalBytes;
14
+ private final double progress;
15
+
16
+ public DownloadBundleProgressEvent(@NonNull String bundleId, long downloadedBytes, long totalBytes) {
17
+ this.bundleId = bundleId;
18
+ this.downloadedBytes = downloadedBytes;
19
+ this.totalBytes = totalBytes;
20
+ this.progress = (double) downloadedBytes / (double) totalBytes;
21
+ }
22
+
23
+ @NonNull
24
+ public JSObject toJSObject() {
25
+ JSObject result = new JSObject();
26
+ result.put("bundleId", bundleId);
27
+ result.put("downloadedBytes", downloadedBytes);
28
+ result.put("progress", progress);
29
+ result.put("totalBytes", totalBytes);
30
+ return result;
31
+ }
32
+ }