@capacitor/android 5.4.2 → 5.4.3-nightly-20231009T150508.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.
@@ -1,10 +1,10 @@
1
1
  ext {
2
- androidxActivityVersion = project.hasProperty('androidxActivityVersion') ? rootProject.ext.androidxActivityVersion : '1.7.0'
2
+ androidxActivityVersion = project.hasProperty('androidxActivityVersion') ? rootProject.ext.androidxActivityVersion : '1.7.2'
3
3
  androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
4
4
  androidxCoordinatorLayoutVersion = project.hasProperty('androidxCoordinatorLayoutVersion') ? rootProject.ext.androidxCoordinatorLayoutVersion : '1.2.0'
5
- androidxCoreVersion = project.hasProperty('androidxCoreVersion') ? rootProject.ext.androidxCoreVersion : '1.10.0'
6
- androidxFragmentVersion = project.hasProperty('androidxFragmentVersion') ? rootProject.ext.androidxFragmentVersion : '1.5.6'
7
- androidxWebkitVersion = project.hasProperty('androidxWebkitVersion') ? rootProject.ext.androidxWebkitVersion : '1.6.1'
5
+ androidxCoreVersion = project.hasProperty('androidxCoreVersion') ? rootProject.ext.androidxCoreVersion : '1.10.1'
6
+ androidxFragmentVersion = project.hasProperty('androidxFragmentVersion') ? rootProject.ext.androidxFragmentVersion : '1.6.1'
7
+ androidxWebkitVersion = project.hasProperty('androidxWebkitVersion') ? rootProject.ext.androidxWebkitVersion : '1.7.0'
8
8
  junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
9
9
  androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
10
10
  androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
@@ -13,7 +13,7 @@ ext {
13
13
 
14
14
 
15
15
  buildscript {
16
- ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.8.20'
16
+ ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.9.10'
17
17
  repositories {
18
18
  google()
19
19
  mavenCentral()
@@ -22,7 +22,7 @@ buildscript {
22
22
  }
23
23
  }
24
24
  dependencies {
25
- classpath 'com.android.tools.build:gradle:8.0.0'
25
+ classpath 'com.android.tools.build:gradle:8.1.1'
26
26
 
27
27
  if (System.getenv("CAP_PUBLISH") == "true") {
28
28
  classpath 'io.github.gradle-nexus:publish-plugin:1.3.0'
@@ -42,10 +42,10 @@ if (System.getenv("CAP_PUBLISH") == "true") {
42
42
 
43
43
  android {
44
44
  namespace "com.getcapacitor.android"
45
- compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
45
+ compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
46
46
  defaultConfig {
47
47
  minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
48
- targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 33
48
+ targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
49
49
  versionCode 1
50
50
  versionName "1.0"
51
51
  consumerProguardFiles 'proguard-rules.pro'
@@ -64,52 +64,8 @@ var nativeBridge = (function (exports) {
64
64
  }
65
65
  return newFormData;
66
66
  };
67
- const convertBody = async (body, contentType) => {
68
- if (body instanceof ReadableStream) {
69
- const reader = body.getReader();
70
- const chunks = [];
71
- while (true) {
72
- const { done, value } = await reader.read();
73
- if (done)
74
- break;
75
- chunks.push(value);
76
- }
77
- const concatenated = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));
78
- let position = 0;
79
- for (const chunk of chunks) {
80
- concatenated.set(chunk, position);
81
- position += chunk.length;
82
- }
83
- let data = new TextDecoder().decode(concatenated);
84
- let type;
85
- if (contentType === 'application/json') {
86
- try {
87
- data = JSON.parse(data);
88
- }
89
- catch (ignored) {
90
- // ignore
91
- }
92
- type = 'json';
93
- }
94
- else if (contentType === 'multipart/form-data') {
95
- type = 'formData';
96
- }
97
- else if (contentType === null || contentType === void 0 ? void 0 : contentType.startsWith('image')) {
98
- type = 'image';
99
- }
100
- else if (contentType === 'application/octet-stream') {
101
- type = 'binary';
102
- }
103
- else {
104
- type = 'text';
105
- }
106
- return {
107
- data,
108
- type,
109
- headers: { 'Content-Type': contentType || 'application/octet-stream' },
110
- };
111
- }
112
- else if (body instanceof FormData) {
67
+ const convertBody = async (body) => {
68
+ if (body instanceof FormData) {
113
69
  const formData = await convertFormData(body);
114
70
  const boundary = `${Date.now()}`;
115
71
  return {
@@ -475,10 +431,9 @@ var nativeBridge = (function (exports) {
475
431
  const tag = `CapacitorHttp fetch ${Date.now()} ${resource}`;
476
432
  console.time(tag);
477
433
  try {
478
- // intercept request & pass to the bridge
479
434
  const { body, method } = request;
435
+ const { data: requestData, type, headers, } = await convertBody(body || undefined);
480
436
  const optionHeaders = Object.fromEntries(request.headers.entries());
481
- const { data: requestData, type, headers, } = await convertBody((options === null || options === void 0 ? void 0 : options.body) || body || undefined, optionHeaders['Content-Type'] || optionHeaders['content-type']);
482
437
  const nativeResponse = await cap.nativePromise('CapacitorHttp', 'request', {
483
438
  url: request.url,
484
439
  method: method,
@@ -629,22 +584,12 @@ var nativeBridge = (function (exports) {
629
584
  }
630
585
  this._headers = nativeResponse.headers;
631
586
  this.status = nativeResponse.status;
632
- const responseString = typeof nativeResponse.data !== 'string'
633
- ? JSON.stringify(nativeResponse.data)
634
- : nativeResponse.data;
635
587
  if (this.responseType === '' ||
636
588
  this.responseType === 'text') {
637
- this.response = responseString;
638
- }
639
- else if (this.responseType === 'blob') {
640
- this.response = new Blob([responseString], {
641
- type: 'application/json',
642
- });
643
- }
644
- else if (this.responseType === 'arraybuffer') {
645
- const encoder = new TextEncoder();
646
- const uint8Array = encoder.encode(responseString);
647
- this.response = uint8Array.buffer;
589
+ this.response =
590
+ typeof nativeResponse.data !== 'string'
591
+ ? JSON.stringify(nativeResponse.data)
592
+ : nativeResponse.data;
648
593
  }
649
594
  else {
650
595
  this.response = nativeResponse.data;
@@ -711,7 +656,7 @@ var nativeBridge = (function (exports) {
711
656
  }
712
657
  let returnString = '';
713
658
  for (const key in this._headers) {
714
- if (key.toLowerCase() !== 'set-cookie') {
659
+ if (key != 'Set-Cookie') {
715
660
  returnString += key + ': ' + this._headers[key] + '\r\n';
716
661
  }
717
662
  }
@@ -722,12 +667,7 @@ var nativeBridge = (function (exports) {
722
667
  if (isRelativeURL(this._url)) {
723
668
  return win.CapacitorWebXMLHttpRequest.getResponseHeader.call(this, name);
724
669
  }
725
- for (const key in this._headers) {
726
- if (key.toLowerCase() === name.toLowerCase()) {
727
- return this._headers[key];
728
- }
729
- }
730
- return null;
670
+ return this._headers[name];
731
671
  };
732
672
  Object.setPrototypeOf(xhr, prototype);
733
673
  return xhr;
@@ -2,6 +2,7 @@ package com.getcapacitor;
2
2
 
3
3
  import android.graphics.Bitmap;
4
4
  import android.net.Uri;
5
+ import android.webkit.RenderProcessGoneDetail;
5
6
  import android.webkit.WebResourceError;
6
7
  import android.webkit.WebResourceRequest;
7
8
  import android.webkit.WebResourceResponse;
@@ -92,4 +93,19 @@ public class BridgeWebViewClient extends WebViewClient {
92
93
  view.loadUrl(errorPath);
93
94
  }
94
95
  }
96
+
97
+ @Override
98
+ public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
99
+ super.onRenderProcessGone(view, detail);
100
+ boolean result = false;
101
+
102
+ List<WebViewListener> webViewListeners = bridge.getWebViewListeners();
103
+ if (webViewListeners != null) {
104
+ for (WebViewListener listener : bridge.getWebViewListeners()) {
105
+ result = listener.onRenderProcessGone(view, detail) || result;
106
+ }
107
+ }
108
+
109
+ return result;
110
+ }
95
111
  }
@@ -1,6 +1,6 @@
1
1
  package com.getcapacitor;
2
2
 
3
- import static com.getcapacitor.Bridge.CAPACITOR_HTTP_SCHEME;
3
+ import static com.getcapacitor.Bridge.CAPACITOR_HTTPS_SCHEME;
4
4
  import static com.getcapacitor.Bridge.DEFAULT_ANDROID_WEBVIEW_VERSION;
5
5
  import static com.getcapacitor.Bridge.DEFAULT_HUAWEI_WEBVIEW_VERSION;
6
6
  import static com.getcapacitor.Bridge.MINIMUM_ANDROID_WEBVIEW_VERSION;
@@ -36,7 +36,7 @@ public class CapConfig {
36
36
  private boolean html5mode = true;
37
37
  private String serverUrl;
38
38
  private String hostname = "localhost";
39
- private String androidScheme = CAPACITOR_HTTP_SCHEME;
39
+ private String androidScheme = CAPACITOR_HTTPS_SCHEME;
40
40
  private String[] allowNavigation;
41
41
 
42
42
  // Android Config
@@ -297,7 +297,7 @@ public class CapConfig {
297
297
  private boolean validateScheme(String scheme) {
298
298
  List<String> invalidSchemes = Arrays.asList("file", "ftp", "ftps", "ws", "wss", "about", "blob", "data");
299
299
  if (invalidSchemes.contains(scheme)) {
300
- Logger.warn(scheme + " is not an allowed scheme. Defaulting to http.");
300
+ Logger.warn(scheme + " is not an allowed scheme. Defaulting to https.");
301
301
  return false;
302
302
  }
303
303
 
@@ -531,7 +531,7 @@ public class CapConfig {
531
531
  private String serverUrl;
532
532
  private String errorPath;
533
533
  private String hostname = "localhost";
534
- private String androidScheme = CAPACITOR_HTTP_SCHEME;
534
+ private String androidScheme = CAPACITOR_HTTPS_SCHEME;
535
535
  private String[] allowNavigation;
536
536
 
537
537
  // Android Config Values
@@ -1,5 +1,6 @@
1
1
  package com.getcapacitor;
2
2
 
3
+ import android.webkit.RenderProcessGoneDetail;
3
4
  import android.webkit.WebView;
4
5
 
5
6
  /**
@@ -42,4 +43,15 @@ public abstract class WebViewListener {
42
43
  public void onPageStarted(WebView webView) {
43
44
  // Override me to add behavior to the page started event
44
45
  }
46
+
47
+ /**
48
+ * Callback for render process gone event. Return true if the state is handled.
49
+ *
50
+ * @param webView The WebView that loaded
51
+ * @return returns false by default if the listener is not overridden and used
52
+ */
53
+ public boolean onRenderProcessGone(WebView webView, RenderProcessGoneDetail detail) {
54
+ // Override me to add behavior to the web view render process gone event
55
+ return false;
56
+ }
45
57
  }
@@ -39,11 +39,6 @@ public class CapacitorCookies extends Plugin {
39
39
  return pluginConfig.getBoolean("enabled", false);
40
40
  }
41
41
 
42
- private boolean isAllowingInsecureCookies() {
43
- PluginConfig pluginConfig = getBridge().getConfig().getPluginConfiguration("CapacitorCookies");
44
- return pluginConfig.getBoolean("androidCustomSchemeAllowInsecureAccess", false);
45
- }
46
-
47
42
  @JavascriptInterface
48
43
  public void setCookie(String domain, String action) {
49
44
  cookieManager.setCookie(domain, action);
@@ -51,44 +46,34 @@ public class CapacitorCookies extends Plugin {
51
46
 
52
47
  @PluginMethod
53
48
  public void getCookies(PluginCall call) {
54
- if (isAllowingInsecureCookies()) {
55
- String url = call.getString("url");
56
- JSObject cookiesMap = new JSObject();
57
- HttpCookie[] cookies = cookieManager.getCookies(url);
58
- for (HttpCookie cookie : cookies) {
59
- cookiesMap.put(cookie.getName(), cookie.getValue());
60
- }
61
- call.resolve(cookiesMap);
62
- } else {
63
- this.bridge.eval(
64
- "document.cookie",
65
- value -> {
66
- String cookies = value.substring(1, value.length() - 1);
67
- String[] cookieArray = cookies.split(";");
68
-
69
- JSObject cookieMap = new JSObject();
70
-
71
- for (String cookie : cookieArray) {
72
- if (cookie.length() > 0) {
73
- String[] keyValue = cookie.split("=", 2);
74
-
75
- if (keyValue.length == 2) {
76
- String key = keyValue[0].trim();
77
- String val = keyValue[1].trim();
78
- try {
79
- key = URLDecoder.decode(keyValue[0].trim(), StandardCharsets.UTF_8.name());
80
- val = URLDecoder.decode(keyValue[1].trim(), StandardCharsets.UTF_8.name());
81
- } catch (UnsupportedEncodingException ignored) {}
82
-
83
- cookieMap.put(key, val);
84
- }
49
+ this.bridge.eval(
50
+ "document.cookie",
51
+ value -> {
52
+ String cookies = value.substring(1, value.length() - 1);
53
+ String[] cookieArray = cookies.split(";");
54
+
55
+ JSObject cookieMap = new JSObject();
56
+
57
+ for (String cookie : cookieArray) {
58
+ if (cookie.length() > 0) {
59
+ String[] keyValue = cookie.split("=", 2);
60
+
61
+ if (keyValue.length == 2) {
62
+ String key = keyValue[0].trim();
63
+ String val = keyValue[1].trim();
64
+ try {
65
+ key = URLDecoder.decode(keyValue[0].trim(), StandardCharsets.UTF_8.name());
66
+ val = URLDecoder.decode(keyValue[1].trim(), StandardCharsets.UTF_8.name());
67
+ } catch (UnsupportedEncodingException ignored) {}
68
+
69
+ cookieMap.put(key, val);
85
70
  }
86
71
  }
87
-
88
- call.resolve(cookieMap);
89
72
  }
90
- );
91
- }
73
+
74
+ call.resolve(cookieMap);
75
+ }
76
+ );
92
77
  }
93
78
 
94
79
  @PluginMethod
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capacitor/android",
3
- "version": "5.4.2",
3
+ "version": "5.4.3-nightly-20231009T150508.0",
4
4
  "description": "Capacitor: Cross-platform apps with JavaScript and the web",
5
5
  "homepage": "https://capacitorjs.com",
6
6
  "author": "Ionic Team <hi@ionic.io> (https://ionic.io)",
@@ -23,7 +23,7 @@
23
23
  "verify": "./gradlew clean lint build test -b capacitor/build.gradle"
24
24
  },
25
25
  "peerDependencies": {
26
- "@capacitor/core": "^5.4.0"
26
+ "@capacitor/core": "^5.4.0-nightly-20231009T150508.0"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"