mirror of
https://github.com/SimpleMobileTools/Simple-Launcher.git
synced 2025-06-05 21:59:15 +02:00
Improve behavior for dragging icons offpage
This commit is contained in:
@ -23,6 +23,7 @@ import android.widget.RelativeLayout
|
|||||||
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
|
||||||
|
import androidx.core.view.postDelayed
|
||||||
import androidx.customview.widget.ExploreByTouchHelper
|
import androidx.customview.widget.ExploreByTouchHelper
|
||||||
import com.google.android.material.math.MathUtils
|
import com.google.android.material.math.MathUtils
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
@ -90,6 +91,22 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
var itemClickListener: ((HomeScreenGridItem) -> Unit)? = null
|
var itemClickListener: ((HomeScreenGridItem) -> Unit)? = null
|
||||||
var itemLongClickListener: ((HomeScreenGridItem) -> Unit)? = null
|
var itemLongClickListener: ((HomeScreenGridItem) -> Unit)? = null
|
||||||
|
|
||||||
|
private val checkAndExecuteDelayedPageChange: Runnable = Runnable {
|
||||||
|
if (System.currentTimeMillis() - pageChangeLastAreaEntryTime > PAGE_CHANGE_HOLD_THRESHOLD) {
|
||||||
|
when (pageChangeLastArea) {
|
||||||
|
PageChangeArea.RIGHT -> {
|
||||||
|
nextOrAdditionalPage(true)
|
||||||
|
}
|
||||||
|
PageChangeArea.LEFT -> {
|
||||||
|
prevPage(true)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
clearPageChangeFlags()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
ViewCompat.setAccessibilityDelegate(this, HomeScreenGridTouchHelper(this))
|
ViewCompat.setAccessibilityDelegate(this, HomeScreenGridTouchHelper(this))
|
||||||
|
|
||||||
@ -234,12 +251,18 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
private fun clearPageChangeFlags() {
|
private fun clearPageChangeFlags() {
|
||||||
pageChangeLastArea = PageChangeArea.MIDDLE
|
pageChangeLastArea = PageChangeArea.MIDDLE
|
||||||
pageChangeLastAreaEntryTime = 0
|
pageChangeLastAreaEntryTime = 0
|
||||||
|
removeCallbacks(checkAndExecuteDelayedPageChange)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun schedulePageChange() {
|
||||||
|
pageChangeLastAreaEntryTime = System.currentTimeMillis()
|
||||||
|
postDelayed(checkAndExecuteDelayedPageChange, PAGE_CHANGE_HOLD_THRESHOLD)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doWithPageChangeDelay(needed: PageChangeArea, pageChangeFunction: () -> Boolean) {
|
private fun doWithPageChangeDelay(needed: PageChangeArea, pageChangeFunction: () -> Boolean) {
|
||||||
if (pageChangeLastArea != needed) {
|
if (pageChangeLastArea != needed) {
|
||||||
pageChangeLastArea = needed
|
pageChangeLastArea = needed
|
||||||
pageChangeLastAreaEntryTime = System.currentTimeMillis()
|
schedulePageChange()
|
||||||
} else if (System.currentTimeMillis() - pageChangeLastAreaEntryTime > PAGE_CHANGE_HOLD_THRESHOLD) {
|
} else if (System.currentTimeMillis() - pageChangeLastAreaEntryTime > PAGE_CHANGE_HOLD_THRESHOLD) {
|
||||||
if (pageChangeFunction()) {
|
if (pageChangeFunction()) {
|
||||||
clearPageChangeFlags()
|
clearPageChangeFlags()
|
||||||
@ -1051,6 +1074,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
|
|||||||
pageChangeAnimLeftPercentage = 0f
|
pageChangeAnimLeftPercentage = 0f
|
||||||
pageChangeEnabled = true
|
pageChangeEnabled = true
|
||||||
lastPage = currentPage
|
lastPage = currentPage
|
||||||
|
schedulePageChange()
|
||||||
redrawGrid()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user