@capgo/capacitor-updater 7.45.10 → 7.50.2

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 (33) hide show
  1. package/Package.swift +1 -1
  2. package/README.md +510 -92
  3. package/android/src/main/java/ee/forgr/capacitor_updater/AndroidAppExitReporter.java +92 -0
  4. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +3192 -777
  5. package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +798 -299
  6. package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +45 -30
  7. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +46 -28
  8. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +2 -0
  9. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +3 -3
  10. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +359 -25
  11. package/android/src/main/java/ee/forgr/capacitor_updater/ThreeFingerPinchDetector.java +323 -0
  12. package/dist/docs.json +1283 -169
  13. package/dist/esm/definitions.d.ts +621 -44
  14. package/dist/esm/definitions.js.map +1 -1
  15. package/dist/esm/web.d.ts +11 -1
  16. package/dist/esm/web.js +59 -1
  17. package/dist/esm/web.js.map +1 -1
  18. package/dist/plugin.cjs.js +59 -1
  19. package/dist/plugin.cjs.js.map +1 -1
  20. package/dist/plugin.js +59 -1
  21. package/dist/plugin.js.map +1 -1
  22. package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +0 -1
  23. package/ios/Sources/CapacitorUpdaterPlugin/AppHealthTracker.swift +82 -0
  24. package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +0 -16
  25. package/ios/Sources/CapacitorUpdaterPlugin/BundleInfo.swift +2 -2
  26. package/ios/Sources/CapacitorUpdaterPlugin/BundleStatus.swift +78 -2
  27. package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2116 -223
  28. package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +997 -332
  29. package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +0 -1
  30. package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +78 -1
  31. package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +418 -36
  32. package/ios/Sources/CapacitorUpdaterPlugin/WebViewStatsReporter.swift +276 -0
  33. package/package.json +15 -3
@@ -0,0 +1,92 @@
1
+ /*
2
+ * This Source Code Form is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+ */
6
+
7
+ package ee.forgr.capacitor_updater;
8
+
9
+ import android.annotation.TargetApi;
10
+ import android.app.ActivityManager;
11
+ import android.app.ApplicationExitInfo;
12
+ import android.content.Context;
13
+ import android.content.SharedPreferences;
14
+ import android.os.Build;
15
+ import java.util.HashMap;
16
+ import java.util.List;
17
+ import java.util.Map;
18
+
19
+ @TargetApi(Build.VERSION_CODES.R)
20
+ final class AndroidAppExitReporter {
21
+
22
+ private AndroidAppExitReporter() {}
23
+
24
+ static void reportPreviousAppExitReasons(
25
+ final Context context,
26
+ final SharedPreferences prefs,
27
+ final CapgoUpdater implementation,
28
+ final Logger logger,
29
+ final String lastReportedAppExitTimestampPrefKey
30
+ ) {
31
+ try {
32
+ final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
33
+ if (activityManager == null) {
34
+ return;
35
+ }
36
+
37
+ final List<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(context.getPackageName(), 0, 8);
38
+ if (exitReasons == null || exitReasons.isEmpty()) {
39
+ return;
40
+ }
41
+
42
+ final long lastReportedTimestamp = prefs.getLong(lastReportedAppExitTimestampPrefKey, 0L);
43
+ long newestReportedTimestamp = lastReportedTimestamp;
44
+ final BundleInfo current = implementation.getCurrentBundle();
45
+ final String versionName = current == null ? "" : current.getVersionName();
46
+
47
+ for (final ApplicationExitInfo exitInfo : exitReasons) {
48
+ if (exitInfo == null || exitInfo.getTimestamp() <= lastReportedTimestamp) {
49
+ continue;
50
+ }
51
+
52
+ final String action = CapacitorUpdaterPlugin.statsActionForApplicationExitReason(exitInfo.getReason());
53
+ if (action == null) {
54
+ continue;
55
+ }
56
+
57
+ implementation.sendStats(action, versionName, "", buildApplicationExitMetadata(exitInfo));
58
+ newestReportedTimestamp = Math.max(newestReportedTimestamp, exitInfo.getTimestamp());
59
+ }
60
+
61
+ if (newestReportedTimestamp > lastReportedTimestamp) {
62
+ prefs.edit().putLong(lastReportedAppExitTimestampPrefKey, newestReportedTimestamp).apply();
63
+ }
64
+ } catch (final Exception e) {
65
+ logger.warn("Unable to report previous app exit reason: " + e.getMessage());
66
+ }
67
+ }
68
+
69
+ private static Map<String, String> buildApplicationExitMetadata(final ApplicationExitInfo exitInfo) {
70
+ final Map<String, String> metadata = new HashMap<>();
71
+ metadata.put("exit_reason", CapacitorUpdaterPlugin.applicationExitReasonName(exitInfo.getReason()));
72
+ metadata.put("exit_reason_code", Integer.toString(exitInfo.getReason()));
73
+ metadata.put("exit_status", Integer.toString(exitInfo.getStatus()));
74
+ metadata.put("exit_importance", Integer.toString(exitInfo.getImportance()));
75
+ metadata.put("exit_timestamp", Long.toString(exitInfo.getTimestamp()));
76
+ metadata.put("pid", Integer.toString(exitInfo.getPid()));
77
+ metadata.put("pss_kb", Long.toString(exitInfo.getPss()));
78
+ metadata.put("rss_kb", Long.toString(exitInfo.getRss()));
79
+
80
+ final String processName = exitInfo.getProcessName();
81
+ if (processName != null && !processName.isEmpty()) {
82
+ metadata.put("process_name", CapacitorUpdaterPlugin.truncateStatsMetadataValue(processName, 128));
83
+ }
84
+
85
+ final String description = exitInfo.getDescription();
86
+ if (description != null && !description.isEmpty()) {
87
+ metadata.put("exit_description", CapacitorUpdaterPlugin.truncateStatsMetadataValue(description, 512));
88
+ }
89
+
90
+ return metadata;
91
+ }
92
+ }