mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
remove deprecated way of going in/out immersive
Signed-off-by: parneet-guraya <gurayaparneet@gmail.com>
This commit is contained in:
parent
cf1116b6f4
commit
bb81da23a1
@ -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 {
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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">
|
||||||
|
Loading…
Reference in New Issue
Block a user