mirror of
https://github.com/SimpleMobileTools/Simple-Launcher.git
synced 2025-06-05 21:59:15 +02:00
Increase page change area and introduce delay to prevent accidental page changes
This commit is contained in:
@ -56,6 +56,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
|
|
||||||
private var lastPage = 0
|
private var lastPage = 0
|
||||||
private var currentPage = 0
|
private var currentPage = 0
|
||||||
|
private var pageChangeLastArea = PageChangeArea.MIDDLE
|
||||||
|
private var pageChangeLastAreaEntryTime = 0L
|
||||||
private var pageChangeAnimLeftPercentage = 0f
|
private var pageChangeAnimLeftPercentage = 0f
|
||||||
private var pageChangeEnabled = true
|
private var pageChangeEnabled = true
|
||||||
|
|
||||||
@ -173,14 +175,36 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
}
|
}
|
||||||
|
|
||||||
draggedItemCurrentCoords = Pair(x, y)
|
draggedItemCurrentCoords = Pair(x, y)
|
||||||
if (x > right - sideMargins.right) {
|
if (x > right - sideMargins.right - cellWidth / 2) {
|
||||||
|
doWithPageChangeDelay(PageChangeArea.RIGHT) {
|
||||||
nextOrAdditionalPage()
|
nextOrAdditionalPage()
|
||||||
} else if (x < left + 2 * sideMargins.left) {
|
}
|
||||||
|
} else if (x < left + sideMargins.left + cellWidth / 2) {
|
||||||
|
doWithPageChangeDelay(PageChangeArea.LEFT) {
|
||||||
prevPage()
|
prevPage()
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
clearPageChangeFlags()
|
||||||
|
}
|
||||||
redrawGrid()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun clearPageChangeFlags() {
|
||||||
|
pageChangeLastArea = PageChangeArea.MIDDLE
|
||||||
|
pageChangeLastAreaEntryTime = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun doWithPageChangeDelay(needed: PageChangeArea, pageChangeFunction: () -> Boolean) {
|
||||||
|
if (pageChangeLastArea != needed) {
|
||||||
|
pageChangeLastArea = needed
|
||||||
|
pageChangeLastAreaEntryTime = System.currentTimeMillis()
|
||||||
|
} else if (System.currentTimeMillis() - pageChangeLastAreaEntryTime > PAGE_CHANGE_HOLD_THRESHOLD) {
|
||||||
|
if (pageChangeFunction()) {
|
||||||
|
clearPageChangeFlags()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// figure out at which cell was the item dropped, if it is empty
|
// figure out at which cell was the item dropped, if it is empty
|
||||||
fun itemDraggingStopped() {
|
fun itemDraggingStopped() {
|
||||||
widgetViews.forEach {
|
widgetViews.forEach {
|
||||||
@ -843,28 +867,37 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
|
|
||||||
private fun getMaxPage() = gridItems.map { it.page }.max()
|
private fun getMaxPage() = gridItems.map { it.page }.max()
|
||||||
|
|
||||||
private fun nextOrAdditionalPage(redraw: Boolean = false) {
|
private fun nextOrAdditionalPage(redraw: Boolean = false): Boolean {
|
||||||
if (currentPage < getMaxPage() + 1 && pageChangeEnabled) {
|
if (currentPage < getMaxPage() + 1 && pageChangeEnabled) {
|
||||||
lastPage = currentPage
|
lastPage = currentPage
|
||||||
currentPage++
|
currentPage++
|
||||||
handlePageChange(redraw)
|
handlePageChange(redraw)
|
||||||
}
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun nextPage(redraw: Boolean = false) {
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun nextPage(redraw: Boolean = false): Boolean {
|
||||||
if (currentPage < getMaxPage() && pageChangeEnabled) {
|
if (currentPage < getMaxPage() && pageChangeEnabled) {
|
||||||
lastPage = currentPage
|
lastPage = currentPage
|
||||||
currentPage++
|
currentPage++
|
||||||
handlePageChange(redraw)
|
handlePageChange(redraw)
|
||||||
}
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun prevPage(redraw: Boolean = false) {
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun prevPage(redraw: Boolean = false): Boolean {
|
||||||
if (currentPage > 0 && pageChangeEnabled) {
|
if (currentPage > 0 && pageChangeEnabled) {
|
||||||
lastPage = currentPage
|
lastPage = currentPage
|
||||||
currentPage--
|
currentPage--
|
||||||
handlePageChange(redraw)
|
handlePageChange(redraw)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handlePageChange(redraw: Boolean = false) {
|
private fun handlePageChange(redraw: Boolean = false) {
|
||||||
@ -894,5 +927,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
companion object {
|
companion object {
|
||||||
private const val ANIMATION_DURATION = 700L
|
private const val ANIMATION_DURATION = 700L
|
||||||
private const val PAGE_CHANGE_BLOCKING_DURATION = ANIMATION_DURATION + 200L
|
private const val PAGE_CHANGE_BLOCKING_DURATION = ANIMATION_DURATION + 200L
|
||||||
|
private const val PAGE_CHANGE_HOLD_THRESHOLD = 500L
|
||||||
|
|
||||||
|
private enum class PageChangeArea {
|
||||||
|
LEFT,
|
||||||
|
MIDDLE,
|
||||||
|
RIGHT
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user