@capacitor-plus/android 8.0.0-beta.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/LICENSE +21 -0
- package/capacitor/build.gradle +94 -0
- package/capacitor/lint-baseline.xml +136 -0
- package/capacitor/lint.xml +9 -0
- package/capacitor/proguard-rules.pro +28 -0
- package/capacitor/src/main/AndroidManifest.xml +3 -0
- package/capacitor/src/main/assets/native-bridge.js +1029 -0
- package/capacitor/src/main/java/com/getcapacitor/AndroidProtocolHandler.java +94 -0
- package/capacitor/src/main/java/com/getcapacitor/App.java +61 -0
- package/capacitor/src/main/java/com/getcapacitor/AppUUID.java +65 -0
- package/capacitor/src/main/java/com/getcapacitor/Bridge.java +1627 -0
- package/capacitor/src/main/java/com/getcapacitor/BridgeActivity.java +212 -0
- package/capacitor/src/main/java/com/getcapacitor/BridgeWebChromeClient.java +467 -0
- package/capacitor/src/main/java/com/getcapacitor/BridgeWebViewClient.java +105 -0
- package/capacitor/src/main/java/com/getcapacitor/CapConfig.java +709 -0
- package/capacitor/src/main/java/com/getcapacitor/CapacitorWebView.java +57 -0
- package/capacitor/src/main/java/com/getcapacitor/FileUtils.java +303 -0
- package/capacitor/src/main/java/com/getcapacitor/InvalidPluginException.java +8 -0
- package/capacitor/src/main/java/com/getcapacitor/InvalidPluginMethodException.java +16 -0
- package/capacitor/src/main/java/com/getcapacitor/JSArray.java +51 -0
- package/capacitor/src/main/java/com/getcapacitor/JSExport.java +208 -0
- package/capacitor/src/main/java/com/getcapacitor/JSExportException.java +16 -0
- package/capacitor/src/main/java/com/getcapacitor/JSInjector.java +127 -0
- package/capacitor/src/main/java/com/getcapacitor/JSObject.java +164 -0
- package/capacitor/src/main/java/com/getcapacitor/JSValue.java +65 -0
- package/capacitor/src/main/java/com/getcapacitor/Logger.java +103 -0
- package/capacitor/src/main/java/com/getcapacitor/MessageHandler.java +157 -0
- package/capacitor/src/main/java/com/getcapacitor/NativePlugin.java +37 -0
- package/capacitor/src/main/java/com/getcapacitor/PermissionState.java +31 -0
- package/capacitor/src/main/java/com/getcapacitor/Plugin.java +1050 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginCall.java +394 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginConfig.java +116 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginHandle.java +160 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginInvocationException.java +16 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginLoadException.java +19 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginManager.java +56 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginMethod.java +15 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginMethodHandle.java +33 -0
- package/capacitor/src/main/java/com/getcapacitor/PluginResult.java +84 -0
- package/capacitor/src/main/java/com/getcapacitor/ProcessedRoute.java +37 -0
- package/capacitor/src/main/java/com/getcapacitor/RouteProcessor.java +8 -0
- package/capacitor/src/main/java/com/getcapacitor/ServerPath.java +25 -0
- package/capacitor/src/main/java/com/getcapacitor/UriMatcher.java +184 -0
- package/capacitor/src/main/java/com/getcapacitor/WebViewListener.java +57 -0
- package/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java +758 -0
- package/capacitor/src/main/java/com/getcapacitor/annotation/ActivityCallback.java +10 -0
- package/capacitor/src/main/java/com/getcapacitor/annotation/CapacitorPlugin.java +35 -0
- package/capacitor/src/main/java/com/getcapacitor/annotation/Permission.java +22 -0
- package/capacitor/src/main/java/com/getcapacitor/annotation/PermissionCallback.java +10 -0
- package/capacitor/src/main/java/com/getcapacitor/cordova/CapacitorCordovaCookieManager.java +42 -0
- package/capacitor/src/main/java/com/getcapacitor/cordova/MockCordovaInterfaceImpl.java +39 -0
- package/capacitor/src/main/java/com/getcapacitor/cordova/MockCordovaWebViewImpl.java +282 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/CapacitorCookieManager.java +239 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/CapacitorCookies.java +119 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/CapacitorHttp.java +119 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java +220 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/WebView.java +48 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/AssetUtil.java +358 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.java +473 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/HttpRequestHandler.java +465 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/ICapacitorHttpUrlConnection.java +15 -0
- package/capacitor/src/main/java/com/getcapacitor/plugin/util/MimeType.java +17 -0
- package/capacitor/src/main/java/com/getcapacitor/util/HostMask.java +123 -0
- package/capacitor/src/main/java/com/getcapacitor/util/InternalUtils.java +27 -0
- package/capacitor/src/main/java/com/getcapacitor/util/JSONUtils.java +166 -0
- package/capacitor/src/main/java/com/getcapacitor/util/PermissionHelper.java +114 -0
- package/capacitor/src/main/java/com/getcapacitor/util/WebColor.java +28 -0
- package/capacitor/src/main/res/layout/capacitor_bridge_layout_main.xml +15 -0
- package/capacitor/src/main/res/layout/no_webview.xml +14 -0
- package/capacitor/src/main/res/values/colors.xml +6 -0
- package/capacitor/src/main/res/values/strings.xml +3 -0
- package/capacitor/src/main/res/values/styles.xml +6 -0
- package/package.json +31 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Copyright 2012 The Chromium Authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
package com.getcapacitor;
|
|
6
|
+
|
|
7
|
+
import android.content.Context;
|
|
8
|
+
import android.content.res.AssetManager;
|
|
9
|
+
import android.net.Uri;
|
|
10
|
+
import android.util.TypedValue;
|
|
11
|
+
import java.io.File;
|
|
12
|
+
import java.io.FileInputStream;
|
|
13
|
+
import java.io.IOException;
|
|
14
|
+
import java.io.InputStream;
|
|
15
|
+
import java.util.List;
|
|
16
|
+
|
|
17
|
+
public class AndroidProtocolHandler {
|
|
18
|
+
|
|
19
|
+
private Context context;
|
|
20
|
+
|
|
21
|
+
public AndroidProtocolHandler(Context context) {
|
|
22
|
+
this.context = context;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public InputStream openAsset(String path) throws IOException {
|
|
26
|
+
return context.getAssets().open(path, AssetManager.ACCESS_STREAMING);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public InputStream openResource(Uri uri) {
|
|
30
|
+
assert uri.getPath() != null;
|
|
31
|
+
// The path must be of the form ".../asset_type/asset_name.ext".
|
|
32
|
+
List<String> pathSegments = uri.getPathSegments();
|
|
33
|
+
String assetType = pathSegments.get(pathSegments.size() - 2);
|
|
34
|
+
String assetName = pathSegments.get(pathSegments.size() - 1);
|
|
35
|
+
|
|
36
|
+
// Drop the file extension.
|
|
37
|
+
assetName = assetName.split("\\.")[0];
|
|
38
|
+
try {
|
|
39
|
+
// Use the application context for resolving the resource package name so that we do
|
|
40
|
+
// not use the browser's own resources. Note that if 'context' here belongs to the
|
|
41
|
+
// test suite, it does not have a separate application context. In that case we use
|
|
42
|
+
// the original context object directly.
|
|
43
|
+
if (context.getApplicationContext() != null) {
|
|
44
|
+
context = context.getApplicationContext();
|
|
45
|
+
}
|
|
46
|
+
int fieldId = getFieldId(context, assetType, assetName);
|
|
47
|
+
int valueType = getValueType(context, fieldId);
|
|
48
|
+
if (valueType == TypedValue.TYPE_STRING) {
|
|
49
|
+
return context.getResources().openRawResource(fieldId);
|
|
50
|
+
} else {
|
|
51
|
+
Logger.error("Asset not of type string: " + uri);
|
|
52
|
+
}
|
|
53
|
+
} catch (ClassNotFoundException | IllegalAccessException | NoSuchFieldException e) {
|
|
54
|
+
Logger.error("Unable to open resource URL: " + uri, e);
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private static int getFieldId(Context context, String assetType, String assetName)
|
|
60
|
+
throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
|
61
|
+
Class<?> d = context.getClassLoader().loadClass(context.getPackageName() + ".R$" + assetType);
|
|
62
|
+
java.lang.reflect.Field field = d.getField(assetName);
|
|
63
|
+
return field.getInt(null);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public InputStream openFile(String filePath) throws IOException {
|
|
67
|
+
String realPath = filePath.replace(Bridge.CAPACITOR_FILE_START, "");
|
|
68
|
+
File localFile = new File(realPath);
|
|
69
|
+
return new FileInputStream(localFile);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public InputStream openContentUrl(Uri uri) throws IOException {
|
|
73
|
+
Integer port = uri.getPort();
|
|
74
|
+
String baseUrl = uri.getScheme() + "://" + uri.getHost();
|
|
75
|
+
if (port != -1) {
|
|
76
|
+
baseUrl += ":" + port;
|
|
77
|
+
}
|
|
78
|
+
String realPath = uri.toString().replace(baseUrl + Bridge.CAPACITOR_CONTENT_START, "content:/");
|
|
79
|
+
|
|
80
|
+
InputStream stream = null;
|
|
81
|
+
try {
|
|
82
|
+
stream = context.getContentResolver().openInputStream(Uri.parse(realPath));
|
|
83
|
+
} catch (SecurityException e) {
|
|
84
|
+
Logger.error("Unable to open content URL: " + uri, e);
|
|
85
|
+
}
|
|
86
|
+
return stream;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private static int getValueType(Context context, int fieldId) {
|
|
90
|
+
TypedValue value = new TypedValue();
|
|
91
|
+
context.getResources().getValue(fieldId, value, true);
|
|
92
|
+
return value.type;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
package com.getcapacitor;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.Nullable;
|
|
4
|
+
|
|
5
|
+
public class App {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Interface for callbacks when app status changes.
|
|
9
|
+
*/
|
|
10
|
+
public interface AppStatusChangeListener {
|
|
11
|
+
void onAppStatusChanged(Boolean isActive);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Interface for callbacks when app is restored with pending plugin call.
|
|
16
|
+
*/
|
|
17
|
+
public interface AppRestoredListener {
|
|
18
|
+
void onAppRestored(PluginResult result);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Nullable
|
|
22
|
+
private AppStatusChangeListener statusChangeListener;
|
|
23
|
+
|
|
24
|
+
@Nullable
|
|
25
|
+
private AppRestoredListener appRestoredListener;
|
|
26
|
+
|
|
27
|
+
private boolean isActive = false;
|
|
28
|
+
|
|
29
|
+
public boolean isActive() {
|
|
30
|
+
return isActive;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Set the object to receive callbacks.
|
|
35
|
+
* @param listener
|
|
36
|
+
*/
|
|
37
|
+
public void setStatusChangeListener(@Nullable AppStatusChangeListener listener) {
|
|
38
|
+
this.statusChangeListener = listener;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Set the object to receive callbacks.
|
|
43
|
+
* @param listener
|
|
44
|
+
*/
|
|
45
|
+
public void setAppRestoredListener(@Nullable AppRestoredListener listener) {
|
|
46
|
+
this.appRestoredListener = listener;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
protected void fireRestoredResult(PluginResult result) {
|
|
50
|
+
if (appRestoredListener != null) {
|
|
51
|
+
appRestoredListener.onAppRestored(result);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public void fireStatusChange(boolean isActive) {
|
|
56
|
+
this.isActive = isActive;
|
|
57
|
+
if (statusChangeListener != null) {
|
|
58
|
+
statusChangeListener.onAppStatusChanged(isActive);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
package com.getcapacitor;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.content.SharedPreferences;
|
|
5
|
+
import androidx.appcompat.app.AppCompatActivity;
|
|
6
|
+
import java.nio.charset.StandardCharsets;
|
|
7
|
+
import java.security.MessageDigest;
|
|
8
|
+
import java.security.NoSuchAlgorithmException;
|
|
9
|
+
import java.util.Objects;
|
|
10
|
+
import java.util.UUID;
|
|
11
|
+
|
|
12
|
+
public final class AppUUID {
|
|
13
|
+
|
|
14
|
+
private static final String KEY = "CapacitorAppUUID";
|
|
15
|
+
|
|
16
|
+
public static String getAppUUID(AppCompatActivity activity) throws Exception {
|
|
17
|
+
assertAppUUID(activity);
|
|
18
|
+
return readUUID(activity);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static void regenerateAppUUID(AppCompatActivity activity) throws Exception {
|
|
22
|
+
try {
|
|
23
|
+
String uuid = generateUUID();
|
|
24
|
+
writeUUID(activity, uuid);
|
|
25
|
+
} catch (NoSuchAlgorithmException ex) {
|
|
26
|
+
throw new Exception("Capacitor App UUID could not be generated.");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private static void assertAppUUID(AppCompatActivity activity) throws Exception {
|
|
31
|
+
String uuid = readUUID(activity);
|
|
32
|
+
if (uuid.equals("")) {
|
|
33
|
+
regenerateAppUUID(activity);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private static String generateUUID() throws NoSuchAlgorithmException {
|
|
38
|
+
MessageDigest salt = MessageDigest.getInstance("SHA-256");
|
|
39
|
+
salt.update(UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8));
|
|
40
|
+
return bytesToHex(salt.digest());
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private static String readUUID(AppCompatActivity activity) {
|
|
44
|
+
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
|
|
45
|
+
return sharedPref.getString(KEY, "");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private static void writeUUID(AppCompatActivity activity, String uuid) {
|
|
49
|
+
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
|
|
50
|
+
SharedPreferences.Editor editor = sharedPref.edit();
|
|
51
|
+
editor.putString(KEY, uuid);
|
|
52
|
+
editor.apply();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private static String bytesToHex(byte[] bytes) {
|
|
56
|
+
byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
|
|
57
|
+
byte[] hexChars = new byte[bytes.length * 2];
|
|
58
|
+
for (int j = 0; j < bytes.length; j++) {
|
|
59
|
+
int v = bytes[j] & 0xFF;
|
|
60
|
+
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
|
|
61
|
+
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
|
|
62
|
+
}
|
|
63
|
+
return new String(hexChars, StandardCharsets.UTF_8);
|
|
64
|
+
}
|
|
65
|
+
}
|