Fix crashes

This commit is contained in:
Koitharu
2025-06-27 19:25:55 +03:00
parent 957b12f338
commit 7047ee6155
3 changed files with 41 additions and 12 deletions

View File

@@ -52,6 +52,7 @@ import org.koitharu.kotatsu.core.ui.dialog.buildAlertDialog
import org.koitharu.kotatsu.core.util.ext.connectivityManager
import org.koitharu.kotatsu.core.util.ext.findActivity
import org.koitharu.kotatsu.core.util.ext.getThemeDrawable
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.core.util.ext.toFileOrNull
import org.koitharu.kotatsu.core.util.ext.toUriOrNull
import org.koitharu.kotatsu.core.util.ext.withArgs
@@ -614,9 +615,11 @@ class AppRouter private constructor(
startActivity(Intent(contextOrNull() ?: return, activityClass))
}
private fun getFragmentManager(): FragmentManager? {
return fragment?.childFragmentManager ?: activity?.supportFragmentManager
}
private fun getFragmentManager(): FragmentManager? = runCatching {
fragment?.childFragmentManager ?: activity?.supportFragmentManager
}.onFailure { exception ->
exception.printStackTraceDebug()
}.getOrNull()
private fun shareLink(link: String, title: String) {
val context = contextOrNull() ?: return

View File

@@ -7,6 +7,7 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import org.koitharu.kotatsu.core.util.ext.isAnimationsEnabled
import org.koitharu.kotatsu.core.util.ext.isOnScreen
inline val FragmentActivity.router: AppRouter
get() = AppRouter(this)
@@ -26,14 +27,15 @@ tailrec fun Fragment.dismissParentDialog(): Boolean {
}
}
fun scaleUpActivityOptionsOf(view: View): Bundle? = if (view.context.isAnimationsEnabled) {
ActivityOptions.makeScaleUpAnimation(
view,
0,
0,
view.width,
view.height,
fun scaleUpActivityOptionsOf(view: View): Bundle? {
if (!view.context.isAnimationsEnabled || !view.isOnScreen()) {
return null
}
return ActivityOptions.makeScaleUpAnimation(
/* source = */ view,
/* startX = */ 0,
/* startY = */ 0,
/* width = */ view.width,
/* height = */ view.height,
).toBundle()
} else {
null
}

View File

@@ -1,10 +1,13 @@
package org.koitharu.kotatsu.core.util.ext
import android.content.Context
import android.graphics.Point
import android.graphics.Rect
import android.os.Build
import android.view.View
import android.view.View.MeasureSpec
import android.view.ViewGroup
import android.view.WindowManager
import android.widget.Checkable
import androidx.annotation.StringRes
import androidx.appcompat.widget.ActionMenuView
@@ -200,3 +203,24 @@ fun View.setContentDescriptionAndTooltip(@StringRes resId: Int) {
contentDescription = text
TooltipCompat.setTooltipText(this, text)
}
fun View.getWindowBounds(): Rect {
val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
wm.currentWindowMetrics.bounds
} else {
val size = Point()
@Suppress("DEPRECATION")
display.getSize(size)
Rect(0, 0, size.x, size.y)
}
}
fun View.isOnScreen(): Boolean {
if (!isShown) {
return false
}
val actualPosition = Rect()
getGlobalVisibleRect(actualPosition)
return actualPosition.intersect(getWindowBounds())
}