DeepShortcutManager.java revision 2c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33
1bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham/* 2bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Copyright (C) 2016 The Android Open Source Project 3bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 4bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Licensed under the Apache License, Version 2.0 (the "License"); 5bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * you may not use this file except in compliance with the License. 6bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * You may obtain a copy of the License at 7bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 8bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * http://www.apache.org/licenses/LICENSE-2.0 9bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 10bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Unless required by applicable law or agreed to in writing, software 11bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * distributed under the License is distributed on an "AS IS" BASIS, 12bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * See the License for the specific language governing permissions and 14bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * limitations under the License. 15bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 16bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 17bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhampackage com.android.launcher3.shortcuts; 18bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 19bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport android.annotation.TargetApi; 20bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport android.content.ComponentName; 21bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport android.content.Context; 229994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport android.content.pm.LauncherApps; 23bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport android.content.pm.LauncherApps.ShortcutQuery; 249994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport android.content.pm.ShortcutInfo; 259994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport android.graphics.Rect; 269994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport android.graphics.drawable.Drawable; 279994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport android.os.Bundle; 28acd86ff4865323d3cf411b219b88ed084fb6fce3Tonyimport android.util.Log; 29bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 301bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickhamimport com.android.launcher3.ItemInfo; 311bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickhamimport com.android.launcher3.LauncherSettings; 329994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport com.android.launcher3.Utilities; 33bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport com.android.launcher3.compat.UserHandleCompat; 34bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 35bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport java.util.ArrayList; 369994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyalimport java.util.Collections; 37bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport java.util.List; 38bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 39bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham/** 40bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Performs operations related to deep shortcuts, such as querying for them, pinning them, etc. 41bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 42bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhampublic class DeepShortcutManager { 43acd86ff4865323d3cf411b219b88ed084fb6fce3Tony private static final String TAG = "DeepShortcutManager"; 44bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 459994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal // TODO: Replace this with platform constants when the new sdk is available. 469994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal public static final int FLAG_MATCH_DYNAMIC = 1 << 0; 479994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal public static final int FLAG_MATCH_MANIFEST = 1 << 3; 489994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal public static final int FLAG_MATCH_PINNED = 1 << 1; 499994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal 509994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal private static final int FLAG_GET_ALL = 519994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED | FLAG_MATCH_MANIFEST; 529994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal 539994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal private final LauncherApps mLauncherApps; 54d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham private boolean mWasLastCallSuccess; 55bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 56bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public DeepShortcutManager(Context context, ShortcutCache shortcutCache) { 579994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal mLauncherApps = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE); 58bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 59bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 601bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham public static boolean supportsShortcuts(ItemInfo info) { 617b8f1eaba147ac42a347f3787d0e90b24be015dbTony Wickham return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; 621bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham } 631bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham 64d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham public boolean wasLastCallSuccess() { 65d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham return mWasLastCallSuccess; 66d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham } 67d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham 68bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public void onShortcutsChanged(List<ShortcutInfoCompat> shortcuts) { 69bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham // mShortcutCache.removeShortcuts(shortcuts); 70bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 71bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 72bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 73bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Queries for the shortcuts with the package name and provided ids. 74bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 75bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * This method is intended to get the full details for shortcuts when they are added or updated, 76bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * because we only get "key" fields in onShortcutsChanged(). 77bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 78bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public List<ShortcutInfoCompat> queryForFullDetails(String packageName, 79bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham List<String> shortcutIds, UserHandleCompat user) { 80bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham return query(FLAG_GET_ALL, packageName, null, shortcutIds, user); 81bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 82bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 83bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 842c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33Tony Wickham * Gets all the manifest and dynamic shortcuts associated with the given package and user, 852c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33Tony Wickham * to be displayed in the shortcuts container on long press. 86bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 872c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33Tony Wickham public List<ShortcutInfoCompat> queryForShortcutsContainer(ComponentName activity, 88bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham List<String> ids, UserHandleCompat user) { 892c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33Tony Wickham return query(FLAG_MATCH_MANIFEST | FLAG_MATCH_DYNAMIC, 902c99d2ceebd1a6b6fed2b71105b8fdf88ef26a33Tony Wickham activity.getPackageName(), activity, ids, user); 91bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 92bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 93bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 94bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Removes the given shortcut from the current list of pinned shortcuts. 95bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * (Runs on background thread) 96bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 979994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal @TargetApi(25) 98bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public void unpinShortcut(final ShortcutKey key) { 999994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (Utilities.isNycMR1OrAbove()) { 1009994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal String packageName = key.componentName.getPackageName(); 1019994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal String id = key.id; 1029994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal UserHandleCompat user = key.user; 1039994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user)); 1049994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal pinnedIds.remove(id); 105acd86ff4865323d3cf411b219b88ed084fb6fce3Tony try { 106acd86ff4865323d3cf411b219b88ed084fb6fce3Tony mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser()); 107d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = true; 108acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } catch (SecurityException e) { 109d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Log.w(TAG, "Failed to unpin shortcut", e); 110d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = false; 111acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 1129994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 113bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 114bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 115bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 116bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Adds the given shortcut to the current list of pinned shortcuts. 117bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * (Runs on background thread) 118bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 1199994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal @TargetApi(25) 120bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public void pinShortcut(final ShortcutKey key) { 1219994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (Utilities.isNycMR1OrAbove()) { 1229994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal String packageName = key.componentName.getPackageName(); 1239994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal String id = key.id; 1249994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal UserHandleCompat user = key.user; 1259994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user)); 1269994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal pinnedIds.add(id); 127acd86ff4865323d3cf411b219b88ed084fb6fce3Tony try { 128acd86ff4865323d3cf411b219b88ed084fb6fce3Tony mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser()); 129d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = true; 130acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } catch (SecurityException e) { 131d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Log.w(TAG, "Failed to pin shortcut", e); 132d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = false; 133acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 1349994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 1359994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 1369994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal 1379994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal @TargetApi(25) 1389994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal public void startShortcut(String packageName, String id, Rect sourceBounds, 1399994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal Bundle startActivityOptions, UserHandleCompat user) { 1409994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (Utilities.isNycMR1OrAbove()) { 141acd86ff4865323d3cf411b219b88ed084fb6fce3Tony try { 142d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mLauncherApps.startShortcut(packageName, id, sourceBounds, 143d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham startActivityOptions, user.getUser()); 144d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = true; 145acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } catch (SecurityException e) { 146d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Log.e(TAG, "Failed to start shortcut", e); 147d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = false; 148acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 1499994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 1509994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 1519994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal 1529994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal @TargetApi(25) 1539994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal public Drawable getShortcutIconDrawable(ShortcutInfoCompat shortcutInfo, int density) { 154acd86ff4865323d3cf411b219b88ed084fb6fce3Tony if (Utilities.isNycMR1OrAbove()) { 155acd86ff4865323d3cf411b219b88ed084fb6fce3Tony try { 156d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Drawable icon = mLauncherApps.getShortcutIconDrawable( 157d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham shortcutInfo.getShortcutInfo(), density); 158d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = true; 159d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham return icon; 160acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } catch (SecurityException e) { 161d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Log.e(TAG, "Failed to get shortcut icon", e); 162d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = false; 163acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 164acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 165acd86ff4865323d3cf411b219b88ed084fb6fce3Tony return null; 166bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 167bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 168bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 169bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Returns the id's of pinned shortcuts associated with the given package and user. 170bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 171bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * If packageName is null, returns all pinned shortcuts regardless of package. 172bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 173bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public List<ShortcutInfoCompat> queryForPinnedShortcuts(String packageName, 174bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham UserHandleCompat user) { 1759994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal return query(FLAG_MATCH_PINNED, packageName, null, null, user); 176bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 177bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 178bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham public List<ShortcutInfoCompat> queryForAllShortcuts(UserHandleCompat user) { 179bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham return query(FLAG_GET_ALL, null, null, null, user); 180bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 181bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 182bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham private List<String> extractIds(List<ShortcutInfoCompat> shortcuts) { 183bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham List<String> shortcutIds = new ArrayList<>(shortcuts.size()); 184bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham for (ShortcutInfoCompat shortcut : shortcuts) { 185bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham shortcutIds.add(shortcut.getId()); 186bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 187bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham return shortcutIds; 188bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 189bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham 190bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham /** 191bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * Query the system server for all the shortcuts matching the given parameters. 192bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * If packageName == null, we query for all shortcuts with the passed flags, regardless of app. 193bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * 194bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham * TODO: Use the cache to optimize this so we don't make an RPC every time. 195bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham */ 1969994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal @TargetApi(25) 197bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham private List<ShortcutInfoCompat> query(int flags, String packageName, 198bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham ComponentName activity, List<String> shortcutIds, UserHandleCompat user) { 1999994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (Utilities.isNycMR1OrAbove()) { 2009994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal ShortcutQuery q = new ShortcutQuery(); 2019994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal q.setQueryFlags(flags); 2029994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (packageName != null) { 2039994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal q.setPackage(packageName); 2049994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal q.setActivity(activity); 2059994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal q.setShortcutIds(shortcutIds); 2069994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 207acd86ff4865323d3cf411b219b88ed084fb6fce3Tony List<ShortcutInfo> shortcutInfos = null; 208acd86ff4865323d3cf411b219b88ed084fb6fce3Tony try { 209acd86ff4865323d3cf411b219b88ed084fb6fce3Tony shortcutInfos = mLauncherApps.getShortcuts(q, user.getUser()); 210d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = true; 211acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } catch (SecurityException e) { 212d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham Log.e(TAG, "Failed to query for shortcuts", e); 213d82a39da1c61b19d2749725f9c70c3baf2dab6bfTony Wickham mWasLastCallSuccess = false; 214acd86ff4865323d3cf411b219b88ed084fb6fce3Tony } 2159994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal if (shortcutInfos == null) { 2169994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal return Collections.EMPTY_LIST; 2179994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 2189994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcutInfos.size()); 2199994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal for (ShortcutInfo shortcutInfo : shortcutInfos) { 2209994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo)); 2219994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } 2229994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal return shortcutInfoCompats; 2239994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal } else { 2249994b2b171ab78d1d93e8a25086d6853f766e80fSunny Goyal return Collections.EMPTY_LIST; 225bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 226bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham } 227bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham} 228