From bb81da23a1b8947a0abc81c905df213f003e342c Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Tue, 10 Oct 2023 14:40:45 +0530 Subject: [PATCH] remove deprecated way of going in/out immersive Signed-off-by: parneet-guraya --- .../activities/FullScreenImageActivity.kt | 57 +++++++++------ .../activities/FullScreenMediaActivity.kt | 73 ++++++++++++++----- .../res/layout/activity_full_screen_image.xml | 1 - .../res/layout/activity_full_screen_media.xml | 1 - app/src/main/res/values/styles.xml | 10 +-- 5 files changed, 94 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/FullScreenImageActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/FullScreenImageActivity.kt index 999c6e7fa..c9e68e505 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/FullScreenImageActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/FullScreenImageActivity.kt @@ -32,8 +32,15 @@ import android.util.Log import android.view.Menu import android.view.MenuItem import android.view.View +import android.view.ViewGroup.MarginLayoutParams import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import com.google.android.material.snackbar.Snackbar import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.R @@ -45,7 +52,7 @@ import java.io.File class FullScreenImageActivity : AppCompatActivity() { lateinit var binding: ActivityFullScreenImageBinding - + private lateinit var windowInsetsController: WindowInsetsControllerCompat private lateinit var path: String private var showFullscreen = false @@ -86,7 +93,9 @@ class FullScreenImageActivity : AppCompatActivity() { setContentView(binding.root) setSupportActionBar(binding.imageviewToolbar) - + WindowCompat.setDecorFitsSystemWindows(window, false) + initWindowInsetsController() + applyWindowInsets() binding.photoView.setOnPhotoTapListener { view, x, y -> toggleFullscreen() } @@ -142,31 +151,37 @@ class FullScreenImageActivity : AppCompatActivity() { private fun toggleFullscreen() { showFullscreen = !showFullscreen if (showFullscreen) { - hideSystemUI() - supportActionBar?.hide() + enterImmersiveMode() } else { - showSystemUI() - supportActionBar?.show() + exitImmersiveMode() } } - private fun hideSystemUI() { - window.decorView.systemUiVisibility = ( - View.SYSTEM_UI_FLAG_IMMERSIVE - or View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_FULLSCREEN - ) + private fun initWindowInsetsController() { + windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) + windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } - private fun showSystemUI() { - window.decorView.systemUiVisibility = ( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - ) + private fun enterImmersiveMode() { + windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) + supportActionBar?.hide() + } + + private fun exitImmersiveMode() { + windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) + supportActionBar?.show() + } + + private fun applyWindowInsets() { + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets -> + val insets = + windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) + binding.imageviewToolbar.updateLayoutParams { + topMargin = insets.top + } + binding.imageviewToolbar.updatePadding(left = insets.left, right = insets.right) + WindowInsetsCompat.CONSUMED + } } companion object { diff --git a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt index 09063496c..7eb76d5e1 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/FullScreenMediaActivity.kt @@ -30,14 +30,23 @@ import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.view.View +import android.view.ViewGroup.MarginLayoutParams import android.view.WindowManager +import android.widget.FrameLayout import androidx.annotation.OptIn import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.marginBottom +import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import androidx.media3.common.MediaItem import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.ui.DefaultTimeBar import androidx.media3.ui.PlayerView import autodagger.AutoInjector import com.nextcloud.talk.BuildConfig @@ -56,6 +65,7 @@ class FullScreenMediaActivity : AppCompatActivity() { private var playWhenReadyState: Boolean = true private var playBackPosition: Long = 0L + private lateinit var windowInsetsController: WindowInsetsControllerCompat override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_preview, menu) @@ -90,7 +100,7 @@ class FullScreenMediaActivity : AppCompatActivity() { @OptIn(UnstableApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + WindowCompat.setDecorFitsSystemWindows(window, false) val fileName = intent.getStringExtra("FILE_NAME") val isAudioOnly = intent.getBooleanExtra("AUDIO_ONLY", false) @@ -110,14 +120,15 @@ class FullScreenMediaActivity : AppCompatActivity() { binding.playerView.controllerShowTimeoutMs = 0 } + initWindowInsetsController() + applyWindowInsets() + binding.playerView.setControllerVisibilityListener( PlayerView.ControllerVisibilityListener { v -> if (v != 0) { - hideSystemUI() - supportActionBar?.hide() + enterImmersiveMode() } else { - showSystemUI() - supportActionBar?.show() + exitImmersiveMode() } } ) @@ -158,22 +169,44 @@ class FullScreenMediaActivity : AppCompatActivity() { player = null } - private fun hideSystemUI() { - window.decorView.systemUiVisibility = ( - View.SYSTEM_UI_FLAG_IMMERSIVE - or View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_FULLSCREEN - ) + private fun initWindowInsetsController() { + windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) + windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } - private fun showSystemUI() { - window.decorView.systemUiVisibility = ( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + private fun enterImmersiveMode() { + windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) + supportActionBar?.hide() + } + + private fun exitImmersiveMode() { + windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) + supportActionBar?.show() + } + private fun applyWindowInsets() { + val playerView = binding.playerView + val exoControls = playerView.findViewById(R.id.exo_bottom_bar) + val exoProgress = playerView.findViewById(R.id.exo_progress) + val progressBottomMargin = exoProgress.marginBottom + + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets -> + val insets = windowInsets.getInsets( + WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type + .displayCutout() ) + binding.mediaviewToolbar.updateLayoutParams { + topMargin = insets.top + } + exoControls.updateLayoutParams { + bottomMargin = insets.bottom + } + exoProgress.updateLayoutParams { + bottomMargin = insets.bottom + progressBottomMargin + } + exoControls.updatePadding(left = insets.left, right = insets.right) + exoProgress.updatePadding(left = insets.left, right = insets.right) + binding.mediaviewToolbar.updatePadding(left = insets.left, right = insets.right) + WindowInsetsCompat.CONSUMED + } } } diff --git a/app/src/main/res/layout/activity_full_screen_image.xml b/app/src/main/res/layout/activity_full_screen_image.xml index 67cb1657f..d7c954011 100644 --- a/app/src/main/res/layout/activity_full_screen_image.xml +++ b/app/src/main/res/layout/activity_full_screen_image.xml @@ -28,7 +28,6 @@ android:id="@+id/image_wrapper_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true" tools:context=".activities.FullScreenImageActivity"> @color/black - @color/black + @color/transparent + @color/transparent true true - true - @null + shortEdges