diff --git a/app/src/main/java/com/aurora/store/util/ShortcutManagerUtil.kt b/app/src/main/java/com/aurora/store/util/ShortcutManagerUtil.kt
new file mode 100644
index 000000000..34c690055
--- /dev/null
+++ b/app/src/main/java/com/aurora/store/util/ShortcutManagerUtil.kt
@@ -0,0 +1,35 @@
+package com.aurora.store.util
+
+import android.content.Context
+import androidx.core.content.pm.ShortcutInfoCompat
+import androidx.core.content.pm.ShortcutManagerCompat
+import androidx.core.graphics.drawable.IconCompat
+import androidx.core.graphics.drawable.toBitmap
+
+object ShortcutManagerUtil {
+
+ private const val TAG = "ShortcutManagerUtil"
+
+ fun canPinShortcut(context: Context): Boolean {
+ return ShortcutManagerCompat.isRequestPinShortcutSupported(context)
+ }
+
+ fun requestPinShortcut(context: Context, packageName: String) {
+ val packageManager = context.packageManager
+ val launchIntent = packageManager.getLaunchIntentForPackage(packageName) ?: return
+ try {
+ val appInfo = packageManager.getApplicationInfo(packageName, 0)
+ val shortcutInfo = ShortcutInfoCompat.Builder(context, packageName)
+ .setShortLabel(appInfo.loadLabel(packageManager))
+ .setIcon(
+ IconCompat.createWithBitmap(appInfo.loadIcon(packageManager).toBitmap())
+ )
+ .setIntent(launchIntent)
+ .build()
+
+ ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null)
+ } catch (exception: Exception) {
+ Log.e(TAG, "Failed to request shortcut pin!", exception)
+ }
+ }
+}
diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
index e48722380..53879ad59 100644
--- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
@@ -76,6 +76,7 @@ import com.aurora.store.util.CommonUtil
import com.aurora.store.util.PackageUtil
import com.aurora.store.util.PathUtil
import com.aurora.store.util.Preferences
+import com.aurora.store.util.ShortcutManagerUtil
import com.aurora.store.util.isExternalStorageEnable
import com.aurora.store.view.custom.RatingView
import com.aurora.store.view.epoxy.controller.DetailsCarouselController
@@ -156,6 +157,8 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
if (app.packageName == event.packageName) {
attachActions()
binding.layoutDetailsToolbar.toolbar.menu.apply {
+ findItem(R.id.action_home_screen)?.isVisible =
+ ShortcutManagerUtil.canPinShortcut(requireContext())
findItem(R.id.action_uninstall)?.isVisible = true
findItem(R.id.menu_app_settings)?.isVisible = true
}
@@ -166,6 +169,7 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
if (app.packageName == event.packageName) {
attachActions()
binding.layoutDetailsToolbar.toolbar.menu.apply {
+ findItem(R.id.action_home_screen)?.isVisible = false
findItem(R.id.action_uninstall)?.isVisible = false
findItem(R.id.menu_app_settings)?.isVisible = false
}
@@ -368,6 +372,13 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
setOnMenuItemClickListener {
when (it.itemId) {
+ R.id.action_home_screen -> {
+ ShortcutManagerUtil.requestPinShortcut(
+ requireContext(),
+ app.packageName
+ )
+ }
+
R.id.action_share -> {
view.context.share(app)
}
@@ -406,6 +417,9 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
if (::app.isInitialized) {
app.isInstalled = PackageUtil.isInstalled(requireContext(), app.packageName)
+ menu?.findItem(R.id.action_home_screen)?.isVisible =
+ app.isInstalled && ShortcutManagerUtil.canPinShortcut(requireContext())
+
menu?.findItem(R.id.action_uninstall)?.isVisible = app.isInstalled
menu?.findItem(R.id.menu_app_settings)?.isVisible = app.isInstalled
uninstallActionEnabled = app.isInstalled
diff --git a/app/src/main/res/menu/menu_details.xml b/app/src/main/res/menu/menu_details.xml
index 8af137f03..16170e64c 100644
--- a/app/src/main/res/menu/menu_details.xml
+++ b/app/src/main/res/menu/menu_details.xml
@@ -47,4 +47,9 @@
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 04c26dfd3..cd94bc68f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -91,6 +91,7 @@
"Search"
"Share"
"Uninstall"
+ Add to Home screen
"Do you want to uninstall this app ?"
"App Info"
"Update"