1d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse/* 2d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Copyright 2014, The Android Open Source Project 3d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * 4d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Licensed under the Apache License, Version 2.0 (the "License"); 5d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * you may not use this file except in compliance with the License. 6d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * You may obtain a copy of the License at 7d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * 8d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * http://www.apache.org/licenses/LICENSE-2.0 9d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * 10d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Unless required by applicable law or agreed to in writing, software 11d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * distributed under the License is distributed on an "AS IS" BASIS, 12d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * See the License for the specific language governing permissions and 14d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * limitations under the License. 15d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse */ 16d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 17d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnsepackage com.android.managedprovisioning.task; 18d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 19d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.ComponentName; 20d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.Context; 21d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.Intent; 22d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.ComponentInfo; 23d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.PackageManager; 24d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.ResolveInfo; 25d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 26d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport com.android.managedprovisioning.ProvisionLogger; 27d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport com.android.managedprovisioning.Utils; 28d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 29d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport java.util.List; 30d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport java.util.Set; 31d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 32d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 33d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse/** 34d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Disables all system app components that listen to ACTION_INSTALL_SHORTCUT. 35d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse */ 36d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnsepublic class DisableInstallShortcutListenersTask { 37d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse private final PackageManager mPm; 38d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse private final int mUserId; 39d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 40d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse public DisableInstallShortcutListenersTask(Context context, int userId) { 41d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse mUserId = userId; 42d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse mPm = context.getPackageManager(); 43d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 44d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 45d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse public void run() { 46d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ProvisionLogger.logd("Disabling install shortcut listeners."); 47d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse Intent actionShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 48d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse Set<String> systemApps = Utils.getCurrentSystemApps(mUserId); 49d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse for (String systemApp : systemApps) { 50d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse actionShortcut.setPackage(systemApp); 51d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse disableReceivers(actionShortcut); 52d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 53d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 54d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 55d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse /** 56d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Disable all components that can handle the specified broadcast intent. 57d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse */ 58d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse private void disableReceivers(Intent intent) { 59d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse List<ResolveInfo> receivers = mPm.queryBroadcastReceivers(intent, 0, mUserId); 60d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse for (ResolveInfo ri : receivers) { 61d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse // One of ri.activityInfo, ri.serviceInfo, ri.providerInfo is not null. Let's find which 62d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse // one. 63d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ComponentInfo ci; 64d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse if (ri.activityInfo != null) { 65d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.activityInfo; 66d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } else if (ri.serviceInfo != null) { 67d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.serviceInfo; 68d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } else { 69d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.providerInfo; 70d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 71d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse Utils.disableComponent(new ComponentName(ci.packageName, ci.name), mUserId); 72d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 73d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 74d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse} 75