AppDetailsFragment: Show menu action to create app shortcut if supported
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user