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