Merge pull request #92 from esensar/fix/67-direct-call-widget
Store all shortcuts with IDs without Intent
This commit is contained in:
commit
f3b0c7363a
|
@ -17,6 +17,7 @@ import android.content.res.Configuration
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
|
@ -69,7 +70,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||||
private var mLastTouchCoords = Pair(-1f, -1f)
|
private var mLastTouchCoords = Pair(-1f, -1f)
|
||||||
private var mActionOnCanBindWidget: ((granted: Boolean) -> Unit)? = null
|
private var mActionOnCanBindWidget: ((granted: Boolean) -> Unit)? = null
|
||||||
private var mActionOnWidgetConfiguredWidget: ((granted: Boolean) -> Unit)? = null
|
private var mActionOnWidgetConfiguredWidget: ((granted: Boolean) -> Unit)? = null
|
||||||
private var mActionOnAddShortcut: ((label: String, icon: Bitmap?, intent: String) -> Unit)? = null
|
private var mActionOnAddShortcut: ((shortcutId: String, label: String, icon: Drawable) -> Unit)? = null
|
||||||
|
|
||||||
private lateinit var mDetector: GestureDetectorCompat
|
private lateinit var mDetector: GestureDetectorCompat
|
||||||
|
|
||||||
|
@ -279,10 +280,13 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||||
REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == Activity.RESULT_OK)
|
REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == Activity.RESULT_OK)
|
||||||
REQUEST_CREATE_SHORTCUT -> {
|
REQUEST_CREATE_SHORTCUT -> {
|
||||||
if (resultCode == Activity.RESULT_OK && resultData != null) {
|
if (resultCode == Activity.RESULT_OK && resultData != null) {
|
||||||
val launchIntent = resultData.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT) as? Intent
|
val launcherApps = applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||||
val label = resultData.getStringExtra(Intent.EXTRA_SHORTCUT_NAME) ?: ""
|
val item = launcherApps.getPinItemRequest(resultData)
|
||||||
val icon = resultData.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON) as? Bitmap
|
item.accept()
|
||||||
mActionOnAddShortcut?.invoke(label, icon, launchIntent?.toUri(0).toString())
|
val shortcutId = item.shortcutInfo?.id!!
|
||||||
|
val label = item.shortcutInfo?.shortLabel?.toString() ?: item.shortcutInfo?.longLabel?.toString() ?: ""
|
||||||
|
val icon = launcherApps.getShortcutIconDrawable(item.shortcutInfo!!, resources.displayMetrics.densityDpi)
|
||||||
|
mActionOnAddShortcut?.invoke(shortcutId, label, icon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -490,17 +494,12 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||||
if (clickedGridItem.type == ITEM_TYPE_ICON) {
|
if (clickedGridItem.type == ITEM_TYPE_ICON) {
|
||||||
launchApp(clickedGridItem.packageName, clickedGridItem.activityName)
|
launchApp(clickedGridItem.packageName, clickedGridItem.activityName)
|
||||||
} else if (clickedGridItem.type == ITEM_TYPE_SHORTCUT) {
|
} else if (clickedGridItem.type == ITEM_TYPE_SHORTCUT) {
|
||||||
if (clickedGridItem.intent.isNotEmpty()) {
|
val id = clickedGridItem.shortcutId
|
||||||
launchShortcutIntent(clickedGridItem)
|
val packageName = clickedGridItem.packageName
|
||||||
} else {
|
val userHandle = android.os.Process.myUserHandle()
|
||||||
// launch pinned shortcuts
|
val shortcutBounds = home_screen_grid.getClickableRect(clickedGridItem)
|
||||||
val id = clickedGridItem.shortcutId
|
val launcherApps = applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||||
val packageName = clickedGridItem.packageName
|
launcherApps.startShortcut(packageName, id, shortcutBounds, null, userHandle)
|
||||||
val userHandle = android.os.Process.myUserHandle()
|
|
||||||
val shortcutBounds = home_screen_grid.getClickableRect(clickedGridItem)
|
|
||||||
val launcherApps = applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
|
||||||
launcherApps.startShortcut(packageName, id, shortcutBounds, null, userHandle)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -938,7 +937,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleShorcutCreation(activityInfo: ActivityInfo, callback: (label: String, icon: Bitmap?, intent: String) -> Unit) {
|
fun handleShorcutCreation(activityInfo: ActivityInfo, callback: (shortcutId: String, label: String, icon: Drawable) -> Unit) {
|
||||||
mActionOnAddShortcut = callback
|
mActionOnAddShortcut = callback
|
||||||
val componentName = ComponentName(activityInfo.packageName, activityInfo.name)
|
val componentName = ComponentName(activityInfo.packageName, activityInfo.name)
|
||||||
Intent(Intent.ACTION_CREATE_SHORTCUT).apply {
|
Intent(Intent.ACTION_CREATE_SHORTCUT).apply {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import android.provider.Settings
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.launcher.activities.SettingsActivity
|
import com.simplemobiletools.launcher.activities.SettingsActivity
|
||||||
import com.simplemobiletools.launcher.helpers.UNINSTALL_APP_REQUEST_CODE
|
import com.simplemobiletools.launcher.helpers.UNINSTALL_APP_REQUEST_CODE
|
||||||
import com.simplemobiletools.launcher.models.HomeScreenGridItem
|
|
||||||
|
|
||||||
fun Activity.launchApp(packageName: String, activityName: String) {
|
fun Activity.launchApp(packageName: String, activityName: String) {
|
||||||
// if this is true, launch the app settings
|
// if this is true, launch the app settings
|
||||||
|
@ -48,13 +47,3 @@ fun Activity.uninstallApp(packageName: String) {
|
||||||
startActivityForResult(this, UNINSTALL_APP_REQUEST_CODE)
|
startActivityForResult(this, UNINSTALL_APP_REQUEST_CODE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// launch static or dynamic shortcuts that have intents as string
|
|
||||||
fun Activity.launchShortcutIntent(item: HomeScreenGridItem) {
|
|
||||||
try {
|
|
||||||
val intent = Intent.parseUri(item.intent, 0)
|
|
||||||
startActivity(intent)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
showErrorToast(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import android.util.Size
|
||||||
import android.util.SizeF
|
import android.util.SizeF
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
|
import androidx.core.graphics.drawable.toBitmap
|
||||||
import androidx.core.graphics.drawable.toDrawable
|
import androidx.core.graphics.drawable.toDrawable
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
|
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
|
||||||
|
@ -426,12 +427,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
||||||
storeAndShowGridItem(newHomeScreenGridItem)
|
storeAndShowGridItem(newHomeScreenGridItem)
|
||||||
}
|
}
|
||||||
} else if (newHomeScreenGridItem.type == ITEM_TYPE_SHORTCUT) {
|
} else if (newHomeScreenGridItem.type == ITEM_TYPE_SHORTCUT) {
|
||||||
(context as? MainActivity)?.handleShorcutCreation(newHomeScreenGridItem.activityInfo!!) { label, icon, intent ->
|
(context as? MainActivity)?.handleShorcutCreation(newHomeScreenGridItem.activityInfo!!) { shortcutId, label, icon ->
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
|
newHomeScreenGridItem.shortcutId = shortcutId
|
||||||
newHomeScreenGridItem.title = label
|
newHomeScreenGridItem.title = label
|
||||||
newHomeScreenGridItem.icon = icon
|
newHomeScreenGridItem.icon = icon.toBitmap()
|
||||||
newHomeScreenGridItem.intent = intent
|
newHomeScreenGridItem.drawable = icon
|
||||||
newHomeScreenGridItem.drawable = BitmapDrawable(icon)
|
|
||||||
storeAndShowGridItem(newHomeScreenGridItem)
|
storeAndShowGridItem(newHomeScreenGridItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue