forked from PeterGSI/patches
134 lines
6 KiB
Diff
134 lines
6 KiB
Diff
From fb0c9ab82954cf41bb985957d3eddfd190ca2ca5 Mon Sep 17 00:00:00 2001
|
|
From: Pranav Vashi <neobuddy89@gmail.com>
|
|
Date: Sat, 21 Sep 2024 13:44:09 +0530
|
|
Subject: [PATCH 10/11] WebView: Add check before setting default or fallback
|
|
provider
|
|
|
|
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
|
|
---
|
|
.../webkit/WebViewUpdateServiceImpl.java | 14 ++++++--
|
|
.../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++-----
|
|
2 files changed, 38 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
|
|
index b9be4a2de..e98196f9f 100644
|
|
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
|
|
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
|
|
@@ -15,6 +15,7 @@
|
|
*/
|
|
package com.android.server.webkit;
|
|
|
|
+import android.app.AppGlobals;
|
|
import android.annotation.Nullable;
|
|
import android.content.pm.PackageInfo;
|
|
import android.content.pm.PackageManager.NameNotFoundException;
|
|
@@ -396,7 +397,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {
|
|
@Override
|
|
public WebViewProviderInfo getDefaultWebViewPackage() {
|
|
for (WebViewProviderInfo provider : getWebViewPackages()) {
|
|
- if (provider.availableByDefault) {
|
|
+ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) {
|
|
return provider;
|
|
}
|
|
}
|
|
@@ -406,6 +407,15 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {
|
|
throw new AndroidRuntimeException("No available by default WebView Provider.");
|
|
}
|
|
|
|
+ private static boolean isPackageAvailable(String packageName) {
|
|
+ try {
|
|
+ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0);
|
|
+ return true;
|
|
+ } catch (NameNotFoundException e) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+
|
|
private static class ProviderAndPackageInfo {
|
|
public final WebViewProviderInfo provider;
|
|
public final PackageInfo packageInfo;
|
|
@@ -644,7 +654,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {
|
|
*/
|
|
private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) {
|
|
for (WebViewProviderInfo provider : webviewPackages) {
|
|
- if (provider.isFallback) {
|
|
+ if (provider.isFallback && isPackageAvailable(provider.packageName)) {
|
|
return provider;
|
|
}
|
|
}
|
|
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
|
|
index 307c15b72..26d1195dc 100644
|
|
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
|
|
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java
|
|
@@ -15,6 +15,7 @@
|
|
*/
|
|
package com.android.server.webkit;
|
|
|
|
+import android.app.AppGlobals;
|
|
import android.annotation.Nullable;
|
|
import android.content.pm.PackageInfo;
|
|
import android.content.pm.PackageManager.NameNotFoundException;
|
|
@@ -112,7 +113,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
|
|
|
|
WebViewProviderInfo defaultProvider = null;
|
|
for (WebViewProviderInfo provider : webviewProviders) {
|
|
- if (provider.availableByDefault) {
|
|
+ if (provider.availableByDefault && isPackageAvailable(provider.packageName)) {
|
|
defaultProvider = provider;
|
|
break;
|
|
}
|
|
@@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
|
|
}
|
|
}
|
|
|
|
+ private static boolean isPackageAvailable(String packageName) {
|
|
+ try {
|
|
+ AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0);
|
|
+ return true;
|
|
+ } catch (NameNotFoundException e) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+
|
|
private boolean shouldTriggerRepairLocked() {
|
|
if (mAttemptedToRepairBefore) {
|
|
return false;
|
|
@@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
|
|
}
|
|
mAttemptedToRepairBefore = true;
|
|
}
|
|
- Slog.w(
|
|
- TAG,
|
|
- "No provider available for all users, trying to install and enable "
|
|
- + mDefaultProvider.packageName);
|
|
- mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName);
|
|
- mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true);
|
|
+
|
|
+ WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages();
|
|
+ WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders);
|
|
+ if (fallbackProvider != null) {
|
|
+ Slog.w(TAG, "No valid provider, trying to install and enable "
|
|
+ + fallbackProvider.packageName);
|
|
+ mSystemInterface.installExistingPackageForAllUsers(fallbackProvider.packageName);
|
|
+ mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true);
|
|
+ } else {
|
|
+ Slog.w(TAG, "No provider available for all users, trying to install and enable "
|
|
+ + mDefaultProvider.packageName);
|
|
+ mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName);
|
|
+ mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true);
|
|
+ }
|
|
}
|
|
|
|
@Override
|
|
@@ -701,7 +719,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface {
|
|
*/
|
|
private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) {
|
|
for (WebViewProviderInfo provider : webviewPackages) {
|
|
- if (provider.isFallback) {
|
|
+ if (provider.isFallback && isPackageAvailable(provider.packageName)) {
|
|
return provider;
|
|
}
|
|
}
|
|
--
|
|
2.44.0
|
|
|