1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.launcher3.util;
17 
18 import com.android.launcher3.ItemInfo;
19 import com.android.launcher3.LauncherSettings;
20 import com.android.launcher3.Utilities;
21 import com.android.launcher3.WorkspaceItemInfo;
22 import com.android.launcher3.config.FeatureFlags;
23 import com.android.launcher3.shortcuts.ShortcutKey;
24 
25 public class ShortcutUtil {
26     /**
27      * Returns true when we should show shortcut menu for the item.
28      */
supportsShortcuts(ItemInfo info)29     public static boolean supportsShortcuts(ItemInfo info) {
30         return isActive(info) && (isApp(info) || isPinnedShortcut(info));
31     }
32 
33     /**
34      * Returns true when we should show depp shortcuts in shortcut menu for the item.
35      */
supportsDeepShortcuts(ItemInfo info)36     public static boolean supportsDeepShortcuts(ItemInfo info) {
37         return isActive(info) && isApp(info);
38     }
39 
40     /**
41      * Returns the shortcut id if the item is a pinned shortcut.
42      */
getShortcutIdIfPinnedShortcut(ItemInfo info)43     public static String getShortcutIdIfPinnedShortcut(ItemInfo info) {
44         return isActive(info) && isPinnedShortcut(info)
45                 ? ShortcutKey.fromItemInfo(info).getId() : null;
46     }
47 
48     /**
49      * Returns the person keys associated with the item. (Has no function right now.)
50      */
getPersonKeysIfPinnedShortcut(ItemInfo info)51     public static String[] getPersonKeysIfPinnedShortcut(ItemInfo info) {
52         return isActive(info) && isPinnedShortcut(info)
53                 ? ((WorkspaceItemInfo) info).getPersonKeys() : Utilities.EMPTY_STRING_ARRAY;
54     }
55 
56     /**
57      * Returns true if the item is a deep shortcut.
58      */
isDeepShortcut(ItemInfo info)59     public static boolean isDeepShortcut(ItemInfo info) {
60         return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT
61                 && info instanceof WorkspaceItemInfo;
62     }
63 
isActive(ItemInfo info)64     private static boolean isActive(ItemInfo info) {
65         boolean isLoading = info instanceof WorkspaceItemInfo
66                 && ((WorkspaceItemInfo) info).hasPromiseIconUi();
67         return !isLoading && !info.isDisabled() && !FeatureFlags.GO_DISABLE_WIDGETS;
68     }
69 
isApp(ItemInfo info)70     private static boolean isApp(ItemInfo info) {
71         return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
72     }
73 
isPinnedShortcut(ItemInfo info)74     private static boolean isPinnedShortcut(ItemInfo info) {
75         return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT
76                 && info.container != ItemInfo.NO_ID
77                 && info instanceof WorkspaceItemInfo;
78     }
79 }