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 19e36926b4933d60a31858fd8c15249ac400d16752Nicolas Prevotimport android.app.AppGlobals; 20d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.ComponentName; 21d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.Context; 22d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.Intent; 23d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.ComponentInfo; 24d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.PackageManager; 25d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport android.content.pm.ResolveInfo; 26d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 27f7a9eea8fe577f2f5edbbe6e73891a54351286c6Benjamin Franzimport com.android.managedprovisioning.common.ProvisionLogger; 289df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport com.android.managedprovisioning.R; 2972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franzimport com.android.managedprovisioning.common.Utils; 309df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 31d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 32d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport java.util.List; 33d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnseimport java.util.Set; 34d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 35d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 36d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse/** 37d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Disables all system app components that listen to ACTION_INSTALL_SHORTCUT. 38d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse */ 399df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franzpublic class DisableInstallShortcutListenersTask extends AbstractProvisioningTask { 40d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse private final PackageManager mPm; 419df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz private int mUserId; 42d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 4372023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz private final Utils mUtils = new Utils(); 4472023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz 459df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public DisableInstallShortcutListenersTask( 469df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Context context, 479df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz ProvisioningParams params, 489df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz Callback callback) { 499df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz super(context, params, callback); 509df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 51d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse mPm = context.getPackageManager(); 52d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 53d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 549df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz @Override 559df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public void run(int userId) { 569df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz mUserId = userId; 57d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ProvisionLogger.logd("Disabling install shortcut listeners."); 58d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse Intent actionShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 5972023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz Set<String> systemApps = mUtils.getCurrentSystemApps(AppGlobals.getPackageManager(), 60e36926b4933d60a31858fd8c15249ac400d16752Nicolas Prevot mUserId); 61d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse for (String systemApp : systemApps) { 62d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse actionShortcut.setPackage(systemApp); 63d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse disableReceivers(actionShortcut); 64d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 659df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz success(); 669df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz } 679df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz 689df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz @Override 699df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz public int getStatusMsgId() { 709df4bac8ee77da37b1633e9f04ab9464697f6d41Benjamin Franz return R.string.progress_finishing_touches; 71d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 72d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse 73d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse /** 74d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse * Disable all components that can handle the specified broadcast intent. 75d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse */ 76d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse private void disableReceivers(Intent intent) { 77231c59e688191956f93b13032422cab27dd39ca3Benjamin Franz List<ResolveInfo> receivers = mPm.queryBroadcastReceiversAsUser(intent, 78231c59e688191956f93b13032422cab27dd39ca3Benjamin Franz PackageManager.MATCH_DIRECT_BOOT_UNAWARE | PackageManager.MATCH_DIRECT_BOOT_AWARE, 79231c59e688191956f93b13032422cab27dd39ca3Benjamin Franz mUserId); 80d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse for (ResolveInfo ri : receivers) { 81d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse // One of ri.activityInfo, ri.serviceInfo, ri.providerInfo is not null. Let's find which 82d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse // one. 83d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ComponentInfo ci; 84d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse if (ri.activityInfo != null) { 85d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.activityInfo; 86d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } else if (ri.serviceInfo != null) { 87d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.serviceInfo; 88d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } else { 89d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse ci = ri.providerInfo; 90d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 9172023ca7b7a818fa33e0303baf6f5baef05b5f1bBenjamin Franz mUtils.disableComponent(new ComponentName(ci.packageName, ci.name), mUserId); 92d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 93d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse } 94d5e4c42542dd96d8940912cc20dff20fa48da0d9Sander Alewijnse} 95