Skip to content

Commit 2d07746

Browse files
committed
Add wrapper for androidx.webkit.WebSettingsCompat
1 parent bb9d65a commit 2d07746

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,12 @@ abstract class AndroidWebkitLibraryPigeonProxyApiRegistrar(val binaryMessenger:
567567
*/
568568
abstract fun getPigeonApiCertificate(): PigeonApiCertificate
569569

570+
/**
571+
* An implementation of [PigeonApiWebSettingsCompat] used to add a new Dart instance of
572+
* `WebSettingsCompat` to the Dart `InstanceManager`.
573+
*/
574+
abstract fun getPigeonApiWebSettingsCompat(): PigeonApiWebSettingsCompat
575+
570576
fun setUp() {
571577
AndroidWebkitLibraryPigeonInstanceManagerApi.setUpMessageHandlers(
572578
binaryMessenger, instanceManager)
@@ -598,6 +604,8 @@ abstract class AndroidWebkitLibraryPigeonProxyApiRegistrar(val binaryMessenger:
598604
binaryMessenger, getPigeonApiSslCertificateDName())
599605
PigeonApiSslCertificate.setUpMessageHandlers(binaryMessenger, getPigeonApiSslCertificate())
600606
PigeonApiCertificate.setUpMessageHandlers(binaryMessenger, getPigeonApiCertificate())
607+
PigeonApiWebSettingsCompat.setUpMessageHandlers(
608+
binaryMessenger, getPigeonApiWebSettingsCompat())
601609
}
602610

603611
fun tearDown() {
@@ -623,6 +631,7 @@ abstract class AndroidWebkitLibraryPigeonProxyApiRegistrar(val binaryMessenger:
623631
PigeonApiSslCertificateDName.setUpMessageHandlers(binaryMessenger, null)
624632
PigeonApiSslCertificate.setUpMessageHandlers(binaryMessenger, null)
625633
PigeonApiCertificate.setUpMessageHandlers(binaryMessenger, null)
634+
PigeonApiWebSettingsCompat.setUpMessageHandlers(binaryMessenger, null)
626635
}
627636
}
628637

@@ -727,6 +736,8 @@ private class AndroidWebkitLibraryPigeonProxyApiBaseCodec(
727736
registrar.getPigeonApiSslCertificate().pigeon_newInstance(value) {}
728737
} else if (value is java.security.cert.Certificate) {
729738
registrar.getPigeonApiCertificate().pigeon_newInstance(value) {}
739+
} else if (value is androidx.webkit.WebSettingsCompat) {
740+
registrar.getPigeonApiWebSettingsCompat().pigeon_newInstance(value) {}
730741
}
731742

732743
when {
@@ -6310,3 +6321,79 @@ abstract class PigeonApiCertificate(
63106321
}
63116322
}
63126323
}
6324+
6325+
@Suppress("UNCHECKED_CAST")
6326+
abstract class PigeonApiWebSettingsCompat(
6327+
open val pigeonRegistrar: AndroidWebkitLibraryPigeonProxyApiRegistrar
6328+
) {
6329+
abstract fun setPaymentRequestEnabled(webSettings: android.webkit.WebSettings, enabled: Boolean)
6330+
6331+
companion object {
6332+
@Suppress("LocalVariableName")
6333+
fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiWebSettingsCompat?) {
6334+
val codec = api?.pigeonRegistrar?.codec ?: AndroidWebkitLibraryPigeonCodec()
6335+
run {
6336+
val channel =
6337+
BasicMessageChannel<Any?>(
6338+
binaryMessenger,
6339+
"dev.flutter.pigeon.webview_flutter_android.WebSettingsCompat.setPaymentRequestEnabled",
6340+
codec)
6341+
if (api != null) {
6342+
channel.setMessageHandler { message, reply ->
6343+
val args = message as List<Any?>
6344+
val webSettingsArg = args[0] as android.webkit.WebSettings
6345+
val enabledArg = args[1] as Boolean
6346+
val wrapped: List<Any?> =
6347+
try {
6348+
api.setPaymentRequestEnabled(webSettingsArg, enabledArg)
6349+
listOf(null)
6350+
} catch (exception: Throwable) {
6351+
AndroidWebkitLibraryPigeonUtils.wrapError(exception)
6352+
}
6353+
reply.reply(wrapped)
6354+
}
6355+
} else {
6356+
channel.setMessageHandler(null)
6357+
}
6358+
}
6359+
}
6360+
}
6361+
6362+
@Suppress("LocalVariableName", "FunctionName")
6363+
/** Creates a Dart instance of WebSettingsCompat and attaches it to [pigeon_instanceArg]. */
6364+
fun pigeon_newInstance(
6365+
pigeon_instanceArg: androidx.webkit.WebSettingsCompat,
6366+
callback: (Result<Unit>) -> Unit
6367+
) {
6368+
if (pigeonRegistrar.ignoreCallsToDart) {
6369+
callback(
6370+
Result.failure(
6371+
AndroidWebKitError("ignore-calls-error", "Calls to Dart are being ignored.", "")))
6372+
} else if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) {
6373+
callback(Result.success(Unit))
6374+
} else {
6375+
val pigeon_identifierArg =
6376+
pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg)
6377+
val binaryMessenger = pigeonRegistrar.binaryMessenger
6378+
val codec = pigeonRegistrar.codec
6379+
val channelName =
6380+
"dev.flutter.pigeon.webview_flutter_android.WebSettingsCompat.pigeon_newInstance"
6381+
val channel = BasicMessageChannel<Any?>(binaryMessenger, channelName, codec)
6382+
channel.send(listOf(pigeon_identifierArg)) {
6383+
if (it is List<*>) {
6384+
if (it.size > 1) {
6385+
callback(
6386+
Result.failure(
6387+
AndroidWebKitError(it[0] as String, it[1] as String, it[2] as String?)))
6388+
} else {
6389+
callback(Result.success(Unit))
6390+
}
6391+
} else {
6392+
callback(
6393+
Result.failure(AndroidWebkitLibraryPigeonUtils.createConnectionError(channelName)))
6394+
}
6395+
}
6396+
}
6397+
}
6398+
}
6399+

packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/ProxyApiRegistrar.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,10 @@ public void setContext(@NonNull Context context) {
251251
public FlutterAssetManager getFlutterAssetManager() {
252252
return flutterAssetManager;
253253
}
254+
255+
@NonNull
256+
@Override
257+
public PigeonApiWebSettingsCompat getPigeonApiWebSettingsCompat() {
258+
return new WebSettingsCompatProxyApi(this);
259+
}
254260
}

packages/webview_flutter/webview_flutter_android/pigeons/android_webkit.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,3 +1091,16 @@ abstract class Certificate {
10911091
/// The encoded form of this certificate.
10921092
Uint8List getEncoded();
10931093
}
1094+
1095+
@ProxyApi(
1096+
kotlinOptions: KotlinProxyApiOptions(
1097+
fullClassName: 'androidx.webkit.WebSettingsCompat',
1098+
),
1099+
)
1100+
abstract class WebSettingsCompat {
1101+
@static
1102+
void setPaymentRequestEnabled(
1103+
WebSettings webSettings,
1104+
bool enabled,
1105+
);
1106+
}

0 commit comments

Comments
 (0)