Skip to content

Commit 179fc3b

Browse files
authored
chore: bump target SDK version to 35 (#595)
* chore: bump target SDK version to 35 * fix: address nullability issues * chore: bump target SDK version to 36 * fix: avoid name clash with platform method * refactor: update edge-to-edge implementation * refactor: update edge-to-edge implementation * refactor: update edge-to-edge implementation * refactor: update edge-to-edge implementation * refactor: migrate away from deprecated onBackPressed() * fix: setup edge to edge in editor * fix: replace removeFirst()/removeLast() with removeAt() * fix: migrate away from deprecated `onBackPressed()` * chore(deps): update org.fossify.commons to 5.5.0 * docs: update changelog * docs: update changelog * fix: add missing dependencies * chore: update lint baselines
1 parent 518e5bf commit 179fc3b

38 files changed

+817
-872
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
### Changed
10+
- Compatibility updates for Android 15 & 16
11+
12+
### Fixed
13+
- Fixed overlap between extended details and bottom actions ([#418])
14+
915
## [1.7.0] - 2025-10-16
1016
### Added
1117
- Option to overwrite the original image when saving edits ([#62])
@@ -184,6 +190,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
184190
[#365]: https://github.com/FossifyOrg/Gallery/issues/365
185191
[#375]: https://github.com/FossifyOrg/Gallery/issues/375
186192
[#379]: https://github.com/FossifyOrg/Gallery/issues/379
193+
[#418]: https://github.com/FossifyOrg/Gallery/issues/418
187194
[#447]: https://github.com/FossifyOrg/Gallery/issues/447
188195
[#475]: https://github.com/FossifyOrg/Gallery/issues/475
189196
[#525]: https://github.com/FossifyOrg/Gallery/issues/525

app/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,12 @@ detekt {
141141

142142
dependencies {
143143
implementation(libs.fossify.commons)
144+
implementation(libs.androidx.print)
144145
implementation(libs.android.image.cropper)
145146
implementation(libs.exif)
146147
implementation(libs.android.gif.drawable)
147148
implementation(libs.androidx.constraintlayout)
149+
implementation(libs.androidx.documentfile)
148150
implementation(libs.androidx.media3.exoplayer)
149151
implementation(libs.sanselan)
150152
implementation(libs.androidphotofilters)

app/detekt-baseline.xml

Lines changed: 1 addition & 41 deletions
Large diffs are not rendered by default.

app/lint-baseline.xml

Lines changed: 354 additions & 415 deletions
Large diffs are not rendered by default.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ class EditActivity : SimpleActivity() {
102102
override fun onCreate(savedInstanceState: Bundle?) {
103103
super.onCreate(savedInstanceState)
104104
setContentView(binding.root)
105+
setupEdgeToEdge(
106+
padBottomSystem = listOf(binding.bottomEditorPrimaryActions.root)
107+
)
105108

106109
if (checkAppSideloading()) {
107110
return
@@ -121,7 +124,7 @@ class EditActivity : SimpleActivity() {
121124
super.onResume()
122125
isEditingWithThirdParty = false
123126
binding.bottomEditorDrawActions.bottomDrawWidth.setColors(getProperTextColor(), getProperPrimaryColor(), getProperBackgroundColor())
124-
setupToolbar(binding.editorToolbar, NavigationIcon.Arrow)
127+
setupTopAppBar(binding.editorAppbar, NavigationIcon.Arrow)
125128
}
126129

127130
override fun onStop() {

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@ class ExcludedFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener {
1616
private val binding by viewBinding(ActivityManageFoldersBinding::inflate)
1717

1818
override fun onCreate(savedInstanceState: Bundle?) {
19-
isMaterialActivity = true
2019
super.onCreate(savedInstanceState)
2120
setContentView(binding.root)
2221
updateFolders()
2322
setupOptionsMenu()
2423
binding.manageFoldersToolbar.title = getString(org.fossify.commons.R.string.excluded_folders)
2524

26-
updateMaterialActivityViews(binding.manageFoldersCoordinator, binding.manageFoldersList, useTransparentNavigation = true, useTopSearchMenu = false)
27-
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersToolbar)
25+
setupEdgeToEdge(
26+
padTopSystem = listOf(binding.manageFoldersAppbar),
27+
padBottomSystem = listOf(binding.manageFoldersList)
28+
)
29+
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersAppbar)
2830
}
2931

3032
override fun onResume() {
3133
super.onResume()
32-
setupToolbar(binding.manageFoldersToolbar, NavigationIcon.Arrow)
34+
setupTopAppBar(binding.manageFoldersAppbar, NavigationIcon.Arrow)
3335
}
3436

3537
private fun updateFolders() {

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,22 @@ class HiddenFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener {
1919

2020
private val binding by viewBinding(ActivityManageFoldersBinding::inflate)
2121
override fun onCreate(savedInstanceState: Bundle?) {
22-
isMaterialActivity = true
2322
super.onCreate(savedInstanceState)
2423
setContentView(binding.root)
2524
updateFolders()
2625
setupOptionsMenu()
2726
binding.manageFoldersToolbar.title = getString(R.string.hidden_folders)
2827

29-
updateMaterialActivityViews(binding.manageFoldersCoordinator, binding.manageFoldersList, useTransparentNavigation = true, useTopSearchMenu = false)
30-
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersToolbar)
28+
setupEdgeToEdge(
29+
padTopSystem = listOf(binding.manageFoldersAppbar),
30+
padBottomSystem = listOf(binding.manageFoldersList)
31+
)
32+
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersAppbar)
3133
}
3234

3335
override fun onResume() {
3436
super.onResume()
35-
setupToolbar(binding.manageFoldersToolbar, NavigationIcon.Arrow)
37+
setupTopAppBar(binding.manageFoldersAppbar, NavigationIcon.Arrow)
3638
}
3739

3840
private fun updateFolders() {

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@ class IncludedFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener {
1616
private val binding by viewBinding(ActivityManageFoldersBinding::inflate)
1717

1818
override fun onCreate(savedInstanceState: Bundle?) {
19-
isMaterialActivity = true
2019
super.onCreate(savedInstanceState)
2120
setContentView(binding.root)
2221
updateFolders()
2322
setupOptionsMenu()
2423
binding.manageFoldersToolbar.title = getString(R.string.include_folders)
2524

26-
updateMaterialActivityViews(binding.manageFoldersCoordinator, binding.manageFoldersList, useTransparentNavigation = true, useTopSearchMenu = false)
27-
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersToolbar)
25+
setupEdgeToEdge(
26+
padTopSystem = listOf(binding.manageFoldersAppbar),
27+
padBottomSystem = listOf(binding.manageFoldersList)
28+
)
29+
setupMaterialScrollListener(binding.manageFoldersList, binding.manageFoldersAppbar)
2830
}
2931

3032
override fun onResume() {
3133
super.onResume()
32-
setupToolbar(binding.manageFoldersToolbar, NavigationIcon.Arrow)
34+
setupTopAppBar(binding.manageFoldersAppbar, NavigationIcon.Arrow)
3335
}
3436

3537
private fun updateFolders() {

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ import java.io.InputStream
151151
import java.io.OutputStream
152152

153153
class MainActivity : SimpleActivity(), DirectoryOperationsListener {
154+
override var isSearchBarEnabled = true
155+
154156
companion object {
155157
private const val PICK_MEDIA = 2
156158
private const val PICK_WALLPAPER = 3
@@ -197,7 +199,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
197199
private val binding by viewBinding(ActivityMainBinding::inflate)
198200

199201
override fun onCreate(savedInstanceState: Bundle?) {
200-
isMaterialActivity = true
201202
super.onCreate(savedInstanceState)
202203
setContentView(binding.root)
203204
appLaunched(BuildConfig.APPLICATION_ID)
@@ -229,11 +230,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
229230
setupOptionsMenu()
230231
refreshMenuItems()
231232

232-
updateMaterialActivityViews(
233-
mainCoordinatorLayout = binding.directoriesCoordinator,
234-
nestedView = binding.directoriesGrid,
235-
useTransparentNavigation = !config.scrollHorizontally,
236-
useTopSearchMenu = true
233+
setupEdgeToEdge(
234+
padBottomImeAndSystem = listOf(binding.directoriesGrid)
237235
)
238236

239237
binding.directoriesRefreshLayout.setOnRefreshListener { getDirectories() }
@@ -394,20 +392,23 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
394392
}
395393
}
396394

397-
override fun onBackPressed() {
398-
if (binding.mainMenu.isSearchOpen) {
395+
override fun onBackPressedCompat(): Boolean {
396+
return if (binding.mainMenu.isSearchOpen) {
399397
binding.mainMenu.closeSearch()
398+
true
400399
} else if (config.groupDirectSubfolders) {
401400
if (mCurrentPathPrefix.isEmpty()) {
402-
super.onBackPressed()
401+
appLockManager.lock()
402+
false
403403
} else {
404404
mOpenedSubfolders.removeAt(mOpenedSubfolders.lastIndex)
405405
mCurrentPathPrefix = mOpenedSubfolders.last()
406406
setupAdapter(mDirs)
407+
true
407408
}
408409
} else {
409410
appLockManager.lock()
410-
super.onBackPressed()
411+
false
411412
}
412413
}
413414

@@ -448,7 +449,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
448449

449450
private fun refreshMenuItems() {
450451
if (!mIsThirdPartyIntent) {
451-
binding.mainMenu.getToolbar().menu.apply {
452+
binding.mainMenu.requireToolbar().menu.apply {
452453
findItem(R.id.column_count).isVisible = config.viewTypeFolders == VIEW_TYPE_GRID
453454
findItem(R.id.set_as_default_folder).isVisible = !config.defaultFolder.isEmpty()
454455
findItem(R.id.open_recycle_bin).isVisible =
@@ -458,7 +459,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
458459
}
459460
}
460461

461-
binding.mainMenu.getToolbar().menu.apply {
462+
binding.mainMenu.requireToolbar().menu.apply {
462463
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
463464
findItem(R.id.stop_showing_hidden).isVisible =
464465
(!isRPlus() || isExternalStorageManager()) && config.temporarilyShowHidden
@@ -475,7 +476,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
475476
R.menu.menu_main
476477
}
477478

478-
binding.mainMenu.getToolbar().inflateMenu(menuId)
479+
binding.mainMenu.requireToolbar().inflateMenu(menuId)
479480
binding.mainMenu.toggleHideOnScroll(!config.scrollHorizontally)
480481
binding.mainMenu.setupMenu()
481482

@@ -492,7 +493,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
492493
binding.directoriesSwitchSearching.beVisibleIf(text.isNotEmpty())
493494
}
494495

495-
binding.mainMenu.getToolbar().setOnMenuItemClickListener { menuItem ->
496+
binding.mainMenu.requireToolbar().setOnMenuItemClickListener { menuItem ->
496497
when (menuItem.itemId) {
497498
R.id.sort -> showSortingDialog()
498499
R.id.filter -> showFilterMediaDialog()
@@ -517,7 +518,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
517518
}
518519

519520
private fun updateMenuColors() {
520-
updateStatusbarColor(getProperBackgroundColor())
521521
binding.mainMenu.updateColors()
522522
}
523523

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ import java.io.File
112112
import java.io.IOException
113113

114114
class MediaActivity : SimpleActivity(), MediaOperationsListener {
115+
override var isSearchBarEnabled = true
116+
115117
private val LAST_MEDIA_CHECK_PERIOD = 3000L
116118

117119
private var mPath = ""
@@ -149,7 +151,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
149151
}
150152

151153
override fun onCreate(savedInstanceState: Bundle?) {
152-
isMaterialActivity = true
153154
super.onCreate(savedInstanceState)
154155
setContentView(binding.root)
155156

@@ -172,11 +173,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
172173
setupOptionsMenu()
173174
refreshMenuItems()
174175
storeStateVariables()
175-
updateMaterialActivityViews(
176-
mainCoordinatorLayout = binding.mediaCoordinator,
177-
nestedView = binding.mediaGrid,
178-
useTransparentNavigation = !config.scrollHorizontally,
179-
useTopSearchMenu = true
176+
setupEdgeToEdge(
177+
padTopSystem = listOf(binding.mediaMenu),
178+
padBottomImeAndSystem = listOf(binding.mediaGrid)
180179
)
181180

182181
if (mShowAll) {
@@ -304,15 +303,16 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
304303
mTempShowHiddenHandler.removeCallbacksAndMessages(null)
305304
}
306305

307-
override fun onBackPressed() {
308-
if (binding.mediaMenu.isSearchOpen) {
306+
override fun onBackPressedCompat(): Boolean {
307+
return if (binding.mediaMenu.isSearchOpen) {
309308
binding.mediaMenu.closeSearch()
309+
true
310310
} else {
311311
if (config.showAll) {
312312
appLockManager.lock()
313313
}
314314

315-
super.onBackPressed()
315+
false
316316
}
317317
}
318318

@@ -330,7 +330,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
330330
val isDefaultFolder = !config.defaultFolder.isEmpty()
331331
&& File(config.defaultFolder).compareTo(File(mPath)) == 0
332332

333-
binding.mediaMenu.getToolbar().menu.apply {
333+
binding.mediaMenu.requireToolbar().menu.apply {
334334
findItem(R.id.group).isVisible = !config.scrollHorizontally
335335

336336
findItem(R.id.empty_recycle_bin).isVisible = mPath == RECYCLE_BIN
@@ -358,7 +358,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
358358
}
359359

360360
private fun setupOptionsMenu() {
361-
binding.mediaMenu.getToolbar().inflateMenu(R.menu.menu_media)
361+
binding.mediaMenu.requireToolbar().inflateMenu(R.menu.menu_media)
362362
binding.mediaMenu.toggleHideOnScroll(!config.scrollHorizontally)
363363
binding.mediaMenu.setupMenu()
364364

@@ -368,7 +368,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
368368
binding.mediaRefreshLayout.isEnabled = text.isEmpty() && config.enablePullToRefresh
369369
}
370370

371-
binding.mediaMenu.getToolbar().setOnMenuItemClickListener { menuItem ->
371+
binding.mediaMenu.requireToolbar().setOnMenuItemClickListener { menuItem ->
372372
when (menuItem.itemId) {
373373
R.id.sort -> showSortingDialog()
374374
R.id.filter -> showFilterMediaDialog()
@@ -411,7 +411,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
411411
}
412412

413413
private fun updateMenuColors() {
414-
updateStatusbarColor(getProperBackgroundColor())
415414
binding.mediaMenu.updateColors()
416415
}
417416

@@ -477,7 +476,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
477476
if (!mShowAll) {
478477
binding.mediaMenu.toggleForceArrowBackIcon(true)
479478
binding.mediaMenu.onNavigateBackClickListener = {
480-
onBackPressed()
479+
performDefaultBack()
481480
}
482481
}
483482

0 commit comments

Comments
 (0)