[Android] Fix edge to edge for HeaderMediaListActivity and InfoActivity
Nicolas Pomepuy
git at videolan.org
Mon Jul 28 05:42:04 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu May 15 14:13:28 2025 +0200| [df5b7bde5bc0dbc185b86d4699d72f42026de8ce] | committer: Nicolas Pomepuy
Fix edge to edge for HeaderMediaListActivity and InfoActivity
> https://code.videolan.org/videolan/vlc-android/commit/df5b7bde5bc0dbc185b86d4699d72f42026de8ce
---
.../res/layout/header_media_list_activity.xml | 4 ----
.../vlc/gui/AudioPlayerContainerActivity.kt | 1 -
.../videolan/vlc/gui/HeaderMediaListActivity.kt | 22 +++++++++++++++++
.../src/org/videolan/vlc/gui/InfoActivity.kt | 28 ++++++++++++++++++++--
4 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/application/vlc-android/res/layout/header_media_list_activity.xml b/application/vlc-android/res/layout/header_media_list_activity.xml
index 752da15e95..b90902d975 100644
--- a/application/vlc-android/res/layout/header_media_list_activity.xml
+++ b/application/vlc-android/res/layout/header_media_list_activity.xml
@@ -38,7 +38,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/background_default"
- android:fitsSystemWindows="true"
vlc:layout_behavior="org.videolan.vlc.gui.helpers.ExpandStateAppBarLayoutBehavior">
<com.google.android.material.appbar.CollapsingToolbarLayout
@@ -46,7 +45,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:importantForAccessibility="no"
- android:fitsSystemWindows="true"
android:keyboardNavigationCluster="true"
tools:targetApi="O"
vlc:contentScrim="?attr/background_actionbar"
@@ -66,7 +64,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:clipChildren="false"
- android:fitsSystemWindows="true"
vlc:layout_collapseMode="parallax">
<ImageView
@@ -88,7 +85,6 @@
tools:layout_marginTop="86dp"
vlc:layoutMarginTop="@{topmargin}"
android:layout_marginEnd="@dimen/default_margin"
- android:fitsSystemWindows="true"
android:scaleType="fitCenter"
android:src="@{cover}"
vlc:layout_constraintStart_toStartOf="parent"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
index c72137ab8d..282efcade4 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.kt
@@ -218,7 +218,6 @@ open class AudioPlayerContainerActivity : BaseActivity(), KeycodeListener, Sched
val bottomNavigationView = findViewById<BottomNavigationView?>(R.id.navigation)
bottomNavigationView?.setPadding(bottomNavigationView.paddingLeft, bottomNavigationView.paddingTop, bottomNavigationView.paddingRight, insets.bottom)
bottomInset = insets.bottom
- insetListener.invoke(insets)
if (::audioPlayer.isInitialized) audioPlayer.setBottomMargin()
}
setContentBottomPadding()
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/HeaderMediaListActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/HeaderMediaListActivity.kt
index f662393c3d..6be5f44521 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/HeaderMediaListActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/HeaderMediaListActivity.kt
@@ -36,6 +36,10 @@ import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.updatePadding
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.asFlow
import androidx.lifecycle.lifecycleScope
@@ -126,6 +130,7 @@ import org.videolan.vlc.util.ThumbnailsProvider
import org.videolan.vlc.util.getScreenWidth
import org.videolan.vlc.util.isSchemeHttpOrHttps
import org.videolan.vlc.util.launchWhenStarted
+import org.videolan.vlc.util.setLayoutMarginTop
import org.videolan.vlc.util.share
import org.videolan.vlc.viewmodels.PlaylistModel
import org.videolan.vlc.viewmodels.mobile.PlaylistViewModel
@@ -147,11 +152,28 @@ open class HeaderMediaListActivity : AudioPlayerContainerActivity(), IEventsHand
private lateinit var viewModel: PlaylistViewModel
private var itemTouchHelper: ItemTouchHelper? = null
override fun isTransparent() = true
+ override var isEdgeToEdge = false
public override fun onCreate(savedInstanceState: Bundle?) {
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+ WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = false
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.header_media_list_activity)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById<View>(android.R.id.content)) { v, windowInsets ->
+ val bars = windowInsets.getInsets(
+ WindowInsetsCompat.Type.systemBars()
+ or WindowInsetsCompat.Type.displayCutout()
+ )
+ v.updatePadding(
+ left = bars.left,
+ right = bars.right,
+ bottom = bars.bottom,
+ )
+
+ setLayoutMarginTop(binding.mainToolbar, bars.top)
+ WindowInsetsCompat.CONSUMED
+ }
initAudioPlayerContainerActivity()
fragmentContainer = binding.songs
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
index 78b4c5ca10..7523532cd1 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
@@ -15,6 +15,9 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.Insets
import androidx.core.net.toUri
import androidx.core.view.ViewCompat
+import androidx.core.view.WindowCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.updatePadding
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
@@ -51,11 +54,15 @@ import org.videolan.vlc.gui.helpers.MedialibraryUtils
import org.videolan.vlc.gui.video.MediaInfoAdapter
import org.videolan.vlc.gui.view.VLCDividerItemDecoration
import org.videolan.vlc.media.MediaUtils
-import org.videolan.vlc.util.*
+import org.videolan.vlc.util.ThumbnailsProvider
+import org.videolan.vlc.util.generateResolutionClass
+import org.videolan.vlc.util.getModel
+import org.videolan.vlc.util.getScreenWidth
+import org.videolan.vlc.util.isSchemeSupported
+import org.videolan.vlc.util.setLayoutMarginTop
import org.videolan.vlc.viewmodels.browser.IPathOperationDelegate
import org.videolan.vlc.viewmodels.browser.PathOperationDelegate
import java.io.File
-import java.util.*
private const val TAG = "VLC/InfoActivity"
private const val TAG_FAB_VISIBILITY = "FAB"
@@ -66,6 +73,7 @@ class InfoActivity : AudioPlayerContainerActivity(), View.OnClickListener, PathA
private lateinit var item: MediaLibraryItem
private lateinit var adapter: MediaInfoAdapter
private lateinit var model: InfoModel
+ override var isEdgeToEdge = false
internal lateinit var binding: InfoActivityBinding
override fun isTransparent() = true
@@ -74,7 +82,23 @@ class InfoActivity : AudioPlayerContainerActivity(), View.OnClickListener, PathA
}
override fun onCreate(savedInstanceState: Bundle?) {
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+ WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = false
super.onCreate(savedInstanceState)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById<View>(android.R.id.content)) { v, windowInsets ->
+ val bars = windowInsets.getInsets(
+ WindowInsetsCompat.Type.systemBars()
+ or WindowInsetsCompat.Type.displayCutout()
+ )
+ v.updatePadding(
+ left = bars.left,
+ right = bars.right,
+ bottom = bars.bottom,
+ )
+
+ setLayoutMarginTop(binding.mainToolbar, bars.top)
+ WindowInsetsCompat.CONSUMED
+ }
binding = DataBindingUtil.setContentView(this, R.layout.info_activity)
More information about the Android
mailing list