From 66313bb11df3aeab4c6e14385ad09ccd43c10114 Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Wed, 11 May 2016 12:31:40 +0100 Subject: [PATCH] Disable WebViewSetting for non-admin users. For an app to be able to know whether the WebViewSetting is enabled for a user we disable the setting at boot for non-admin users. In this way an app can call intent.resolveActivity[Info] for the WebViewSetting intent to check whether the WebViewSetting is enabled before linking to it. Bug: 28034166 Change-Id: I33b3fa10a38f2a2600cddd0891ef746126abdd61 --- AndroidManifest.xml | 2 +- ...fileSetup.java => SettingsInitialize.java} | 29 ++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) rename src/com/android/settings/{ManagedProfileSetup.java => SettingsInitialize.java} (78%) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1f0d5d7b162..6ba161e87b3 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -153,7 +153,7 @@ - + diff --git a/src/com/android/settings/ManagedProfileSetup.java b/src/com/android/settings/SettingsInitialize.java similarity index 78% rename from src/com/android/settings/ManagedProfileSetup.java rename to src/com/android/settings/SettingsInitialize.java index ac012b06a65..07fec0741ab 100644 --- a/src/com/android/settings/ManagedProfileSetup.java +++ b/src/com/android/settings/SettingsInitialize.java @@ -36,10 +36,11 @@ import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS; /** * Listens to {@link Intent.ACTION_BOOT_COMPLETED} and {@link Intent.ACTION_PRE_BOOT_COMPLETED} - * performs setup steps for a managed profile (disables the launcher icon of the Settings app and - * adds cross-profile intent filters for the appropriate Settings activities). + * performs setup steps for a managed profile (disables the launcher icon of the Settings app, + * adds cross-profile intent filters for the appropriate Settings activities), and disables the + * webview setting for non-admin users. */ -public class ManagedProfileSetup extends BroadcastReceiver { +public class SettingsInitialize extends BroadcastReceiver { private static final String TAG = "Settings"; private static final String PRIMARY_PROFILE_SETTING = "com.android.settings.PRIMARY_PROFILE_CONTROLLED"; @@ -48,12 +49,18 @@ public class ManagedProfileSetup extends BroadcastReceiver { public void onReceive(Context context, Intent broadcast) { final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); UserInfo userInfo = um.getUserInfo(UserHandle.myUserId()); + final PackageManager pm = context.getPackageManager(); + managedProfileSetup(context, pm, broadcast, userInfo); + webviewSettingSetup(context, pm, userInfo); + } + + private void managedProfileSetup(Context context, final PackageManager pm, Intent broadcast, + UserInfo userInfo) { if (userInfo == null || !userInfo.isManagedProfile()) { return; } Log.i(TAG, "Received broadcast: " + broadcast.getAction() + ". Setting up intent forwarding for managed profile."); - final PackageManager pm = context.getPackageManager(); // Clear any previous intent forwarding we set up pm.clearCrossProfileIntentFilters(userInfo.id); @@ -86,4 +93,18 @@ public class ManagedProfileSetup extends BroadcastReceiver { pm.setComponentEnabledSetting(settingsComponentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } + + // Disable WebView Setting if the current user is not an admin + private void webviewSettingSetup(Context context, PackageManager pm, UserInfo userInfo) { + if (userInfo == null) { + return; + } + ComponentName settingsComponentName = + new ComponentName(context, WebViewImplementation.class); + pm.setComponentEnabledSetting(settingsComponentName, + userInfo.isAdmin() ? + PackageManager.COMPONENT_ENABLED_STATE_ENABLED : + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } }