@capacitor/android 5.4.3-nightly-20231011T150440.0 → 5.5.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.
package/capacitor/build.gradle
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
ext {
|
|
2
|
-
androidxActivityVersion = project.hasProperty('androidxActivityVersion') ? rootProject.ext.androidxActivityVersion : '1.7.
|
|
2
|
+
androidxActivityVersion = project.hasProperty('androidxActivityVersion') ? rootProject.ext.androidxActivityVersion : '1.7.0'
|
|
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.
|
|
6
|
-
androidxFragmentVersion = project.hasProperty('androidxFragmentVersion') ? rootProject.ext.androidxFragmentVersion : '1.6
|
|
7
|
-
androidxWebkitVersion = project.hasProperty('androidxWebkitVersion') ? rootProject.ext.androidxWebkitVersion : '1.
|
|
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'
|
|
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.
|
|
16
|
+
ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.8.20'
|
|
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.
|
|
25
|
+
classpath 'com.android.tools.build:gradle:8.0.0'
|
|
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 :
|
|
45
|
+
compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
|
|
46
46
|
defaultConfig {
|
|
47
47
|
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
|
|
48
|
-
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion :
|
|
48
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 33
|
|
49
49
|
versionCode 1
|
|
50
50
|
versionName "1.0"
|
|
51
51
|
consumerProguardFiles 'proguard-rules.pro'
|
|
@@ -64,8 +64,52 @@ var nativeBridge = (function (exports) {
|
|
|
64
64
|
}
|
|
65
65
|
return newFormData;
|
|
66
66
|
};
|
|
67
|
-
const convertBody = async (body) => {
|
|
68
|
-
if (body instanceof
|
|
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) {
|
|
69
113
|
const formData = await convertFormData(body);
|
|
70
114
|
const boundary = `${Date.now()}`;
|
|
71
115
|
return {
|
|
@@ -431,9 +475,10 @@ var nativeBridge = (function (exports) {
|
|
|
431
475
|
const tag = `CapacitorHttp fetch ${Date.now()} ${resource}`;
|
|
432
476
|
console.time(tag);
|
|
433
477
|
try {
|
|
478
|
+
// intercept request & pass to the bridge
|
|
434
479
|
const { body, method } = request;
|
|
435
|
-
const { data: requestData, type, headers, } = await convertBody(body || undefined);
|
|
436
480
|
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']);
|
|
437
482
|
const nativeResponse = await cap.nativePromise('CapacitorHttp', 'request', {
|
|
438
483
|
url: request.url,
|
|
439
484
|
method: method,
|
|
@@ -584,12 +629,22 @@ var nativeBridge = (function (exports) {
|
|
|
584
629
|
}
|
|
585
630
|
this._headers = nativeResponse.headers;
|
|
586
631
|
this.status = nativeResponse.status;
|
|
632
|
+
const responseString = typeof nativeResponse.data !== 'string'
|
|
633
|
+
? JSON.stringify(nativeResponse.data)
|
|
634
|
+
: nativeResponse.data;
|
|
587
635
|
if (this.responseType === '' ||
|
|
588
636
|
this.responseType === 'text') {
|
|
589
|
-
this.response =
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
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;
|
|
593
648
|
}
|
|
594
649
|
else {
|
|
595
650
|
this.response = nativeResponse.data;
|
|
@@ -656,7 +711,7 @@ var nativeBridge = (function (exports) {
|
|
|
656
711
|
}
|
|
657
712
|
let returnString = '';
|
|
658
713
|
for (const key in this._headers) {
|
|
659
|
-
if (key
|
|
714
|
+
if (key.toLowerCase() !== 'set-cookie') {
|
|
660
715
|
returnString += key + ': ' + this._headers[key] + '\r\n';
|
|
661
716
|
}
|
|
662
717
|
}
|
|
@@ -667,7 +722,12 @@ var nativeBridge = (function (exports) {
|
|
|
667
722
|
if (isRelativeURL(this._url)) {
|
|
668
723
|
return win.CapacitorWebXMLHttpRequest.getResponseHeader.call(this, name);
|
|
669
724
|
}
|
|
670
|
-
|
|
725
|
+
for (const key in this._headers) {
|
|
726
|
+
if (key.toLowerCase() === name.toLowerCase()) {
|
|
727
|
+
return this._headers[key];
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
return null;
|
|
671
731
|
};
|
|
672
732
|
Object.setPrototypeOf(xhr, prototype);
|
|
673
733
|
return xhr;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.getcapacitor;
|
|
2
2
|
|
|
3
|
-
import static com.getcapacitor.Bridge.
|
|
3
|
+
import static com.getcapacitor.Bridge.CAPACITOR_HTTP_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 =
|
|
39
|
+
private String androidScheme = CAPACITOR_HTTP_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
|
|
300
|
+
Logger.warn(scheme + " is not an allowed scheme. Defaulting to http.");
|
|
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 =
|
|
534
|
+
private String androidScheme = CAPACITOR_HTTP_SCHEME;
|
|
535
535
|
private String[] allowNavigation;
|
|
536
536
|
|
|
537
537
|
// Android Config Values
|
|
@@ -39,6 +39,11 @@ 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
|
+
|
|
42
47
|
@JavascriptInterface
|
|
43
48
|
public void setCookie(String domain, String action) {
|
|
44
49
|
cookieManager.setCookie(domain, action);
|
|
@@ -46,34 +51,44 @@ public class CapacitorCookies extends Plugin {
|
|
|
46
51
|
|
|
47
52
|
@PluginMethod
|
|
48
53
|
public void getCookies(PluginCall call) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
+
}
|
|
70
85
|
}
|
|
71
86
|
}
|
|
72
|
-
}
|
|
73
87
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
88
|
+
call.resolve(cookieMap);
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
77
92
|
}
|
|
78
93
|
|
|
79
94
|
@PluginMethod
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor/android",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.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.
|
|
26
|
+
"@capacitor/core": "^5.5.0"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|