chore: bump target SDK version to 35 (#241)

* chore: bump target SDK version to 35

* fix: address nullability issues

* chore: bump target SDK version to 36

* refactor: update edge-to-edge implementation

* refactor: update edge-to-edge implementation

* refactor: update edge-to-edge implementation

* refactor: migrate away from deprecated onBackPressed()

* chore(deps): update org.fossify.commons to 5.5.0

* docs: update changelog

* build: bump detekt return count limit

* chore: update lint baselines
This commit is contained in:
Naveen Singh
2025-10-26 22:58:02 +05:30
committed by GitHub
parent e6c465d9d0
commit a4c8da6c31
23 changed files with 205 additions and 193 deletions

View File

@@ -45,13 +45,12 @@ 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)
setupMaterialScrollListener(decompressList, decompressToolbar)
setupEdgeToEdge(padBottomSystem = listOf(decompressList))
setupMaterialScrollListener(binding.decompressList, binding.decompressAppbar)
}
uri = intent.data
@@ -70,7 +69,7 @@ class DecompressActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.decompressAppbar, NavigationIcon.Arrow)
}
override fun onSaveInstanceState(outState: Bundle) {
@@ -88,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
}
}

View File

@@ -18,20 +18,19 @@ 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)
setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar)
setupEdgeToEdge(padBottomSystem = listOf(manageFavoritesList))
setupMaterialScrollListener(binding.manageFavoritesList, binding.manageFavoritesAppbar)
}
}
override fun onResume() {
super.onResume()
setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.manageFavoritesAppbar, NavigationIcon.Arrow)
}
private fun setupOptionsMenu() {

View File

@@ -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)
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder))
if (savedInstanceState == null) {
config.temporarilyShowHidden = false
@@ -160,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
@@ -173,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
}
}
@@ -189,7 +194,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
@@ -214,7 +219,7 @@ class MainActivity : SimpleActivity() {
private fun setupOptionsMenu() {
binding.mainMenu.apply {
getToolbar().inflateMenu(R.menu.menu)
requireToolbar().inflateMenu(R.menu.menu)
toggleHideOnScroll(false)
setupMenu()
@@ -228,7 +233,7 @@ class MainActivity : SimpleActivity() {
getCurrentFragment()?.searchQueryChanged(text)
}
getToolbar().setOnMenuItemClickListener { menuItem ->
requireToolbar().setOnMenuItemClickListener { menuItem ->
if (getCurrentFragment() == null) {
return@setOnMenuItemClickListener true
}
@@ -274,7 +279,6 @@ class MainActivity : SimpleActivity() {
}
private fun updateMenuColors() {
updateStatusbarColor(getProperBackgroundColor())
binding.mainMenu.updateColors()
}
@@ -417,7 +421,6 @@ class MainActivity : SimpleActivity() {
}
val bottomBarColor = getBottomNavigationBackgroundColor()
updateNavigationBarColor(bottomBarColor)
mainTabsHolder.setBackgroundColor(bottomBarColor)
}
}

View File

@@ -44,14 +44,13 @@ 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)
setupMaterialScrollListener(mimetypesList, mimetypesToolbar)
setupEdgeToEdge(padBottomSystem = listOf(mimetypesList))
setupMaterialScrollListener(binding.mimetypesList, binding.mimetypesAppbar)
}
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
@@ -85,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
override fun onResume() {
super.onResume()
setupToolbar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
setupTopAppBar(binding.mimetypesAppbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
}
private fun refreshMenuItems() {

View File

@@ -51,13 +51,12 @@ 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)
setupMaterialScrollListener(readTextHolder, readTextToolbar)
setupEdgeToEdge(padBottomImeAndSystem = listOf(readTextView))
setupMaterialScrollListener(binding.readTextHolder, binding.readTextAppbar)
}
searchQueryET = findViewById(R.id.search_query)
@@ -96,7 +95,7 @@ class ReadTextActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
setupToolbar(binding.readTextToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.readTextAppbar, NavigationIcon.Arrow)
}
override fun onSaveInstanceState(outState: Bundle) {
@@ -120,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
}
}
@@ -233,7 +236,7 @@ class ReadTextActivity : SimpleActivity() {
}
if (shouldExitAfterSaving) {
super.onBackPressed()
performDefaultBack()
}
} else {
toast(R.string.unknown_error_occurred)

View File

@@ -79,7 +79,7 @@ class SaveAsActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
setupToolbar(binding.activitySaveAsToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.activitySaveAsAppbar, NavigationIcon.Arrow)
}
private fun sanitizeFilename(filename: String): String {

View File

@@ -21,18 +21,17 @@ 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)
setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar)
setupEdgeToEdge(padBottomSystem = listOf(settingsNestedScrollview))
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
}
}
override fun onResume() {
super.onResume()
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
setupCustomizeColors()
setupUseEnglish()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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
}

View File

@@ -5,22 +5,29 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/decompress_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/decompress_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_decompress"
app:title="@string/decompress"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/decompress_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_decompress"
app:title="@string/decompress"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<RelativeLayout
android:id="@+id/decompress_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:scrollbars="none">
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<org.fossify.commons.views.MyRecyclerView
android:id="@+id/decompress_list"

View File

@@ -6,22 +6,29 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/manage_favorites_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/manage_favorites_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_favorites"
app:title="@string/manage_favorites"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/manage_favorites_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_favorites"
app:title="@string/manage_favorites"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<RelativeLayout
android:id="@+id/manage_favorites_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:scrollbars="none">
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<org.fossify.commons.views.MyRecyclerView
android:id="@+id/manage_favorites_list"

View File

@@ -14,7 +14,7 @@
android:id="@+id/main_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize">
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<org.fossify.commons.views.MyViewPager
android:id="@+id/main_view_pager"

View File

@@ -5,21 +5,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/mimetypes_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/mimetypes_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_mimetypes"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/mimetypes_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_mimetypes"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<RelativeLayout
android:id="@+id/mimetypes_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:scrollbars="none">
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<org.fossify.commons.views.MyTextView
android:id="@+id/mimetypes_placeholder"

View File

@@ -5,23 +5,30 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/read_text_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/read_text_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_editor"
app:title="@string/file_editor"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/read_text_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:menu="@menu/menu_editor"
app:title="@string/file_editor"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<LinearLayout
android:id="@+id/read_text_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:orientation="vertical"
android:scrollbars="none">
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include
android:id="@+id/search_wrapper"

View File

@@ -5,18 +5,25 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/activity_save_as_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/activity_save_as_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/save_as"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/activity_save_as_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/save_as"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<RelativeLayout
android:id="@+id/activity_save_as_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -6,21 +6,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/settings_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/settings_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/settings"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/settings_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/settings"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
</org.fossify.commons.views.MyAppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/settings_nested_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:fillViewport="true"
android:scrollbars="none">
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/settings_holder"