diff options
| -rw-r--r-- | core/java/android/content/Context.java | 4 | ||||
| -rw-r--r-- | core/java/android/webkit/WebView.java | 6 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewFactory.java | 2 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewUpdateManager.java | 5 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewUpdateService.java | 18 | ||||
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/Utils.java | 11 |
6 files changed, 28 insertions, 18 deletions
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index ffcb1cbec94e..ce8c8ff8ce4d 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -33,6 +33,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.PermissionMethod; import android.annotation.PermissionName; +import android.annotation.RequiresFeature; import android.annotation.RequiresPermission; import android.annotation.StringDef; import android.annotation.StringRes; @@ -6677,6 +6678,8 @@ public abstract class Context { * Use with {@link #getSystemService(String)} to retrieve a {@link * android.webkit.WebViewUpdateManager} for accessing the WebView update service. * + * <p>This can only be used on devices with {@link PackageManager#FEATURE_WEBVIEW}. + * * @see #getSystemService(String) * @see android.webkit.WebViewUpdateManager * @hide @@ -6684,6 +6687,7 @@ public abstract class Context { @FlaggedApi(android.webkit.Flags.FLAG_UPDATE_SERVICE_IPC_WRAPPER) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SuppressLint("ServiceName") + @RequiresFeature(PackageManager.FEATURE_WEBVIEW) public static final String WEBVIEW_UPDATE_SERVICE = "webviewupdate"; /** diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index f336b5d8a727..ffe8c80023c4 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3088,11 +3088,11 @@ public class WebView extends AbsoluteLayout } if (Flags.updateServiceIpcWrapper()) { - WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); - if (manager == null) { + if (WebViewFactory.isWebViewSupported()) { + return WebViewUpdateManager.getInstance().getCurrentWebViewPackage(); + } else { return null; } - return manager.getCurrentWebViewPackage(); } else { IWebViewUpdateService service = WebViewFactory.getUpdateService(); if (service == null) { diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index c53a0e158dea..829a519e65a7 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -208,7 +208,7 @@ public final class WebViewFactory { public MissingWebViewPackageException(Exception e) { super(e); } } - private static boolean isWebViewSupported() { + static boolean isWebViewSupported() { // No lock; this is a benign race as Boolean's state is final and the PackageManager call // will always return the same value. if (sWebViewSupported == null) { diff --git a/core/java/android/webkit/WebViewUpdateManager.java b/core/java/android/webkit/WebViewUpdateManager.java index dd48df975906..0eb710015ea9 100644 --- a/core/java/android/webkit/WebViewUpdateManager.java +++ b/core/java/android/webkit/WebViewUpdateManager.java @@ -19,12 +19,14 @@ package android.webkit; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresFeature; import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.app.SystemServiceRegistry; import android.content.Context; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.os.RemoteException; /** @hide */ @@ -43,8 +45,11 @@ public final class WebViewUpdateManager { * * This exists for the benefit of callsites without a {@link Context}; prefer * {@link Context#getSystemService(Class)} otherwise. + * + * This can only be used on devices with {@link PackageManager#FEATURE_WEBVIEW}. */ @SuppressLint("ManagerLookup") // service opts in to getSystemServiceWithNoContext() + @RequiresFeature(PackageManager.FEATURE_WEBVIEW) public static @Nullable WebViewUpdateManager getInstance() { return (WebViewUpdateManager) SystemServiceRegistry.getSystemServiceWithNoContext( Context.WEBVIEW_UPDATE_SERVICE); diff --git a/core/java/android/webkit/WebViewUpdateService.java b/core/java/android/webkit/WebViewUpdateService.java index 6f53ddeafef1..01af182a10fa 100644 --- a/core/java/android/webkit/WebViewUpdateService.java +++ b/core/java/android/webkit/WebViewUpdateService.java @@ -34,11 +34,11 @@ public final class WebViewUpdateService { */ public static WebViewProviderInfo[] getAllWebViewPackages() { if (Flags.updateServiceIpcWrapper()) { - WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); - if (manager == null) { + if (WebViewFactory.isWebViewSupported()) { + return WebViewUpdateManager.getInstance().getAllWebViewPackages(); + } else { return new WebViewProviderInfo[0]; } - return manager.getAllWebViewPackages(); } else { IWebViewUpdateService service = getUpdateService(); if (service == null) { @@ -57,11 +57,11 @@ public final class WebViewUpdateService { */ public static WebViewProviderInfo[] getValidWebViewPackages() { if (Flags.updateServiceIpcWrapper()) { - WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); - if (manager == null) { + if (WebViewFactory.isWebViewSupported()) { + return WebViewUpdateManager.getInstance().getValidWebViewPackages(); + } else { return new WebViewProviderInfo[0]; } - return manager.getValidWebViewPackages(); } else { IWebViewUpdateService service = getUpdateService(); if (service == null) { @@ -80,11 +80,11 @@ public final class WebViewUpdateService { */ public static String getCurrentWebViewPackageName() { if (Flags.updateServiceIpcWrapper()) { - WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); - if (manager == null) { + if (WebViewFactory.isWebViewSupported()) { + return WebViewUpdateManager.getInstance().getCurrentWebViewPackageName(); + } else { return null; } - return manager.getCurrentWebViewPackageName(); } else { IWebViewUpdateService service = getUpdateService(); if (service == null) { diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index b02b0c454644..1e5833564d39 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -495,7 +495,7 @@ public class Utils { || packageName.equals(sServicesSystemSharedLibPackageName) || packageName.equals(sSharedSystemSharedLibPackageName) || packageName.equals(PrintManager.PRINT_SPOOLER_PACKAGE_NAME) - || (updateServiceV2() && packageName.equals(getDefaultWebViewPackageName())) + || (updateServiceV2() && packageName.equals(getDefaultWebViewPackageName(pm))) || isDeviceProvisioningPackage(resources, packageName); } @@ -511,7 +511,7 @@ public class Utils { /** Fetch the package name of the default WebView provider. */ @Nullable - private static String getDefaultWebViewPackageName() { + private static String getDefaultWebViewPackageName(PackageManager pm) { if (sDefaultWebViewPackageName != null) { return sDefaultWebViewPackageName; } @@ -519,9 +519,10 @@ public class Utils { WebViewProviderInfo provider = null; if (android.webkit.Flags.updateServiceIpcWrapper()) { - WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); - if (manager != null) { - provider = manager.getDefaultWebViewPackage(); + if (pm.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) { + // WebViewUpdateManager.getInstance() will not return null on devices with + // FEATURE_WEBVIEW. + provider = WebViewUpdateManager.getInstance().getDefaultWebViewPackage(); } } else { try { |