11package com.simplemobiletools.filemanager.pro.adapters
22
3+ import android.annotation.SuppressLint
4+ import android.app.PendingIntent
35import android.content.ClipData
46import android.content.ClipboardManager
57import android.content.Context
8+ import android.content.Intent
69import android.content.pm.PackageManager
10+ import android.content.pm.ShortcutInfo
11+ import android.content.pm.ShortcutManager
712import android.graphics.drawable.Drawable
13+ import android.graphics.drawable.Icon
14+ import android.graphics.drawable.LayerDrawable
15+ import android.net.Uri
816import android.view.Menu
917import android.view.View
1018import android.view.ViewGroup
@@ -17,12 +25,14 @@ import com.simplemobiletools.commons.dialogs.*
1725import com.simplemobiletools.commons.extensions.*
1826import com.simplemobiletools.commons.helpers.CONFLICT_OVERWRITE
1927import com.simplemobiletools.commons.helpers.CONFLICT_SKIP
28+ import com.simplemobiletools.commons.helpers.isNougatMR1Plus
2029import com.simplemobiletools.commons.models.FileDirItem
2130import com.simplemobiletools.commons.models.RadioItem
2231import com.simplemobiletools.commons.views.FastScroller
2332import com.simplemobiletools.commons.views.MyRecyclerView
2433import com.simplemobiletools.filemanager.pro.R
2534import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
35+ import com.simplemobiletools.filemanager.pro.activities.SplashActivity
2636import com.simplemobiletools.filemanager.pro.dialogs.CompressAsDialog
2737import com.simplemobiletools.filemanager.pro.extensions.*
2838import com.simplemobiletools.filemanager.pro.helpers.*
@@ -67,6 +77,7 @@ class ItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem
6777 findItem(R .id.cab_open_with).isVisible = isOneFileSelected()
6878 findItem(R .id.cab_open_as).isVisible = isOneFileSelected()
6979 findItem(R .id.cab_set_as).isVisible = isOneFileSelected()
80+ findItem(R .id.cab_create_shortcut).isVisible = isNougatMR1Plus() && isOneItemSelected() && File (getFirstSelectedItemPath()).isDirectory
7081
7182 checkHideBtnVisibility(this )
7283 }
@@ -84,6 +95,7 @@ class ItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem
8495 R .id.cab_share -> shareFiles()
8596 R .id.cab_hide -> toggleFileVisibility(true )
8697 R .id.cab_unhide -> toggleFileVisibility(false )
98+ R .id.cab_create_shortcut -> createShortcut()
8799 R .id.cab_copy_path -> copyPath()
88100 R .id.cab_set_as -> setAs()
89101 R .id.cab_open_with -> openWith()
@@ -216,6 +228,37 @@ class ItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem
216228 }.start()
217229 }
218230
231+ @SuppressLint(" NewApi" )
232+ private fun createShortcut () {
233+ val manager = activity.getSystemService(ShortcutManager ::class .java)
234+ if (manager.isRequestPinShortcutSupported) {
235+ val path = getFirstSelectedItemPath()
236+
237+ val appIconColor = baseConfig.appIconColor
238+ val drawable = resources.getDrawable(R .drawable.shortcut_folder)
239+ (drawable as LayerDrawable ).findDrawableByLayerId(R .id.shortcut_folder_background).applyColorFilter(appIconColor)
240+ val bmp = drawable.convertToBitmap()
241+
242+ val intent = Intent (activity, SplashActivity ::class .java)
243+ intent.action = Intent .ACTION_VIEW
244+ intent.data = Uri .fromFile(File (path))
245+
246+ val shortcut = ShortcutInfo .Builder (activity, path)
247+ .setShortLabel(path.getFilenameFromPath())
248+ .setIcon(Icon .createWithBitmap(bmp))
249+ .setIntent(intent)
250+ .build()
251+
252+ manager.dynamicShortcuts = Arrays .asList(shortcut)
253+
254+ val pinShortcutInfo = ShortcutInfo .Builder (activity, path).build()
255+ val pinnedShortcutCallbackIntent = manager.createShortcutResultIntent(pinShortcutInfo)
256+
257+ val successCallback = PendingIntent .getBroadcast(activity, 0 , pinnedShortcutCallbackIntent, 0 )
258+ manager.requestPinShortcut(pinShortcutInfo, successCallback.intentSender)
259+ }
260+ }
261+
219262 private fun addFileUris (path : String , paths : ArrayList <String >) {
220263 if (File (path).isDirectory) {
221264 val shouldShowHidden = activity.config.shouldShowHidden
0 commit comments