@@ -2,15 +2,23 @@ package com.simplemobiletools.launcher.extensions
22
33import android.app.Activity
44import android.content.ComponentName
5+ import android.content.Context
56import android.content.Intent
67import android.content.pm.ApplicationInfo
8+ import android.content.pm.LauncherApps
79import android.content.res.ColorStateList
10+ import android.graphics.Rect
811import android.net.Uri
12+ import android.os.Process
913import android.provider.Settings
1014import android.view.ContextThemeWrapper
1115import android.view.Gravity
16+ import android.view.Menu
1217import android.view.View
1318import android.widget.PopupMenu
19+ import androidx.core.graphics.drawable.toBitmap
20+ import androidx.core.graphics.drawable.toDrawable
21+ import androidx.core.view.MenuCompat
1422import androidx.core.view.forEach
1523import com.google.android.material.color.MaterialColors
1624import com.simplemobiletools.commons.extensions.getPopupMenuTheme
@@ -91,6 +99,43 @@ fun Activity.handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridI
9199 menu.findItem(R .id.app_info).isVisible = gridItem.type == ITEM_TYPE_ICON
92100 menu.findItem(R .id.uninstall).isVisible = gridItem.type == ITEM_TYPE_ICON && canAppBeUninstalled(gridItem.packageName)
93101 menu.findItem(R .id.remove).isVisible = ! isOnAllAppsFragment
102+
103+ val launcherApps = applicationContext.getSystemService(Context .LAUNCHER_APPS_SERVICE ) as LauncherApps
104+ val shortcuts = if (launcherApps.hasShortcutHostPermission()) {
105+ try {
106+ val query = LauncherApps .ShortcutQuery ().setQueryFlags(
107+ LauncherApps .ShortcutQuery .FLAG_MATCH_DYNAMIC or LauncherApps .ShortcutQuery .FLAG_MATCH_MANIFEST or LauncherApps .ShortcutQuery .FLAG_MATCH_PINNED
108+ ).setPackage(gridItem.packageName)
109+ launcherApps.getShortcuts(query, Process .myUserHandle())
110+ } catch (e: Exception ) {
111+ null
112+ }
113+ } else {
114+ null
115+ }
116+
117+ val hasShortcuts = ! shortcuts.isNullOrEmpty()
118+ MenuCompat .setGroupDividerEnabled(menu, hasShortcuts)
119+ menu.setGroupVisible(R .id.group_shortcuts, hasShortcuts)
120+ if (hasShortcuts) {
121+ val iconSize = resources.getDimensionPixelSize(R .dimen.menu_icon_size)
122+ shortcuts?.forEach {
123+ menu.add(R .id.group_shortcuts, Menu .NONE , Menu .NONE , it.longLabel)
124+ .setIcon(
125+ launcherApps.getShortcutIconDrawable(it, resources.displayMetrics.densityDpi).toBitmap(width = iconSize, height = iconSize)
126+ .toDrawable(resources)
127+ )
128+ .setOnMenuItemClickListener { _ ->
129+ listener.onAnyClick()
130+ val id = it.id
131+ val packageName = it.`package`
132+ val userHandle = Process .myUserHandle()
133+ launcherApps.startShortcut(packageName, id, Rect (), null , userHandle)
134+ true
135+ }
136+ }
137+ }
138+
94139 setOnMenuItemClickListener { item ->
95140 listener.onAnyClick()
96141 when (item.itemId) {
0 commit comments