@capawesome/capacitor-live-update 6.8.0 → 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.
- package/CapawesomeCapacitorLiveUpdate.podspec +3 -3
- package/Package.swift +32 -0
- package/README.md +419 -86
- package/android/build.gradle +12 -12
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +754 -279
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java +29 -27
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java +40 -7
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java +210 -67
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePreferences.java +52 -3
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetLatestBundleResponse.java +11 -2
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/DownloadBundleProgressEvent.java +32 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/{results/GetBundleResult.java → events/NextBundleSetEvent.java} +9 -7
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetConfigOptions.java +19 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SyncOptions.java +4 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +8 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
- package/dist/docs.json +597 -102
- package/dist/esm/definitions.d.ts +338 -39
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.d.ts +9 -2
- package/dist/esm/web.js +21 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +22 -3
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +22 -3
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
- package/ios/Plugin/Classes/{Results/GetBundleResult.swift → Events/NextBundleSetEvent.swift} +3 -3
- package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
- package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
- package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +6 -1
- package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
- package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
- package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
- package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
- package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
- package/ios/Plugin/LiveUpdate.swift +365 -149
- package/ios/Plugin/LiveUpdateConfig.swift +4 -4
- package/ios/Plugin/LiveUpdateHttpClient.swift +10 -4
- package/ios/Plugin/LiveUpdatePlugin.swift +136 -34
- package/ios/Plugin/LiveUpdatePreferences.swift +54 -12
- package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +1 -0
- package/package.json +19 -20
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetBundleOptions.java +0 -18
- package/ios/Plugin/Classes/Options/SetBundleOptions.swift +0 -14
- package/ios/Plugin/LiveUpdatePlugin.h +0 -10
- package/ios/Plugin/LiveUpdatePlugin.m +0 -27
package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java
CHANGED
|
@@ -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 = "
|
|
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
|
-
|
|
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
|
|
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
|
|
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<
|
|
191
|
+
NonEmptyCallback<FetchLatestBundleResult> callback = new NonEmptyCallback<>() {
|
|
132
192
|
@Override
|
|
133
|
-
public void success(
|
|
134
|
-
call
|
|
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
|
|
210
|
+
public void getBlockedBundles(PluginCall call) {
|
|
151
211
|
try {
|
|
152
|
-
NonEmptyCallback<
|
|
212
|
+
NonEmptyCallback<GetBlockedBundlesResult> callback = new NonEmptyCallback<>() {
|
|
153
213
|
@Override
|
|
154
|
-
public void success(
|
|
155
|
-
call
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
344
|
-
|
|
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
|
|
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
|
|
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
|
|
509
|
+
public void resetConfig(PluginCall call) {
|
|
372
510
|
try {
|
|
373
|
-
|
|
374
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
529
|
-
config.
|
|
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,
|
|
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
|
|
83
|
-
settingsEditor.putInt(lastVersionCodeKey,
|
|
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.
|
|
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
|
+
}
|