Prompt user to enable chosen WebView provider if disabled.
The WebView loading logic will not allow for the user to pick a provider that is disabled. But in the WebView developer setting for choosing provider disabled WebView providers are shown. Therefore if the user wants to use a disabled provider we (with this patch) prompt them to enable the provider (if they agree we then enable it). Bug: 26400585 Change-Id: I42476acc54f01cf873b267dd22079c5c50fa07a2
This commit is contained in:
@@ -23,6 +23,7 @@ import android.app.AlertDialog;
|
|||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.AppOpsManager.PackageOps;
|
import android.app.AppOpsManager.PackageOps;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.DialogFragment;
|
||||||
import android.app.UiModeManager;
|
import android.app.UiModeManager;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.backup.IBackupManager;
|
import android.app.backup.IBackupManager;
|
||||||
@@ -1863,6 +1864,38 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
|
|||||||
requestCode, resources.getString(R.string.oem_unlock_enable));
|
requestCode, resources.getString(R.string.oem_unlock_enable));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isPackageEnabled(String packageName) {
|
||||||
|
try {
|
||||||
|
PackageManager pm = getActivity().getPackageManager();
|
||||||
|
int enabled_state = pm.getApplicationEnabledSetting(packageName);
|
||||||
|
switch (enabled_state) {
|
||||||
|
case PackageManager.COMPONENT_ENABLED_STATE_ENABLED:
|
||||||
|
return true;
|
||||||
|
case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT:
|
||||||
|
return pm.getPackageInfo(packageName, 0).applicationInfo.enabled;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (NameNotFoundException e) {
|
||||||
|
// Thrown by PackageManager.getPackageInfo if the package does not exist
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// Thrown by PackageManager.getApplicationEnabledSetting if the package does not exist
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableAndSetWebViewPackage(String packageName) {
|
||||||
|
getActivity().getPackageManager().setApplicationEnabledSetting(packageName,
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
|
||||||
|
mWebViewProvider.setValue(packageName);
|
||||||
|
writeWebViewProviderOptions(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showEnableWebViewProviderAlert(final String packageName) {
|
||||||
|
EnableWebViewProviderDialogFragment.newInstance(packageName).show(
|
||||||
|
getChildFragmentManager(), EnableWebViewProviderDialogFragment.TAG);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
|
if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
|
||||||
@@ -1871,8 +1904,24 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
|
|||||||
pokeSystemProperties();
|
pokeSystemProperties();
|
||||||
return true;
|
return true;
|
||||||
} else if (preference == mWebViewProvider) {
|
} else if (preference == mWebViewProvider) {
|
||||||
writeWebViewProviderOptions(newValue);
|
if (newValue == null) {
|
||||||
return true;
|
Log.e(TAG, "Tried to set a null WebView provider");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String newWebViewPackageName = (String) newValue;
|
||||||
|
if (isPackageEnabled(newWebViewPackageName)) {
|
||||||
|
writeWebViewProviderOptions(newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Package is disabled or uninstalled, if it is simply disabled, check if the user wants
|
||||||
|
// to enable it
|
||||||
|
if (isPackageInstalled(getActivity(), newWebViewPackageName)) {
|
||||||
|
showEnableWebViewProviderAlert(newWebViewPackageName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Package has been uninstalled (could happen if the package was uninstalled between
|
||||||
|
// opening and closing the setting).
|
||||||
|
return false;
|
||||||
} else if (preference == mLogdSize) {
|
} else if (preference == mLogdSize) {
|
||||||
writeLogdSizeOption(newValue);
|
writeLogdSizeOption(newValue);
|
||||||
return true;
|
return true;
|
||||||
@@ -2030,6 +2079,37 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class EnableWebViewProviderDialogFragment extends DialogFragment {
|
||||||
|
public static final String TAG = "EnableWebViewProviderDialogFragment";
|
||||||
|
private static final String PACKAGE_NAME_TAG = "packageName";
|
||||||
|
|
||||||
|
public static EnableWebViewProviderDialogFragment newInstance(String packageName) {
|
||||||
|
EnableWebViewProviderDialogFragment fragment
|
||||||
|
= new EnableWebViewProviderDialogFragment();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString(PACKAGE_NAME_TAG, packageName);
|
||||||
|
fragment.setArguments(args);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
final String packageName = getArguments().getString(PACKAGE_NAME_TAG);
|
||||||
|
|
||||||
|
return new AlertDialog.Builder(getActivity())
|
||||||
|
.setMessage(R.string.select_webview_provider_confirmation_text)
|
||||||
|
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
((DevelopmentSettings)getParentFragment()).enableAndSetWebViewPackage(
|
||||||
|
packageName);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For Search.
|
* For Search.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user