@capacitor/android 5.4.1-nightly-20230920T150500.0 → 5.4.1
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 {
|
|
@@ -432,9 +476,10 @@ var nativeBridge = (function (exports) {
|
|
|
432
476
|
const tag = `CapacitorHttp fetch ${Date.now()} ${resource}`;
|
|
433
477
|
console.time(tag);
|
|
434
478
|
try {
|
|
479
|
+
// intercept request & pass to the bridge
|
|
435
480
|
const { body, method } = request;
|
|
436
|
-
const { data: requestData, type, headers } = await convertBody(body || undefined);
|
|
437
481
|
const optionHeaders = Object.fromEntries(request.headers.entries());
|
|
482
|
+
const { data: requestData, type, headers, } = await convertBody((options === null || options === void 0 ? void 0 : options.body) || body || undefined, optionHeaders['Content-Type'] || optionHeaders['content-type']);
|
|
438
483
|
const nativeResponse = await cap.nativePromise('CapacitorHttp', 'request', {
|
|
439
484
|
url: request.url,
|
|
440
485
|
method: method,
|
|
@@ -585,12 +630,22 @@ var nativeBridge = (function (exports) {
|
|
|
585
630
|
}
|
|
586
631
|
this._headers = nativeResponse.headers;
|
|
587
632
|
this.status = nativeResponse.status;
|
|
633
|
+
const responseString = typeof nativeResponse.data !== 'string'
|
|
634
|
+
? JSON.stringify(nativeResponse.data)
|
|
635
|
+
: nativeResponse.data;
|
|
588
636
|
if (this.responseType === '' ||
|
|
589
637
|
this.responseType === 'text') {
|
|
590
|
-
this.response =
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
638
|
+
this.response = responseString;
|
|
639
|
+
}
|
|
640
|
+
else if (this.responseType === 'blob') {
|
|
641
|
+
this.response = new Blob([responseString], {
|
|
642
|
+
type: 'application/json',
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
else if (this.responseType === 'arraybuffer') {
|
|
646
|
+
const encoder = new TextEncoder();
|
|
647
|
+
const uint8Array = encoder.encode(responseString);
|
|
648
|
+
this.response = uint8Array.buffer;
|
|
594
649
|
}
|
|
595
650
|
else {
|
|
596
651
|
this.response = nativeResponse.data;
|
|
@@ -657,7 +712,7 @@ var nativeBridge = (function (exports) {
|
|
|
657
712
|
}
|
|
658
713
|
let returnString = '';
|
|
659
714
|
for (const key in this._headers) {
|
|
660
|
-
if (key
|
|
715
|
+
if (key.toLowerCase() !== 'set-cookie') {
|
|
661
716
|
returnString += key + ': ' + this._headers[key] + '\r\n';
|
|
662
717
|
}
|
|
663
718
|
}
|
|
@@ -668,7 +723,12 @@ var nativeBridge = (function (exports) {
|
|
|
668
723
|
if (isRelativeURL(this._url)) {
|
|
669
724
|
return win.CapacitorWebXMLHttpRequest.getResponseHeader.call(this, name);
|
|
670
725
|
}
|
|
671
|
-
|
|
726
|
+
for (const key in this._headers) {
|
|
727
|
+
if (key.toLowerCase() === name.toLowerCase()) {
|
|
728
|
+
return this._headers[key];
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
return null;
|
|
672
732
|
};
|
|
673
733
|
Object.setPrototypeOf(xhr, prototype);
|
|
674
734
|
return xhr;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
package com.getcapacitor.plugin;
|
|
2
2
|
|
|
3
|
-
import android.util.Log;
|
|
4
3
|
import com.getcapacitor.Bridge;
|
|
4
|
+
import com.getcapacitor.Logger;
|
|
5
5
|
import java.net.CookieManager;
|
|
6
6
|
import java.net.CookiePolicy;
|
|
7
7
|
import java.net.CookieStore;
|
|
@@ -64,7 +64,7 @@ public class CapacitorCookieManager extends CookieManager {
|
|
|
64
64
|
try {
|
|
65
65
|
new URI(url);
|
|
66
66
|
} catch (Exception error) {
|
|
67
|
-
|
|
67
|
+
Logger.error(TAG, "Failed to get sanitized URL.", error);
|
|
68
68
|
throw error;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -85,10 +85,10 @@ public class CapacitorCookieManager extends CookieManager {
|
|
|
85
85
|
public String getCookieString(String url) {
|
|
86
86
|
try {
|
|
87
87
|
url = getSanitizedDomain(url);
|
|
88
|
-
|
|
88
|
+
Logger.info(TAG, "Getting cookies at: '" + url + "'");
|
|
89
89
|
return webkitCookieManager.getCookie(url);
|
|
90
90
|
} catch (Exception error) {
|
|
91
|
-
|
|
91
|
+
Logger.error(TAG, "Failed to get cookies at the given URL.", error);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
return null;
|
|
@@ -145,11 +145,11 @@ public class CapacitorCookieManager extends CookieManager {
|
|
|
145
145
|
public void setCookie(String url, String value) {
|
|
146
146
|
try {
|
|
147
147
|
url = getSanitizedDomain(url);
|
|
148
|
-
|
|
148
|
+
Logger.info(TAG, "Setting cookie '" + value + "' at: '" + url + "'");
|
|
149
149
|
webkitCookieManager.setCookie(url, value);
|
|
150
150
|
flush();
|
|
151
151
|
} catch (Exception error) {
|
|
152
|
-
|
|
152
|
+
Logger.error(TAG, "Failed to set cookie.", error);
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
@@ -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.4.1
|
|
3
|
+
"version": "5.4.1",
|
|
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"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|