@@ -17,6 +17,10 @@ import android.view.View
1717import androidx.activity.OnBackPressedCallback
1818import androidx.core.content.ContextCompat
1919import androidx.core.graphics.drawable.toDrawable
20+ import androidx.core.view.ViewCompat
21+ import androidx.core.view.WindowCompat
22+ import androidx.core.view.WindowInsetsCompat
23+ import androidx.core.view.WindowInsetsControllerCompat
2024import androidx.drawerlayout.widget.DrawerLayout
2125import androidx.localbroadcastmanager.content.LocalBroadcastManager
2226import androidx.viewpager2.widget.ViewPager2
@@ -59,7 +63,7 @@ import kotlin.math.max
5963import kotlin.math.min
6064
6165/* *
62- * Holds a swiping gallery where image files contained in an Nextcloud directory are shown.
66+ * Holds a swiping gallery where image and video files contained in a Nextcloud directory are shown.
6367 */
6468@Suppress(" TooManyFunctions" )
6569class PreviewImageActivity :
@@ -70,13 +74,15 @@ class PreviewImageActivity :
7074 Injectable {
7175 private var livePhotoFile: OCFile ? = null
7276 private var viewPager: ViewPager2 ? = null
73- private var previewImagePagerAdapter : PreviewImagePagerAdapter ? = null
77+ private var previewMediaPagerAdapter : PreviewMediaPagerAdapter ? = null
7478 private var savedPosition: Int? = null
7579
7680 private val downloadStartReceiver = DownloadStartReceiver ()
7781 private val downloadFinishReceiver = DownloadFinishReceiver ()
7882
79- private var fullScreenAnchorView: View ? = null
83+ private val windowInsetsController: WindowInsetsControllerCompat by lazy {
84+ WindowCompat .getInsetsController(window, window.decorView)
85+ }
8086
8187 private var isDownloadWorkStarted = false
8288 private var screenState = PreviewImageActivityState .Idle
@@ -115,8 +121,6 @@ class PreviewImageActivity :
115121 it.setBackgroundDrawable(R .color.black.toDrawable())
116122 }
117123
118- fullScreenAnchorView = window.decorView
119- // to keep our UI controls visibility in line with system bars visibility
120124 setDrawerLockMode(DrawerLayout .LOCK_MODE_LOCKED_CLOSED )
121125
122126 val requestWaitingForBinder = savedInstanceState?.getBoolean(KEY_WAITING_FOR_BINDER ) ? : false
@@ -163,7 +167,7 @@ class PreviewImageActivity :
163167 if (virtualFolderType != null && virtualFolderType != = VirtualFolderType .NONE ) {
164168 val type = virtualFolderType as VirtualFolderType
165169
166- previewImagePagerAdapter = PreviewImagePagerAdapter (
170+ previewMediaPagerAdapter = PreviewMediaPagerAdapter (
167171 this ,
168172 type,
169173 user,
@@ -174,7 +178,7 @@ class PreviewImageActivity :
174178 val parentFolder = file?.let { storageManager.getFileById(it.parentId) }
175179 ? : storageManager.getFileByEncryptedRemotePath(OCFile .ROOT_PATH )
176180
177- previewImagePagerAdapter = PreviewImagePagerAdapter (
181+ previewMediaPagerAdapter = PreviewMediaPagerAdapter (
178182 this ,
179183 livePhotoFile,
180184 parentFolder,
@@ -192,11 +196,11 @@ class PreviewImageActivity :
192196 ) {
193197 savedPosition
194198 } else {
195- file?.let { previewImagePagerAdapter ?.getFilePosition(it) }
199+ file?.let { previewMediaPagerAdapter ?.getFilePosition(it) }
196200 }
197201 position = position?.toDouble()?.let { max(it, 0.0 ).toInt() }
198202
199- viewPager?.adapter = previewImagePagerAdapter
203+ viewPager?.adapter = previewMediaPagerAdapter
200204 viewPager?.registerOnPageChangeCallback(object : OnPageChangeCallback () {
201205 override fun onPageSelected (position : Int ) {
202206 selectPage(position)
@@ -231,7 +235,7 @@ class PreviewImageActivity :
231235
232236 fun updateViewPagerAfterDeletionAndAdvanceForward () {
233237 val deletePosition = viewPager?.currentItem ? : return
234- previewImagePagerAdapter ?.let { adapter ->
238+ previewMediaPagerAdapter ?.let { adapter ->
235239 val nextPosition = min(deletePosition, adapter.itemCount - 1 )
236240 viewPager?.setCurrentItem(nextPosition, true )
237241 adapter.delete(deletePosition)
@@ -311,7 +315,7 @@ class PreviewImageActivity :
311315 super .onRemoteOperationFinish(operation, result)
312316
313317 if (operation is RemoveFileOperation ) {
314- previewImagePagerAdapter ?.let {
318+ previewMediaPagerAdapter ?.let {
315319 if (it.itemCount <= 1 ) {
316320 backToDisplayActivity()
317321 return
@@ -346,7 +350,7 @@ class PreviewImageActivity :
346350 private fun setDownloadedItem () {
347351 savedPosition?.let { position ->
348352
349- previewImagePagerAdapter ?.run {
353+ previewMediaPagerAdapter ?.run {
350354 file?.let {
351355 updateFile(position, it)
352356 notifyItemChanged(position)
@@ -438,15 +442,15 @@ class PreviewImageActivity :
438442 if (position == null ) return
439443 savedPosition = position
440444
441- val currentFile = previewImagePagerAdapter ?.getFileAt(position)
445+ val currentFile = previewMediaPagerAdapter ?.getFileAt(position)
442446
443447 if (! isDownloadWorkStarted) {
444448 screenState = PreviewImageActivityState .WaitingForBinder
445449 } else {
446450 if (currentFile != null ) {
447451 if (currentFile.isEncrypted &&
448452 ! currentFile.isDown &&
449- previewImagePagerAdapter ?.pendingErrorAt(position) == false
453+ previewMediaPagerAdapter ?.pendingErrorAt(position) == false
450454 ) {
451455 requestForDownload(currentFile)
452456 }
@@ -507,13 +511,15 @@ class PreviewImageActivity :
507511 get() = supportActionBar == null || supportActionBar?.isShowing == true
508512
509513 fun toggleFullScreen () {
510- fullScreenAnchorView?.let {
511- val visible = (it.systemUiVisibility and View .SYSTEM_UI_FLAG_HIDE_NAVIGATION ) == 0
512- if (visible) {
513- hideSystemUI(it)
514- } else {
515- showSystemUI(it)
516- }
514+ val rootInsets = ViewCompat .getRootWindowInsets(window.decorView) ? : return
515+
516+ // the content is laid out edge to edge so that showing and hiding the bars does not move it
517+ WindowCompat .setDecorFitsSystemWindows(window, false )
518+
519+ if (rootInsets.isVisible(WindowInsetsCompat .Type .systemBars())) {
520+ windowInsetsController.hide(WindowInsetsCompat .Type .systemBars())
521+ } else {
522+ windowInsetsController.show(WindowInsetsCompat .Type .systemBars())
517523 }
518524 }
519525
@@ -542,27 +548,6 @@ class PreviewImageActivity :
542548 override fun onBrowsedDownTo (folder : OCFile ) = Unit
543549 override fun onTransferStateChanged (file : OCFile , downloading : Boolean , uploading : Boolean ) = Unit
544550
545- @Suppress(" DEPRECATION" )
546- private fun hideSystemUI (anchorView : View ) {
547- anchorView.systemUiVisibility = (
548- View .SYSTEM_UI_FLAG_HIDE_NAVIGATION
549- or View .SYSTEM_UI_FLAG_FULLSCREEN
550- or View .SYSTEM_UI_FLAG_IMMERSIVE
551- or View .SYSTEM_UI_FLAG_LAYOUT_STABLE
552- or View .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
553- or View .SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
554- )
555- }
556-
557- @Suppress(" DEPRECATION" )
558- private fun showSystemUI (anchorView : View ) {
559- anchorView.systemUiVisibility = (
560- View .SYSTEM_UI_FLAG_LAYOUT_STABLE
561- or View .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
562- or View .SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
563- )
564- }
565-
566551 companion object {
567552 val TAG : String = PreviewImageActivity ::class .java.simpleName
568553 const val EXTRA_VIRTUAL_TYPE : String = " EXTRA_VIRTUAL_TYPE"
0 commit comments