remove deprecated way of going in/out immersive

Signed-off-by: parneet-guraya <gurayaparneet@gmail.com>
This commit is contained in:
parneet-guraya 2023-10-10 14:40:45 +05:30
parent cf1116b6f4
commit bb81da23a1
No known key found for this signature in database
GPG Key ID: 26DB680F1EE174D5
5 changed files with 94 additions and 48 deletions

View File

@ -32,8 +32,15 @@ import android.util.Log
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup.MarginLayoutParams
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.FileProvider 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.google.android.material.snackbar.Snackbar
import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.BuildConfig
import com.nextcloud.talk.R import com.nextcloud.talk.R
@ -45,7 +52,7 @@ import java.io.File
class FullScreenImageActivity : AppCompatActivity() { class FullScreenImageActivity : AppCompatActivity() {
lateinit var binding: ActivityFullScreenImageBinding lateinit var binding: ActivityFullScreenImageBinding
private lateinit var windowInsetsController: WindowInsetsControllerCompat
private lateinit var path: String private lateinit var path: String
private var showFullscreen = false private var showFullscreen = false
@ -86,7 +93,9 @@ class FullScreenImageActivity : AppCompatActivity() {
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(binding.imageviewToolbar) setSupportActionBar(binding.imageviewToolbar)
WindowCompat.setDecorFitsSystemWindows(window, false)
initWindowInsetsController()
applyWindowInsets()
binding.photoView.setOnPhotoTapListener { view, x, y -> binding.photoView.setOnPhotoTapListener { view, x, y ->
toggleFullscreen() toggleFullscreen()
} }
@ -142,31 +151,37 @@ class FullScreenImageActivity : AppCompatActivity() {
private fun toggleFullscreen() { private fun toggleFullscreen() {
showFullscreen = !showFullscreen showFullscreen = !showFullscreen
if (showFullscreen) { if (showFullscreen) {
hideSystemUI() enterImmersiveMode()
supportActionBar?.hide()
} else { } else {
showSystemUI() exitImmersiveMode()
supportActionBar?.show()
} }
} }
private fun hideSystemUI() { private fun initWindowInsetsController() {
window.decorView.systemUiVisibility = ( windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
View.SYSTEM_UI_FLAG_IMMERSIVE windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
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 showSystemUI() { private fun enterImmersiveMode() {
window.decorView.systemUiVisibility = ( windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
View.SYSTEM_UI_FLAG_LAYOUT_STABLE supportActionBar?.hide()
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION }
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
) 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<MarginLayoutParams> {
topMargin = insets.top
}
binding.imageviewToolbar.updatePadding(left = insets.left, right = insets.right)
WindowInsetsCompat.CONSUMED
}
} }
companion object { companion object {

View File

@ -30,14 +30,23 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.ViewGroup.MarginLayoutParams
import android.view.WindowManager import android.view.WindowManager
import android.widget.FrameLayout
import androidx.annotation.OptIn import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.FileProvider 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.MediaItem
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.DefaultTimeBar
import androidx.media3.ui.PlayerView import androidx.media3.ui.PlayerView
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.BuildConfig
@ -56,6 +65,7 @@ class FullScreenMediaActivity : AppCompatActivity() {
private var playWhenReadyState: Boolean = true private var playWhenReadyState: Boolean = true
private var playBackPosition: Long = 0L private var playBackPosition: Long = 0L
private lateinit var windowInsetsController: WindowInsetsControllerCompat
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_preview, menu) menuInflater.inflate(R.menu.menu_preview, menu)
@ -90,7 +100,7 @@ class FullScreenMediaActivity : AppCompatActivity() {
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
val fileName = intent.getStringExtra("FILE_NAME") val fileName = intent.getStringExtra("FILE_NAME")
val isAudioOnly = intent.getBooleanExtra("AUDIO_ONLY", false) val isAudioOnly = intent.getBooleanExtra("AUDIO_ONLY", false)
@ -110,14 +120,15 @@ class FullScreenMediaActivity : AppCompatActivity() {
binding.playerView.controllerShowTimeoutMs = 0 binding.playerView.controllerShowTimeoutMs = 0
} }
initWindowInsetsController()
applyWindowInsets()
binding.playerView.setControllerVisibilityListener( binding.playerView.setControllerVisibilityListener(
PlayerView.ControllerVisibilityListener { v -> PlayerView.ControllerVisibilityListener { v ->
if (v != 0) { if (v != 0) {
hideSystemUI() enterImmersiveMode()
supportActionBar?.hide()
} else { } else {
showSystemUI() exitImmersiveMode()
supportActionBar?.show()
} }
} }
) )
@ -158,22 +169,44 @@ class FullScreenMediaActivity : AppCompatActivity() {
player = null player = null
} }
private fun hideSystemUI() { private fun initWindowInsetsController() {
window.decorView.systemUiVisibility = ( windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
View.SYSTEM_UI_FLAG_IMMERSIVE windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
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 showSystemUI() { private fun enterImmersiveMode() {
window.decorView.systemUiVisibility = ( windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
View.SYSTEM_UI_FLAG_LAYOUT_STABLE supportActionBar?.hide()
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION }
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
private fun exitImmersiveMode() {
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
supportActionBar?.show()
}
private fun applyWindowInsets() {
val playerView = binding.playerView
val exoControls = playerView.findViewById<FrameLayout>(R.id.exo_bottom_bar)
val exoProgress = playerView.findViewById<DefaultTimeBar>(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<MarginLayoutParams> {
topMargin = insets.top
}
exoControls.updateLayoutParams<MarginLayoutParams> {
bottomMargin = insets.bottom
}
exoProgress.updateLayoutParams<MarginLayoutParams> {
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
}
} }
} }

View File

@ -28,7 +28,6 @@
android:id="@+id/image_wrapper_view" android:id="@+id/image_wrapper_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activities.FullScreenImageActivity"> tools:context=".activities.FullScreenImageActivity">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar

View File

@ -25,7 +25,6 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activities.FullScreenMediaActivity"> tools:context=".activities.FullScreenMediaActivity">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar

View File

@ -217,20 +217,20 @@
<style name="FullScreenImageTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="FullScreenImageTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/black</item> <item name="android:windowBackground">@color/black</item>
<item name="android:navigationBarColor">@color/black</item> <item name="android:navigationBarColor">@color/transparent</item>
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">true</item> <item name="android:windowActionBar">true</item>
<item name="android:windowFullscreen">true</item> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowContentOverlay">@null</item>
</style> </style>
<style name="FullScreenMediaTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="FullScreenMediaTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/black</item> <item name="android:windowBackground">@color/black</item>
<item name="android:navigationBarColor">@color/black</item> <item name="android:navigationBarColor">@color/black</item>
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">true</item> <item name="android:windowActionBar">true</item>
<item name="android:windowFullscreen">true</item> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowContentOverlay">@null</item>
</style> </style>
<style name="TextInputLayoutTheme" parent="Theme.AppCompat"> <style name="TextInputLayoutTheme" parent="Theme.AppCompat">