diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt b/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt index 7f81dd9c1c..bf3c5cdc80 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt @@ -82,6 +82,7 @@ class ViewMediaActivity : BaseActivity(), ViewImageFragment.PhotoActionsListener private var attachments: ArrayList? = null private val toolbarVisibilityListeners = mutableListOf() private var imageUrl: String? = null + private var hasMultiple: Boolean = false fun addToolbarVisibilityListener(listener: ToolbarVisibilityListener): Function0 { this.toolbarVisibilityListeners.add(listener) @@ -113,6 +114,8 @@ class ViewMediaActivity : BaseActivity(), ViewImageFragment.PhotoActionsListener SingleImagePagerAdapter(this, imageUrl!!) } + hasMultiple = attachments != null && attachments!!.size > 1 + binding.viewPager.adapter = adapter binding.viewPager.setCurrentItem(initialPosition, false) binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { @@ -120,6 +123,7 @@ class ViewMediaActivity : BaseActivity(), ViewImageFragment.PhotoActionsListener binding.toolbar.title = getPageTitle(position) } }) + binding.viewPager.isUserInputEnabled = hasMultiple // Setup the toolbar. setSupportActionBar(binding.toolbar) @@ -195,6 +199,16 @@ class ViewMediaActivity : BaseActivity(), ViewImageFragment.PhotoActionsListener .start() } + override fun onZoom(zoomFactor: Float) { + // If the view pager is (input) enabled it will grab most interaction at the device edges; this disturbs zooming or dragging + + if (zoomFactor > 1.01) { + binding.viewPager.isUserInputEnabled = false + } else { + binding.viewPager.isUserInputEnabled = hasMultiple + } + } + private fun getPageTitle(position: Int): CharSequence { if (attachments == null) { return "" diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt index 688ce7c585..9ba27c50a8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt @@ -45,6 +45,7 @@ class ViewImageFragment : ViewMediaFragment() { fun onBringUp() fun onDismiss() fun onPhotoTap() + fun onZoom(zoomFactor: Float) } private var _binding: FragmentViewImageBinding? = null @@ -125,6 +126,10 @@ class ViewImageFragment : ViewMediaFragment() { } result } + + setOnScaleChangeListener { scaleFactor, _, _ -> + photoActionsListener.onZoom(scale) // TODO at least for the first call here during pinch zoom only scaleFactor is different; "scale" is still 1 + } } var lastY = 0f