@capawesome/capacitor-live-update 6.8.0 → 6.9.0

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 +2 -2
  2. package/README.md +429 -20
  3. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +851 -261
  4. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java +35 -0
  5. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java +56 -11
  6. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java +273 -38
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePreferences.java +52 -3
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetChannelsResponseItem.java +28 -0
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetLatestBundleResponse.java +11 -2
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/DownloadBundleProgressEvent.java +32 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/NextBundleSetEvent.java +26 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/FetchChannelsOptions.java +38 -0
  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/ChannelResult.java +28 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchChannelsResult.java +28 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +8 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
  23. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
  24. package/dist/docs.json +853 -50
  25. package/dist/esm/definitions.d.ts +411 -1
  26. package/dist/esm/definitions.js.map +1 -1
  27. package/dist/esm/web.d.ts +10 -2
  28. package/dist/esm/web.js +24 -0
  29. package/dist/esm/web.js.map +1 -1
  30. package/dist/plugin.cjs.js +24 -0
  31. package/dist/plugin.cjs.js.map +1 -1
  32. package/dist/plugin.js +24 -0
  33. package/dist/plugin.js.map +1 -1
  34. package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
  35. package/ios/Plugin/Classes/Events/NextBundleSetEvent.swift +16 -0
  36. package/ios/Plugin/Classes/Options/FetchChannelsOptions.swift +26 -0
  37. package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
  38. package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
  39. package/ios/Plugin/Classes/Results/ChannelResult.swift +19 -0
  40. package/ios/Plugin/Classes/Results/FetchChannelsResult.swift +16 -0
  41. package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +6 -1
  42. package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
  43. package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
  44. package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
  45. package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
  46. package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
  47. package/ios/Plugin/LiveUpdate.swift +423 -145
  48. package/ios/Plugin/LiveUpdateConfig.swift +3 -0
  49. package/ios/Plugin/LiveUpdateHttpClient.swift +21 -4
  50. package/ios/Plugin/LiveUpdatePlugin.swift +174 -14
  51. package/ios/Plugin/LiveUpdatePreferences.swift +54 -12
  52. package/ios/Plugin/Protocols/Api/GetChannelsResponseItem.swift +4 -0
  53. package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +1 -0
  54. package/package.json +5 -5
  55. package/ios/Plugin/LiveUpdatePlugin.h +0 -10
  56. package/ios/Plugin/LiveUpdatePlugin.m +0 -27
@@ -1,21 +1,36 @@
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;
17
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.FetchChannelsOptions;
11
18
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.FetchLatestBundleOptions;
12
19
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetBundleOptions;
13
20
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetChannelOptions;
21
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetConfigOptions;
14
22
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetCustomIdOptions;
15
23
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SetNextBundleOptions;
16
24
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.options.SyncOptions;
25
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.FetchChannelsResult;
26
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.FetchLatestBundleResult;
27
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetBlockedBundlesResult;
28
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetBundleResult;
29
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetConfigResult;
17
30
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetCurrentBundleResult;
31
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetDownloadedBundlesResult;
18
32
  import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.GetNextBundleResult;
33
+ import io.capawesome.capacitorjs.plugins.liveupdate.classes.results.IsSyncingResult;
19
34
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.EmptyCallback;
20
35
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.NonEmptyCallback;
21
36
  import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.Result;
@@ -24,7 +39,7 @@ import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.Result;
24
39
  public class LiveUpdatePlugin extends Plugin {
25
40
 
26
41
  public static final String TAG = "LiveUpdate";
27
- public static final String VERSION = "6.8.0";
42
+ public static final String VERSION = "6.9.0";
28
43
  public static final String SHARED_PREFERENCES_NAME = "CapawesomeLiveUpdate"; // DO NOT CHANGE
29
44
  public static final String ERROR_APP_ID_MISSING = "appId must be configured.";
30
45
  public static final String ERROR_BUNDLE_EXISTS = "bundle already exists.";
@@ -42,8 +57,9 @@ public class LiveUpdatePlugin extends Plugin {
42
57
  public static final String ERROR_SIGNATURE_MISSING = "Bundle does not contain a signature.";
43
58
  public static final String ERROR_SYNC_IN_PROGRESS = "Sync is already in progress.";
44
59
  public static final String ERROR_UNKNOWN_ERROR = "An unknown error has occurred.";
45
-
46
- private boolean syncInProgress = false;
60
+ public static final String EVENT_DOWNLOAD_BUNDLE_PROGRESS = "downloadBundleProgress";
61
+ public static final String EVENT_NEXT_BUNDLE_SET = "nextBundleSet";
62
+ public static final String EVENT_RELOADED = "reloaded";
47
63
 
48
64
  @Nullable
49
65
  private LiveUpdateConfig config;
@@ -51,6 +67,8 @@ public class LiveUpdatePlugin extends Plugin {
51
67
  @Nullable
52
68
  private LiveUpdate implementation;
53
69
 
70
+ private boolean webViewListenerRegistered = false;
71
+
54
72
  public void load() {
55
73
  try {
56
74
  config = getLiveUpdateConfig();
@@ -60,6 +78,46 @@ public class LiveUpdatePlugin extends Plugin {
60
78
  }
61
79
  }
62
80
 
81
+ @Override
82
+ protected void handleOnResume() {
83
+ super.handleOnResume();
84
+ try {
85
+ // Notify the implementation that the app has resumed
86
+ if (implementation != null) {
87
+ implementation.handleOnResume();
88
+ }
89
+ // Register WebView listener to trigger auto-update when page is loaded
90
+ // Important: For some reason, the listener CANNOT be registered in the load() method
91
+ // or constructor, it MUST be done here in onResume().
92
+ if (!webViewListenerRegistered) {
93
+ webViewListenerRegistered = true;
94
+ getBridge()
95
+ .addWebViewListener(
96
+ new WebViewListener() {
97
+ @Override
98
+ public void onPageLoaded(WebView webView) {
99
+ if (implementation != null) {
100
+ implementation.handleOnPageLoaded();
101
+ }
102
+ }
103
+ }
104
+ );
105
+ }
106
+ } catch (Exception exception) {
107
+ Logger.error(TAG, exception.getMessage(), exception);
108
+ }
109
+ }
110
+
111
+ @PluginMethod
112
+ public void clearBlockedBundles(PluginCall call) {
113
+ try {
114
+ implementation.clearBlockedBundles();
115
+ resolveCall(call);
116
+ } catch (Exception exception) {
117
+ rejectCall(call, exception);
118
+ }
119
+ }
120
+
63
121
  @PluginMethod
64
122
  public void deleteBundle(PluginCall call) {
65
123
  try {
@@ -73,7 +131,7 @@ public class LiveUpdatePlugin extends Plugin {
73
131
  EmptyCallback callback = new EmptyCallback() {
74
132
  @Override
75
133
  public void success() {
76
- call.resolve();
134
+ resolveCall(call);
77
135
  }
78
136
 
79
137
  @Override
@@ -109,7 +167,7 @@ public class LiveUpdatePlugin extends Plugin {
109
167
  EmptyCallback callback = new EmptyCallback() {
110
168
  @Override
111
169
  public void success() {
112
- call.resolve();
170
+ resolveCall(call);
113
171
  }
114
172
 
115
173
  @Override
@@ -127,11 +185,17 @@ public class LiveUpdatePlugin extends Plugin {
127
185
  @PluginMethod
128
186
  public void fetchLatestBundle(PluginCall call) {
129
187
  try {
188
+ String appId = config.getAppId();
189
+ if (appId == null || appId.isEmpty()) {
190
+ call.reject(ERROR_APP_ID_MISSING);
191
+ return;
192
+ }
193
+
130
194
  FetchLatestBundleOptions options = new FetchLatestBundleOptions(call);
131
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
195
+ NonEmptyCallback<FetchLatestBundleResult> callback = new NonEmptyCallback<>() {
132
196
  @Override
133
- public void success(Result result) {
134
- call.resolve(result.toJSObject());
197
+ public void success(FetchLatestBundleResult result) {
198
+ resolveCall(call, result.toJSObject());
135
199
  }
136
200
 
137
201
  @Override
@@ -146,13 +210,63 @@ public class LiveUpdatePlugin extends Plugin {
146
210
  }
147
211
  }
148
212
 
213
+ @PluginMethod
214
+ public void getBlockedBundles(PluginCall call) {
215
+ try {
216
+ NonEmptyCallback<GetBlockedBundlesResult> callback = new NonEmptyCallback<>() {
217
+ @Override
218
+ public void success(GetBlockedBundlesResult result) {
219
+ resolveCall(call, result.toJSObject());
220
+ }
221
+
222
+ @Override
223
+ public void error(Exception exception) {
224
+ rejectCall(call, exception);
225
+ }
226
+ };
227
+
228
+ assert implementation != null;
229
+ implementation.getBlockedBundles(callback);
230
+ } catch (Exception exception) {
231
+ rejectCall(call, exception);
232
+ }
233
+ }
234
+
235
+ @PluginMethod
236
+ public void fetchChannels(PluginCall call) {
237
+ try {
238
+ String appId = config.getAppId();
239
+ if (appId == null || appId.isEmpty()) {
240
+ call.reject(ERROR_APP_ID_MISSING);
241
+ return;
242
+ }
243
+
244
+ FetchChannelsOptions options = new FetchChannelsOptions(call);
245
+ NonEmptyCallback<FetchChannelsResult> callback = new NonEmptyCallback<>() {
246
+ @Override
247
+ public void success(FetchChannelsResult result) {
248
+ resolveCall(call, result.toJSObject());
249
+ }
250
+
251
+ @Override
252
+ public void error(Exception exception) {
253
+ rejectCall(call, exception);
254
+ }
255
+ };
256
+
257
+ implementation.fetchChannels(options, callback);
258
+ } catch (Exception exception) {
259
+ rejectCall(call, exception);
260
+ }
261
+ }
262
+
149
263
  @PluginMethod
150
264
  public void getBundle(PluginCall call) {
151
265
  try {
152
- NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
266
+ NonEmptyCallback<GetBundleResult> callback = new NonEmptyCallback<>() {
153
267
  @Override
154
- public void success(Result result) {
155
- call.resolve(result.toJSObject());
268
+ public void success(GetBundleResult result) {
269
+ resolveCall(call, result.toJSObject());
156
270
  }
157
271
 
158
272
  @Override
@@ -161,6 +275,7 @@ public class LiveUpdatePlugin extends Plugin {
161
275
  }
162
276
  };
163
277
 
278
+ assert implementation != null;
164
279
  implementation.getBundle(callback);
165
280
  } catch (Exception exception) {
166
281
  rejectCall(call, exception);
@@ -173,7 +288,7 @@ public class LiveUpdatePlugin extends Plugin {
173
288
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
174
289
  @Override
175
290
  public void success(Result result) {
176
- call.resolve(result.toJSObject());
291
+ resolveCall(call, result.toJSObject());
177
292
  }
178
293
 
179
294
  @Override
@@ -188,13 +303,35 @@ public class LiveUpdatePlugin extends Plugin {
188
303
  }
189
304
  }
190
305
 
306
+ @PluginMethod
307
+ public void getDownloadedBundles(PluginCall call) {
308
+ try {
309
+ NonEmptyCallback<GetDownloadedBundlesResult> callback = new NonEmptyCallback<>() {
310
+ @Override
311
+ public void success(GetDownloadedBundlesResult result) {
312
+ resolveCall(call, result.toJSObject());
313
+ }
314
+
315
+ @Override
316
+ public void error(Exception exception) {
317
+ rejectCall(call, exception);
318
+ }
319
+ };
320
+
321
+ assert implementation != null;
322
+ implementation.getDownloadedBundles(callback);
323
+ } catch (Exception exception) {
324
+ rejectCall(call, exception);
325
+ }
326
+ }
327
+
191
328
  @PluginMethod
192
329
  public void getChannel(PluginCall call) {
193
330
  try {
194
331
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
195
332
  @Override
196
333
  public void success(Result result) {
197
- call.resolve(result.toJSObject());
334
+ resolveCall(call, result.toJSObject());
198
335
  }
199
336
 
200
337
  @Override
@@ -209,13 +346,35 @@ public class LiveUpdatePlugin extends Plugin {
209
346
  }
210
347
  }
211
348
 
349
+ @PluginMethod
350
+ public void getConfig(PluginCall call) {
351
+ try {
352
+ NonEmptyCallback<GetConfigResult> callback = new NonEmptyCallback<>() {
353
+ @Override
354
+ public void success(GetConfigResult result) {
355
+ resolveCall(call, result.toJSObject());
356
+ }
357
+
358
+ @Override
359
+ public void error(Exception exception) {
360
+ rejectCall(call, exception);
361
+ }
362
+ };
363
+
364
+ assert implementation != null;
365
+ implementation.getConfig(callback);
366
+ } catch (Exception exception) {
367
+ rejectCall(call, exception);
368
+ }
369
+ }
370
+
212
371
  @PluginMethod
213
372
  public void getCurrentBundle(PluginCall call) {
214
373
  try {
215
374
  NonEmptyCallback<GetCurrentBundleResult> callback = new NonEmptyCallback<>() {
216
375
  @Override
217
376
  public void success(GetCurrentBundleResult result) {
218
- call.resolve(result.toJSObject());
377
+ resolveCall(call, result.toJSObject());
219
378
  }
220
379
 
221
380
  @Override
@@ -237,7 +396,7 @@ public class LiveUpdatePlugin extends Plugin {
237
396
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
238
397
  @Override
239
398
  public void success(Result result) {
240
- call.resolve(result.toJSObject());
399
+ resolveCall(call, result.toJSObject());
241
400
  }
242
401
 
243
402
  @Override
@@ -258,7 +417,7 @@ public class LiveUpdatePlugin extends Plugin {
258
417
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
259
418
  @Override
260
419
  public void success(Result result) {
261
- call.resolve(result.toJSObject());
420
+ resolveCall(call, result.toJSObject());
262
421
  }
263
422
 
264
423
  @Override
@@ -279,7 +438,7 @@ public class LiveUpdatePlugin extends Plugin {
279
438
  NonEmptyCallback<GetNextBundleResult> callback = new NonEmptyCallback<>() {
280
439
  @Override
281
440
  public void success(GetNextBundleResult result) {
282
- call.resolve(result.toJSObject());
441
+ resolveCall(call, result.toJSObject());
283
442
  }
284
443
 
285
444
  @Override
@@ -301,7 +460,7 @@ public class LiveUpdatePlugin extends Plugin {
301
460
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
302
461
  @Override
303
462
  public void success(Result result) {
304
- call.resolve(result.toJSObject());
463
+ resolveCall(call, result.toJSObject());
305
464
  }
306
465
 
307
466
  @Override
@@ -322,7 +481,7 @@ public class LiveUpdatePlugin extends Plugin {
322
481
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
323
482
  @Override
324
483
  public void success(Result result) {
325
- call.resolve(result.toJSObject());
484
+ resolveCall(call, result.toJSObject());
326
485
  }
327
486
 
328
487
  @Override
@@ -337,11 +496,44 @@ public class LiveUpdatePlugin extends Plugin {
337
496
  }
338
497
  }
339
498
 
499
+ @PluginMethod
500
+ public void isSyncing(PluginCall call) {
501
+ try {
502
+ NonEmptyCallback<IsSyncingResult> callback = new NonEmptyCallback<>() {
503
+ @Override
504
+ public void success(IsSyncingResult result) {
505
+ resolveCall(call, result.toJSObject());
506
+ }
507
+
508
+ @Override
509
+ public void error(Exception exception) {
510
+ rejectCall(call, exception);
511
+ }
512
+ };
513
+
514
+ assert implementation != null;
515
+ implementation.isSyncing(callback);
516
+ } catch (Exception exception) {
517
+ rejectCall(call, exception);
518
+ }
519
+ }
520
+
340
521
  @PluginMethod
341
522
  public void ready(PluginCall call) {
342
523
  try {
343
- implementation.ready();
344
- call.resolve();
524
+ NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
525
+ @Override
526
+ public void success(Result result) {
527
+ resolveCall(call, result.toJSObject());
528
+ }
529
+
530
+ @Override
531
+ public void error(Exception exception) {
532
+ rejectCall(call, exception);
533
+ }
534
+ };
535
+
536
+ implementation.ready(callback);
345
537
  } catch (Exception exception) {
346
538
  rejectCall(call, exception);
347
539
  }
@@ -351,7 +543,7 @@ public class LiveUpdatePlugin extends Plugin {
351
543
  public void reload(PluginCall call) {
352
544
  try {
353
545
  implementation.reload();
354
- call.resolve();
546
+ resolveCall(call);
355
547
  } catch (Exception exception) {
356
548
  rejectCall(call, exception);
357
549
  }
@@ -361,7 +553,17 @@ public class LiveUpdatePlugin extends Plugin {
361
553
  public void reset(PluginCall call) {
362
554
  try {
363
555
  implementation.reset();
364
- call.resolve();
556
+ resolveCall(call);
557
+ } catch (Exception exception) {
558
+ rejectCall(call, exception);
559
+ }
560
+ }
561
+
562
+ @PluginMethod
563
+ public void resetConfig(PluginCall call) {
564
+ try {
565
+ implementation.resetConfig();
566
+ resolveCall(call);
365
567
  } catch (Exception exception) {
366
568
  rejectCall(call, exception);
367
569
  }
@@ -380,7 +582,7 @@ public class LiveUpdatePlugin extends Plugin {
380
582
  EmptyCallback callback = new EmptyCallback() {
381
583
  @Override
382
584
  public void success() {
383
- call.resolve();
585
+ resolveCall(call);
384
586
  }
385
587
 
386
588
  @Override
@@ -404,7 +606,7 @@ public class LiveUpdatePlugin extends Plugin {
404
606
  EmptyCallback callback = new EmptyCallback() {
405
607
  @Override
406
608
  public void success() {
407
- call.resolve();
609
+ resolveCall(call);
408
610
  }
409
611
 
410
612
  @Override
@@ -419,6 +621,17 @@ public class LiveUpdatePlugin extends Plugin {
419
621
  }
420
622
  }
421
623
 
624
+ @PluginMethod
625
+ public void setConfig(PluginCall call) {
626
+ try {
627
+ SetConfigOptions options = new SetConfigOptions(call);
628
+ implementation.setConfig(options);
629
+ resolveCall(call);
630
+ } catch (Exception exception) {
631
+ rejectCall(call, exception);
632
+ }
633
+ }
634
+
422
635
  @PluginMethod
423
636
  public void setCustomId(PluginCall call) {
424
637
  try {
@@ -432,7 +645,7 @@ public class LiveUpdatePlugin extends Plugin {
432
645
  EmptyCallback callback = new EmptyCallback() {
433
646
  @Override
434
647
  public void success() {
435
- call.resolve();
648
+ resolveCall(call);
436
649
  }
437
650
 
438
651
  @Override
@@ -454,7 +667,7 @@ public class LiveUpdatePlugin extends Plugin {
454
667
  EmptyCallback callback = new EmptyCallback() {
455
668
  @Override
456
669
  public void success() {
457
- call.resolve();
670
+ resolveCall(call);
458
671
  }
459
672
 
460
673
  @Override
@@ -473,46 +686,54 @@ public class LiveUpdatePlugin extends Plugin {
473
686
  public void sync(PluginCall call) {
474
687
  try {
475
688
  String appId = config.getAppId();
476
- if (appId == null) {
689
+ if (appId == null || appId.isEmpty()) {
477
690
  call.reject(ERROR_APP_ID_MISSING);
478
691
  return;
479
692
  }
480
693
 
481
- if (syncInProgress) {
482
- call.reject(ERROR_SYNC_IN_PROGRESS);
483
- return;
484
- }
485
- syncInProgress = true;
486
-
487
694
  SyncOptions options = new SyncOptions(call);
488
695
  NonEmptyCallback<Result> callback = new NonEmptyCallback<>() {
489
696
  @Override
490
697
  public void success(Result result) {
491
- syncInProgress = false;
492
- call.resolve(result.toJSObject());
698
+ resolveCall(call, result.toJSObject());
493
699
  }
494
700
 
495
701
  @Override
496
702
  public void error(Exception exception) {
497
- syncInProgress = false;
498
703
  rejectCall(call, exception);
499
704
  }
500
705
  };
501
706
 
502
707
  implementation.sync(options, callback);
503
708
  } catch (Exception exception) {
504
- syncInProgress = false;
505
709
  rejectCall(call, exception);
506
710
  }
507
711
  }
508
712
 
713
+ public void notifyDownloadBundleProgressListeners(@NonNull DownloadBundleProgressEvent event) {
714
+ notifyListeners(EVENT_DOWNLOAD_BUNDLE_PROGRESS, event.toJSObject(), false);
715
+ }
716
+
717
+ public void notifyNextBundleSetListeners(@NonNull NextBundleSetEvent event) {
718
+ notifyListeners(EVENT_NEXT_BUNDLE_SET, event.toJSObject(), false);
719
+ }
720
+
721
+ public void notifyReloadedListeners() {
722
+ JSObject event = new JSObject();
723
+ notifyListeners(EVENT_RELOADED, event, true);
724
+ }
725
+
509
726
  private LiveUpdateConfig getLiveUpdateConfig() {
510
727
  LiveUpdateConfig config = new LiveUpdateConfig();
511
728
 
512
729
  String appId = getConfig().getString("appId", config.getAppId());
513
730
  config.setAppId(appId);
731
+ boolean autoBlockRolledBackBundles = getConfig().getBoolean("autoBlockRolledBackBundles", config.getAutoBlockRolledBackBundles());
732
+ config.setAutoBlockRolledBackBundles(autoBlockRolledBackBundles);
514
733
  boolean autoDeleteBundles = getConfig().getBoolean("autoDeleteBundles", config.getAutoDeleteBundles());
515
734
  config.setAutoDeleteBundles(autoDeleteBundles);
735
+ String autoUpdateStrategy = getConfig().getString("autoUpdateStrategy", config.getAutoUpdateStrategy());
736
+ config.setAutoUpdateStrategy(autoUpdateStrategy);
516
737
  String defaultChannel = getConfig().getString("defaultChannel", config.getDefaultChannel());
517
738
  config.setDefaultChannel(defaultChannel);
518
739
  boolean enabled = getConfig().getBoolean("enabled", config.getEnabled());
@@ -527,10 +748,24 @@ public class LiveUpdatePlugin extends Plugin {
527
748
  config.setReadyTimeout(readyTimeout);
528
749
  boolean resetOnUpdate = getConfig().getBoolean("resetOnUpdate", config.getResetOnUpdate());
529
750
  config.setResetOnUpdate(resetOnUpdate);
751
+ String serverDomain = getConfig().getString("serverDomain", config.getServerDomain());
752
+ config.setServerDomain(serverDomain);
753
+ // Map the deprecated `location` option to `serverDomain` if `serverDomain` was not explicitly set.
754
+ if (serverDomain.equals("api.cloud.capawesome.io") && location != null && location.equals("eu")) {
755
+ config.setServerDomain("api.cloud.capawesome.eu");
756
+ }
530
757
 
531
758
  return config;
532
759
  }
533
760
 
761
+ private void resolveCall(@NonNull PluginCall call) {
762
+ call.resolve();
763
+ }
764
+
765
+ private void resolveCall(@NonNull PluginCall call, @NonNull JSObject result) {
766
+ call.resolve(result);
767
+ }
768
+
534
769
  private void rejectCall(PluginCall call, Exception exception) {
535
770
  String message = exception.getMessage();
536
771
  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
  }
@@ -0,0 +1,28 @@
1
+ package io.capawesome.capacitorjs.plugins.liveupdate.classes.api;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import org.json.JSONObject;
5
+
6
+ public class GetChannelsResponseItem {
7
+
8
+ @NonNull
9
+ private final String id;
10
+
11
+ @NonNull
12
+ private final String name;
13
+
14
+ public GetChannelsResponseItem(@NonNull JSONObject responseJson) {
15
+ this.id = responseJson.optString("id");
16
+ this.name = responseJson.optString("name");
17
+ }
18
+
19
+ @NonNull
20
+ public String getId() {
21
+ return id;
22
+ }
23
+
24
+ @NonNull
25
+ public String getName() {
26
+ return name;
27
+ }
28
+ }