Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.7.3] - 2025-10-16
### Changed
- Updated translations
Expand Down
4 changes: 0 additions & 4 deletions app/detekt-baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@
<ID>MaxLineLength:ChangeSortingDialog.kt$ChangeSortingDialog$class</ID>
<ID>MaxLineLength:ChangeSortingDialog.kt$ChangeSortingDialog$if</ID>
<ID>MaxLineLength:ConferenceActivity.kt$ConferenceActivity$conferenceList.adapter = ConferenceCallsAdapter(this@ConferenceActivity, conferenceList, ArrayList(CallManager.getConferenceCalls())) {}</ID>
<ID>MaxLineLength:ConferenceActivity.kt$ConferenceActivity$updateMaterialActivityViews(conferenceCoordinator, conferenceList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:ConferenceCallsAdapter.kt$ConferenceCallsAdapter$itemConferenceCallName.text = callContact.name.ifEmpty { itemView.context.getString(R.string.unknown_caller) }</ID>
<ID>MaxLineLength:Config.kt$Config$set(wasOverlaySnackbarConfirmed) = prefs.edit().putBoolean(WAS_OVERLAY_SNACKBAR_CONFIRMED, wasOverlaySnackbarConfirmed).apply()</ID>
<ID>MaxLineLength:ContactsAdapter.kt$ContactsAdapter$SimpleContactsHelper(root.context).loadContactImage(contact.photoUri, itemContactImage, contact.getNameToDisplay())</ID>
Expand All @@ -101,11 +100,9 @@
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.column_count).isVisible = currentFragment == getFavoritesFragment() &amp;&amp; config.viewType == VIEW_TYPE_GRID</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getCurrentFragment(): MyViewPagerFragment&lt;*&gt;?</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val confirmationText = "${getString(R.string.clear_history_confirmation)}\n\n${getString(R.string.cannot_be_undone)}"</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val dialpadIcon = resources.getColoredDrawableWithColor(R.drawable.ic_dialpad_vector, properPrimaryColor.getContrastColor())</ID>
<ID>MaxLineLength:ManageSpeedDialActivity.kt$ManageSpeedDialActivity$updateMaterialActivityViews(manageSpeedDialCoordinator, manageSpeedDialHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$setupColors(activity.getProperTextColor(), activity.getProperPrimaryColor(), activity.getProperPrimaryColor())</ID>
<ID>MaxLineLength:RecentCallsAdapter.kt$RecentCallsAdapter$findItem(R.id.cab_remove_default_sim).isVisible = (activity.config.getCustomSIM(selectedNumber) ?: "") != "" &amp;&amp; !call.isUnknownNumber</ID>
Expand All @@ -132,7 +129,6 @@
<ID>MaxLineLength:SelectSIMDialog.kt$SelectSIMDialog$binding.selectSimRadioGroup.addView(radioButton, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))</ID>
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$private</ID>
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") &amp;&amp; !isTiramisuPlus())</ID>
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:SpeedDialAdapter.kt$SpeedDialAdapter$private fun getSelectedItems()</ID>
<ID>NestedBlockDepth:CallActivity.kt$CallActivity$private fun updateOtherPersonsInfo(avatarUri: String?)</ID>
<ID>NestedBlockDepth:ContactsAdapter.kt$ContactsAdapter$@SuppressLint("ClickableViewAccessibility") private fun setupView(binding: ItemViewBinding, contact: Contact, holder: ViewHolder)</ID>
Expand Down
218 changes: 120 additions & 98 deletions app/lint-baseline.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ class CallActivity : SimpleActivity() {
return
}

setupEdgeToEdge(
padTopSystem = listOf(binding.callHolder),
padBottomSystem = listOf(binding.callHolder),
)

updateTextColors(binding.callHolder)
initButtons()
audioManager.mode = AudioManager.MODE_IN_CALL
Expand All @@ -91,11 +96,6 @@ class CallActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
updateState()
updateNavigationBarColor(getProperBackgroundColor())

if (isDynamicTheme()) {
updateStatusbarColor(getProperBackgroundColor())
}
}

override fun onDestroy() {
Expand All @@ -108,18 +108,21 @@ class CallActivity : SimpleActivity() {
}
}

override fun onBackPressed() {
override fun onBackPressedCompat(): Boolean {
if (binding.dialpadWrapper.isVisible()) {
hideDialpad()
return
} else {
super.onBackPressed()
return true
}

val callState = CallManager.getState()
if (callState == Call.STATE_CONNECTING || callState == Call.STATE_DIALING) {
toast(R.string.call_is_being_connected)
// Allow user to go back but show toast - they can return to call via notification
return false
}

// Allow minimizing active call - user can return via notification
return false
}

private fun initButtons() = binding.apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,17 @@ class ConferenceActivity : SimpleActivity() {
private val binding by viewBinding(ActivityConferenceBinding::inflate)

override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.apply {
updateMaterialActivityViews(conferenceCoordinator, conferenceList, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(conferenceList, conferenceToolbar)
setupEdgeToEdge(padBottomSystem = listOf(conferenceList))
setupMaterialScrollListener(binding.conferenceList, binding.conferenceAppbar)
conferenceList.adapter = ConferenceCallsAdapter(this@ConferenceActivity, conferenceList, ArrayList(CallManager.getConferenceCalls())) {}
}
}

override fun onResume() {
super.onResume()
setupToolbar(binding.conferenceToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.conferenceAppbar, NavigationIcon.Arrow)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,12 @@ class DialpadActivity : SimpleActivity() {
hasRussianLocale = Locale.getDefault().language == "ru"

binding.apply {
updateMaterialActivityViews(
mainCoordinatorLayout = dialpadCoordinator,
nestedView = dialpadHolder,
useTransparentNavigation = true,
useTopSearchMenu = false
setupEdgeToEdge(
padBottomImeAndSystem = listOf(dialpadList, dialpadHolder)
)
setupMaterialScrollListener(dialpadList, dialpadToolbar)
setupMaterialScrollListener(binding.dialpadList, binding.dialpadAppbar)
}

updateNavigationBarColor(getProperBackgroundColor())

if (checkAppSideloading()) {
return
}
Expand Down Expand Up @@ -231,8 +226,7 @@ class DialpadActivity : SimpleActivity() {
super.onResume()
updateTextColors(binding.dialpadHolder)
binding.dialpadClearChar.applyColorFilter(getProperTextColor())
updateNavigationBarColor(getProperBackgroundColor())
setupToolbar(binding.dialpadToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.dialpadAppbar, NavigationIcon.Arrow)
}

private fun setupOptionsMenu() {
Expand Down
20 changes: 10 additions & 10 deletions app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode

class MainActivity : SimpleActivity() {
override var isSearchBarEnabled = true

private val binding by viewBinding(ActivityMainBinding::inflate)

private var launchedDialer = false
Expand All @@ -57,13 +59,12 @@ class MainActivity : SimpleActivity() {
var cachedContacts = ArrayList<Contact>()

override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(binding.root)
appLaunched(BuildConfig.APPLICATION_ID)
setupOptionsMenu()
refreshMenuItems()
updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true)
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder))

EventBus.getDefault().register(this)
launchedDialer = savedInstanceState?.getBoolean(OPEN_DIAL_PAD_AT_LAUNCH) ?: false
Expand Down Expand Up @@ -173,11 +174,12 @@ class MainActivity : SimpleActivity() {
refreshItems()
}

override fun onBackPressed() {
if (binding.mainMenu.isSearchOpen) {
override fun onBackPressedCompat(): Boolean {
return if (binding.mainMenu.isSearchOpen) {
binding.mainMenu.closeSearch()
true
} else {
super.onBackPressed()
false
}
}

Expand All @@ -188,7 +190,7 @@ class MainActivity : SimpleActivity() {

private fun refreshMenuItems() {
val currentFragment = getCurrentFragment()
binding.mainMenu.getToolbar().menu.apply {
binding.mainMenu.requireToolbar().menu.apply {
findItem(R.id.clear_call_history).isVisible = currentFragment == getRecentsFragment()
findItem(R.id.sort).isVisible = currentFragment != getRecentsFragment()
findItem(R.id.filter).isVisible = currentFragment != getRecentsFragment()
Expand All @@ -201,7 +203,7 @@ class MainActivity : SimpleActivity() {

private fun setupOptionsMenu() {
binding.mainMenu.apply {
getToolbar().inflateMenu(R.menu.menu)
requireToolbar().inflateMenu(R.menu.menu)
toggleHideOnScroll(false)
setupMenu()

Expand All @@ -215,7 +217,7 @@ class MainActivity : SimpleActivity() {
getCurrentFragment()?.onSearchQueryChanged(text)
}

getToolbar().setOnMenuItemClickListener { menuItem ->
requireToolbar().setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.clear_call_history -> clearCallHistory()
R.id.create_new_contact -> launchCreateNewContactIntent()
Expand Down Expand Up @@ -257,7 +259,6 @@ class MainActivity : SimpleActivity() {
}

private fun updateMenuColors() {
updateStatusbarColor(getProperBackgroundColor())
binding.mainMenu.updateColors()
}

Expand Down Expand Up @@ -320,7 +321,6 @@ class MainActivity : SimpleActivity() {

val bottomBarColor = getBottomNavigationBackgroundColor()
binding.mainTabsHolder.setBackgroundColor(bottomBarColor)
updateNavigationBarColor(bottomBarColor)
}

private fun getInactiveTabIndexes(activeIndex: Int) = (0 until binding.mainTabsHolder.tabCount).filter { it != activeIndex }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,12 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener {
private var speedDialValues = mutableListOf<SpeedDial>()

override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(binding.root)

binding.apply {
updateMaterialActivityViews(manageSpeedDialCoordinator, manageSpeedDialHolder, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(manageSpeedDialScrollview, manageSpeedDialToolbar)
setupEdgeToEdge(padBottomSystem = listOf(manageSpeedDialScrollview))
setupMaterialScrollListener(binding.manageSpeedDialScrollview, binding.manageSpeedDialAppbar)

}

Expand All @@ -54,7 +53,7 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener {

override fun onResume() {
super.onResume()
setupToolbar(binding.manageSpeedDialToolbar, NavigationIcon.Arrow)
setupTopAppBar(binding.manageSpeedDialAppbar, NavigationIcon.Arrow)
}

override fun onStop() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,20 @@ class SettingsActivity : SimpleActivity() {
}

override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(binding.root)
setupOptionsMenu()
refreshMenuItems()

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()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.fossify.phone.dialogs

import android.graphics.Color
import android.view.KeyEvent
import android.view.inputmethod.EditorInfo
import android.widget.ImageView
import androidx.activity.addCallback
import androidx.appcompat.app.AlertDialog
import org.fossify.commons.extensions.*
import org.fossify.commons.models.contacts.Contact
Expand Down Expand Up @@ -37,15 +37,17 @@ class SelectContactDialog(val activity: SimpleActivity, val contacts: List<Conta

activity.getAlertDialogBuilder()
.setNegativeButton(R.string.cancel, null)
.setOnKeyListener { _, i, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_UP && i == KeyEvent.KEYCODE_BACK) {
backPressed()
}
true
}
.apply {
activity.setupDialogStuff(binding.root, this, R.string.choose_contact) { alertDialog ->
dialog = alertDialog
alertDialog.onBackPressedDispatcher.addCallback(alertDialog) {
if (binding.contactSearchView.isSearchOpen) {
binding.contactSearchView.closeSearch()
} else {
isEnabled = false
alertDialog.onBackPressedDispatcher.onBackPressed()
}
}
}
}
}
Expand All @@ -65,10 +67,10 @@ class SelectContactDialog(val activity: SimpleActivity, val contacts: List<Conta
}

private fun MySearchMenu.updateSearchViewUi() {
getToolbar().beInvisible()
requireToolbar().beInvisible()
updateColors()
setBackgroundColor(Color.TRANSPARENT)
binding.topAppBarLayout.setBackgroundColor(Color.TRANSPARENT)
binding.searchBarContainer.setBackgroundColor(Color.TRANSPARENT)
}

private fun MySearchMenu.setSearchViewListeners() {
Expand Down Expand Up @@ -122,12 +124,4 @@ class SelectContactDialog(val activity: SimpleActivity, val contacts: List<Conta
letterFastscroller.beVisibleIf(contactsEmptyPlaceholder.isGone())
letterFastscrollerThumb.beVisibleIf(contactsEmptyPlaceholder.isGone())
}

private fun backPressed() {
if (binding.contactSearchView.isSearchOpen) {
binding.contactSearchView.closeSearch()
} else {
dialog?.dismiss()
}
}
}
21 changes: 14 additions & 7 deletions app/src/main/res/layout/activity_conference.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,26 @@
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/conference_toolbar"
<org.fossify.commons.views.MyAppBarLayout
android:id="@+id/conference_appbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/conference"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
android:layout_height="wrap_content">

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/conference_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_primary"
app:title="@string/conference"
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />

</org.fossify.commons.views.MyAppBarLayout>

<FrameLayout
android:id="@+id/conference_frame"
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.MyRecyclerView
android:id="@+id/conference_list"
Expand Down
Loading
Loading