@@ -27,11 +27,17 @@ import android.view.MotionEvent
2727import android.view.View
2828import android.view.View.OnTouchListener
2929import android.view.ViewGroup
30+ import android.widget.FrameLayout
3031import androidx.annotation.OptIn
3132import androidx.annotation.StringRes
3233import androidx.core.net.toUri
3334import androidx.core.view.MenuHost
3435import androidx.core.view.MenuProvider
36+ import androidx.core.view.ViewCompat
37+ import androidx.core.view.WindowInsetsCompat
38+ import androidx.core.view.marginBottom
39+ import androidx.core.view.updateLayoutParams
40+ import androidx.core.view.updatePadding
3541import androidx.drawerlayout.widget.DrawerLayout
3642import androidx.lifecycle.Lifecycle
3743import androidx.lifecycle.lifecycleScope
@@ -40,6 +46,7 @@ import androidx.media3.common.Player
4046import androidx.media3.common.util.UnstableApi
4147import androidx.media3.exoplayer.ExoPlayer
4248import androidx.media3.session.MediaSession
49+ import androidx.media3.ui.DefaultTimeBar
4350import com.nextcloud.client.account.User
4451import com.nextcloud.client.account.UserAccountManager
4552import com.nextcloud.client.di.Injectable
@@ -176,6 +183,36 @@ class PreviewMediaFragment :
176183 isLivePhoto = bundle.getBoolean(IS_LIVE_PHOTO )
177184 }
178185
186+ override fun onResume () {
187+ super .onResume()
188+ applyWindowInsets()
189+ }
190+
191+ @OptIn(UnstableApi ::class )
192+ private fun applyWindowInsets () {
193+ binding.root.post {
194+ val rootInsets = ViewCompat .getRootWindowInsets(binding.root) ? : return @post
195+ val insets = rootInsets.getInsets(
196+ WindowInsetsCompat .Type .systemBars() or
197+ WindowInsetsCompat .Type .displayCutout()
198+ )
199+ val playerView = binding.exoplayerView
200+ val exoControls = playerView
201+ .findViewById<FrameLayout >(androidx.media3.ui.R .id.exo_bottom_bar)
202+ val exoProgress = playerView
203+ .findViewById<DefaultTimeBar >(androidx.media3.ui.R .id.exo_progress)
204+ val progressOriginalMargin = exoProgress?.marginBottom ? : 0
205+ exoControls?.updateLayoutParams<ViewGroup .MarginLayoutParams > {
206+ bottomMargin = insets.bottom
207+ }
208+ exoProgress?.updateLayoutParams<ViewGroup .MarginLayoutParams > {
209+ bottomMargin = insets.bottom + progressOriginalMargin
210+ }
211+ exoControls?.updatePadding(left = insets.left, right = insets.right)
212+ exoProgress?.updatePadding(left = insets.left, right = insets.right)
213+ }
214+ }
215+
179216 private fun setLoadingView () {
180217 binding.progress.visibility = View .VISIBLE
181218 binding.emptyView.emptyListView.visibility = View .GONE
@@ -576,20 +613,14 @@ class PreviewMediaFragment :
576613 startPlaybackPosition : Long ,
577614 autoplay : Boolean ,
578615 isLivePhoto : Boolean
579- ): PreviewMediaFragment {
580- val previewMediaFragment = PreviewMediaFragment ()
581-
582- val bundle = Bundle ().apply {
616+ ): PreviewMediaFragment = PreviewMediaFragment ().apply {
617+ arguments = Bundle ().apply {
583618 putParcelable(FILE , fileToDetail)
584619 putParcelable(USER , user)
585620 putLong(PLAYBACK_POSITION , startPlaybackPosition)
586621 putBoolean(AUTOPLAY , autoplay)
587622 putBoolean(IS_LIVE_PHOTO , isLivePhoto)
588623 }
589-
590- previewMediaFragment.arguments = bundle
591-
592- return previewMediaFragment
593624 }
594625
595626 /* *
0 commit comments