/* * Copyright 2014, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.managedprovisioning; import android.app.admin.DevicePolicyManager; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.os.UserHandle; import android.os.UserManager; import com.android.managedprovisioning.task.DeleteNonRequiredAppsTask; import java.util.List; /** * After a system update, this class resets the cross-profile intent filters and checks * if apps that have been added to the system image need to be deleted. */ public class PreBootListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int currentUserId = context.getUserId(); if (currentUserId == UserHandle.USER_OWNER) { // Resetting the cross-profile intent filters for the managed profiles which have // this user as their parent. UserManager um = (UserManager) context.getSystemService( Context.USER_SERVICE); List profiles = um.getProfiles(currentUserId); boolean hasClearedParent = false; if (profiles.size() > 1) { PackageManager pm = context.getPackageManager(); for (UserInfo userInfo : profiles) { if (userInfo.isManagedProfile()) { if (!hasClearedParent) { // Removes filters from the parent to all the managed profiles. pm.clearCrossProfileIntentFilters(currentUserId); hasClearedParent = true; } pm.clearCrossProfileIntentFilters(userInfo.id); CrossProfileIntentFiltersHelper.setFilters( pm, currentUserId, userInfo.id); deleteNonRequiredApps(context, userInfo.id); } } } } } /** * Deletes non-required apps that have been added to the system image during the system * update. */ private void deleteNonRequiredApps(Context context, int userId) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName profileOwner = dpm.getProfileOwnerAsUser(userId); if (profileOwner == null) { ProvisionLogger.loge("There is no profile owner on a managed profile."); } new DeleteNonRequiredAppsTask(context, profileOwner.getPackageName(), userId, R.array.required_apps_managed_profile, R.array.vendor_required_apps_managed_profile, false /* We are not creating a new profile */, true /* Disable INSTALL_SHORTCUT listeners */, new DeleteNonRequiredAppsTask.Callback() { @Override public void onSuccess() { } @Override public void onError() { ProvisionLogger.loge("Error while checking if there are new system " + "apps that need to be deleted"); } }).run(); } }