Skip to content

Commit 9c551c5

Browse files
committed
refactor: update edge-to-edge implementation
1 parent f8d33e4 commit 9c551c5

File tree

14 files changed

+249
-215
lines changed

14 files changed

+249
-215
lines changed

app/src/main/kotlin/org/fossify/gallery/activities/PhotoVideoActivity.kt

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,74 @@ import android.net.Uri
77
import android.os.Bundle
88
import android.provider.MediaStore
99
import android.text.Html
10-
import android.widget.RelativeLayout
10+
import androidx.core.graphics.drawable.toDrawable
11+
import androidx.core.view.ViewCompat
12+
import androidx.core.view.WindowInsetsCompat
1113
import org.fossify.commons.dialogs.PropertiesDialog
12-
import org.fossify.commons.extensions.*
13-
import org.fossify.commons.helpers.*
14+
import org.fossify.commons.extensions.beGone
15+
import org.fossify.commons.extensions.beVisible
16+
import org.fossify.commons.extensions.beVisibleIf
17+
import org.fossify.commons.extensions.checkAppSideloading
18+
import org.fossify.commons.extensions.getColoredDrawableWithColor
19+
import org.fossify.commons.extensions.getDoesFilePathExist
20+
import org.fossify.commons.extensions.getFilenameFromPath
21+
import org.fossify.commons.extensions.getFilenameFromUri
22+
import org.fossify.commons.extensions.getFinalUriFromPath
23+
import org.fossify.commons.extensions.getParentPath
24+
import org.fossify.commons.extensions.getRealPathFromURI
25+
import org.fossify.commons.extensions.getUriMimeType
26+
import org.fossify.commons.extensions.hideKeyboard
27+
import org.fossify.commons.extensions.isExternalStorageManager
28+
import org.fossify.commons.extensions.isGif
29+
import org.fossify.commons.extensions.isGone
30+
import org.fossify.commons.extensions.isImageFast
31+
import org.fossify.commons.extensions.isPortrait
32+
import org.fossify.commons.extensions.isRawFast
33+
import org.fossify.commons.extensions.isSvg
34+
import org.fossify.commons.extensions.isVideoFast
35+
import org.fossify.commons.extensions.rescanPath
36+
import org.fossify.commons.extensions.rescanPaths
37+
import org.fossify.commons.extensions.toHex
38+
import org.fossify.commons.extensions.toast
39+
import org.fossify.commons.extensions.viewBinding
40+
import org.fossify.commons.helpers.IS_FROM_GALLERY
41+
import org.fossify.commons.helpers.NOMEDIA
42+
import org.fossify.commons.helpers.REAL_FILE_PATH
43+
import org.fossify.commons.helpers.ensureBackgroundThread
44+
import org.fossify.commons.helpers.isRPlus
1445
import org.fossify.gallery.BuildConfig
1546
import org.fossify.gallery.R
1647
import org.fossify.gallery.databinding.FragmentHolderBinding
17-
import org.fossify.gallery.extensions.*
48+
import org.fossify.gallery.extensions.config
49+
import org.fossify.gallery.extensions.hideSystemUI
50+
import org.fossify.gallery.extensions.openEditor
51+
import org.fossify.gallery.extensions.openPath
52+
import org.fossify.gallery.extensions.setAs
53+
import org.fossify.gallery.extensions.sharePath
54+
import org.fossify.gallery.extensions.showFileOnMap
55+
import org.fossify.gallery.extensions.showSystemUI
1856
import org.fossify.gallery.fragments.PhotoFragment
1957
import org.fossify.gallery.fragments.VideoFragment
2058
import org.fossify.gallery.fragments.ViewPagerFragment
21-
import org.fossify.gallery.helpers.*
59+
import org.fossify.gallery.helpers.BOTTOM_ACTION_EDIT
60+
import org.fossify.gallery.helpers.BOTTOM_ACTION_PROPERTIES
61+
import org.fossify.gallery.helpers.BOTTOM_ACTION_SET_AS
62+
import org.fossify.gallery.helpers.BOTTOM_ACTION_SHARE
63+
import org.fossify.gallery.helpers.BOTTOM_ACTION_SHOW_ON_MAP
64+
import org.fossify.gallery.helpers.IS_IN_RECYCLE_BIN
65+
import org.fossify.gallery.helpers.IS_VIEW_INTENT
66+
import org.fossify.gallery.helpers.MEDIUM
67+
import org.fossify.gallery.helpers.PATH
68+
import org.fossify.gallery.helpers.SHOW_FAVORITES
69+
import org.fossify.gallery.helpers.SKIP_AUTHENTICATION
70+
import org.fossify.gallery.helpers.TYPE_GIFS
71+
import org.fossify.gallery.helpers.TYPE_IMAGES
72+
import org.fossify.gallery.helpers.TYPE_PORTRAITS
73+
import org.fossify.gallery.helpers.TYPE_RAWS
74+
import org.fossify.gallery.helpers.TYPE_SVGS
75+
import org.fossify.gallery.helpers.TYPE_VIDEOS
2276
import org.fossify.gallery.models.Medium
2377
import java.io.File
24-
import androidx.core.graphics.drawable.toDrawable
25-
import androidx.core.view.ViewCompat
26-
import androidx.core.view.WindowInsetsCompat
2778

2879
open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentListener {
2980
private var mMedium: Medium? = null
@@ -36,11 +87,15 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
3687

3788
private val binding by viewBinding(FragmentHolderBinding::inflate)
3889

90+
override val padCutout: Boolean
91+
get() = !config.showNotch
92+
3993
public override fun onCreate(savedInstanceState: Bundle?) {
4094
super.onCreate(savedInstanceState)
4195
setContentView(binding.root)
4296
setupEdgeToEdge(
43-
padBottomSystem = listOf(binding.bottomActions.bottomActionsWrapper)
97+
padTopSystem = listOf(binding.fragmentViewerAppbar),
98+
padBottomSystem = listOf(binding.bottomActions.bottomActionsWrapper),
4499
)
45100
if (checkAppSideloading()) {
46101
return
@@ -180,7 +235,6 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
180235
}
181236
}
182237

183-
checkNotchSupport()
184238
showSystemUI()
185239
val bundle = Bundle()
186240
val file = File(mUri.toString())
@@ -216,7 +270,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
216270
window.attributes = attributes
217271
}
218272

219-
ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { _, insets ->
273+
ViewCompat.setOnApplyWindowInsetsListener(binding.fragmentHolder) { _, insets ->
220274
val systemBarsVisible = insets.isVisible(
221275
WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars()
222276
)

app/src/main/kotlin/org/fossify/gallery/activities/SettingsActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ class SettingsActivity : SimpleActivity() {
490490
}
491491

492492
private fun setupShowNotch() {
493-
binding.settingsShowNotchHolder.beVisibleIf(isPiePlus())
493+
binding.settingsShowNotchHolder.beVisibleIf(isPiePlus() && !isVanillaIceCreamPlus())
494494
binding.settingsShowNotch.isChecked = config.showNotch
495495
binding.settingsShowNotchHolder.setOnClickListener {
496496
binding.settingsShowNotch.toggle()

app/src/main/kotlin/org/fossify/gallery/activities/VideoPlayerActivity.kt

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import android.view.Surface
2222
import android.view.TextureView
2323
import android.view.View
2424
import android.view.WindowManager
25-
import android.widget.RelativeLayout
2625
import android.widget.SeekBar
2726
import androidx.appcompat.content.res.AppCompatResources
2827
import androidx.media3.common.AudioAttributes
@@ -41,7 +40,6 @@ import androidx.media3.exoplayer.SeekParameters
4140
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
4241
import androidx.media3.exoplayer.source.MediaSource
4342
import androidx.media3.exoplayer.source.ProgressiveMediaSource
44-
import org.fossify.commons.extensions.actionBarHeight
4543
import org.fossify.commons.extensions.beGone
4644
import org.fossify.commons.extensions.beVisible
4745
import org.fossify.commons.extensions.beVisibleIf
@@ -50,22 +48,16 @@ import org.fossify.commons.extensions.getColoredDrawableWithColor
5048
import org.fossify.commons.extensions.getFilenameFromUri
5149
import org.fossify.commons.extensions.getFormattedDuration
5250
import org.fossify.commons.extensions.getProperTextColor
53-
import org.fossify.commons.extensions.navigationBarHeight
54-
import org.fossify.commons.extensions.navigationBarOnSide
55-
import org.fossify.commons.extensions.navigationBarWidth
5651
import org.fossify.commons.extensions.onGlobalLayout
57-
import org.fossify.commons.extensions.portrait
5852
import org.fossify.commons.extensions.setDrawablesRelativeWithIntrinsicBounds
5953
import org.fossify.commons.extensions.showErrorToast
60-
import org.fossify.commons.extensions.statusBarHeight
6154
import org.fossify.commons.extensions.updateTextColors
6255
import org.fossify.commons.extensions.viewBinding
6356
import org.fossify.gallery.R
6457
import org.fossify.gallery.databinding.ActivityVideoPlayerBinding
6558
import org.fossify.gallery.extensions.config
6659
import org.fossify.gallery.extensions.getFormattedDuration
6760
import org.fossify.gallery.extensions.getFriendlyMessage
68-
import org.fossify.gallery.extensions.hasNavBar
6961
import org.fossify.gallery.extensions.hideSystemUI
7062
import org.fossify.gallery.extensions.mute
7163
import org.fossify.gallery.extensions.openPath
@@ -124,18 +116,23 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
124116

125117
private val binding by viewBinding(ActivityVideoPlayerBinding::inflate)
126118

119+
override val padCutout: Boolean
120+
get() = !config.showNotch
121+
127122
public override fun onCreate(savedInstanceState: Bundle?) {
128123
super.onCreate(savedInstanceState)
129124
setContentView(binding.root)
125+
setupEdgeToEdge(
126+
padTopSystem = listOf(binding.videoAppbar),
127+
padBottomSystem = listOf(binding.bottomVideoTimeHolder.root),
128+
)
130129
setupOptionsMenu()
131130
setupOrientation()
132-
checkNotchSupport()
133131
initPlayer()
134132
}
135133

136134
override fun onResume() {
137135
super.onResume()
138-
binding.topShadow.layoutParams.height = statusBarHeight + actionBarHeight
139136
window.statusBarColor = Color.TRANSPARENT
140137
window.navigationBarColor = Color.TRANSPARENT
141138
if (config.blackBackground) {
@@ -149,12 +146,6 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
149146
}
150147

151148
updateTextColors(binding.videoPlayerHolder)
152-
153-
if (!portrait && navigationBarOnSide && navigationBarWidth > 0) {
154-
binding.videoToolbar.setPadding(0, 0, navigationBarWidth, 0)
155-
} else {
156-
binding.videoToolbar.setPadding(0, 0, 0, 0)
157-
}
158149
}
159150

160151
override fun onPause() {
@@ -179,8 +170,6 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
179170
}
180171

181172
private fun setupOptionsMenu() {
182-
(binding.videoAppbar.layoutParams as RelativeLayout.LayoutParams).topMargin =
183-
statusBarHeight
184173
binding.videoToolbar.apply {
185174
setTitleTextColor(Color.WHITE)
186175
overflowIcon = resources.getColoredDrawableWithColor(
@@ -219,15 +208,6 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
219208
binding.videoSurfaceFrame.onGlobalLayout {
220209
binding.videoSurfaceFrame.controller.resetState()
221210
}
222-
223-
binding.topShadow.layoutParams.height = statusBarHeight + actionBarHeight
224-
(binding.videoAppbar.layoutParams as RelativeLayout.LayoutParams).topMargin =
225-
statusBarHeight
226-
if (!portrait && navigationBarOnSide && navigationBarWidth > 0) {
227-
binding.videoToolbar.setPadding(0, 0, navigationBarWidth, 0)
228-
} else {
229-
binding.videoToolbar.setPadding(0, 0, 0, 0)
230-
}
231211
}
232212

233213
private fun setupOrientation() {
@@ -672,19 +652,6 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
672652
}
673653

674654
private fun initTimeHolder() {
675-
var right = 0
676-
var bottom = 0
677-
678-
if (hasNavBar()) {
679-
if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
680-
bottom += navigationBarHeight
681-
} else {
682-
right += navigationBarWidth
683-
bottom += navigationBarHeight
684-
}
685-
}
686-
687-
binding.bottomVideoTimeHolder.videoTimeHolder.setPadding(0, 0, right, bottom)
688655
binding.bottomVideoTimeHolder.videoSeekbar.setOnSeekBarChangeListener(this)
689656
binding.bottomVideoTimeHolder.videoSeekbar.max = mDuration.toInt()
690657
binding.bottomVideoTimeHolder.videoDuration.text = mDuration.getFormattedDuration()

app/src/main/kotlin/org/fossify/gallery/activities/ViewPagerActivity.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@ import android.content.pm.ShortcutManager
1818
import android.content.res.Configuration
1919
import android.graphics.Bitmap
2020
import android.graphics.Color
21-
import android.graphics.drawable.ColorDrawable
2221
import android.graphics.drawable.Icon
2322
import android.os.Bundle
2423
import android.os.Handler
2524
import android.view.MenuItem
2625
import android.view.WindowManager
2726
import android.view.animation.DecelerateInterpolator
28-
import android.widget.RelativeLayout
2927
import android.widget.Toast
28+
import androidx.core.graphics.drawable.toDrawable
3029
import androidx.core.view.ViewCompat
3130
import androidx.core.view.WindowInsetsCompat
3231
import androidx.exifinterface.media.ExifInterface
@@ -212,18 +211,21 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
212211

213212
private val binding by viewBinding(ActivityMediumBinding::inflate)
214213

214+
override val padCutout: Boolean
215+
get() = !config.showNotch
216+
215217
override fun onCreate(savedInstanceState: Bundle?) {
216218
super.onCreate(savedInstanceState)
217219
setContentView(binding.root)
218220
setupEdgeToEdge(
219-
padBottomSystem = listOf(binding.bottomActions.bottomActionsWrapper)
221+
padTopSystem = listOf(binding.mediumViewerAppbar),
222+
padBottomSystem = listOf(binding.bottomActions.bottomActionsWrapper),
220223
)
221224

222225
setupOptionsMenu()
223226
refreshMenuItems()
224227

225228
window.decorView.setBackgroundColor(getProperBackgroundColor())
226-
checkNotchSupport()
227229
(MediaActivity.mMedia.clone() as ArrayList<ThumbnailItem>).filterIsInstanceTo(mMediaFiles, Medium::class.java)
228230

229231
requestMediaPermissions {
@@ -513,7 +515,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
513515
binding.viewPager.offscreenPageLimit = 2
514516

515517
if (config.blackBackground) {
516-
binding.viewPager.background = ColorDrawable(Color.BLACK)
518+
binding.viewPager.background = Color.BLACK.toDrawable()
517519
}
518520

519521
if (config.hideSystemUI) {
@@ -524,7 +526,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
524526
}
525527
}
526528

527-
ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { _, insets ->
529+
ViewCompat.setOnApplyWindowInsetsListener(binding.fragmentHolder) { _, insets ->
528530
val systemBarsVisible = insets.isVisible(
529531
WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars()
530532
)

app/src/main/kotlin/org/fossify/gallery/extensions/Resources.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.fossify.gallery.extensions
33
import android.content.Context
44
import android.content.res.Resources
55
import android.util.TypedValue
6+
import org.fossify.gallery.R
67

78
fun Resources.getActionBarHeight(context: Context): Int {
89
val tv = TypedValue()
@@ -27,3 +28,8 @@ fun Resources.getNavBarHeight(): Int {
2728
} else
2829
0
2930
}
31+
32+
fun Resources.getBottomActionsHeight(): Int {
33+
return getDimensionPixelSize(R.dimen.bottom_actions_height) +
34+
getDimensionPixelSize(org.fossify.commons.R.dimen.normal_margin)
35+
}

0 commit comments

Comments
 (0)