Merge "Use WebViewUpdateManager instead of raw AIDL." into main
diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
index 05855e4..546320c 100644
--- a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
+++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
@@ -20,12 +20,12 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.os.RemoteException;
 import android.util.Log;
 import android.webkit.IWebViewUpdateService;
 import android.webkit.UserPackage;
 import android.webkit.WebViewFactory;
 import android.webkit.WebViewProviderInfo;
+import android.webkit.WebViewUpdateManager;
 import android.widget.Toast;
 
 import androidx.annotation.Nullable;
@@ -44,8 +44,12 @@
      */
     public PackageInfo getCurrentWebViewPackage() {
         try {
-            return WebViewFactory.getUpdateService().getCurrentWebViewPackage();
-        } catch (RemoteException e) {
+            if (android.webkit.Flags.updateServiceIpcWrapper()) {
+                return WebViewUpdateManager.getInstance().getCurrentWebViewPackage();
+            } else {
+                return WebViewFactory.getUpdateService().getCurrentWebViewPackage();
+            }
+        } catch (Exception e) {
             Log.e(TAG, e.toString());
         }
         return null;
@@ -59,8 +63,13 @@
     public List<ApplicationInfo> getValidWebViewApplicationInfos(Context context) {
         WebViewProviderInfo[] providers = null;
         try {
-            providers = WebViewFactory.getUpdateService().getValidWebViewPackages();
-        } catch (RemoteException e) {
+            if (android.webkit.Flags.updateServiceIpcWrapper()) {
+                providers = context.getSystemService(WebViewUpdateManager.class)
+                        .getValidWebViewPackages();
+            } else {
+                providers = WebViewFactory.getUpdateService().getValidWebViewPackages();
+            }
+        } catch (Exception e) {
         }
         List<ApplicationInfo> pkgs = new ArrayList<>();
         for (WebViewProviderInfo provider : providers) {
@@ -80,10 +89,15 @@
      */
     public boolean setWebViewProvider(String packageName) {
         try {
-            return packageName.equals(
-                    WebViewFactory.getUpdateService().changeProviderAndSetting(packageName));
-        } catch (RemoteException e) {
-            Log.e(TAG, "RemoteException when trying to change provider to " + packageName, e);
+            if (android.webkit.Flags.updateServiceIpcWrapper()) {
+                return packageName.equals(
+                        WebViewUpdateManager.getInstance().changeProviderAndSetting(packageName));
+            } else {
+                return packageName.equals(
+                        WebViewFactory.getUpdateService().changeProviderAndSetting(packageName));
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Exception when trying to change provider to " + packageName, e);
         }
         return false;
     }
@@ -112,18 +126,23 @@
      */
     @Nullable
     public String getDefaultWebViewPackageName() {
+        WebViewProviderInfo provider = null;
         try {
-            IWebViewUpdateService service = WebViewFactory.getUpdateService();
-            if (service != null) {
-                WebViewProviderInfo provider = service.getDefaultWebViewPackage();
-                if (provider != null) {
-                    return provider.packageName;
+            if (android.webkit.Flags.updateServiceIpcWrapper()) {
+                WebViewUpdateManager manager = WebViewUpdateManager.getInstance();
+                if (manager != null) {
+                    provider = manager.getDefaultWebViewPackage();
+                }
+            } else {
+                IWebViewUpdateService service = WebViewFactory.getUpdateService();
+                if (service != null) {
+                    provider = service.getDefaultWebViewPackage();
                 }
             }
-        } catch (RemoteException e) {
-            Log.e(TAG, "RemoteException when trying to fetch default WebView package Name", e);
+        } catch (Exception e) {
+            Log.e(TAG, "Exception when trying to fetch default WebView package Name", e);
         }
-        return null;
+        return provider != null ? provider.packageName : null;
     }
 
     static final int PACKAGE_FLAGS = PackageManager.MATCH_ANY_USER;