Skip to content

Commit 2349fa0

Browse files
authored
Merge pull request #144 from esensar/fix/row-change-crash
Prevent crash when calculating top left of docked items
2 parents bb90255 + a26c29c commit 2349fa0

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

app/src/main/kotlin/com/simplemobiletools/launcher/models/HomeScreenGridItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,5 @@ data class HomeScreenGridItem(
7070

7171
fun getItemIdentifier() = "$packageName/$activityName"
7272

73-
fun getTopLeft() = Point(left, top)
73+
fun getTopLeft(rowCount: Int) = Point(left, getDockAdjustedTop(rowCount))
7474
}

app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
800800
val widgetView = widgetViews.firstOrNull { it.tag == widgetItem.widgetId }
801801
if (widgetView != null && !widgetItem.outOfBounds()) {
802802
post {
803-
val widgetPos = calculateWidgetPos(widgetItem.getTopLeft())
803+
val widgetPos = calculateWidgetPos(widgetItem.getTopLeft(rowCount))
804804
widgetView.x = widgetPos.x.toFloat()
805805
widgetView.y = widgetPos.y.toFloat()
806806
widgetView.beVisible()
@@ -902,7 +902,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
902902

903903
private fun updateWidgetPositionAndSize(widgetView: AppWidgetHostView, item: HomeScreenGridItem): Size {
904904
val currentViewPosition = pager.getCurrentViewPositionInFullPageSpace() * width.toFloat()
905-
val widgetPos = calculateWidgetPos(item.getTopLeft())
905+
val widgetPos = calculateWidgetPos(item.getTopLeft(rowCount))
906906
widgetView.x = widgetPos.x + width * item.page - currentViewPosition
907907
widgetView.y = widgetPos.y.toFloat()
908908
val widgetWidth = item.getWidthInCells() * cellWidth
@@ -960,7 +960,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
960960
fun handleMainGridItemDrawing(item: HomeScreenGridItem, xFactor: Float) {
961961
val offsetX = sideMargins.left + (this@HomeScreenGrid.width * xFactor).toInt()
962962
val offsetY = sideMargins.top
963-
cells[item.getTopLeft()]!!.withOffset(offsetX, offsetY) {
963+
cells[item.getTopLeft(rowCount)]!!.withOffset(offsetX, offsetY) {
964964
canvas.drawItemInCell(item, this)
965965
}
966966
}
@@ -1220,7 +1220,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
12201220
clickableLeft = itemRect.left
12211221
clickableTop = itemRect.top - iconMargin
12221222
} else {
1223-
val cell = cells[item.getTopLeft()]!!
1223+
val cell = cells[item.getTopLeft(rowCount)]!!
12241224
clickableLeft = cell.left + sideMargins.left
12251225
clickableTop = if (item.docked) {
12261226
dockCellY + cellHeight - iconSize - iconMargin
@@ -1282,7 +1282,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
12821282
return gridItem
12831283
}
12841284
} else if (gridItem.type == ITEM_TYPE_WIDGET) {
1285-
val widgetPos = calculateWidgetPos(gridItem.getTopLeft())
1285+
val widgetPos = calculateWidgetPos(gridItem.getTopLeft(rowCount))
12861286
val left = widgetPos.x.toFloat()
12871287
val top = widgetPos.y.toFloat()
12881288
val right = left + gridItem.getWidthInCells() * cellWidth
@@ -1362,7 +1362,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
13621362
val viewBounds = if (item == currentlyOpenFolder?.item) {
13631363
currentlyOpenFolder?.getDrawingRect()?.toRect()
13641364
} else if (item.type == ITEM_TYPE_WIDGET) {
1365-
val widgetPos = calculateWidgetPos(item.getTopLeft())
1365+
val widgetPos = calculateWidgetPos(item.getTopLeft(rowCount))
13661366
val left = widgetPos.x
13671367
val top = widgetPos.y
13681368
val right = left + item.getWidthInCells() * cellWidth
@@ -1604,7 +1604,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
16041604
val cellSize = getCellSize()
16051605
val gap = getGapSize()
16061606
val yGap = gap + textPaint.textSize + 2 * labelSideMargin
1607-
val cell = cells[item.getTopLeft()]!!
1607+
val cell = cells[item.getTopLeft(rowCount)]!!
16081608
val centerX = sideMargins.left + cell.centerX()
16091609
val centerY = sideMargins.top + cell.centerY()
16101610
val folderDialogWidth = columnsCount * cellSize + 2 * folderPadding + (columnsCount - 1) * gap

0 commit comments

Comments
 (0)