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
This commit is contained in:
@@ -153,7 +153,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<receiver android:name="ManagedProfileSetup">
|
<receiver android:name="SettingsInitialize">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.USER_INITIALIZE"/>
|
<action android:name="android.intent.action.USER_INITIALIZE"/>
|
||||||
<action android:name="android.intent.action.PRE_BOOT_COMPLETED"/>
|
<action android:name="android.intent.action.PRE_BOOT_COMPLETED"/>
|
||||||
|
@@ -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}
|
* 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
|
* 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).
|
* 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 TAG = "Settings";
|
||||||
private static final String PRIMARY_PROFILE_SETTING =
|
private static final String PRIMARY_PROFILE_SETTING =
|
||||||
"com.android.settings.PRIMARY_PROFILE_CONTROLLED";
|
"com.android.settings.PRIMARY_PROFILE_CONTROLLED";
|
||||||
@@ -48,12 +49,18 @@ public class ManagedProfileSetup extends BroadcastReceiver {
|
|||||||
public void onReceive(Context context, Intent broadcast) {
|
public void onReceive(Context context, Intent broadcast) {
|
||||||
final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
UserInfo userInfo = um.getUserInfo(UserHandle.myUserId());
|
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()) {
|
if (userInfo == null || !userInfo.isManagedProfile()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.i(TAG, "Received broadcast: " + broadcast.getAction()
|
Log.i(TAG, "Received broadcast: " + broadcast.getAction()
|
||||||
+ ". Setting up intent forwarding for managed profile.");
|
+ ". Setting up intent forwarding for managed profile.");
|
||||||
final PackageManager pm = context.getPackageManager();
|
|
||||||
// Clear any previous intent forwarding we set up
|
// Clear any previous intent forwarding we set up
|
||||||
pm.clearCrossProfileIntentFilters(userInfo.id);
|
pm.clearCrossProfileIntentFilters(userInfo.id);
|
||||||
|
|
||||||
@@ -86,4 +93,18 @@ public class ManagedProfileSetup extends BroadcastReceiver {
|
|||||||
pm.setComponentEnabledSetting(settingsComponentName,
|
pm.setComponentEnabledSetting(settingsComponentName,
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user