AppDetailsFragment: Show menu action to create app shortcut if supported

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-02-23 12:23:21 +05:30
parent dd584b5b7b
commit 89fdf1186f
4 changed files with 55 additions and 0 deletions

View File

@@ -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)
}
}
}

View File

@@ -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

View File

@@ -47,4 +47,9 @@
<item
android:id="@+id/action_playstore"
android:title="@string/title_download_playstore" />
<item
android:id="@+id/action_home_screen"
android:title="@string/action_home_screen"
android:visible="false" />
</menu>

View File

@@ -91,6 +91,7 @@
<string name="action_search">"Search"</string>
<string name="action_share">"Share"</string>
<string name="action_uninstall">"Uninstall"</string>
<string name="action_home_screen">Add to Home screen</string>
<string name="action_uninstall_confirmation">"Do you want to uninstall this app ?"</string>
<string name="action_info">"App Info"</string>
<string name="action_update">"Update"</string>