Enable edgeToEdge and properly handle insets in exo player

(cherry picked from commit 341676279e)
This commit is contained in:
Maxr1998
2025-05-09 07:11:14 +02:00
committed by Niels van Velzen
parent e220fb9e93
commit 905a20039f
4 changed files with 21 additions and 12 deletions
@@ -11,6 +11,7 @@ import android.view.OrientationEventListener
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
@@ -94,6 +95,7 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
setupKoinFragmentFactory()
enableEdgeToEdge()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@@ -20,6 +20,7 @@ import androidx.appcompat.widget.Toolbar
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible
import androidx.core.view.setPadding
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
@@ -153,15 +154,26 @@ class PlayerFragment : Fragment(), BackPressInterceptor {
AndroidVersion.isAtLeastR -> insets.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.systemBars())
else -> insets.getInsets(WindowInsetsCompat.Type.systemBars())
}
playerControlsView.updatePadding(
top = systemInsets.top,
left = systemInsets.left,
right = systemInsets.right,
bottom = systemInsets.bottom,
)
if (playerFullscreenHelper.isFullscreen) {
playerView.setPadding(0)
playerControlsView.updatePadding(
left = systemInsets.left,
top = systemInsets.top,
right = systemInsets.right,
bottom = systemInsets.bottom,
)
} else {
playerView.updatePadding(
left = systemInsets.left,
top = systemInsets.top,
right = systemInsets.right,
bottom = systemInsets.bottom,
)
playerControlsView.setPadding(0) // Padding is handled by PlayerView
}
playerOverlay.updatePadding(
top = systemInsets.top,
left = systemInsets.left,
top = systemInsets.top,
right = systemInsets.right,
bottom = systemInsets.bottom,
)
@@ -175,7 +187,6 @@ class PlayerFragment : Fragment(), BackPressInterceptor {
insets
}
ViewCompat.requestApplyInsets(view)
// Handle toolbar back button
toolbar.setNavigationOnClickListener { parentFragmentManager.popBackStack() }
@@ -28,13 +28,11 @@ class PlayerFullscreenHelper(private val window: Window) {
}
fun enableFullscreen() {
WindowCompat.setDecorFitsSystemWindows(window, false)
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
fun disableFullscreen() {
WindowCompat.setDecorFitsSystemWindows(window, true)
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
}
@@ -15,7 +15,6 @@ import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.view.ViewCompat
import androidx.core.view.doOnNextLayout
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@@ -128,7 +127,6 @@ class WebViewFragment : Fragment(), BackPressInterceptor, JellyfinWebChromeClien
// Apply window insets
webView.applyWindowInsetsAsMargins()
ViewCompat.requestApplyInsets(webView)
// Setup exclusion rects for gestures
if (AndroidVersion.isAtLeastQ) {