Skip to content

Commit 5b42891

Browse files
committed
Polish ComparisonFragment further
1 parent 0a9f0f9 commit 5b42891

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

app/src/main/kotlin/com/w2sv/autocrop/ui/ViewBoundAppFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.w2sv.autocrop.ui
22

33
import android.content.Context
4+
import androidx.annotation.CallSuper
45
import androidx.navigation.fragment.findNavController
56
import androidx.viewbinding.ViewBinding
67
import com.w2sv.autocrop.ui.util.registerOnBackPressedHandler
@@ -12,6 +13,7 @@ abstract class ViewBoundAppFragment<VB : ViewBinding>(bindingClass: Class<VB>) :
1213
protected val navController by threadUnsafeLazy { findNavController() }
1314
open val onBackPressed: (() -> Unit)? = null
1415

16+
@CallSuper
1517
override fun onAttach(context: Context) {
1618
super.onAttach(context)
1719

app/src/main/kotlin/com/w2sv/autocrop/ui/screen/comparison/ComparisonFragment.kt

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class ComparisonFragment : ViewBoundAppFragment<ComparisonBinding>(ComparisonBin
4141
override fun onAttach(context: Context) {
4242
super.onAttach(context)
4343
hideSystemBars()
44-
4544
sharedElementEnterTransition = cropEnterTransition(context)
4645
registerOnBackPressedHandler(::onBack)
4746
}
@@ -71,7 +70,7 @@ class ComparisonFragment : ViewBoundAppFragment<ComparisonBinding>(ComparisonBin
7170
binding.apply {
7271
initializeScreenshotViewAndCropViewScaleAndPositioning()
7372
initializeCropView()
74-
setOnTouchEventListeners()
73+
setOnTouchEventListener()
7574
backButton.setOnClickListener { onBack() }
7675

7776
viewModel.fadeOutTextArgs.collectLatestOn(lifecycleScope) {
@@ -109,25 +108,13 @@ class ComparisonFragment : ViewBoundAppFragment<ComparisonBinding>(ComparisonBin
109108
}
110109

111110
@SuppressLint("ClickableViewAccessibility")
112-
private fun ComparisonBinding.setOnTouchEventListeners() {
113-
root.setOnTouchListener { v, event ->
114-
val insets = ViewCompat.getRootWindowInsets(root)
115-
val statusBarHeight = insets?.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.statusBars())?.top
116-
?: 0
117-
val navBarHeight = insets?.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.navigationBars())?.bottom
118-
?: 0
119-
120-
// Ignore touches in system bar areas
121-
val y = event.y.toInt()
122-
if (y < statusBarHeight || y > root.height - navBarHeight) {
123-
return@setOnTouchListener false
124-
}
125-
111+
private fun ComparisonBinding.setOnTouchEventListener() {
112+
root.setOnTouchListenerIgnoringSystemBarAreas { view, event ->
126113
when (event.actionMasked) {
127114
ACTION_DOWN -> {
128115
viewModel.setImageType(ImageType.Original)
129116
// Lets accessibility services know the view was clicked, which enables those services to react to it
130-
v.performClick()
117+
view.performClick()
131118
true
132119
}
133120

@@ -148,6 +135,25 @@ class ComparisonFragment : ViewBoundAppFragment<ComparisonBinding>(ComparisonBin
148135
}
149136
}
150137

138+
@SuppressLint("ClickableViewAccessibility")
139+
private fun View.setOnTouchListenerIgnoringSystemBarAreas(listener: View.OnTouchListener) {
140+
setOnTouchListener { view, event ->
141+
val insets = ViewCompat.getRootWindowInsets(view)
142+
val statusBarHeight = insets?.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.statusBars())?.top
143+
?: 0
144+
val navBarHeight = insets?.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.navigationBars())?.bottom
145+
?: 0
146+
147+
// Ignore touches in system bar areas
148+
val y = event.y.toInt()
149+
if (y < statusBarHeight || y > view.height - navBarHeight) {
150+
return@setOnTouchListener false
151+
}
152+
153+
listener.onTouch(view, event)
154+
}
155+
}
156+
151157
private fun Transition.onTransitionEnd(callback: () -> Unit): Transition =
152158
addListener(
153159
object : TransitionListenerAdapter() {

0 commit comments

Comments
 (0)