[webview_flutter] Enable warnings-as-errors on Android (#3356)

[webview_flutter] Enable warnings-as-errors on Android
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index f6d7bb7..dd38bcb 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## 3.3.2
 
+* Resolves compilations warnings.
 * Updates compileSdkVersion to 33.
 * Bumps androidx.webkit:webkit from 1.5.0 to 1.6.0.
 
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImpl.java
index 3e38ce9..d9a647d 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImpl.java
@@ -14,11 +14,7 @@
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
       cookieManager.removeAllCookies(result::success);
     } else {
-      final boolean hasCookies = cookieManager.hasCookies();
-      if (hasCookies) {
-        cookieManager.removeAllCookie();
-      }
-      result.success(hasCookies);
+      result.success(removeCookiesPreL(cookieManager));
     }
   }
 
@@ -26,4 +22,20 @@
   public void setCookie(String url, String value) {
     CookieManager.getInstance().setCookie(url, value);
   }
+
+  /**
+   * Removes all cookies from the given cookie manager, using the deprecated (pre-Lollipop)
+   * implementation.
+   *
+   * @param cookieManager The cookie manager to clear all cookies from.
+   * @return Whether any cookies were removed.
+   */
+  @SuppressWarnings("deprecation")
+  private boolean removeCookiesPreL(CookieManager cookieManager) {
+    final boolean hasCookies = cookieManager.hasCookies();
+    if (hasCookies) {
+      cookieManager.removeAllCookie();
+    }
+    return hasCookies;
+  }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
index 425f6c1..9897472 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
@@ -1,7 +1,7 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// Autogenerated from Pigeon (v4.2.14), do not edit directly.
+// Autogenerated from Pigeon (v9.0.4), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package io.flutter.plugins.webviewflutter;
@@ -24,6 +24,15 @@
 /** Generated class from Pigeon. */
 @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"})
 public class GeneratedAndroidWebView {
+  @NonNull
+  private static ArrayList<Object> wrapError(@NonNull Throwable exception) {
+    ArrayList<Object> errorList = new ArrayList<Object>(3);
+    errorList.add(exception.toString());
+    errorList.add(exception.getClass().getSimpleName());
+    errorList.add(
+        "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
+    return errorList;
+  }
 
   /**
    * Mode of how to select files for a file chooser.
@@ -62,7 +71,7 @@
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
-  public static class FileChooserModeEnumData {
+  public static final class FileChooserModeEnumData {
     private @NonNull FileChooserMode value;
 
     public @NonNull FileChooserMode getValue() {
@@ -80,6 +89,7 @@
     private FileChooserModeEnumData() {}
 
     public static final class Builder {
+
       private @Nullable FileChooserMode value;
 
       public @NonNull Builder setValue(@NonNull FileChooserMode setterArg) {
@@ -110,7 +120,7 @@
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
-  public static class WebResourceRequestData {
+  public static final class WebResourceRequestData {
     private @NonNull String url;
 
     public @NonNull String getUrl() {
@@ -190,6 +200,7 @@
     private WebResourceRequestData() {}
 
     public static final class Builder {
+
       private @Nullable String url;
 
       public @NonNull Builder setUrl(@NonNull String setterArg) {
@@ -275,7 +286,7 @@
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
-  public static class WebResourceErrorData {
+  public static final class WebResourceErrorData {
     private @NonNull Long errorCode;
 
     public @NonNull Long getErrorCode() {
@@ -306,6 +317,7 @@
     private WebResourceErrorData() {}
 
     public static final class Builder {
+
       private @Nullable Long errorCode;
 
       public @NonNull Builder setErrorCode(@NonNull Long setterArg) {
@@ -350,7 +362,7 @@
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
-  public static class WebViewPoint {
+  public static final class WebViewPoint {
     private @NonNull Long x;
 
     public @NonNull Long getX() {
@@ -381,6 +393,7 @@
     private WebViewPoint() {}
 
     public static final class Builder {
+
       private @Nullable Long x;
 
       public @NonNull Builder setX(@NonNull Long setterArg) {
@@ -436,6 +449,7 @@
    * <p>Generated interface from Pigeon that represents a handler of messages from Flutter.
    */
   public interface JavaObjectHostApi {
+
     void dispose(@NonNull Long identifier);
 
     /** The codec used by JavaObjectHostApi. */
@@ -453,7 +467,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -489,6 +503,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -503,13 +518,12 @@
               binaryMessenger, "dev.flutter.pigeon.JavaObjectFlutterApi.dispose", getCodec());
       channel.send(
           new ArrayList<Object>(Collections.singletonList(identifierArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface CookieManagerHostApi {
+
     void clearCookies(Result<Boolean> result);
 
     void setCookie(@NonNull String url, @NonNull String value);
@@ -532,7 +546,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   Result<Boolean> resultCallback =
                       new Result<Boolean>() {
@@ -564,7 +578,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -601,7 +615,6 @@
       switch (type) {
         case (byte) 128:
           return WebViewPoint.fromList((ArrayList<Object>) readValue(buffer));
-
         default:
           return super.readValueOfType(type, buffer);
       }
@@ -620,6 +633,7 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebViewHostApi {
+
     void create(@NonNull Long instanceId, @NonNull Boolean useHybridComposition);
 
     void loadData(
@@ -705,7 +719,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -738,7 +752,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -777,7 +791,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -818,7 +832,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -856,7 +870,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -892,7 +906,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -920,7 +934,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -948,7 +962,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -976,7 +990,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1003,7 +1017,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1030,7 +1044,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1057,7 +1071,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1092,7 +1106,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1137,7 +1151,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1165,7 +1179,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1203,7 +1217,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1241,7 +1255,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1269,7 +1283,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1297,7 +1311,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1328,7 +1342,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1355,7 +1369,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1392,7 +1406,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1430,7 +1444,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1468,7 +1482,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1500,7 +1514,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1532,7 +1546,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1562,6 +1576,7 @@
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebSettingsHostApi {
+
     void create(@NonNull Long instanceId, @NonNull Long webViewInstanceId);
 
     void setDomStorageEnabled(@NonNull Long instanceId, @NonNull Boolean flag);
@@ -1603,7 +1618,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1638,7 +1653,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1672,7 +1687,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1706,7 +1721,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1740,7 +1755,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1774,7 +1789,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1806,7 +1821,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1840,7 +1855,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1874,7 +1889,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1908,7 +1923,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1942,7 +1957,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -1976,7 +1991,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2010,7 +2025,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2039,6 +2054,7 @@
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface JavaScriptChannelHostApi {
+
     void create(@NonNull Long instanceId, @NonNull String channelName);
 
     /** The codec used by JavaScriptChannelHostApi. */
@@ -2057,7 +2073,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2092,6 +2108,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -2109,13 +2126,12 @@
               getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, messageArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebViewClientHostApi {
+
     void create(@NonNull Long instanceId);
 
     void setSynchronousReturnValueForShouldOverrideUrlLoading(
@@ -2137,7 +2153,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2166,7 +2182,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2204,10 +2220,8 @@
       switch (type) {
         case (byte) 128:
           return WebResourceErrorData.fromList((ArrayList<Object>) readValue(buffer));
-
         case (byte) 129:
           return WebResourceRequestData.fromList((ArrayList<Object>) readValue(buffer));
-
         default:
           return super.readValueOfType(type, buffer);
       }
@@ -2235,6 +2249,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -2255,9 +2270,7 @@
               getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, webViewInstanceIdArg, urlArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void onPageFinished(
@@ -2272,9 +2285,7 @@
               getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, webViewInstanceIdArg, urlArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void onReceivedRequestError(
@@ -2291,9 +2302,7 @@
       channel.send(
           new ArrayList<Object>(
               Arrays.asList(instanceIdArg, webViewInstanceIdArg, requestArg, errorArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void onReceivedError(
@@ -2316,9 +2325,7 @@
                   errorCodeArg,
                   descriptionArg,
                   failingUrlArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void requestLoading(
@@ -2333,9 +2340,7 @@
               getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, webViewInstanceIdArg, requestArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void urlLoading(
@@ -2348,13 +2353,12 @@
               binaryMessenger, "dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading", getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, webViewInstanceIdArg, urlArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface DownloadListenerHostApi {
+
     void create(@NonNull Long instanceId);
 
     /** The codec used by DownloadListenerHostApi. */
@@ -2373,7 +2377,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2403,6 +2407,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -2433,13 +2438,12 @@
                   contentDispositionArg,
                   mimetypeArg,
                   contentLengthArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebChromeClientHostApi {
+
     void create(@NonNull Long instanceId);
 
     void setSynchronousReturnValueForOnShowFileChooser(
@@ -2461,7 +2465,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2490,7 +2494,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2519,6 +2523,7 @@
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface FlutterAssetManagerHostApi {
+
     @NonNull
     List<String> list(@NonNull String path);
 
@@ -2541,7 +2546,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2570,7 +2575,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2600,6 +2605,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -2620,9 +2626,7 @@
               getCodec());
       channel.send(
           new ArrayList<Object>(Arrays.asList(instanceIdArg, webViewInstanceIdArg, progressArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
 
     public void onShowFileChooser(
@@ -2647,6 +2651,7 @@
   }
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebStorageHostApi {
+
     void create(@NonNull Long instanceId);
 
     void deleteAllData(@NonNull Long instanceId);
@@ -2666,7 +2671,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2693,7 +2698,7 @@
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                ArrayList wrapped = new ArrayList<>();
+                ArrayList<Object> wrapped = new ArrayList<Object>();
                 try {
                   ArrayList<Object> args = (ArrayList<Object>) message;
                   assert args != null;
@@ -2727,7 +2732,6 @@
       switch (type) {
         case (byte) 128:
           return FileChooserModeEnumData.fromList((ArrayList<Object>) readValue(buffer));
-
         default:
           return super.readValueOfType(type, buffer);
       }
@@ -2759,6 +2763,7 @@
       this.binaryMessenger = argBinaryMessenger;
     }
 
+    /** Public interface for sending reply. */
     public interface Reply<T> {
       void reply(T reply);
     }
@@ -2781,19 +2786,7 @@
           new ArrayList<Object>(
               Arrays.asList(
                   instanceIdArg, isCaptureEnabledArg, acceptTypesArg, modeArg, filenameHintArg)),
-          channelReply -> {
-            callback.reply(null);
-          });
+          channelReply -> callback.reply(null));
     }
   }
-
-  @NonNull
-  private static ArrayList<Object> wrapError(@NonNull Throwable exception) {
-    ArrayList<Object> errorList = new ArrayList<>(3);
-    errorList.add(exception.toString());
-    errorList.add(exception.getClass().getSimpleName());
-    errorList.add(
-        "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
-    return errorList;
-  }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebChromeClientHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebChromeClientHostApiImpl.java
index a5825c0..5bc40e6 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebChromeClientHostApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebChromeClientHostApiImpl.java
@@ -130,6 +130,8 @@
               return true;
             }
 
+            // Legacy codepath for < N.
+            @SuppressWarnings("deprecation")
             @Override
             public boolean shouldOverrideUrlLoading(WebView windowWebView, String url) {
               if (!webViewClient.shouldOverrideUrlLoading(view, url)) {
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java
index 09a34f2..79c0210 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java
@@ -59,6 +59,8 @@
       flutterApi.onReceivedRequestError(this, view, request, error, reply -> {});
     }
 
+    // Legacy codepath for < 23; newer versions use the variant above.
+    @SuppressWarnings("deprecation")
     @Override
     public void onReceivedError(
         WebView view, int errorCode, String description, String failingUrl) {
@@ -72,6 +74,8 @@
       return returnValueForShouldOverrideUrlLoading;
     }
 
+    // Legacy codepath for < 24; newer versions use the variant above.
+    @SuppressWarnings("deprecation")
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
       flutterApi.urlLoading(this, view, url, reply -> {});
@@ -125,6 +129,8 @@
       flutterApi.onReceivedRequestError(this, view, request, error, reply -> {});
     }
 
+    // Legacy codepath for versions that don't support the variant above.
+    @SuppressWarnings("deprecation")
     @Override
     public void onReceivedError(
         WebView view, int errorCode, String description, String failingUrl) {
@@ -140,6 +146,8 @@
       return returnValueForShouldOverrideUrlLoading;
     }
 
+    // Legacy codepath for < Lollipop; newer versions use the variant above.
+    @SuppressWarnings("deprecation")
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
       flutterApi.urlLoading(this, view, url, reply -> {});
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImplTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImplTest.java
index 6daeb1b..79edf9c 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImplTest.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/CookieManagerHostApiImplTest.java
@@ -33,7 +33,9 @@
     when(cookieManager.hasCookies()).thenReturn(true);
     doAnswer(
             answer -> {
-              ((ValueCallback<Boolean>) answer.getArgument(0)).onReceiveValue(true);
+              @SuppressWarnings("unchecked")
+              ValueCallback<Boolean> callback = (ValueCallback<Boolean>) answer.getArgument(0);
+              (callback).onReceiveValue(true);
               return null;
             })
         .when(cookieManager)
@@ -59,6 +61,7 @@
   public void clearCookiesShouldCallRemoveAllCookiesOnAndroidLAbove() {
     // Setup
     TestUtils.setFinalStatic(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.LOLLIPOP);
+    @SuppressWarnings("unchecked")
     GeneratedAndroidWebView.Result<Boolean> result = mock(GeneratedAndroidWebView.Result.class);
     CookieManagerHostApiImpl impl = new CookieManagerHostApiImpl();
     // Run
@@ -69,9 +72,11 @@
   }
 
   @Test
+  @SuppressWarnings("deprecation")
   public void clearCookiesShouldCallRemoveAllCookieBelowAndroidL() {
     // Setup
     TestUtils.setFinalStatic(Build.VERSION.class, "SDK_INT", Build.VERSION_CODES.KITKAT_WATCH);
+    @SuppressWarnings("unchecked")
     GeneratedAndroidWebView.Result<Boolean> result = mock(GeneratedAndroidWebView.Result.class);
     CookieManagerHostApiImpl impl = new CookieManagerHostApiImpl();
     // Run
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/JavaScriptChannelTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/JavaScriptChannelTest.java
index c9a5e64..391c6c8 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/JavaScriptChannelTest.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/JavaScriptChannelTest.java
@@ -9,6 +9,7 @@
 import static org.mockito.Mockito.verify;
 
 import android.os.Handler;
+import android.os.Looper;
 import io.flutter.plugins.webviewflutter.JavaScriptChannelHostApiImpl.JavaScriptChannelCreator;
 import org.junit.After;
 import org.junit.Before;
@@ -47,7 +48,10 @@
 
     hostApiImpl =
         new JavaScriptChannelHostApiImpl(
-            instanceManager, javaScriptChannelCreator, mockFlutterApi, new Handler());
+            instanceManager,
+            javaScriptChannelCreator,
+            mockFlutterApi,
+            new Handler(Looper.myLooper()));
     hostApiImpl.create(0L, "aChannelName");
   }
 
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/RegistrarFlutterAssetManagerTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/RegistrarFlutterAssetManagerTest.java
index 86b0fb5..fa0d27d 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/RegistrarFlutterAssetManagerTest.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/RegistrarFlutterAssetManagerTest.java
@@ -11,8 +11,6 @@
 import static org.mockito.Mockito.when;
 
 import android.content.res.AssetManager;
-import io.flutter.plugin.common.PluginRegistry.Registrar;
-import io.flutter.plugins.webviewflutter.FlutterAssetManager.RegistrarFlutterAssetManager;
 import java.io.IOException;
 import org.junit.Before;
 import org.junit.Test;
@@ -21,17 +19,19 @@
 @SuppressWarnings("deprecation")
 public class RegistrarFlutterAssetManagerTest {
   @Mock AssetManager mockAssetManager;
-  @Mock Registrar mockRegistrar;
+  @Mock io.flutter.plugin.common.PluginRegistry.Registrar mockRegistrar;
 
-  RegistrarFlutterAssetManager testRegistrarFlutterAssetManager;
+  io.flutter.plugins.webviewflutter.FlutterAssetManager.RegistrarFlutterAssetManager
+      testRegistrarFlutterAssetManager;
 
   @Before
   public void setUp() {
     mockAssetManager = mock(AssetManager.class);
-    mockRegistrar = mock(Registrar.class);
+    mockRegistrar = mock(io.flutter.plugin.common.PluginRegistry.Registrar.class);
 
     testRegistrarFlutterAssetManager =
-        new RegistrarFlutterAssetManager(mockAssetManager, mockRegistrar);
+        new io.flutter.plugins.webviewflutter.FlutterAssetManager.RegistrarFlutterAssetManager(
+            mockAssetManager, mockRegistrar);
   }
 
   @Test
diff --git a/packages/webview_flutter/webview_flutter_android/example/android/build.gradle b/packages/webview_flutter/webview_flutter_android/example/android/build.gradle
index 1942e9d..ca118fd 100644
--- a/packages/webview_flutter/webview_flutter_android/example/android/build.gradle
+++ b/packages/webview_flutter/webview_flutter_android/example/android/build.gradle
@@ -35,9 +35,7 @@
 gradle.projectsEvaluated {
     project(":webview_flutter_android") {
         tasks.withType(JavaCompile) {
-            // TODO(stuartmorgan): Enable this. See
-            // https://github.com/flutter/flutter/issues/91868
-            //options.compilerArgs << "-Xlint:all" << "-Werror"
+            options.compilerArgs << "-Xlint:all" << "-Werror"
         }
     }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.g.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.g.dart
index d3c306a..5210879 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.g.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.g.dart
@@ -1,9 +1,10 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// Autogenerated from Pigeon (v4.2.14), do not edit directly.
+// Autogenerated from Pigeon (v9.0.4), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
+
 import 'dart:async';
 import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;
 
@@ -297,7 +298,6 @@
     switch (type) {
       case 128:
         return WebViewPoint.decode(readValue(buffer)!);
-
       default:
         return super.readValueOfType(type, buffer);
     }
@@ -1394,10 +1394,8 @@
     switch (type) {
       case 128:
         return WebResourceErrorData.decode(readValue(buffer)!);
-
       case 129:
         return WebResourceRequestData.decode(readValue(buffer)!);
-
       default:
         return super.readValueOfType(type, buffer);
     }
@@ -1935,7 +1933,6 @@
     switch (type) {
       case 128:
         return FileChooserModeEnumData.decode(readValue(buffer)!);
-
       default:
         return super.readValueOfType(type, buffer);
     }
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 6196da9..16d9eda 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -29,4 +29,4 @@
   flutter_test:
     sdk: flutter
   mockito: ^5.3.2
-  pigeon: ^4.2.14
+  pigeon: ^9.0.4
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
index 01885ca..4bb2afb 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
@@ -349,6 +349,12 @@
 class MockAndroidWebViewController extends _i1.Mock
     implements _i8.AndroidWebViewController {
   @override
+  int get webViewIdentifier => (super.noSuchMethod(
+        Invocation.getter(#webViewIdentifier),
+        returnValue: 0,
+        returnValueForMissingStub: 0,
+      ) as int);
+  @override
   _i3.PlatformWebViewControllerCreationParams get params => (super.noSuchMethod(
         Invocation.getter(#params),
         returnValue: _FakePlatformWebViewControllerCreationParams_4(
@@ -650,11 +656,11 @@
   @override
   _i9.Future<void> setOnShowFileSelector(
           _i9.Future<List<String>> Function(_i8.FileSelectorParams)?
-              onShowFileSelectorCallback) =>
+              onShowFileSelector) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnShowFileSelector,
-          [onShowFileSelectorCallback],
+          [onShowFileSelector],
         ),
         returnValue: _i9.Future<void>.value(),
         returnValueForMissingStub: _i9.Future<void>.value(),
diff --git a/packages/webview_flutter/webview_flutter_android/test/test_android_webview.g.dart b/packages/webview_flutter/webview_flutter_android/test/test_android_webview.g.dart
index 56ba79a..1b372e6 100644
--- a/packages/webview_flutter/webview_flutter_android/test/test_android_webview.g.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/test_android_webview.g.dart
@@ -1,7 +1,7 @@
 // Copyright 2013 The Flutter Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-// Autogenerated from Pigeon (v4.2.14), do not edit directly.
+// Autogenerated from Pigeon (v9.0.4), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import
 // ignore_for_file: avoid_relative_lib_imports
@@ -64,7 +64,6 @@
     switch (type) {
       case 128:
         return WebViewPoint.decode(readValue(buffer)!);
-
       default:
         return super.readValueOfType(type, buffer);
     }