fix some glitches with swiping to sides with Instant media change enabled
This commit is contained in:
parent
a2b973c233
commit
2a2d37e221
5 changed files with 78 additions and 6 deletions
|
@ -61,6 +61,10 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
gif_view.setOnClickListener { photoClicked() }
|
gif_view.setOnClickListener { photoClicked() }
|
||||||
instant_prev_item.setOnClickListener { listener?.goToPrevItem() }
|
instant_prev_item.setOnClickListener { listener?.goToPrevItem() }
|
||||||
instant_next_item.setOnClickListener { listener?.goToNextItem() }
|
instant_next_item.setOnClickListener { listener?.goToNextItem() }
|
||||||
|
|
||||||
|
instant_prev_item.parentView = container
|
||||||
|
instant_next_item.parentView = container
|
||||||
|
|
||||||
photo_brightness_controller.setOnTouchListener { v, event ->
|
photo_brightness_controller.setOnTouchListener { v, event ->
|
||||||
mediaSideScroll.handleBrightnessTouched(event)
|
mediaSideScroll.handleBrightnessTouched(event)
|
||||||
true
|
true
|
||||||
|
|
|
@ -64,6 +64,8 @@ const val SLIDESHOW_SCROLL_DURATION = 500L
|
||||||
const val NOMEDIA = ".nomedia"
|
const val NOMEDIA = ".nomedia"
|
||||||
const val MAX_COLUMN_COUNT = 20
|
const val MAX_COLUMN_COUNT = 20
|
||||||
const val SHOW_TEMP_HIDDEN_DURATION = 600000L
|
const val SHOW_TEMP_HIDDEN_DURATION = 600000L
|
||||||
|
const val CLICK_MAX_DURATION = 150
|
||||||
|
const val DRAG_THRESHOLD = 10
|
||||||
|
|
||||||
const val DIRECTORY = "directory"
|
const val DIRECTORY = "directory"
|
||||||
const val MEDIUM = "medium"
|
const val MEDIUM = "medium"
|
||||||
|
|
|
@ -11,7 +11,6 @@ import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||||
import com.simplemobiletools.gallery.extensions.audioManager
|
import com.simplemobiletools.gallery.extensions.audioManager
|
||||||
|
|
||||||
class MediaSideScroll(val activity: Activity, val slideInfoView: TextView, val callback: () -> Unit) {
|
class MediaSideScroll(val activity: Activity, val slideInfoView: TextView, val callback: () -> Unit) {
|
||||||
private val CLICK_MAX_DURATION = 150
|
|
||||||
private val SLIDE_INFO_FADE_DELAY = 1000L
|
private val SLIDE_INFO_FADE_DELAY = 1000L
|
||||||
private var mTouchDownX = 0f
|
private var mTouchDownX = 0f
|
||||||
private var mTouchDownY = 0f
|
private var mTouchDownY = 0f
|
||||||
|
@ -38,7 +37,7 @@ class MediaSideScroll(val activity: Activity, val slideInfoView: TextView, val c
|
||||||
val diffX = mTouchDownX - event.x
|
val diffX = mTouchDownX - event.x
|
||||||
val diffY = mTouchDownY - event.y
|
val diffY = mTouchDownY - event.y
|
||||||
|
|
||||||
if (Math.abs(diffY) > 20 && Math.abs(diffY) > Math.abs(diffX)) {
|
if (Math.abs(diffY) > DRAG_THRESHOLD && Math.abs(diffY) > Math.abs(diffX)) {
|
||||||
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||||
percent = Math.min(100, Math.max(-100, percent))
|
percent = Math.min(100, Math.max(-100, percent))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.simplemobiletools.gallery.views
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import com.simplemobiletools.gallery.helpers.CLICK_MAX_DURATION
|
||||||
|
import com.simplemobiletools.gallery.helpers.DRAG_THRESHOLD
|
||||||
|
|
||||||
|
// handle only one finger clicks, pass other events to the parent view and ignore it when received again
|
||||||
|
class InstantItemSwitch(context: Context, attrs: AttributeSet) : RelativeLayout(context, attrs) {
|
||||||
|
private var mTouchDownTime = 0L
|
||||||
|
private var mTouchDownX = 0f
|
||||||
|
private var mTouchDownY = 0f
|
||||||
|
private var passTouches = false
|
||||||
|
|
||||||
|
var parentView: ViewGroup? = null
|
||||||
|
|
||||||
|
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||||
|
if (passTouches) {
|
||||||
|
if (ev.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||||
|
passTouches = false
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return super.dispatchTouchEvent(ev)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||||
|
if (passTouches) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
when (event.actionMasked) {
|
||||||
|
MotionEvent.ACTION_DOWN -> {
|
||||||
|
mTouchDownX = event.x
|
||||||
|
mTouchDownY = event.y
|
||||||
|
mTouchDownTime = System.currentTimeMillis()
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_UP -> {
|
||||||
|
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||||
|
performClick()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_MOVE -> {
|
||||||
|
if (passTouches) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
val diffX = mTouchDownX - event.x
|
||||||
|
val diffY = mTouchDownY - event.y
|
||||||
|
if (Math.abs(diffX) > DRAG_THRESHOLD || Math.abs(diffY) > DRAG_THRESHOLD) {
|
||||||
|
if (!passTouches) {
|
||||||
|
event.action = MotionEvent.ACTION_DOWN
|
||||||
|
event.setLocation(event.rawX, event.y)
|
||||||
|
parentView?.dispatchTouchEvent(event)
|
||||||
|
}
|
||||||
|
passTouches = true
|
||||||
|
parentView?.dispatchTouchEvent(event)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,8 +35,8 @@
|
||||||
android:id="@+id/photo_brightness_controller"
|
android:id="@+id/photo_brightness_controller"
|
||||||
android:layout_width="@dimen/media_side_slider_width"
|
android:layout_width="@dimen/media_side_slider_width"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_alignParentLeft="true"/>
|
android:layout_alignParentStart="true"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/slide_info"
|
android:id="@+id/slide_info"
|
||||||
|
@ -55,12 +55,12 @@
|
||||||
android:textColor="@android:color/white"
|
android:textColor="@android:color/white"
|
||||||
android:textSize="@dimen/extra_big_text_size"/>
|
android:textSize="@dimen/extra_big_text_size"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||||
android:id="@+id/instant_prev_item"
|
android:id="@+id/instant_prev_item"
|
||||||
android:layout_width="@dimen/instant_change_bar_width"
|
android:layout_width="@dimen/instant_change_bar_width"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||||
android:id="@+id/instant_next_item"
|
android:id="@+id/instant_next_item"
|
||||||
android:layout_width="@dimen/instant_change_bar_width"
|
android:layout_width="@dimen/instant_change_bar_width"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
Loading…
Reference in a new issue