SessionCommitReceiver.java revision 4179e9b88f21d49e24ee005c00b0dad0de0ec343
14179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal/*
24179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * Copyright (C) 2008 The Android Open Source Project
34179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal *
44179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * Licensed under the Apache License, Version 2.0 (the "License");
54179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * you may not use this file except in compliance with the License.
64179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * You may obtain a copy of the License at
74179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal *
84179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal *      http://www.apache.org/licenses/LICENSE-2.0
94179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal *
104179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * Unless required by applicable law or agreed to in writing, software
114179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * distributed under the License is distributed on an "AS IS" BASIS,
124179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * See the License for the specific language governing permissions and
144179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * limitations under the License.
154179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal */
164179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
174179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalpackage com.android.launcher3;
184179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
194179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.BroadcastReceiver;
204179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.Context;
214179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.Intent;
224179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.pm.LauncherActivityInfo;
234179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.pm.PackageInstaller;
244179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.content.pm.PackageInstaller.SessionInfo;
254179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.os.Process;
264179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.os.UserHandle;
274179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport android.text.TextUtils;
284179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
294179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport com.android.launcher3.compat.LauncherAppsCompat;
304179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
314179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalimport java.util.List;
324179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
334179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal/**
344179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal * BroadcastReceiver to handle session commit intent.
354179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal */
364179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyalpublic class SessionCommitReceiver extends BroadcastReceiver {
374179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
384179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    // Preference key for automatically adding icon to homescreen.
394179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    public static final String ADD_ICON_PREFERENCE_KEY = "pref_add_icon_to_home";
404179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
414179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    @Override
424179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    public void onReceive(Context context, Intent intent) {
434179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        if (!isEnabled(context)) {
444179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            // User has decided to not add icons on homescreen.
454179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            return;
464179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        }
474179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
484179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        SessionInfo info = intent.getParcelableExtra(PackageInstaller.EXTRA_SESSION);
494179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER);
504179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        // TODO: Verify install reason
514179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        if (TextUtils.isEmpty(info.getAppPackageName())) {
524179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            return;
534179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        }
544179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
554179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        if (!Process.myUserHandle().equals(user)) {
564179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            // Managed profile is handled using ManagedProfileHeuristic
574179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            return;
584179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        }
594179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
604179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        List<LauncherActivityInfo> activities = LauncherAppsCompat.getInstance(context)
614179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal                .getActivityList(info.getAppPackageName(), user);
624179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        if (activities == null || activities.isEmpty()) {
634179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            // no activity found
644179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal            return;
654179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        }
664179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        InstallShortcutReceiver.queueActivityInfo(activities.get(0), context);
674179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    }
684179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal
694179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    public static boolean isEnabled(Context context) {
704179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal        return Utilities.getPrefs(context).getBoolean(ADD_ICON_PREFERENCE_KEY, true);
714179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal    }
724179e9b88f21d49e24ee005c00b0dad0de0ec343Sunny Goyal}
73