@@ -23,11 +23,14 @@ import android.view.animation.DecelerateInterpolator
2323import androidx.activity.BackEventCompat
2424import androidx.activity.ComponentDialog
2525import androidx.activity.OnBackPressedCallback
26- import androidx.constraintlayout.widget.ConstraintLayout
26+ import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams
2727import androidx.core.animation.addListener
28+ import androidx.core.animation.doOnEnd
2829import androidx.core.content.ContextCompat
2930import androidx.core.view.WindowInsetsCompat.Type.systemBars
3031import androidx.core.view.WindowInsetsControllerCompat
32+ import androidx.core.view.isInvisible
33+ import androidx.core.view.isVisible
3134import androidx.core.view.updateLayoutParams
3235import androidx.transition.ChangeBounds
3336import androidx.transition.ChangeImageTransform
@@ -122,27 +125,26 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
122125 lastY = backEvent.touchY
123126 velocityTracker.addMovement(motionEvent)
124127 motionEvent.recycle()
125- binding.mangaCoverFull .scaleX = 1f - maxProgress * 0.6f
126- binding.mangaCoverFull .translationX =
128+ binding.mangaCoverZoom .scaleX = 1f - maxProgress * 0.6f
129+ binding.mangaCoverZoom .translationX =
127130 maxProgress * 100f * (if (backEvent.swipeEdge == BackEventCompat .EDGE_LEFT ) 1 else - 1 )
128- binding.mangaCoverFull .translationY = - maxProgress * 150f
129- binding.mangaCoverFull .scaleY = 1f - maxProgress * 0.6f
131+ binding.mangaCoverZoom .translationY = - maxProgress * 150f
132+ binding.mangaCoverZoom .scaleY = 1f - maxProgress * 0.6f
130133 }
131134
132135 override fun handleOnBackCancelled () {
133- binding.mangaCoverFull .scaleX = 1f
134- binding.mangaCoverFull .translationX = 0f
135- binding.mangaCoverFull .translationY = 0f
136- binding.mangaCoverFull .scaleY = 1f
136+ binding.mangaCoverZoom .scaleX = 1f
137+ binding.mangaCoverZoom .translationX = 0f
138+ binding.mangaCoverZoom .translationY = 0f
139+ binding.mangaCoverZoom .scaleY = 1f
137140 }
138141 }
139142 onBackPressedDispatcher.addCallback(backPressedCallback)
140143
141- binding.touchOutside.setOnClickListener {
142- onBackPressedDispatcher.onBackPressed()
143- }
144- binding.mangaCoverFull.setOnClickListener {
145- onBackPressedDispatcher.onBackPressed()
144+ listOf (binding.touchOutside, binding.mangaCoverFull, binding.mangaCoverZoom).forEach {
145+ it.setOnClickListener {
146+ onBackPressedDispatcher.onBackPressed()
147+ }
146148 }
147149
148150 binding.btnSave.setOnClickListener {
@@ -159,14 +161,15 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
159161 .build()
160162
161163 expandedImageView.setImageDrawable(drawable)
164+ binding.mangaCoverZoom.setImageDrawable(drawable)
162165
163166 val rect = Rect ()
164167 thumbView.getGlobalVisibleRect(rect)
165168 val systemInsets = activity?.window?.decorView?.rootWindowInsetsCompat?.getInsets(systemBars())
166169 val topInset = systemInsets?.top ? : 0
167170 val leftInset = systemInsets?.left ? : 0
168171 val rightInset = systemInsets?.right ? : 0
169- expandedImageView.updateLayoutParams<ConstraintLayout . LayoutParams > {
172+ expandedImageView.updateLayoutParams<LayoutParams > {
170173 height = thumbView.height
171174 width = thumbView.width
172175 topMargin = rect.top - topInset
@@ -189,15 +192,17 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
189192 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .S ) {
190193 activity?.window?.decorView?.animateBlur(1f , 20f , 50 )?.start()
191194 }
192- expandedImageView.updateLayoutParams<ConstraintLayout .LayoutParams > {
193- height = 0
194- width = 0
195- topMargin = defMargin + 48 .dpToPx
196- marginStart = defMargin
197- marginEnd = defMargin
198- bottomMargin = defMargin
199- horizontalBias = 0.5f
200- verticalBias = 0.5f
195+ listOf (expandedImageView, binding.mangaCoverZoom).forEach {
196+ it.updateLayoutParams<LayoutParams > {
197+ height = 0
198+ width = 0
199+ topMargin = defMargin + 48 .dpToPx
200+ marginStart = defMargin
201+ marginEnd = defMargin
202+ bottomMargin = defMargin
203+ horizontalBias = 0.5f
204+ verticalBias = 0.5f
205+ }
201206 }
202207
203208 // TransitionSet for the full cover because using animation for this SUCKS
@@ -227,6 +232,12 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
227232 }
228233 }
229234 playTogether(radiusAnimator, saveAnimator)
235+ doOnEnd {
236+ if (binding.touchOutside.isClickable) {
237+ binding.mangaCoverFull.isInvisible = true
238+ binding.mangaCoverZoom.isVisible = true
239+ }
240+ }
230241 duration = shortAnimationDuration
231242 interpolator = DecelerateInterpolator ()
232243 start()
@@ -266,14 +277,21 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
266277 }
267278 val rect2 = Rect ()
268279 thumbView.getGlobalVisibleRect(rect2)
280+ binding.mangaCoverFull.scaleX = binding.mangaCoverZoom.scaleX
281+ binding.mangaCoverFull.translationX = binding.mangaCoverZoom.translationX
282+ binding.mangaCoverFull.translationY = binding.mangaCoverZoom.translationY
283+ binding.mangaCoverFull.scaleY = binding.mangaCoverZoom.scaleY
284+ binding.mangaCoverFull.isVisible = true
285+ binding.mangaCoverZoom.isVisible = false
286+ binding.mangaCoverZoom.isClickable = false
269287 binding.mangaCoverFull.isClickable = false
270288 binding.touchOutside.isClickable = false
271289 val expandedImageView = binding.mangaCoverFull
272290 val systemInsets = activity?.window?.decorView?.rootWindowInsetsCompat?.getInsets(systemBars())
273291 val topInset = systemInsets?.top ? : 0
274292 val leftInset = systemInsets?.left ? : 0
275293 val rightInset = systemInsets?.right ? : 0
276- expandedImageView.updateLayoutParams<ConstraintLayout . LayoutParams > {
294+ expandedImageView.updateLayoutParams<LayoutParams > {
277295 height = thumbView.height
278296 width = thumbView.width
279297 topMargin = rect2.top - topInset
0 commit comments