add the first part of shortcut handling

This commit is contained in:
tibbi 2022-10-07 23:06:28 +02:00
parent 543371632a
commit 9ed0e55c15
3 changed files with 30 additions and 12 deletions

View File

@ -7,8 +7,10 @@ import android.appwidget.AppWidgetHost
import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo import android.appwidget.AppWidgetProviderInfo
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Bitmap import android.graphics.Bitmap
@ -124,6 +126,7 @@ class MainActivity : SimpleActivity(), FlingListener {
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
super.onActivityResult(requestCode, resultCode, resultData) super.onActivityResult(requestCode, resultCode, resultData)
when (requestCode) { when (requestCode) {
UNINSTALL_APP_REQUEST_CODE -> { UNINSTALL_APP_REQUEST_CODE -> {
ensureBackgroundThread { ensureBackgroundThread {
@ -132,6 +135,13 @@ class MainActivity : SimpleActivity(), FlingListener {
} }
REQUEST_ALLOW_BINDING_WIDGET -> mActionOnCanBindWidget?.invoke(resultCode == Activity.RESULT_OK) REQUEST_ALLOW_BINDING_WIDGET -> mActionOnCanBindWidget?.invoke(resultCode == Activity.RESULT_OK)
REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == Activity.RESULT_OK) REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == Activity.RESULT_OK)
REQUEST_CREATE_SHORTCUT -> {
if (resultCode == Activity.RESULT_OK && resultData != null) {
val launchIntent = resultData.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT) as? Intent
val label = resultData.getStringExtra(Intent.EXTRA_SHORTCUT_NAME)
val icon = resultData.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON) as? Bitmap
}
}
} }
} }
@ -591,6 +601,14 @@ class MainActivity : SimpleActivity(), FlingListener {
) )
} }
fun handleShorcutCreation(activityInfo: ActivityInfo) {
val componentName = ComponentName(activityInfo.packageName, activityInfo.name)
Intent(Intent.ACTION_CREATE_SHORTCUT).apply {
setComponent(componentName)
startActivityForResult(this, REQUEST_CREATE_SHORTCUT)
}
}
// taken from https://gist.github.com/maxjvh/a6ab15cbba9c82a5065d // taken from https://gist.github.com/maxjvh/a6ab15cbba9c82a5065d
private fun calculateAverageColor(bitmap: Bitmap): Int { private fun calculateAverageColor(bitmap: Bitmap): Int {
var red = 0 var red = 0

View File

@ -13,6 +13,7 @@ const val COLUMN_COUNT = 5
const val UNINSTALL_APP_REQUEST_CODE = 50 const val UNINSTALL_APP_REQUEST_CODE = 50
const val REQUEST_CONFIGURE_WIDGET = 51 const val REQUEST_CONFIGURE_WIDGET = 51
const val REQUEST_ALLOW_BINDING_WIDGET = 52 const val REQUEST_ALLOW_BINDING_WIDGET = 52
const val REQUEST_CREATE_SHORTCUT = 53
const val ITEM_TYPE_ICON = 0 const val ITEM_TYPE_ICON = 0
const val ITEM_TYPE_WIDGET = 1 const val ITEM_TYPE_WIDGET = 1

View File

@ -161,13 +161,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
} }
when (draggedItem!!.type) { when (draggedItem!!.type) {
ITEM_TYPE_ICON -> addAppIcon() ITEM_TYPE_ICON, ITEM_TYPE_SHORTCUT -> addAppIconOrShortcut()
ITEM_TYPE_WIDGET -> addWidget() ITEM_TYPE_WIDGET -> addWidget()
ITEM_TYPE_SHORTCUT -> {
// replace this with real shortcut handling
draggedItem = null
redrawGrid()
}
} }
} }
@ -222,7 +217,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
resizedWidget = null resizedWidget = null
} }
private fun addAppIcon() { private fun addAppIconOrShortcut() {
val center = gridCenters.minBy { val center = gridCenters.minBy {
Math.abs(it.first - draggedItemCurrentCoords.first + sideMargins.left) + Math.abs(it.second - draggedItemCurrentCoords.second + sideMargins.top) Math.abs(it.first - draggedItemCurrentCoords.first + sideMargins.left) + Math.abs(it.second - draggedItemCurrentCoords.second + sideMargins.top)
} }
@ -283,11 +278,15 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
draggedItem!!.activityInfo draggedItem!!.activityInfo
) )
ensureBackgroundThread { if (newHomeScreenGridItem.type == ITEM_TYPE_ICON) {
val newId = context.homeScreenGridItemsDB.insert(newHomeScreenGridItem) ensureBackgroundThread {
newHomeScreenGridItem.id = newId val newId = context.homeScreenGridItemsDB.insert(newHomeScreenGridItem)
gridItems.add(newHomeScreenGridItem) newHomeScreenGridItem.id = newId
redrawGrid() gridItems.add(newHomeScreenGridItem)
redrawGrid()
}
} else if (newHomeScreenGridItem.type == ITEM_TYPE_SHORTCUT) {
(context as? MainActivity)?.handleShorcutCreation(newHomeScreenGridItem.activityInfo!!)
} }
} }
} else { } else {