Prevent crashes when dragging widgets after resizing grid
If grid is resized to a size too small to fit a widget, it should not be displayed. It was still possible to drag it in some situations, causing a crash, since it can not fit the screen.
This commit is contained in:
parent
2614be4f42
commit
9e24c7c37d
|
@ -76,7 +76,6 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
||||||
private var draggedItem: HomeScreenGridItem? = null
|
private var draggedItem: HomeScreenGridItem? = null
|
||||||
private var resizedWidget: HomeScreenGridItem? = null
|
private var resizedWidget: HomeScreenGridItem? = null
|
||||||
private var isFirstDraw = true
|
private var isFirstDraw = true
|
||||||
private var redrawWidgets = false
|
|
||||||
private var iconSize = 0
|
private var iconSize = 0
|
||||||
|
|
||||||
private val pager = AnimatedGridPager(
|
private val pager = AnimatedGridPager(
|
||||||
|
@ -212,7 +211,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
||||||
cells.clear()
|
cells.clear()
|
||||||
gridCenters.clear()
|
gridCenters.clear()
|
||||||
iconMargin = (context.resources.getDimension(R.dimen.icon_side_margin) * 5 / columnCount).toInt()
|
iconMargin = (context.resources.getDimension(R.dimen.icon_side_margin) * 5 / columnCount).toInt()
|
||||||
redrawWidgets = true
|
isFirstDraw = true
|
||||||
|
gridItems.filter { it.type == ITEM_TYPE_WIDGET }.forEach {
|
||||||
|
appWidgetHost.deleteAppWidgetId(it.widgetId)
|
||||||
|
}
|
||||||
|
widgetViews.forEach { removeView(it) }
|
||||||
|
widgetViews.clear()
|
||||||
redrawGrid()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -835,6 +839,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun bindWidget(item: HomeScreenGridItem, isInitialDrawAfterLaunch: Boolean) {
|
private fun bindWidget(item: HomeScreenGridItem, isInitialDrawAfterLaunch: Boolean) {
|
||||||
|
if (item.outOfBounds()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val activity = context as MainActivity
|
val activity = context as MainActivity
|
||||||
val appWidgetProviderInfo = item.providerInfo ?: appWidgetManager!!.installedProviders.firstOrNull { it.provider.className == item.className }
|
val appWidgetProviderInfo = item.providerInfo ?: appWidgetManager!!.installedProviders.firstOrNull { it.provider.className == item.className }
|
||||||
if (appWidgetProviderInfo != null) {
|
if (appWidgetProviderInfo != null) {
|
||||||
|
@ -1298,7 +1306,11 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun HomeScreenGridItem.outOfBounds(): Boolean {
|
private fun HomeScreenGridItem.outOfBounds(): Boolean {
|
||||||
return (left >= columnCount || right >= columnCount || (!docked && (top >= rowCount - 1 || bottom >= rowCount - 1)))
|
return (left >= columnCount
|
||||||
|
|| right >= columnCount
|
||||||
|
|| (!docked && (top >= rowCount - 1 || bottom >= rowCount - 1))
|
||||||
|
|| (type == ITEM_TYPE_WIDGET && (bottom - top > rowCount - 1 || right - left > columnCount - 1))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class HomeScreenGridTouchHelper(host: View) : ExploreByTouchHelper(host) {
|
private inner class HomeScreenGridTouchHelper(host: View) : ExploreByTouchHelper(host) {
|
||||||
|
|
Loading…
Reference in New Issue