From 4870a7be776747ae629c30924b4b86dd3f88b0fe Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 29 Jul 2025 16:47:04 +0530 Subject: [PATCH 01/11] chore: bump target SDK version to 35 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f52fa0c1..dfa03b08 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,8 +18,8 @@ zip4j = "2.11.5" #Gradle gradlePlugins-agp = "8.11.1" #build -app-build-compileSDKVersion = "34" -app-build-targetSDK = "34" +app-build-compileSDKVersion = "35" +app-build-targetSDK = "35" app-build-minimumSDK = "26" app-build-javaVersion = "VERSION_17" app-build-kotlinJVMTarget = "17" From d4cef5f7ed2311007a6618c7afc6ed1072a7217b Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 18 Oct 2025 18:06:03 +0530 Subject: [PATCH 02/11] fix: address nullability issues --- .../fossify/filemanager/adapters/DecompressItemsAdapter.kt | 4 ++-- .../kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/adapters/DecompressItemsAdapter.kt b/app/src/main/kotlin/org/fossify/filemanager/adapters/DecompressItemsAdapter.kt index b604a693..4478a40e 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/adapters/DecompressItemsAdapter.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/adapters/DecompressItemsAdapter.kt @@ -117,8 +117,8 @@ class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableLis private fun getImagePathToLoad(path: String): Any { return if (path.endsWith(".apk", true)) { val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES) - if (packageInfo != null) { - val appInfo = packageInfo.applicationInfo + val appInfo = packageInfo?.applicationInfo + if (appInfo != null) { appInfo.sourceDir = path appInfo.publicSourceDir = path appInfo.loadIcon(activity.packageManager) diff --git a/app/src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt b/app/src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt index 67712316..bea52946 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt @@ -1116,8 +1116,8 @@ class ItemsAdapter( var itemToLoad = if (path.endsWith(".apk", true)) { val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES) - if (packageInfo != null) { - val appInfo = packageInfo.applicationInfo + val appInfo = packageInfo?.applicationInfo + if (appInfo != null) { appInfo.sourceDir = path appInfo.publicSourceDir = path appInfo.loadIcon(activity.packageManager) From 30925fe0134d47196c0a8c11b2cf1f2160e0a734 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 18 Oct 2025 19:11:57 +0530 Subject: [PATCH 03/11] chore: bump target SDK version to 36 --- gradle/libs.versions.toml | 4 ++-- settings.gradle.kts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dfa03b08..1e416497 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,8 +18,8 @@ zip4j = "2.11.5" #Gradle gradlePlugins-agp = "8.11.1" #build -app-build-compileSDKVersion = "35" -app-build-targetSDK = "35" +app-build-compileSDKVersion = "36" +app-build-targetSDK = "36" app-build-minimumSDK = "26" app-build-javaVersion = "VERSION_17" app-build-kotlinJVMTarget = "17" diff --git a/settings.gradle.kts b/settings.gradle.kts index 45478cbe..94d40dbf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,6 +11,7 @@ dependencyResolutionManagement { google() mavenCentral() maven { setUrl("https://jitpack.io") } + mavenLocal() } } include(":app") From c37cb37d89156541a3f1f94f2158b4b434bba0c1 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 15:29:26 +0530 Subject: [PATCH 04/11] refactor: update edge-to-edge implementation --- .../org/fossify/filemanager/activities/DecompressActivity.kt | 3 +-- .../org/fossify/filemanager/activities/FavoritesActivity.kt | 3 +-- .../org/fossify/filemanager/activities/MainActivity.kt | 5 +++-- .../org/fossify/filemanager/activities/MimeTypesActivity.kt | 3 +-- .../org/fossify/filemanager/activities/ReadTextActivity.kt | 3 +-- .../org/fossify/filemanager/activities/SettingsActivity.kt | 3 +-- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt index 90dc83e9..00c18e0f 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt @@ -45,12 +45,11 @@ class DecompressActivity : SimpleActivity() { private var filename = "" override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) setupOptionsMenu() binding.apply { - updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge(topAppBar = decompressToolbar, scrollingView = decompressList) setupMaterialScrollListener(decompressList, decompressToolbar) } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt index 7c05017b..3731d9c7 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt @@ -18,13 +18,12 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener { private val binding by viewBinding(ActivityFavoritesBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) setupOptionsMenu() updateFavorites() binding.apply { - updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge(topAppBar = manageFavoritesToolbar, scrollingView = manageFavoritesList) setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar) } } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt index ac119302..970142bf 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt @@ -75,6 +75,8 @@ import org.fossify.filemanager.interfaces.ItemOperationsListener import java.io.File class MainActivity : SimpleActivity() { + override var isSearchBarEnabled = true + companion object { private const val BACK_PRESS_TIMEOUT = 5000 private const val PICKED_PATH = "picked_path" @@ -91,7 +93,6 @@ class MainActivity : SimpleActivity() { private var mStoredShowTabs = 0 override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) appLaunched(BuildConfig.APPLICATION_ID) @@ -109,7 +110,7 @@ class MainActivity : SimpleActivity() { storeStateVariables() setupTabs() - updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true) + updateEdgeToEdge(topAppBar = binding.mainSearchMenu.getToolbar()) if (savedInstanceState == null) { config.temporarilyShowHidden = false diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt index 9febd299..e5611983 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt @@ -44,13 +44,12 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { private var currentVolume = PRIMARY_VOLUME_NAME override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) setupOptionsMenu() refreshMenuItems() binding.apply { - updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge(topAppBar = mimetypesToolbar, scrollingView = mimetypesList) setupMaterialScrollListener(mimetypesList, mimetypesToolbar) } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt index 6e7a7294..14171f01 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt @@ -51,12 +51,11 @@ class ReadTextActivity : SimpleActivity() { private lateinit var searchClearBtn: ImageView override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) setupOptionsMenu() binding.apply { - updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge(topAppBar = readTextToolbar, scrollingView = readTextView) setupMaterialScrollListener(readTextHolder, readTextToolbar) } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt index 234ccb2d..3e550d7d 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt @@ -21,11 +21,10 @@ class SettingsActivity : SimpleActivity() { private val binding by viewBinding(ActivitySettingsBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) binding.apply { - updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge(topAppBar = settingsToolbar, scrollingView = settingsNestedScrollview) setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar) } } From f7d9051a9609b242204cf84534f9a2be339727d1 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 16:04:56 +0530 Subject: [PATCH 05/11] refactor: update edge-to-edge implementation --- .../fossify/filemanager/activities/DecompressActivity.kt | 2 +- .../fossify/filemanager/activities/FavoritesActivity.kt | 2 +- .../org/fossify/filemanager/activities/MainActivity.kt | 7 ++++--- .../fossify/filemanager/activities/MimeTypesActivity.kt | 2 +- .../org/fossify/filemanager/activities/ReadTextActivity.kt | 2 +- .../org/fossify/filemanager/activities/SaveAsActivity.kt | 2 +- .../org/fossify/filemanager/activities/SettingsActivity.kt | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt index 00c18e0f..71ce2983 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt @@ -69,7 +69,7 @@ class DecompressActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.decompressToolbar, NavigationIcon.Arrow) } override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt index 3731d9c7..4a0cf05e 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt @@ -30,7 +30,7 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener { override fun onResume() { super.onResume() - setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.manageFavoritesToolbar, NavigationIcon.Arrow) } private fun setupOptionsMenu() { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt index 970142bf..6ae0b8a4 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt @@ -110,7 +110,10 @@ class MainActivity : SimpleActivity() { storeStateVariables() setupTabs() - updateEdgeToEdge(topAppBar = binding.mainSearchMenu.getToolbar()) + updateEdgeToEdge( + topAppBar = binding.mainMenu.getToolbar(), + bottomBar = binding.mainTabsHolder + ) if (savedInstanceState == null) { config.temporarilyShowHidden = false @@ -275,7 +278,6 @@ class MainActivity : SimpleActivity() { } private fun updateMenuColors() { - updateStatusbarColor(getProperBackgroundColor()) binding.mainMenu.updateColors() } @@ -418,7 +420,6 @@ class MainActivity : SimpleActivity() { } val bottomBarColor = getBottomNavigationBackgroundColor() - updateNavigationBarColor(bottomBarColor) mainTabsHolder.setBackgroundColor(bottomBarColor) } } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt index e5611983..b2475193 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt @@ -84,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { override fun onResume() { super.onResume() - setupToolbar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem) + setupTopAppBar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem) } private fun refreshMenuItems() { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt index 14171f01..99effb5b 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt @@ -95,7 +95,7 @@ class ReadTextActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(binding.readTextToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.readTextToolbar, NavigationIcon.Arrow) } override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt index 0681f30c..69fa085b 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt @@ -79,7 +79,7 @@ class SaveAsActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(binding.activitySaveAsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.activitySaveAsToolbar, NavigationIcon.Arrow) } private fun sanitizeFilename(filename: String): String { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt index 3e550d7d..b2db5454 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt @@ -31,7 +31,7 @@ class SettingsActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.settingsToolbar, NavigationIcon.Arrow) setupCustomizeColors() setupUseEnglish() From 3129a06332d829a625bcfee73acae29c6780948b Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 16:10:41 +0530 Subject: [PATCH 06/11] refactor: update edge-to-edge implementation --- .../activities/DecompressActivity.kt | 6 ++--- .../activities/FavoritesActivity.kt | 6 ++--- .../filemanager/activities/MainActivity.kt | 11 +++----- .../activities/MimeTypesActivity.kt | 6 ++--- .../activities/ReadTextActivity.kt | 6 ++--- .../filemanager/activities/SaveAsActivity.kt | 2 +- .../activities/SettingsActivity.kt | 6 ++--- .../filemanager/extensions/Activity.kt | 26 ------------------- .../main/res/layout/activity_decompress.xml | 25 +++++++++++------- .../main/res/layout/activity_favorites.xml | 25 +++++++++++------- app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/activity_mimetypes.xml | 23 ++++++++++------ .../main/res/layout/activity_read_text.xml | 25 +++++++++++------- app/src/main/res/layout/activity_save_as.xml | 21 ++++++++++----- app/src/main/res/layout/activity_settings.xml | 23 ++++++++++------ gradle/libs.versions.toml | 2 +- 16 files changed, 114 insertions(+), 101 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt index 71ce2983..5afc81d3 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt @@ -49,8 +49,8 @@ class DecompressActivity : SimpleActivity() { setContentView(binding.root) setupOptionsMenu() binding.apply { - updateEdgeToEdge(topAppBar = decompressToolbar, scrollingView = decompressList) - setupMaterialScrollListener(decompressList, decompressToolbar) + setupEdgeToEdge(padBottomSystem = listOf(decompressList)) + setupMaterialScrollListener(binding.decompressList, binding.decompressAppbar) } uri = intent.data @@ -69,7 +69,7 @@ class DecompressActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupTopAppBar(binding.decompressToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.decompressAppbar, NavigationIcon.Arrow) } override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt index 4a0cf05e..a610b4ac 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/FavoritesActivity.kt @@ -23,14 +23,14 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener { setupOptionsMenu() updateFavorites() binding.apply { - updateEdgeToEdge(topAppBar = manageFavoritesToolbar, scrollingView = manageFavoritesList) - setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar) + setupEdgeToEdge(padBottomSystem = listOf(manageFavoritesList)) + setupMaterialScrollListener(binding.manageFavoritesList, binding.manageFavoritesAppbar) } } override fun onResume() { super.onResume() - setupTopAppBar(binding.manageFavoritesToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.manageFavoritesAppbar, NavigationIcon.Arrow) } private fun setupOptionsMenu() { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt index 6ae0b8a4..bb8c7ea7 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt @@ -110,10 +110,7 @@ class MainActivity : SimpleActivity() { storeStateVariables() setupTabs() - updateEdgeToEdge( - topAppBar = binding.mainMenu.getToolbar(), - bottomBar = binding.mainTabsHolder - ) + setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder)) if (savedInstanceState == null) { config.temporarilyShowHidden = false @@ -193,7 +190,7 @@ class MainActivity : SimpleActivity() { val currentViewType = config.getFolderViewType(currentFragment.currentPath) val favorites = config.favorites - binding.mainMenu.getToolbar().menu.apply { + binding.mainMenu.requireToolbar().menu.apply { findItem(R.id.sort).isVisible = currentFragment is ItemsFragment findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment @@ -218,7 +215,7 @@ class MainActivity : SimpleActivity() { private fun setupOptionsMenu() { binding.mainMenu.apply { - getToolbar().inflateMenu(R.menu.menu) + requireToolbar().inflateMenu(R.menu.menu) toggleHideOnScroll(false) setupMenu() @@ -232,7 +229,7 @@ class MainActivity : SimpleActivity() { getCurrentFragment()?.searchQueryChanged(text) } - getToolbar().setOnMenuItemClickListener { menuItem -> + requireToolbar().setOnMenuItemClickListener { menuItem -> if (getCurrentFragment() == null) { return@setOnMenuItemClickListener true } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt index b2475193..1ed92132 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MimeTypesActivity.kt @@ -49,8 +49,8 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { setupOptionsMenu() refreshMenuItems() binding.apply { - updateEdgeToEdge(topAppBar = mimetypesToolbar, scrollingView = mimetypesList) - setupMaterialScrollListener(mimetypesList, mimetypesToolbar) + setupEdgeToEdge(padBottomSystem = listOf(mimetypesList)) + setupMaterialScrollListener(binding.mimetypesList, binding.mimetypesAppbar) } currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return @@ -84,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { override fun onResume() { super.onResume() - setupTopAppBar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem) + setupTopAppBar(binding.mimetypesAppbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem) } private fun refreshMenuItems() { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt index 99effb5b..7a09d04a 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt @@ -55,8 +55,8 @@ class ReadTextActivity : SimpleActivity() { setContentView(binding.root) setupOptionsMenu() binding.apply { - updateEdgeToEdge(topAppBar = readTextToolbar, scrollingView = readTextView) - setupMaterialScrollListener(readTextHolder, readTextToolbar) + setupEdgeToEdge(padBottomImeAndSystem = listOf(readTextView)) + setupMaterialScrollListener(binding.readTextHolder, binding.readTextAppbar) } searchQueryET = findViewById(R.id.search_query) @@ -95,7 +95,7 @@ class ReadTextActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupTopAppBar(binding.readTextToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.readTextAppbar, NavigationIcon.Arrow) } override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt index 69fa085b..9bd7b047 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/SaveAsActivity.kt @@ -79,7 +79,7 @@ class SaveAsActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupTopAppBar(binding.activitySaveAsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.activitySaveAsAppbar, NavigationIcon.Arrow) } private fun sanitizeFilename(filename: String): String { diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt index b2db5454..7f00eb6f 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt @@ -24,14 +24,14 @@ class SettingsActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(binding.root) binding.apply { - updateEdgeToEdge(topAppBar = settingsToolbar, scrollingView = settingsNestedScrollview) - setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar) + setupEdgeToEdge(padBottomSystem = listOf(settingsNestedScrollview)) + setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar) } } override fun onResume() { super.onResume() - setupTopAppBar(binding.settingsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow) setupCustomizeColors() setupUseEnglish() diff --git a/app/src/main/kotlin/org/fossify/filemanager/extensions/Activity.kt b/app/src/main/kotlin/org/fossify/filemanager/extensions/Activity.kt index 6d721421..82603c18 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/extensions/Activity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/extensions/Activity.kt @@ -2,8 +2,6 @@ package org.fossify.filemanager.extensions import android.app.Activity import android.content.Intent -import android.view.View -import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider import org.fossify.commons.activities.BaseSimpleActivity import org.fossify.commons.extensions.getFilenameFromPath @@ -85,27 +83,3 @@ fun BaseSimpleActivity.toggleItemVisibility(oldPath: String, hide: Boolean, call } } } - -fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) { - if (toggleActionBarVisibility) { - supportActionBar?.show() - } - - window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN -} - -fun AppCompatActivity.hideSystemUI(toggleActionBarVisibility: Boolean) { - if (toggleActionBarVisibility) { - supportActionBar?.hide() - } - - window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or - View.SYSTEM_UI_FLAG_LOW_PROFILE or - View.SYSTEM_UI_FLAG_FULLSCREEN or - View.SYSTEM_UI_FLAG_IMMERSIVE -} diff --git a/app/src/main/res/layout/activity_decompress.xml b/app/src/main/res/layout/activity_decompress.xml index d2ee6c96..f8e1318d 100644 --- a/app/src/main/res/layout/activity_decompress.xml +++ b/app/src/main/res/layout/activity_decompress.xml @@ -5,22 +5,29 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="wrap_content"> + + + + + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content"> + + + + + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content"> + + + + + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content"> + + + + + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content"> + + + + + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index e3311e70..a2c55413 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -6,21 +6,28 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="wrap_content"> + + + + + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> Date: Sun, 26 Oct 2025 01:52:23 +0530 Subject: [PATCH 07/11] refactor: migrate away from deprecated onBackPressed() --- .../filemanager/activities/DecompressActivity.kt | 7 ++++--- .../filemanager/activities/MainActivity.kt | 8 ++++++-- .../filemanager/activities/ReadTextActivity.kt | 16 ++++++++++------ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt index 5afc81d3..24269826 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/DecompressActivity.kt @@ -87,12 +87,13 @@ class DecompressActivity : SimpleActivity() { } } - override fun onBackPressed() { - if (currentPath.isEmpty()) { - super.onBackPressed() + override fun onBackPressedCompat(): Boolean { + return if (currentPath.isEmpty()) { + false } else { val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else "" updateCurrentPath(newPath) + true } } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt index bb8c7ea7..4a6e4be7 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt @@ -161,12 +161,13 @@ class MainActivity : SimpleActivity() { config.lastUsedViewPagerPage = binding.mainViewPager.currentItem } - override fun onBackPressed() { + override fun onBackPressedCompat(): Boolean { val currentFragment = getCurrentFragment() if (binding.mainMenu.isSearchOpen) { binding.mainMenu.closeSearch() + return true } else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) { - super.onBackPressed() + return false } else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) { if (!wasBackJustPressed && config.pressBackTwice) { wasBackJustPressed = true @@ -174,13 +175,16 @@ class MainActivity : SimpleActivity() { Handler().postDelayed({ wasBackJustPressed = false }, BACK_PRESS_TIMEOUT.toLong()) + return true } else { appLockManager.lock() finish() + return true } } else { currentFragment.getBreadcrumbs().removeBreadcrumb() openPath(currentFragment.getBreadcrumbs().getLastItem().path) + return true } } diff --git a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt index 7a09d04a..9696e065 100644 --- a/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt +++ b/app/src/main/kotlin/org/fossify/filemanager/activities/ReadTextActivity.kt @@ -119,22 +119,26 @@ class ReadTextActivity : SimpleActivity() { } } - override fun onBackPressed() { + override fun onBackPressedCompat(): Boolean { val hasUnsavedChanges = originalText != binding.readTextView.text.toString() - when { - isSearchActive -> closeSearch() + return when { + isSearchActive -> { + closeSearch() + true + } hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> { lastSavePromptTS = System.currentTimeMillis() ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) { if (it) { saveText(true) } else { - super.onBackPressed() + performDefaultBack() } } + true } - else -> super.onBackPressed() + else -> false } } @@ -232,7 +236,7 @@ class ReadTextActivity : SimpleActivity() { } if (shouldExitAfterSaving) { - super.onBackPressed() + performDefaultBack() } } else { toast(R.string.unknown_error_occurred) From 13ae85f02c5f4ae7fb64886e023de26fc6f25097 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 20:06:55 +0530 Subject: [PATCH 08/11] chore(deps): update org.fossify.commons to 5.5.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b03dfbfd..f39c9947 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ detektCompose = "0.4.27" androidx-swiperefreshlayout = "1.1.0" androidx-documentfile = "1.1.0" #Fossify -commons = "6.0.0" +commons = "5.5.0" #Other autofittextview = "0.2.1" gestureviews = "2.8.3" From 0133996e45c0174871da83332c4eacdae73134a4 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 20:42:03 +0530 Subject: [PATCH 09/11] docs: update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a0c6d9f..7c5b5267 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Compatibility updates for Android 15 & 16 + ## [1.3.1] - 2025-10-02 ### Changed - Updated translations From ad0cdc0c57b9f3ba8fd921fb9910210e4f59df50 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 21:13:38 +0530 Subject: [PATCH 10/11] build: bump detekt return count limit --- detekt.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/detekt.yml b/detekt.yml index 6472c5a3..73ddc0c1 100644 --- a/detekt.yml +++ b/detekt.yml @@ -40,6 +40,11 @@ style: maxLineLength: 120 excludePackageStatements: true excludeImportStatements: true + ReturnCount: + active: true + max: 4 + excludeGuardClauses: true + excludes: ["**/test/**", "**/androidTest/**"] naming: FunctionNaming: From 366373902f5e5fe28f5aaca2936484a7ea5931ed Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 21:46:58 +0530 Subject: [PATCH 11/11] chore: update lint baselines --- app/detekt-baseline.xml | 8 +-- app/lint-baseline.xml | 115 ++++++++++++++++++---------------------- 2 files changed, 53 insertions(+), 70 deletions(-) diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 8624d560..aa8bafb8 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -52,12 +52,10 @@ MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') && !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply() MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String) - MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable }) MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { } - MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:ItemsAdapter.kt$ItemsAdapter$} MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter MaxLineLength:ItemsFragment.kt$ItemsFragment$class @@ -81,17 +79,14 @@ MaxLineLength:MainActivity.kt$MainActivity$if MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int) MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION - MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true) MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype) MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if - MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor()) MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private - MaxLineLength:ReadTextActivity.kt$ReadTextActivity$updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() && activity?.config?.enablePullToRefresh != false MaxLineLength:RecentsFragment.kt$RecentsFragment$class @@ -101,7 +96,6 @@ MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename) MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) - MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:StorageFragment.kt$StorageFragment$class MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar.progress = ((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt() @@ -118,7 +112,7 @@ NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList<ListItem>) -> Unit) NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity) NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem> - ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean + ReturnCount:MainActivity.kt$MainActivity$override fun onBackPressedCompat(): Boolean SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception SwallowedException:StorageFragment.kt$StorageFragment$e: Exception diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 7e056a3f..e242d2fd 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -19,21 +19,10 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - - - @@ -62,20 +51,20 @@ errorLine1="gradlePlugins-agp = "8.11.1"" errorLine2=" ~~~~~~~~"> + id="NewerVersionAvailable" + message="A newer version of org.jetbrains.kotlin.android than 2.2.20 is available: 2.2.21" + errorLine1="kotlin = "2.2.20"" + errorLine2=" ~~~~~~~~"> + file="$HOME/Projects/Fossify/FossifyOrg/File-Manager/gradle/libs.versions.toml" + line="3" + column="10"/>