From 9a5f556f5706d48c0a64ee5954f8e581a23799e0 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 29 Jul 2025 16:47:03 +0530 Subject: [PATCH 01/10] 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 47ba8b8f1..596a810bb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,8 +21,8 @@ commons = "5.4.0" #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 2209863dbde07988ece408fe3bea61711aca8d02 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sat, 18 Oct 2025 19:11:56 +0530 Subject: [PATCH 02/10] 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 596a810bb..af6274459 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,8 +21,8 @@ commons = "5.4.0" #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 45478cbec..94d40dbf9 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 f87319270c5b88d9029dbee47fdb705dbd38b192 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 15:29:25 +0530 Subject: [PATCH 03/10] refactor: update edge-to-edge implementation --- .../fossify/contacts/activities/GroupContactsActivity.kt | 6 ++++-- .../contacts/activities/InsertOrEditContactActivity.kt | 8 +++++++- .../org/fossify/contacts/activities/MainActivity.kt | 9 ++++++++- .../org/fossify/contacts/activities/SettingsActivity.kt | 6 ++++-- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt index 712cc58b0..9a703795d 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt @@ -34,13 +34,15 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh protected var contact: Contact? = null override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) updateTextColors(binding.groupContactsCoordinator) setupOptionsMenu() - updateMaterialActivityViews(binding.groupContactsCoordinator, binding.groupContactsList, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge( + topAppBar = binding.groupContactsToolbar, + scrollingView = binding.groupContactsList, + ) setupMaterialScrollListener(binding.groupContactsList, binding.groupContactsToolbar) group = intent.extras?.getSerializable(GROUP) as Group diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt index eec67cc27..8a4997e07 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt @@ -33,6 +33,9 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { private var isSelectContactIntent = false private var specialMimeType: String? = null + + override var isSearchBarEnabled = true + private val binding by viewBinding(ActivityInsertEditContactBinding::inflate) private val contactsFavoritesList = arrayListOf( @@ -45,7 +48,10 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { setContentView(binding.root) setupOptionsMenu() isSelectContactIntent = intent.action == Intent.ACTION_PICK - updateMaterialActivityViews(binding.insertEditCoordinator, binding.insertEditContactHolder, useTransparentNavigation = false, useTopSearchMenu = true) + updateEdgeToEdge( + topAppBar = binding.insertEditMenu.getToolbar(), + scrollingView = binding.viewPager + ) if (isSelectContactIntent) { specialMimeType = when (intent.data) { diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt index e776f3d84..e301cbab0 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt @@ -46,6 +46,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private var storedStartNameWithSurname = false private var storedFontSize = 0 private var storedShowTabs = 0 + + override var isSearchBarEnabled = true + private val binding by viewBinding(ActivityMainBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { @@ -54,7 +57,11 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { appLaunched(BuildConfig.APPLICATION_ID) setupOptionsMenu() refreshMenuItems() - updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true) + updateEdgeToEdge( + topAppBar = binding.mainMenu.getToolbar(), + scrollingView = binding.viewPager, + bottomBar = binding.mainTabsHolder + ) storeStateVariables() setupTabs() checkContactPermissions() diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt index b196eaac6..e7fc7426f 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt @@ -33,10 +33,12 @@ class SettingsActivity : SimpleActivity() { private var ignoredExportContactSources = HashSet() override fun onCreate(savedInstanceState: Bundle?) { - isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(binding.root) - updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false) + updateEdgeToEdge( + topAppBar = binding.settingsToolbar, + scrollingView = binding.settingsNestedScrollview, + ) setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar) } From a9cdabab233e3efffb2626f75fb90678fe5e94c8 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 16:04:55 +0530 Subject: [PATCH 04/10] refactor: update edge-to-edge implementation --- .../org/fossify/contacts/activities/GroupContactsActivity.kt | 2 +- .../kotlin/org/fossify/contacts/activities/SettingsActivity.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt index 9a703795d..87156a203 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt @@ -67,7 +67,7 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh override fun onResume() { super.onResume() refreshContacts() - setupToolbar(binding.groupContactsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.groupContactsToolbar, NavigationIcon.Arrow) (binding.groupContactsFab.layoutParams as CoordinatorLayout.LayoutParams).bottomMargin = navigationBarHeight + resources.getDimension(org.fossify.commons.R.dimen.activity_margin).toInt() } diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt index e7fc7426f..e131edfee 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt @@ -44,7 +44,7 @@ class SettingsActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.settingsToolbar, NavigationIcon.Arrow) setupCustomizeColors() setupManageShownContactFields() From 957dde798e4e99d0bd01787ac4fc2f6b4669eb48 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 21 Oct 2025 16:10:40 +0530 Subject: [PATCH 05/10] refactor: update edge-to-edge implementation --- .../activities/EditContactActivity.kt | 18 +++------------ .../activities/GroupContactsActivity.kt | 11 ++++----- .../activities/InsertOrEditContactActivity.kt | 11 ++++----- .../contacts/activities/MainActivity.kt | 14 ++++------- .../contacts/activities/SettingsActivity.kt | 9 +++----- .../activities/ViewContactActivity.kt | 5 ++-- .../main/res/layout/activity_edit_contact.xml | 4 ++-- .../res/layout/activity_group_contacts.xml | 23 ++++++++++++------- app/src/main/res/layout/activity_main.xml | 1 + app/src/main/res/layout/activity_settings.xml | 23 ++++++++++++------- .../main/res/layout/activity_view_contact.xml | 4 ++-- gradle/libs.versions.toml | 2 +- 12 files changed, 57 insertions(+), 68 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt index ba4deb294..70db006f8 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt @@ -83,7 +83,6 @@ class EditContactActivity : ContactActivity() { } override fun onCreate(savedInstanceState: Bundle?) { - showTransparentTop = true super.onCreate(savedInstanceState) setContentView(binding.root) @@ -91,8 +90,9 @@ class EditContactActivity : ContactActivity() { return } - binding.contactWrapper.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - setupInsets() + setupEdgeToEdge( + padBottomImeAndSystem = listOf(binding.contactScrollview) + ) setupMenu() val action = intent.action @@ -323,19 +323,7 @@ class EditContactActivity : ContactActivity() { } } - private fun setupInsets() { - binding.contactWrapper.setOnApplyWindowInsetsListener { _, insets -> - val windowInsets = WindowInsetsCompat.toWindowInsetsCompat(insets) - val imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime()) - binding.contactScrollview.run { - setPadding(paddingLeft, paddingTop, paddingRight, imeInsets.bottom) - } - insets - } - } - private fun setupMenu() { - (binding.contactAppbar.layoutParams as RelativeLayout.LayoutParams).topMargin = statusBarHeight binding.contactToolbar.menu.apply { findItem(R.id.save).setOnMenuItemClickListener { saveContact() diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt index 87156a203..14e1117f2 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/GroupContactsActivity.kt @@ -39,11 +39,10 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh updateTextColors(binding.groupContactsCoordinator) setupOptionsMenu() - updateEdgeToEdge( - topAppBar = binding.groupContactsToolbar, - scrollingView = binding.groupContactsList, + setupEdgeToEdge( + padBottomImeAndSystem = listOf(binding.groupContactsList) ) - setupMaterialScrollListener(binding.groupContactsList, binding.groupContactsToolbar) + setupMaterialScrollListener(binding.groupContactsList, binding.groupContactsAppbar) group = intent.extras?.getSerializable(GROUP) as Group binding.groupContactsToolbar.title = group.title @@ -67,9 +66,7 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh override fun onResume() { super.onResume() refreshContacts() - setupTopAppBar(binding.groupContactsToolbar, NavigationIcon.Arrow) - (binding.groupContactsFab.layoutParams as CoordinatorLayout.LayoutParams).bottomMargin = - navigationBarHeight + resources.getDimension(org.fossify.commons.R.dimen.activity_margin).toInt() + setupTopAppBar(binding.groupContactsAppbar, NavigationIcon.Arrow) } private fun setupOptionsMenu() { diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt index 8a4997e07..7fd337ac3 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt @@ -48,9 +48,8 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { setContentView(binding.root) setupOptionsMenu() isSelectContactIntent = intent.action == Intent.ACTION_PICK - updateEdgeToEdge( - topAppBar = binding.insertEditMenu.getToolbar(), - scrollingView = binding.viewPager + setupEdgeToEdge( + padBottomImeAndSystem = listOf(binding.insertEditTabsHolder), ) if (isSelectContactIntent) { @@ -91,7 +90,7 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { } private fun setupOptionsMenu() { - binding.insertEditMenu.getToolbar().inflateMenu(R.menu.menu_insert_or_edit) + binding.insertEditMenu.requireToolbar().inflateMenu(R.menu.menu_insert_or_edit) binding.insertEditMenu.toggleHideOnScroll(false) binding.insertEditMenu.setupMenu() @@ -105,7 +104,7 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { getCurrentFragment()?.onSearchQueryChanged(text) } - binding.insertEditMenu.getToolbar().setOnMenuItemClickListener { menuItem -> + binding.insertEditMenu.requireToolbar().setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.sort -> showSortingDialog() R.id.filter -> showFilterDialog() @@ -116,7 +115,6 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { } private fun updateMenuColors() { - updateStatusbarColor(getProperBackgroundColor()) binding.insertEditMenu.updateColors() } @@ -223,7 +221,6 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { val bottomBarColor = getBottomNavigationBackgroundColor() binding.insertEditTabsHolder.setBackgroundColor(bottomBarColor) - updateNavigationBarColor(bottomBarColor) } private fun getInactiveTabIndexes(activeIndex: Int) = (0 until binding.insertEditTabsHolder.tabCount).filter { it != activeIndex } diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt index e301cbab0..e670b3e67 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt @@ -57,10 +57,8 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { appLaunched(BuildConfig.APPLICATION_ID) setupOptionsMenu() refreshMenuItems() - updateEdgeToEdge( - topAppBar = binding.mainMenu.getToolbar(), - scrollingView = binding.viewPager, - bottomBar = binding.mainTabsHolder + setupEdgeToEdge( + padBottomImeAndSystem = listOf(binding.mainTabsHolder), ) storeStateVariables() setupTabs() @@ -170,7 +168,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private fun refreshMenuItems() { val currentFragment = getCurrentFragment() - binding.mainMenu.getToolbar().menu.apply { + binding.mainMenu.requireToolbar().menu.apply { findItem(R.id.sort).isVisible = currentFragment != findViewById(R.id.groups_fragment) findItem(R.id.filter).isVisible = currentFragment != findViewById(R.id.groups_fragment) findItem(R.id.dialpad).isVisible = !config.showDialpadButton @@ -181,7 +179,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } private fun setupOptionsMenu() { - binding.mainMenu.getToolbar().inflateMenu(R.menu.menu) + binding.mainMenu.requireToolbar().inflateMenu(R.menu.menu) binding.mainMenu.toggleHideOnScroll(false) binding.mainMenu.setupMenu() @@ -195,7 +193,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { getCurrentFragment()?.onSearchQueryChanged(text) } - binding.mainMenu.getToolbar().setOnMenuItemClickListener { menuItem -> + binding.mainMenu.requireToolbar().setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment) R.id.filter -> showFilterDialog() @@ -235,7 +233,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } private fun updateMenuColors() { - updateStatusbarColor(getProperBackgroundColor()) binding.mainMenu.updateColors() } @@ -309,7 +306,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { val bottomBarColor = getBottomNavigationBackgroundColor() binding.mainTabsHolder.setBackgroundColor(bottomBarColor) - updateNavigationBarColor(bottomBarColor) } private fun getInactiveTabIndexes(activeIndex: Int) = (0 until binding.mainTabsHolder.tabCount).filter { it != activeIndex } diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt index e131edfee..9862a9d7f 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt @@ -35,16 +35,13 @@ class SettingsActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - updateEdgeToEdge( - topAppBar = binding.settingsToolbar, - scrollingView = binding.settingsNestedScrollview, - ) - setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar) + setupEdgeToEdge(padBottomSystem = listOf(binding.settingsNestedScrollview)) + setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar) } override fun onResume() { super.onResume() - setupTopAppBar(binding.settingsToolbar, NavigationIcon.Arrow) + setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow) setupCustomizeColors() setupManageShownContactFields() diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt index 8b587da59..c42afdea3 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt @@ -47,7 +47,6 @@ class ViewContactActivity : ContactActivity() { } override fun onCreate(savedInstanceState: Bundle?) { - showTransparentTop = true super.onCreate(savedInstanceState) setContentView(binding.root) @@ -55,8 +54,9 @@ class ViewContactActivity : ContactActivity() { return } + setupEdgeToEdge(padBottomSystem = listOf(binding.contactScrollview)) + showFields = config.showContactFields - binding.contactWrapper.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN setupMenu() } @@ -90,7 +90,6 @@ class ViewContactActivity : ContactActivity() { } private fun setupMenu() { - (binding.contactAppbar.layoutParams as RelativeLayout.LayoutParams).topMargin = statusBarHeight binding.contactToolbar.menu.apply { findItem(R.id.share).setOnMenuItemClickListener { if (fullContact != null) { diff --git a/app/src/main/res/layout/activity_edit_contact.xml b/app/src/main/res/layout/activity_edit_contact.xml index 99482f3b6..c908123cd 100644 --- a/app/src/main/res/layout/activity_edit_contact.xml +++ b/app/src/main/res/layout/activity_edit_contact.xml @@ -588,7 +588,7 @@ android:background="@drawable/gradient_background_flipped" android:contentDescription="@null" /> - - + diff --git a/app/src/main/res/layout/activity_group_contacts.xml b/app/src/main/res/layout/activity_group_contacts.xml index 89b0e39f2..b5a55bef3 100644 --- a/app/src/main/res/layout/activity_group_contacts.xml +++ b/app/src/main/res/layout/activity_group_contacts.xml @@ -5,21 +5,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"> diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index bfeefb866..85d05441e 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"> - - + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index af6274459..78d9f1611 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ indicatorfastscroll = "4524cd0b61" #Room room = "2.8.2" #Fossify -commons = "5.4.0" +commons = "6.0.0" #Gradle gradlePlugins-agp = "8.11.1" #build From 86aa89ab8e11091fa3a07f1d84295255ac3444fe Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 01:52:22 +0530 Subject: [PATCH 06/10] refactor: migrate away from deprecated onBackPressed() --- .../org/fossify/contacts/activities/EditContactActivity.kt | 5 +++-- .../contacts/activities/InsertOrEditContactActivity.kt | 7 ++++--- .../kotlin/org/fossify/contacts/activities/MainActivity.kt | 7 ++++--- .../org/fossify/contacts/activities/ViewContactActivity.kt | 7 ++++--- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt index 70db006f8..036bebaa7 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/EditContactActivity.kt @@ -296,10 +296,11 @@ class EditContactActivity : ContactActivity() { } } - override fun onBackPressed() { + override fun onBackPressedCompat(): Boolean { maybeShowUnsavedChangesDialog { - super.onBackPressed() + performDefaultBack() } + return true } private fun maybeShowUnsavedChangesDialog(discard: () -> Unit) { diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt index 7fd337ac3..e634a3e88 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/InsertOrEditContactActivity.kt @@ -126,11 +126,12 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener { } } - override fun onBackPressed() { - if (binding.insertEditMenu.isSearchOpen) { + override fun onBackPressedCompat(): Boolean { + return if (binding.insertEditMenu.isSearchOpen) { binding.insertEditMenu.closeSearch() + true } else { - super.onBackPressed() + false } } diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt index e670b3e67..cefe8ef24 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/MainActivity.kt @@ -158,11 +158,12 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } } - override fun onBackPressed() { - if (binding.mainMenu.isSearchOpen) { + override fun onBackPressedCompat(): Boolean { + return if (binding.mainMenu.isSearchOpen) { binding.mainMenu.closeSearch() + true } else { - super.onBackPressed() + false } } diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt index c42afdea3..fc5eb972b 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt @@ -81,11 +81,12 @@ class ViewContactActivity : ContactActivity() { } } - override fun onBackPressed() { - if (binding.contactPhotoBig.alpha == 1f) { + override fun onBackPressedCompat(): Boolean { + return if (binding.contactPhotoBig.alpha == 1f) { hideBigContactPhoto() + true } else { - super.onBackPressed() + false } } From 8da2693343dd3ca5ba98b32556526a8e8637e19d Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 20:06:54 +0530 Subject: [PATCH 07/10] 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 78d9f1611..5e52ad4b0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ indicatorfastscroll = "4524cd0b61" #Room room = "2.8.2" #Fossify -commons = "6.0.0" +commons = "5.5.0" #Gradle gradlePlugins-agp = "8.11.1" #build From 76b06a1eedf350faa0b9a44ab7f9ba6fa8a5ffd5 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 20:42:00 +0530 Subject: [PATCH 08/10] docs: update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9529384e5..d5da6efd5 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.0] - 2025-10-09 ### Added - Support for importing contacts from vCards shared by other apps ([#321]) From f381113445e0eecda1ca945060e04e511a25c43f Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 21:13:35 +0530 Subject: [PATCH 09/10] build: bump detekt return count limit --- detekt.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/detekt.yml b/detekt.yml index 6472c5a35..73ddc0c1a 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 3168cc52875ed6a9d8c350c1086c8c645a9ad5e4 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Sun, 26 Oct 2025 21:46:57 +0530 Subject: [PATCH 10/10] chore: update lint baselines --- app/detekt-baseline.xml | 6 --- app/lint-baseline.xml | 102 ++++++++++++++++++++++++---------------- 2 files changed, 62 insertions(+), 46 deletions(-) diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 8a70d7a03..5e0d2f0a4 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -105,14 +105,12 @@ MaxLineLength:FilterContactSourcesDialog.kt$FilterContactSourcesDialog$binding.filterContactSourcesList.adapter = FilterContactSourcesAdapter(activity, contactSourcesWithCount, selectedSources) MaxLineLength:FilterContactSourcesDialog.kt$FilterContactSourcesDialog$val selectedContactSources = (binding.filterContactSourcesList.adapter as FilterContactSourcesAdapter).getSelectedContactSources() MaxLineLength:GroupContactsActivity.kt$GroupContactsActivity$private fun getDefaultRingtoneUri() - MaxLineLength:GroupContactsActivity.kt$GroupContactsActivity$updateMaterialActivityViews(binding.groupContactsCoordinator, binding.groupContactsList, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:GroupsAdapter.kt$GroupsAdapter$activity: SimpleActivity MaxLineLength:GroupsFragment.kt$GroupsFragment$class MaxLineLength:ImportContactsDialog.kt$ImportContactsDialog$class MaxLineLength:ImportContactsDialog.kt$ImportContactsDialog$targetContactSource = if (it == activity.getString(R.string.phone_storage_hidden)) SMT_PRIVATE else it MaxLineLength:InsertOrEditContactActivity.kt$InsertOrEditContactActivity$binding.insertEditTabsHolder.newTab().setCustomView(org.fossify.commons.R.layout.bottom_tablayout_item) MaxLineLength:InsertOrEditContactActivity.kt$InsertOrEditContactActivity$private fun getInactiveTabIndexes(activeIndex: Int) - MaxLineLength:InsertOrEditContactActivity.kt$InsertOrEditContactActivity$updateMaterialActivityViews(binding.insertEditCoordinator, binding.insertEditContactHolder, useTransparentNavigation = false, useTopSearchMenu = true) MaxLineLength:MainActivity.kt$MainActivity$(drawable as LayerDrawable).findDrawableByLayerId(org.fossify.commons.R.id.shortcut_plus_background).applyColorFilter(appIconColor) MaxLineLength:MainActivity.kt$MainActivity$binding.mainTabsHolder.newTab().setCustomView(org.fossify.commons.R.layout.bottom_tablayout_item) MaxLineLength:MainActivity.kt$MainActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_2_title_commons, org.fossify.commons.R.string.faq_2_text_commons)) @@ -124,7 +122,6 @@ MaxLineLength:MainActivity.kt$MainActivity$findViewById<MyViewPagerFragment<*>>(R.id.favorites_fragment)?.startNameWithSurnameChanged(configStartNameWithSurname) MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int) MaxLineLength:MainActivity.kt$MainActivity$resources.getColoredDrawableWithColor(org.fossify.commons.R.drawable.ic_dialpad_vector, properPrimaryColor.getContrastColor()) - MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true) MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_JODA or LICENSE_GLIDE or LICENSE_GSON or LICENSE_INDICATOR_FAST_SCROLL or LICENSE_AUTOFITTEXTVIEW MaxLineLength:ManageAutoBackupsDialog.kt$ManageAutoBackupsDialog$activity MaxLineLength:ManageAutoBackupsDialog.kt$ManageAutoBackupsDialog$binding.backupContactSourcesList.adapter = FilterContactSourcesAdapter(activity, contactSourcesWithCount, selectedContactSources.toList()) @@ -162,7 +159,6 @@ MaxLineLength:SelectGroupsDialog.kt$SelectGroupsDialog$setColors(activity.getProperTextColor(), activity.getProperPrimaryColor(), activity.getProperBackgroundColor()) MaxLineLength:SettingsActivity.kt$SettingsActivity$VcfExporter.ExportResult.EXPORT_PARTIAL -> org.fossify.commons.R.string.exporting_some_entries_failed MaxLineLength:SettingsActivity.kt$SettingsActivity$binding.settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) - MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:SettingsActivity.kt$SettingsActivity$} MaxLineLength:ViewContactActivity.kt$ViewContactActivity$. MaxLineLength:ViewContactActivity.kt$ViewContactActivity$// a contact cannot have different emails per contact source. Such contacts are handled as separate ones, not duplicates of each other @@ -188,8 +184,6 @@ PrintStackTrace:VcfExporter.kt$VcfExporter$e ProtectedMemberInFinalClass:GroupContactsActivity.kt$GroupContactsActivity$protected val INTENT_SELECT_RINGTONE = 600 ProtectedMemberInFinalClass:GroupContactsActivity.kt$GroupContactsActivity$protected var contact: Contact? = null - ReturnCount:EditContactActivity.kt$EditContactActivity$private fun startCropPhotoIntent(primaryUri: Uri?, backupUri: Uri?) - ReturnCount:SimpleActivity.kt$SimpleActivity$protected fun getPhoneNumberFromIntent(intent: Intent): String? SwallowedException:ContactsAdapter.kt$ContactsAdapter$e: Exception SwallowedException:EditContactActivity.kt$EditContactActivity$e: ActivityNotFoundException SwallowedException:EditContactActivity.kt$EditContactActivity$e: Exception diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 32eb128e2..fbe38ad3b 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -8,7 +8,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -19,17 +19,6 @@ file="src/main/AndroidManifest.xml"/> - - - - @@ -91,7 +80,7 @@ errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -102,20 +91,53 @@ errorLine1="gradlePlugins-agp = "8.11.1"" errorLine2=" ~~~~~~~~"> + message="A newer version of androidx.room:room-compiler than 2.8.2 is available: 2.8.3" + errorLine1="room = "2.8.2"" + errorLine2=" ~~~~~~~"> + + + + + file="$HOME/Projects/Fossify/FossifyOrg/Contacts/gradle/libs.versions.toml" + line="18" + column="8"/> + + + + + + + + @@ -147,7 +169,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -230,7 +252,7 @@ @@ -1208,7 +1230,7 @@ errorLine2=" ~~~~~~~~"> @@ -1673,7 +1695,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1794,7 +1816,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1805,7 +1827,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1816,7 +1838,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1827,7 +1849,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">