@capawesome/capacitor-in-app-browser 0.0.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.
Files changed (60) hide show
  1. package/CapawesomeCapacitorInAppBrowser.podspec +17 -0
  2. package/LICENSE +21 -0
  3. package/Package.swift +28 -0
  4. package/README.md +690 -0
  5. package/android/build.gradle +60 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/InAppBrowser.java +242 -0
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/InAppBrowserPlugin.java +289 -0
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/CustomException.java +20 -0
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/CustomExceptions.java +20 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/WebViewDialog.java +343 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/events/BrowserPageNavigationCompletedEvent.java +23 -0
  13. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/events/MessageReceivedEvent.java +23 -0
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/ExecuteScriptOptions.java +29 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/GetCookiesOptions.java +29 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInExternalBrowserOptions.java +30 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInSystemBrowserOptions.java +74 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInWebViewOptions.java +112 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/PostMessageOptions.java +30 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/WebViewToolbarOptions.java +87 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/results/ExecuteScriptResult.java +25 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/results/GetCookiesResult.java +28 -0
  23. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/Callback.java +5 -0
  24. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/EmptyCallback.java +5 -0
  25. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/NonEmptyResultCallback.java +7 -0
  26. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/Result.java +7 -0
  27. package/android/src/main/res/.gitkeep +0 -0
  28. package/dist/docs.json +1173 -0
  29. package/dist/esm/definitions.d.ts +540 -0
  30. package/dist/esm/definitions.js +19 -0
  31. package/dist/esm/definitions.js.map +1 -0
  32. package/dist/esm/index.d.ts +4 -0
  33. package/dist/esm/index.js +7 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/web.d.ts +14 -0
  36. package/dist/esm/web.js +35 -0
  37. package/dist/esm/web.js.map +1 -0
  38. package/dist/plugin.cjs.js +68 -0
  39. package/dist/plugin.cjs.js.map +1 -0
  40. package/dist/plugin.js +71 -0
  41. package/dist/plugin.js.map +1 -0
  42. package/ios/Plugin/Classes/Events/BrowserPageNavigationCompletedEvent.swift +16 -0
  43. package/ios/Plugin/Classes/Events/MessageReceivedEvent.swift +24 -0
  44. package/ios/Plugin/Classes/Options/ExecuteScriptOptions.swift +17 -0
  45. package/ios/Plugin/Classes/Options/GetCookiesOptions.swift +20 -0
  46. package/ios/Plugin/Classes/Options/OpenInExternalBrowserOptions.swift +20 -0
  47. package/ios/Plugin/Classes/Options/OpenInSystemBrowserOptions.swift +52 -0
  48. package/ios/Plugin/Classes/Options/OpenInWebViewOptions.swift +48 -0
  49. package/ios/Plugin/Classes/Options/PostMessageOptions.swift +17 -0
  50. package/ios/Plugin/Classes/Options/WebViewToolbarOptions.swift +37 -0
  51. package/ios/Plugin/Classes/Results/ExecuteScriptResult.swift +25 -0
  52. package/ios/Plugin/Classes/Results/GetCookiesResult.swift +20 -0
  53. package/ios/Plugin/Classes/WebViewController.swift +224 -0
  54. package/ios/Plugin/Enums/CustomError.swift +49 -0
  55. package/ios/Plugin/InAppBrowser.swift +194 -0
  56. package/ios/Plugin/InAppBrowserHelper.swift +49 -0
  57. package/ios/Plugin/InAppBrowserPlugin.swift +191 -0
  58. package/ios/Plugin/Info.plist +24 -0
  59. package/ios/Plugin/Protocols/Result.swift +5 -0
  60. package/package.json +91 -0
@@ -0,0 +1,60 @@
1
+ ext {
2
+ junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
3
+ androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.1'
4
+ androidxBrowserVersion = project.hasProperty('androidxBrowserVersion') ? rootProject.ext.androidxBrowserVersion : '1.9.0'
5
+ androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.3.0'
6
+ androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.7.0'
7
+ }
8
+
9
+ buildscript {
10
+ repositories {
11
+ google()
12
+ mavenCentral()
13
+ }
14
+ dependencies {
15
+ classpath 'com.android.tools.build:gradle:8.13.0'
16
+ }
17
+ }
18
+
19
+ apply plugin: 'com.android.library'
20
+
21
+ android {
22
+ namespace = "io.capawesome.capacitorjs.plugins.inappbrowser"
23
+ compileSdk = project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 36
24
+ defaultConfig {
25
+ minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 24
26
+ targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 36
27
+ versionCode 1
28
+ versionName "1.0"
29
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
30
+ }
31
+ buildTypes {
32
+ release {
33
+ minifyEnabled false
34
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
35
+ }
36
+ }
37
+ lintOptions {
38
+ abortOnError = false
39
+ }
40
+ compileOptions {
41
+ sourceCompatibility JavaVersion.VERSION_21
42
+ targetCompatibility JavaVersion.VERSION_21
43
+ }
44
+ }
45
+
46
+ repositories {
47
+ google()
48
+ mavenCentral()
49
+ }
50
+
51
+
52
+ dependencies {
53
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
54
+ implementation project(':capacitor-android')
55
+ implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
56
+ implementation "androidx.browser:browser:$androidxBrowserVersion"
57
+ testImplementation "junit:junit:$junitVersion"
58
+ androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
59
+ androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
60
+ }
@@ -0,0 +1,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -0,0 +1,242 @@
1
+ package io.capawesome.capacitorjs.plugins.inappbrowser;
2
+
3
+ import android.content.ActivityNotFoundException;
4
+ import android.content.Intent;
5
+ import android.webkit.CookieManager;
6
+ import android.webkit.WebStorage;
7
+ import android.webkit.WebView;
8
+ import androidx.annotation.NonNull;
9
+ import androidx.annotation.Nullable;
10
+ import androidx.browser.customtabs.CustomTabColorSchemeParams;
11
+ import androidx.browser.customtabs.CustomTabsIntent;
12
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.CustomExceptions;
13
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.WebViewDialog;
14
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.events.BrowserPageNavigationCompletedEvent;
15
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.events.MessageReceivedEvent;
16
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.ExecuteScriptOptions;
17
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.GetCookiesOptions;
18
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInExternalBrowserOptions;
19
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInSystemBrowserOptions;
20
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInWebViewOptions;
21
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.PostMessageOptions;
22
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.results.ExecuteScriptResult;
23
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.results.GetCookiesResult;
24
+ import io.capawesome.capacitorjs.plugins.inappbrowser.interfaces.EmptyCallback;
25
+ import io.capawesome.capacitorjs.plugins.inappbrowser.interfaces.NonEmptyResultCallback;
26
+ import java.util.HashMap;
27
+ import java.util.Map;
28
+ import org.json.JSONException;
29
+ import org.json.JSONTokener;
30
+
31
+ public class InAppBrowser {
32
+
33
+ @NonNull
34
+ private final InAppBrowserPlugin plugin;
35
+
36
+ private boolean customTabOpened = false;
37
+
38
+ @Nullable
39
+ private WebViewDialog webViewDialog;
40
+
41
+ public InAppBrowser(@NonNull InAppBrowserPlugin plugin) {
42
+ this.plugin = plugin;
43
+ }
44
+
45
+ public void clearCache(@NonNull EmptyCallback callback) {
46
+ plugin
47
+ .getActivity()
48
+ .runOnUiThread(() -> {
49
+ WebView webView = new WebView(plugin.getContext());
50
+ webView.clearCache(true);
51
+ webView.destroy();
52
+ callback.success();
53
+ });
54
+ }
55
+
56
+ public void clearSessionData(@NonNull EmptyCallback callback) {
57
+ plugin
58
+ .getActivity()
59
+ .runOnUiThread(() -> {
60
+ CookieManager cookieManager = CookieManager.getInstance();
61
+ cookieManager.removeAllCookies(value -> {
62
+ cookieManager.flush();
63
+ WebStorage.getInstance().deleteAllData();
64
+ callback.success();
65
+ });
66
+ });
67
+ }
68
+
69
+ public void close(@NonNull EmptyCallback callback) {
70
+ plugin
71
+ .getActivity()
72
+ .runOnUiThread(() -> {
73
+ WebViewDialog webViewDialog = this.webViewDialog;
74
+ if (webViewDialog != null) {
75
+ webViewDialog.dismiss();
76
+ callback.success();
77
+ return;
78
+ }
79
+ if (customTabOpened) {
80
+ Intent intent = new Intent(plugin.getContext(), plugin.getActivity().getClass());
81
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
82
+ plugin.getActivity().startActivity(intent);
83
+ callback.success();
84
+ return;
85
+ }
86
+ callback.error(CustomExceptions.NO_BROWSER_OPEN);
87
+ });
88
+ }
89
+
90
+ public void executeScript(@NonNull ExecuteScriptOptions options, @NonNull NonEmptyResultCallback<ExecuteScriptResult> callback) {
91
+ plugin
92
+ .getActivity()
93
+ .runOnUiThread(() -> {
94
+ WebViewDialog webViewDialog = this.webViewDialog;
95
+ if (webViewDialog == null) {
96
+ callback.error(CustomExceptions.NO_BROWSER_OPEN);
97
+ return;
98
+ }
99
+ webViewDialog.executeScript(options.getScript(), value -> {
100
+ String result = value == null || value.equals("null") ? null : value;
101
+ callback.success(new ExecuteScriptResult(result));
102
+ });
103
+ });
104
+ }
105
+
106
+ public void getCookies(@NonNull GetCookiesOptions options, @NonNull NonEmptyResultCallback<GetCookiesResult> callback) {
107
+ plugin
108
+ .getActivity()
109
+ .runOnUiThread(() -> {
110
+ Map<String, String> cookies = new HashMap<>();
111
+ String cookieString = CookieManager.getInstance().getCookie(options.getUrl());
112
+ if (cookieString != null) {
113
+ for (String cookie : cookieString.split("; ")) {
114
+ int separatorIndex = cookie.indexOf('=');
115
+ if (separatorIndex < 0) {
116
+ continue;
117
+ }
118
+ String name = cookie.substring(0, separatorIndex);
119
+ String value = cookie.substring(separatorIndex + 1);
120
+ cookies.put(name, value);
121
+ }
122
+ }
123
+ callback.success(new GetCookiesResult(cookies));
124
+ });
125
+ }
126
+
127
+ public void handleOnPause() {
128
+ WebViewDialog webViewDialog = this.webViewDialog;
129
+ if (webViewDialog != null) {
130
+ webViewDialog.handleOnPause();
131
+ }
132
+ }
133
+
134
+ public void handleOnResume() {
135
+ WebViewDialog webViewDialog = this.webViewDialog;
136
+ if (webViewDialog != null) {
137
+ webViewDialog.handleOnResume();
138
+ }
139
+ if (customTabOpened) {
140
+ customTabOpened = false;
141
+ plugin.notifyBrowserClosedListeners();
142
+ }
143
+ }
144
+
145
+ public void openInExternalBrowser(@NonNull OpenInExternalBrowserOptions options, @NonNull EmptyCallback callback) {
146
+ Intent intent = new Intent(Intent.ACTION_VIEW, options.getUri());
147
+ try {
148
+ plugin.getActivity().startActivity(intent);
149
+ callback.success();
150
+ } catch (ActivityNotFoundException exception) {
151
+ callback.error(CustomExceptions.BROWSER_NOT_FOUND);
152
+ }
153
+ }
154
+
155
+ public void openInSystemBrowser(@NonNull OpenInSystemBrowserOptions options, @NonNull EmptyCallback callback) {
156
+ plugin
157
+ .getActivity()
158
+ .runOnUiThread(() -> {
159
+ CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
160
+ Integer toolbarColor = options.getToolbarColor();
161
+ if (toolbarColor != null) {
162
+ builder.setDefaultColorSchemeParams(new CustomTabColorSchemeParams.Builder().setToolbarColor(toolbarColor).build());
163
+ }
164
+ builder.setShowTitle(options.getShowTitle());
165
+ builder.setUrlBarHidingEnabled(options.getHideToolbarOnScroll());
166
+ CustomTabsIntent customTabsIntent = builder.build();
167
+ try {
168
+ customTabsIntent.launchUrl(plugin.getActivity(), options.getUri());
169
+ customTabOpened = true;
170
+ callback.success();
171
+ } catch (ActivityNotFoundException exception) {
172
+ callback.error(CustomExceptions.BROWSER_NOT_FOUND);
173
+ }
174
+ });
175
+ }
176
+
177
+ public void openInWebView(@NonNull OpenInWebViewOptions options, @NonNull EmptyCallback callback) {
178
+ plugin
179
+ .getActivity()
180
+ .runOnUiThread(() -> {
181
+ WebViewDialog existingWebViewDialog = this.webViewDialog;
182
+ if (existingWebViewDialog != null) {
183
+ existingWebViewDialog.dismiss();
184
+ }
185
+ WebViewDialog webViewDialog = new WebViewDialog(
186
+ plugin.getActivity(),
187
+ options,
188
+ new WebViewDialog.Listener() {
189
+ @Override
190
+ public void onClosed(@NonNull WebViewDialog dialog) {
191
+ if (InAppBrowser.this.webViewDialog == dialog) {
192
+ InAppBrowser.this.webViewDialog = null;
193
+ }
194
+ plugin.notifyBrowserClosedListeners();
195
+ }
196
+
197
+ @Override
198
+ public void onMessageReceived(@NonNull String data) {
199
+ handleMessageReceived(data);
200
+ }
201
+
202
+ @Override
203
+ public void onPageLoaded() {
204
+ plugin.notifyBrowserPageLoadedListeners();
205
+ }
206
+
207
+ @Override
208
+ public void onPageNavigationCompleted(@NonNull String url) {
209
+ plugin.notifyBrowserPageNavigationCompletedListeners(new BrowserPageNavigationCompletedEvent(url));
210
+ }
211
+ }
212
+ );
213
+ this.webViewDialog = webViewDialog;
214
+ webViewDialog.show();
215
+ callback.success();
216
+ });
217
+ }
218
+
219
+ public void postMessage(@NonNull PostMessageOptions options, @NonNull EmptyCallback callback) {
220
+ plugin
221
+ .getActivity()
222
+ .runOnUiThread(() -> {
223
+ WebViewDialog webViewDialog = this.webViewDialog;
224
+ if (webViewDialog == null) {
225
+ callback.error(CustomExceptions.NO_BROWSER_OPEN);
226
+ return;
227
+ }
228
+ webViewDialog.postMessage(options.getData().toString());
229
+ callback.success();
230
+ });
231
+ }
232
+
233
+ private void handleMessageReceived(@NonNull String data) {
234
+ Object value;
235
+ try {
236
+ value = new JSONTokener(data).nextValue();
237
+ } catch (JSONException exception) {
238
+ value = data;
239
+ }
240
+ plugin.notifyMessageReceivedListeners(new MessageReceivedEvent(value));
241
+ }
242
+ }
@@ -0,0 +1,289 @@
1
+ package io.capawesome.capacitorjs.plugins.inappbrowser;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
5
+ import com.getcapacitor.JSObject;
6
+ import com.getcapacitor.Logger;
7
+ import com.getcapacitor.Plugin;
8
+ import com.getcapacitor.PluginCall;
9
+ import com.getcapacitor.PluginMethod;
10
+ import com.getcapacitor.annotation.CapacitorPlugin;
11
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.CustomException;
12
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.events.BrowserPageNavigationCompletedEvent;
13
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.events.MessageReceivedEvent;
14
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.ExecuteScriptOptions;
15
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.GetCookiesOptions;
16
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInExternalBrowserOptions;
17
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInSystemBrowserOptions;
18
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.OpenInWebViewOptions;
19
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.options.PostMessageOptions;
20
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.results.ExecuteScriptResult;
21
+ import io.capawesome.capacitorjs.plugins.inappbrowser.classes.results.GetCookiesResult;
22
+ import io.capawesome.capacitorjs.plugins.inappbrowser.interfaces.EmptyCallback;
23
+ import io.capawesome.capacitorjs.plugins.inappbrowser.interfaces.NonEmptyResultCallback;
24
+ import io.capawesome.capacitorjs.plugins.inappbrowser.interfaces.Result;
25
+
26
+ @CapacitorPlugin(name = "InAppBrowser")
27
+ public class InAppBrowserPlugin extends Plugin {
28
+
29
+ public static final String EVENT_BROWSER_CLOSED = "browserClosed";
30
+ public static final String EVENT_BROWSER_PAGE_LOADED = "browserPageLoaded";
31
+ public static final String EVENT_BROWSER_PAGE_NAVIGATION_COMPLETED = "browserPageNavigationCompleted";
32
+ public static final String EVENT_MESSAGE_RECEIVED = "messageReceived";
33
+ public static final String TAG = "InAppBrowserPlugin";
34
+
35
+ private static final String ERROR_UNKNOWN_ERROR = "An unknown error occurred.";
36
+
37
+ private InAppBrowser implementation;
38
+
39
+ @PluginMethod
40
+ public void clearCache(PluginCall call) {
41
+ try {
42
+ EmptyCallback callback = new EmptyCallback() {
43
+ @Override
44
+ public void success() {
45
+ resolveCall(call);
46
+ }
47
+
48
+ @Override
49
+ public void error(@NonNull Exception exception) {
50
+ rejectCall(call, exception);
51
+ }
52
+ };
53
+
54
+ implementation.clearCache(callback);
55
+ } catch (Exception exception) {
56
+ rejectCall(call, exception);
57
+ }
58
+ }
59
+
60
+ @PluginMethod
61
+ public void clearSessionData(PluginCall call) {
62
+ try {
63
+ EmptyCallback callback = new EmptyCallback() {
64
+ @Override
65
+ public void success() {
66
+ resolveCall(call);
67
+ }
68
+
69
+ @Override
70
+ public void error(@NonNull Exception exception) {
71
+ rejectCall(call, exception);
72
+ }
73
+ };
74
+
75
+ implementation.clearSessionData(callback);
76
+ } catch (Exception exception) {
77
+ rejectCall(call, exception);
78
+ }
79
+ }
80
+
81
+ @PluginMethod
82
+ public void close(PluginCall call) {
83
+ try {
84
+ EmptyCallback callback = new EmptyCallback() {
85
+ @Override
86
+ public void success() {
87
+ resolveCall(call);
88
+ }
89
+
90
+ @Override
91
+ public void error(@NonNull Exception exception) {
92
+ rejectCall(call, exception);
93
+ }
94
+ };
95
+
96
+ implementation.close(callback);
97
+ } catch (Exception exception) {
98
+ rejectCall(call, exception);
99
+ }
100
+ }
101
+
102
+ @PluginMethod
103
+ public void executeScript(PluginCall call) {
104
+ try {
105
+ ExecuteScriptOptions options = new ExecuteScriptOptions(call);
106
+ NonEmptyResultCallback<ExecuteScriptResult> callback = new NonEmptyResultCallback<>() {
107
+ @Override
108
+ public void success(@NonNull ExecuteScriptResult result) {
109
+ resolveCall(call, result);
110
+ }
111
+
112
+ @Override
113
+ public void error(@NonNull Exception exception) {
114
+ rejectCall(call, exception);
115
+ }
116
+ };
117
+
118
+ implementation.executeScript(options, callback);
119
+ } catch (Exception exception) {
120
+ rejectCall(call, exception);
121
+ }
122
+ }
123
+
124
+ @PluginMethod
125
+ public void getCookies(PluginCall call) {
126
+ try {
127
+ GetCookiesOptions options = new GetCookiesOptions(call);
128
+ NonEmptyResultCallback<GetCookiesResult> callback = new NonEmptyResultCallback<>() {
129
+ @Override
130
+ public void success(@NonNull GetCookiesResult result) {
131
+ resolveCall(call, result);
132
+ }
133
+
134
+ @Override
135
+ public void error(@NonNull Exception exception) {
136
+ rejectCall(call, exception);
137
+ }
138
+ };
139
+
140
+ implementation.getCookies(options, callback);
141
+ } catch (Exception exception) {
142
+ rejectCall(call, exception);
143
+ }
144
+ }
145
+
146
+ @Override
147
+ public void load() {
148
+ implementation = new InAppBrowser(this);
149
+ }
150
+
151
+ public void notifyBrowserClosedListeners() {
152
+ notifyListeners(EVENT_BROWSER_CLOSED, new JSObject());
153
+ }
154
+
155
+ public void notifyBrowserPageLoadedListeners() {
156
+ notifyListeners(EVENT_BROWSER_PAGE_LOADED, new JSObject());
157
+ }
158
+
159
+ public void notifyBrowserPageNavigationCompletedListeners(@NonNull BrowserPageNavigationCompletedEvent event) {
160
+ notifyListeners(EVENT_BROWSER_PAGE_NAVIGATION_COMPLETED, event.toJSObject());
161
+ }
162
+
163
+ public void notifyMessageReceivedListeners(@NonNull MessageReceivedEvent event) {
164
+ notifyListeners(EVENT_MESSAGE_RECEIVED, event.toJSObject());
165
+ }
166
+
167
+ @PluginMethod
168
+ public void openInExternalBrowser(PluginCall call) {
169
+ try {
170
+ OpenInExternalBrowserOptions options = new OpenInExternalBrowserOptions(call);
171
+ EmptyCallback callback = new EmptyCallback() {
172
+ @Override
173
+ public void success() {
174
+ resolveCall(call);
175
+ }
176
+
177
+ @Override
178
+ public void error(@NonNull Exception exception) {
179
+ rejectCall(call, exception);
180
+ }
181
+ };
182
+
183
+ implementation.openInExternalBrowser(options, callback);
184
+ } catch (Exception exception) {
185
+ rejectCall(call, exception);
186
+ }
187
+ }
188
+
189
+ @PluginMethod
190
+ public void openInSystemBrowser(PluginCall call) {
191
+ try {
192
+ OpenInSystemBrowserOptions options = new OpenInSystemBrowserOptions(call);
193
+ EmptyCallback callback = new EmptyCallback() {
194
+ @Override
195
+ public void success() {
196
+ resolveCall(call);
197
+ }
198
+
199
+ @Override
200
+ public void error(@NonNull Exception exception) {
201
+ rejectCall(call, exception);
202
+ }
203
+ };
204
+
205
+ implementation.openInSystemBrowser(options, callback);
206
+ } catch (Exception exception) {
207
+ rejectCall(call, exception);
208
+ }
209
+ }
210
+
211
+ @PluginMethod
212
+ public void openInWebView(PluginCall call) {
213
+ try {
214
+ OpenInWebViewOptions options = new OpenInWebViewOptions(call);
215
+ EmptyCallback callback = new EmptyCallback() {
216
+ @Override
217
+ public void success() {
218
+ resolveCall(call);
219
+ }
220
+
221
+ @Override
222
+ public void error(@NonNull Exception exception) {
223
+ rejectCall(call, exception);
224
+ }
225
+ };
226
+
227
+ implementation.openInWebView(options, callback);
228
+ } catch (Exception exception) {
229
+ rejectCall(call, exception);
230
+ }
231
+ }
232
+
233
+ @PluginMethod
234
+ public void postMessage(PluginCall call) {
235
+ try {
236
+ PostMessageOptions options = new PostMessageOptions(call);
237
+ EmptyCallback callback = new EmptyCallback() {
238
+ @Override
239
+ public void success() {
240
+ resolveCall(call);
241
+ }
242
+
243
+ @Override
244
+ public void error(@NonNull Exception exception) {
245
+ rejectCall(call, exception);
246
+ }
247
+ };
248
+
249
+ implementation.postMessage(options, callback);
250
+ } catch (Exception exception) {
251
+ rejectCall(call, exception);
252
+ }
253
+ }
254
+
255
+ @Override
256
+ protected void handleOnPause() {
257
+ implementation.handleOnPause();
258
+ }
259
+
260
+ @Override
261
+ protected void handleOnResume() {
262
+ implementation.handleOnResume();
263
+ }
264
+
265
+ private void rejectCall(@NonNull PluginCall call, @NonNull Exception exception) {
266
+ String message = exception.getMessage();
267
+ if (message == null) {
268
+ message = ERROR_UNKNOWN_ERROR;
269
+ }
270
+ String code = null;
271
+ if (exception instanceof CustomException) {
272
+ code = ((CustomException) exception).getCode();
273
+ }
274
+ Logger.error(TAG, message, exception);
275
+ call.reject(message, code);
276
+ }
277
+
278
+ private void resolveCall(@NonNull PluginCall call) {
279
+ call.resolve();
280
+ }
281
+
282
+ private void resolveCall(@NonNull PluginCall call, @Nullable Result result) {
283
+ if (result == null) {
284
+ call.resolve();
285
+ } else {
286
+ call.resolve(result.toJSObject());
287
+ }
288
+ }
289
+ }
@@ -0,0 +1,20 @@
1
+ package io.capawesome.capacitorjs.plugins.inappbrowser.classes;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
5
+
6
+ public class CustomException extends Exception {
7
+
8
+ @Nullable
9
+ private final String code;
10
+
11
+ public CustomException(@Nullable String code, @NonNull String message) {
12
+ super(message);
13
+ this.code = code;
14
+ }
15
+
16
+ @Nullable
17
+ public String getCode() {
18
+ return code;
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ package io.capawesome.capacitorjs.plugins.inappbrowser.classes;
2
+
3
+ public class CustomExceptions {
4
+
5
+ public static final CustomException BACKGROUND_COLOR_INVALID = new CustomException(
6
+ null,
7
+ "backgroundColor must be a valid hex color code."
8
+ );
9
+ public static final CustomException BROWSER_NOT_FOUND = new CustomException(
10
+ "BROWSER_NOT_FOUND",
11
+ "No app was found on the device that can open the URL."
12
+ );
13
+ public static final CustomException COLOR_INVALID = new CustomException(null, "color must be a valid hex color code.");
14
+ public static final CustomException DATA_MISSING = new CustomException(null, "data must be provided.");
15
+ public static final CustomException NO_BROWSER_OPEN = new CustomException("NO_BROWSER_OPEN", "No browser is currently open.");
16
+ public static final CustomException SCRIPT_MISSING = new CustomException(null, "script must be provided.");
17
+ public static final CustomException TOOLBAR_COLOR_INVALID = new CustomException(null, "toolbarColor must be a valid hex color code.");
18
+ public static final CustomException URL_INVALID = new CustomException(null, "url is invalid.");
19
+ public static final CustomException URL_MISSING = new CustomException(null, "url must be provided.");
20
+ }