chore: bump target SDK version to 35 (#471)
* 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: update edge-to-edge implementation * refactor: migrate away from deprecated onBackPressed() * chore(deps): update org.fossify.commons to 5.5.0 * docs: update changelog * fix: add missing dependencies * chore: update lint baselines
This commit is contained in:
parent
f3408f1f9a
commit
c91ce9560d
26 changed files with 400 additions and 415 deletions
|
|
@ -5,7 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- Compatibility updates for Android 15 & 16
|
||||
- Calling now works directly without launching dialpad ([#562])
|
||||
|
||||
## [1.5.0] - 2025-10-18
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ dependencies {
|
|||
implementation(libs.mmslib)
|
||||
implementation(libs.androidx.swiperefreshlayout)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.androidx.documentfile)
|
||||
implementation(libs.androidx.lifecycle.process)
|
||||
implementation(libs.ez.vcard)
|
||||
implementation(libs.kotlinx.serialization.json)
|
||||
|
|
|
|||
|
|
@ -47,13 +47,6 @@
|
|||
<ID>MagicNumber:ImageCompressor.kt$ImageCompressor$8</ID>
|
||||
<ID>MagicNumber:ImageCompressor.kt$ImageCompressor$90f</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$30</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$3</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$4</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$5</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$6</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$7</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$8</ID>
|
||||
<ID>MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$9</ID>
|
||||
<ID>MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$23</ID>
|
||||
<ID>MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$5</ID>
|
||||
<ID>MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$59</ID>
|
||||
|
|
@ -134,6 +127,7 @@
|
|||
<ID>MaxLineLength:SmsReceiver.kt$SmsReceiver$val participant = SimpleContact(0, 0, senderName, photoUri, arrayListOf(phoneNumber), ArrayList(), ArrayList())</ID>
|
||||
<ID>MaxLineLength:SmsSender.kt$SmsSender$val intent = Intent(SendStatusReceiver.SMS_DELIVERED_ACTION, requestUri, app, SmsStatusDeliveredReceiver::class.java)</ID>
|
||||
<ID>MaxLineLength:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$// TODO: Need to check whether SC still trying to deliver the SMS to destination and will send the report again?</ID>
|
||||
<ID>MaxLineLength:ThreadActivity.kt$ThreadActivity$// check keyboard height just to be sure, 150 seems like a good middle ground between ime and navigation bar</ID>
|
||||
<ID>MaxLineLength:ThreadActivity.kt$ThreadActivity$// do not show the date/time above every message, only if the difference between the 2 messages is at least MIN_DATE_TIME_DIFF_SECS,</ID>
|
||||
<ID>MaxLineLength:ThreadActivity.kt$ThreadActivity$if</ID>
|
||||
<ID>MaxLineLength:ThreadActivity.kt$ThreadActivity$privateContacts.firstOrNull { it.doesHavePhoneNumber(participant.phoneNumbers.first().normalizedNumber) }</ID>
|
||||
|
|
@ -149,7 +143,6 @@
|
|||
<ID>MaxLineLength:VCard.kt$VCardPropertyWrapper.Companion$is Note -> VCardPropertyWrapper(value, context.getString(org.fossify.commons.R.string.notes), property)</ID>
|
||||
<ID>MaxLineLength:VCard.kt$VCardPropertyWrapper.Companion$is Telephone -> VCardPropertyWrapper(text.normalizePhoneNumber(), getPropertyTypeString(context), property)</ID>
|
||||
<ID>MaxLineLength:VCard.kt$VCardWrapper$data</ID>
|
||||
<ID>MaxLineLength:VCardViewerActivity.kt$VCardViewerActivity$updateMaterialActivityViews(binding.vcardViewerCoordinator, binding.contactsList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
||||
<ID>MaxLineLength:VCardViewerAdapter.kt$VCardViewerAdapter.VCardPropertyViewHolder$inner</ID>
|
||||
<ID>NestedBlockDepth:AttachmentUtils.kt$AttachmentUtils$private fun readBody(parser: XmlPullParser): List<String></ID>
|
||||
<ID>NestedBlockDepth:Context.kt$fun Context.getThreadParticipants( threadId: Long, contactsMap: HashMap<Int, SimpleContact>?, ): ArrayList<SimpleContact></ID>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -33,27 +33,22 @@ class ArchivedConversationsActivity : SimpleActivity() {
|
|||
|
||||
@SuppressLint("InlinedApi")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.archiveCoordinator,
|
||||
nestedView = binding.conversationsList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.conversationsList))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.conversationsList,
|
||||
topAppBar = binding.archiveAppbar
|
||||
)
|
||||
setupMaterialScrollListener(scrollingView = binding.conversationsList, toolbar = binding.archiveToolbar)
|
||||
|
||||
loadArchivedConversations()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.archiveToolbar, NavigationIcon.Arrow)
|
||||
updateMenuColors()
|
||||
|
||||
setupTopAppBar(binding.archiveAppbar, NavigationIcon.Arrow)
|
||||
loadArchivedConversations()
|
||||
}
|
||||
|
||||
|
|
@ -79,10 +74,6 @@ class ArchivedConversationsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
}
|
||||
|
||||
private fun loadArchivedConversations() {
|
||||
ensureBackgroundThread {
|
||||
val conversations = try {
|
||||
|
|
|
|||
|
|
@ -43,19 +43,13 @@ class ConversationDetailsActivity : SimpleActivity() {
|
|||
private val binding by viewBinding(ActivityConversationDetailsBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.conversationDetailsCoordinator,
|
||||
nestedView = binding.participantsRecyclerview,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupEdgeToEdge(padBottomSystem = listOf(binding.conversationDetailsNestedScrollview))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.conversationDetailsNestedScrollview,
|
||||
toolbar = binding.conversationDetailsToolbar
|
||||
topAppBar = binding.conversationDetailsAppbar,
|
||||
)
|
||||
|
||||
threadId = intent.getLongExtra(THREAD_ID, 0L)
|
||||
|
|
@ -77,7 +71,7 @@ class ConversationDetailsActivity : SimpleActivity() {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.conversationDetailsToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.conversationDetailsAppbar, NavigationIcon.Arrow)
|
||||
updateTextColors(binding.conversationDetailsHolder)
|
||||
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import org.fossify.commons.extensions.getProperBackgroundColor
|
|||
import org.fossify.commons.extensions.getProperPrimaryColor
|
||||
import org.fossify.commons.extensions.getProperTextColor
|
||||
import org.fossify.commons.extensions.hideKeyboard
|
||||
import org.fossify.commons.extensions.navigationBarHeight
|
||||
import org.fossify.commons.extensions.openNotificationSettings
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.extensions.underlineText
|
||||
|
|
@ -77,6 +76,8 @@ import org.greenrobot.eventbus.Subscribe
|
|||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
class MainActivity : SimpleActivity() {
|
||||
override var isSearchBarEnabled = true
|
||||
|
||||
private val MAKE_DEFAULT_APP_REQUEST = 1
|
||||
|
||||
private var storedTextColor = 0
|
||||
|
|
@ -88,19 +89,13 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
@SuppressLint("InlinedApi")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.mainCoordinator,
|
||||
nestedView = binding.conversationsList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = true
|
||||
)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.conversationsList))
|
||||
|
||||
checkAndDeleteOldRecycleBinMessages()
|
||||
clearAllMessagesIfNeeded {
|
||||
|
|
@ -139,9 +134,6 @@ class MainActivity : SimpleActivity() {
|
|||
binding.conversationsProgressBar.setIndicatorColor(properPrimaryColor)
|
||||
binding.conversationsProgressBar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
|
||||
checkShortcut()
|
||||
(binding.conversationsFab.layoutParams as? CoordinatorLayout.LayoutParams)?.bottomMargin =
|
||||
navigationBarHeight + resources.getDimension(org.fossify.commons.R.dimen.activity_margin)
|
||||
.toInt()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
@ -154,17 +146,18 @@ class MainActivity : SimpleActivity() {
|
|||
bus?.unregister(this)
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (binding.mainMenu.isSearchOpen) {
|
||||
override fun onBackPressedCompat(): Boolean {
|
||||
return if (binding.mainMenu.isSearchOpen) {
|
||||
binding.mainMenu.closeSearch()
|
||||
true
|
||||
} else {
|
||||
appLockManager.lock()
|
||||
super.onBackPressed()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
binding.mainMenu.getToolbar().inflateMenu(R.menu.menu_main)
|
||||
binding.mainMenu.requireToolbar().inflateMenu(R.menu.menu_main)
|
||||
binding.mainMenu.toggleHideOnScroll(true)
|
||||
binding.mainMenu.setupMenu()
|
||||
|
||||
|
|
@ -183,7 +176,7 @@ class MainActivity : SimpleActivity() {
|
|||
searchTextChanged(text)
|
||||
}
|
||||
|
||||
binding.mainMenu.getToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
binding.mainMenu.requireToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.show_recycle_bin -> launchRecycleBin()
|
||||
R.id.show_archived -> launchArchivedConversations()
|
||||
|
|
@ -196,7 +189,7 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
private fun refreshMenuItems() {
|
||||
binding.mainMenu.getToolbar().menu.apply {
|
||||
binding.mainMenu.requireToolbar().menu.apply {
|
||||
findItem(R.id.show_recycle_bin).isVisible = config.useRecycleBin
|
||||
findItem(R.id.show_archived).isVisible = config.isArchiveAvailable
|
||||
}
|
||||
|
|
@ -219,7 +212,6 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
binding.mainMenu.updateColors()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,21 +34,15 @@ class ManageBlockedKeywordsActivity : SimpleActivity(), RefreshRecyclerViewListe
|
|||
private val binding by viewBinding(ActivityManageBlockedKeywordsBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
updateBlockedKeywords()
|
||||
setupOptionsMenu()
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.blockKeywordsCoordinator,
|
||||
nestedView = binding.manageBlockedKeywordsList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.manageBlockedKeywordsList))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.manageBlockedKeywordsList,
|
||||
toolbar = binding.blockKeywordsToolbar
|
||||
topAppBar = binding.blockKeywordsAppbar
|
||||
)
|
||||
updateTextColors(binding.manageBlockedKeywordsWrapper)
|
||||
|
||||
|
|
@ -63,7 +57,7 @@ class ManageBlockedKeywordsActivity : SimpleActivity(), RefreshRecyclerViewListe
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.blockKeywordsToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.blockKeywordsAppbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
|
|
|
|||
|
|
@ -57,21 +57,15 @@ class NewConversationActivity : SimpleActivity() {
|
|||
private val binding by viewBinding(ActivityNewConversationBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
title = getString(R.string.new_conversation)
|
||||
updateTextColors(binding.newConversationHolder)
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.newConversationCoordinator,
|
||||
nestedView = binding.contactsList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.contactsList))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.contactsList,
|
||||
toolbar = binding.newConversationToolbar
|
||||
topAppBar = binding.newConversationAppbar
|
||||
)
|
||||
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
|
||||
|
|
@ -85,7 +79,7 @@ class NewConversationActivity : SimpleActivity() {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.newConversationToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.newConversationAppbar, NavigationIcon.Arrow)
|
||||
binding.noContactsPlaceholder2.setTextColor(getProperPrimaryColor())
|
||||
binding.noContactsPlaceholder2.underlineText()
|
||||
binding.suggestionsLabel.setTextColor(getProperPrimaryColor())
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import org.fossify.commons.dialogs.ConfirmationDialog
|
|||
import org.fossify.commons.extensions.areSystemAnimationsEnabled
|
||||
import org.fossify.commons.extensions.beGoneIf
|
||||
import org.fossify.commons.extensions.beVisibleIf
|
||||
import org.fossify.commons.extensions.getProperBackgroundColor
|
||||
import org.fossify.commons.extensions.hideKeyboard
|
||||
import org.fossify.commons.extensions.viewBinding
|
||||
import org.fossify.commons.helpers.NavigationIcon
|
||||
|
|
@ -33,20 +32,14 @@ class RecycleBinConversationsActivity : SimpleActivity() {
|
|||
|
||||
@SuppressLint("InlinedApi")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.recycleBinCoordinator,
|
||||
nestedView = binding.conversationsList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.conversationsList))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.conversationsList,
|
||||
toolbar = binding.recycleBinToolbar
|
||||
topAppBar = binding.recycleBinAppbar
|
||||
)
|
||||
|
||||
loadRecycleBinConversations()
|
||||
|
|
@ -54,9 +47,7 @@ class RecycleBinConversationsActivity : SimpleActivity() {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.recycleBinToolbar, NavigationIcon.Arrow)
|
||||
updateMenuColors()
|
||||
|
||||
setupTopAppBar(binding.recycleBinAppbar, NavigationIcon.Arrow)
|
||||
loadRecycleBinConversations()
|
||||
}
|
||||
|
||||
|
|
@ -82,10 +73,6 @@ class RecycleBinConversationsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
}
|
||||
|
||||
private fun loadRecycleBinConversations() {
|
||||
ensureBackgroundThread {
|
||||
val conversations = try {
|
||||
|
|
|
|||
|
|
@ -85,25 +85,19 @@ class SettingsActivity : SimpleActivity() {
|
|||
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.settingsCoordinator,
|
||||
nestedView = binding.settingsHolder,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.settingsNestedScrollview))
|
||||
setupMaterialScrollListener(
|
||||
scrollingView = binding.settingsNestedScrollview,
|
||||
toolbar = binding.settingsToolbar
|
||||
topAppBar = binding.settingsAppbar
|
||||
)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
|
||||
|
||||
setupCustomizeColors()
|
||||
setupCustomizeNotifications()
|
||||
|
|
|
|||
|
|
@ -45,7 +45,9 @@ import androidx.core.view.ViewCompat
|
|||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsAnimationCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.doOnLayout
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
|
@ -74,6 +76,7 @@ import org.fossify.commons.extensions.getProperPrimaryColor
|
|||
import org.fossify.commons.extensions.getProperTextColor
|
||||
import org.fossify.commons.extensions.getTextSize
|
||||
import org.fossify.commons.extensions.hideKeyboard
|
||||
import org.fossify.commons.extensions.insetsController
|
||||
import org.fossify.commons.extensions.isDynamicTheme
|
||||
import org.fossify.commons.extensions.isOrWasThankYouInstalled
|
||||
import org.fossify.commons.extensions.isVisible
|
||||
|
|
@ -237,19 +240,18 @@ class ThreadActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
|
||||
updateMaterialActivityViews(
|
||||
mainCoordinatorLayout = binding.threadCoordinator,
|
||||
nestedView = null,
|
||||
useTransparentNavigation = false,
|
||||
useTopSearchMenu = false
|
||||
setupEdgeToEdge(
|
||||
padBottomImeAndSystem = listOf(
|
||||
binding.messageHolder.root,
|
||||
binding.shortCodeHolder.root
|
||||
)
|
||||
setupMaterialScrollListener(null, binding.threadToolbar)
|
||||
)
|
||||
setupMessagingEdgeToEdge()
|
||||
setupMaterialScrollListener(null, binding.threadAppbar)
|
||||
|
||||
val extras = intent.extras
|
||||
if (extras == null) {
|
||||
|
|
@ -270,17 +272,16 @@ class ThreadActivity : SimpleActivity() {
|
|||
|
||||
loadConversation()
|
||||
setupAttachmentPickerView()
|
||||
setupKeyboardListener()
|
||||
hideAttachmentPicker()
|
||||
maybeSetupRecycleBinView()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(
|
||||
toolbar = binding.threadToolbar,
|
||||
toolbarNavigationIcon = NavigationIcon.Arrow,
|
||||
statusBarColor = getProperBackgroundColor()
|
||||
setupTopAppBar(
|
||||
topAppBar = binding.threadAppbar,
|
||||
navigationIcon = NavigationIcon.Arrow,
|
||||
topBarColor = getProperBackgroundColor()
|
||||
)
|
||||
|
||||
isActivityVisible = true
|
||||
|
|
@ -310,7 +311,6 @@ class ThreadActivity : SimpleActivity() {
|
|||
val bottomBarColor = getBottomBarColor()
|
||||
binding.messageHolder.root.setBackgroundColor(bottomBarColor)
|
||||
binding.shortCodeHolder.root.setBackgroundColor(bottomBarColor)
|
||||
updateNavigationBarColor(bottomBarColor)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
@ -325,12 +325,13 @@ class ThreadActivity : SimpleActivity() {
|
|||
saveDraftMessage()
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
override fun onBackPressedCompat(): Boolean {
|
||||
isAttachmentPickerVisible = false
|
||||
if (binding.messageHolder.attachmentPickerHolder.isVisible()) {
|
||||
return if (binding.messageHolder.attachmentPickerHolder.isVisible()) {
|
||||
hideAttachmentPicker()
|
||||
true
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -911,15 +912,16 @@ class ThreadActivity : SimpleActivity() {
|
|||
threadAddAttachment.setOnClickListener {
|
||||
if (attachmentPickerHolder.isVisible()) {
|
||||
isAttachmentPickerVisible = false
|
||||
WindowCompat.getInsetsController(window, threadTypeMessage)
|
||||
hideAttachmentPicker()
|
||||
window.insetsController(binding.messageHolder.threadTypeMessage)
|
||||
.show(WindowInsetsCompat.Type.ime())
|
||||
} else {
|
||||
isAttachmentPickerVisible = true
|
||||
showOrHideAttachmentPicker()
|
||||
WindowCompat.getInsetsController(window, threadTypeMessage)
|
||||
showAttachmentPicker()
|
||||
window.insetsController(binding.messageHolder.threadTypeMessage)
|
||||
.hide(WindowInsetsCompat.Type.ime())
|
||||
}
|
||||
window.decorView.requestApplyInsets()
|
||||
binding.messageHolder.threadTypeMessage.requestApplyInsets()
|
||||
}
|
||||
|
||||
if (intent.extras?.containsKey(THREAD_ATTACHMENT_URI) == true) {
|
||||
|
|
@ -2060,35 +2062,21 @@ class ThreadActivity : SimpleActivity() {
|
|||
.start()
|
||||
}
|
||||
|
||||
private fun setupKeyboardListener() {
|
||||
window.decorView.setOnApplyWindowInsetsListener { view, insets ->
|
||||
showOrHideAttachmentPicker()
|
||||
view.onApplyWindowInsets(insets)
|
||||
private fun getBottomBarColor() = if (isDynamicTheme()) {
|
||||
resources.getColor(org.fossify.commons.R.color.you_bottom_bar_color)
|
||||
} else {
|
||||
getBottomNavigationBackgroundColor()
|
||||
}
|
||||
|
||||
val callback =
|
||||
object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_CONTINUE_ON_SUBTREE) {
|
||||
override fun onPrepare(animation: WindowInsetsAnimationCompat) {
|
||||
super.onPrepare(animation)
|
||||
showOrHideAttachmentPicker()
|
||||
}
|
||||
|
||||
override fun onProgress(
|
||||
insets: WindowInsetsCompat,
|
||||
runningAnimations: MutableList<WindowInsetsAnimationCompat>,
|
||||
) = insets
|
||||
}
|
||||
ViewCompat.setWindowInsetsAnimationCallback(window.decorView, callback)
|
||||
}
|
||||
|
||||
private fun showOrHideAttachmentPicker() {
|
||||
fun setupMessagingEdgeToEdge() {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(
|
||||
binding.messageHolder.threadTypeMessage
|
||||
) { view, insets ->
|
||||
val type = WindowInsetsCompat.Type.ime()
|
||||
val insets = ViewCompat.getRootWindowInsets(window.decorView) ?: return
|
||||
val isKeyboardVisible = insets.isVisible(type)
|
||||
|
||||
if (isKeyboardVisible) {
|
||||
val keyboardHeight = insets.getInsets(type).bottom
|
||||
val bottomBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
|
||||
val bottomBarHeight = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom
|
||||
|
||||
// check keyboard height just to be sure, 150 seems like a good middle ground between ime and navigation bar
|
||||
config.keyboardHeight = if (keyboardHeight > 150) {
|
||||
|
|
@ -2100,12 +2088,9 @@ class ThreadActivity : SimpleActivity() {
|
|||
} else if (isAttachmentPickerVisible) {
|
||||
showAttachmentPicker()
|
||||
}
|
||||
}
|
||||
|
||||
private fun getBottomBarColor() = if (isDynamicTheme()) {
|
||||
resources.getColor(org.fossify.commons.R.color.you_bottom_bar_color)
|
||||
} else {
|
||||
getBottomNavigationBackgroundColor()
|
||||
insets
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
|||
|
|
@ -24,12 +24,11 @@ class VCardViewerActivity : SimpleActivity() {
|
|||
private val binding by viewBinding(ActivityVcardViewerBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
|
||||
updateMaterialActivityViews(binding.vcardViewerCoordinator, binding.contactsList, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(binding.contactsList, binding.vcardToolbar)
|
||||
setupEdgeToEdge(padBottomSystem = listOf(binding.contactsList))
|
||||
setupMaterialScrollListener(binding.contactsList, binding.vcardAppbar)
|
||||
|
||||
val vCardUri = intent.getParcelableExtra(EXTRA_VCARD_URI) as? Uri
|
||||
if (vCardUri != null) {
|
||||
|
|
@ -44,7 +43,7 @@ class VCardViewerActivity : SimpleActivity() {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.vcardToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.vcardAppbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu(vCardUri: Uri) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import org.joda.time.DateTime
|
|||
class MessageDetailsDialog(val activity: BaseSimpleActivity, val message: Message) : BasePropertiesDialog(activity) {
|
||||
init {
|
||||
@SuppressLint("MissingPermission")
|
||||
val availableSIMs = activity.subscriptionManagerCompat().activeSubscriptionInfoList
|
||||
val availableSIMs = activity.subscriptionManagerCompat().activeSubscriptionInfoList.orEmpty()
|
||||
|
||||
addProperty(message.getSenderOrReceiverLabel(), message.getSenderOrReceiverPhoneNumbers())
|
||||
if (availableSIMs.count() > 1) {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class DirectReplyReceiver : BroadcastReceiver() {
|
|||
val availableSIMs = context.subscriptionManagerCompat().activeSubscriptionInfoList
|
||||
if ((availableSIMs?.size ?: 0) > 1) {
|
||||
val currentSIMCardIndex = context.config.getUseSIMIdAtNumber(address)
|
||||
val wantedId = availableSIMs.getOrNull(currentSIMCardIndex)
|
||||
val wantedId = availableSIMs?.getOrNull(currentSIMCardIndex)
|
||||
if (wantedId != null) {
|
||||
subscriptionId = wantedId.subscriptionId
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/archive_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/archive_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,11 +19,12 @@
|
|||
app:title="@string/archived_conversations"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/archive_nested_scrollview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/conversation_details_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/conversation_details_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,13 +19,15 @@
|
|||
app:title="@string/conversation_details"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:id="@+id/conversation_details_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/conversation_details_holder"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/block_keywords_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/block_keywords_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -15,11 +20,13 @@
|
|||
app:title="@string/manage_blocked_keywords"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/manage_blocked_keywords_wrapper"
|
||||
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/manage_blocked_keywords_list"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/new_conversation_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/new_conversation_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -13,11 +18,13 @@
|
|||
app:title="@string/new_conversation"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/new_conversation_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.MyEditText
|
||||
android:id="@+id/new_conversation_address"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/recycle_bin_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/recycle_bin_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,11 +19,12 @@
|
|||
app:title="@string/recycle_bin"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/recycle_bin_nested_scrollview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/settings_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/settings_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,13 +19,15 @@
|
|||
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"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/thread_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/thread_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,13 +19,15 @@
|
|||
app:menu="@menu/menu_thread"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/thread_holder"
|
||||
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">
|
||||
|
||||
<include
|
||||
layout="@layout/divider"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/vcard_appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/vcard_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -14,14 +19,16 @@
|
|||
app:title="@string/contact_details"
|
||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||
|
||||
</org.fossify.commons.views.MyAppBarLayout>
|
||||
|
||||
<org.fossify.commons.views.MyRecyclerView
|
||||
android:id="@+id/contacts_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:clipToPadding="false"
|
||||
android:overScrollMode="ifContentScrolls"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="org.fossify.commons.views.MyLinearLayoutManager" />
|
||||
app:layoutManager="org.fossify.commons.views.MyLinearLayoutManager"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@
|
|||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="@dimen/normal_margin">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/reply_disabled_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/invalid_short_code"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
android:id="@+id/reply_disabled_info"
|
||||
android:layout_width="@dimen/normal_icon_size"
|
||||
android:layout_height="@dimen/normal_icon_size"
|
||||
android:layout_marginEnd="@dimen/normal_margin"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/more_info"
|
||||
android:padding="@dimen/normal_margin"
|
||||
|
|
|
|||
|
|
@ -11,19 +11,20 @@ detektCompose = "0.4.27"
|
|||
androidx-constraintlayout = "2.2.1"
|
||||
androidx-swiperefreshlayout = "1.1.0"
|
||||
androidx-lifecycleprocess = "2.8.7"
|
||||
androidx-documentfile = "1.1.0"
|
||||
#Eventbus
|
||||
eventbus = "3.3.1"
|
||||
#Room
|
||||
room = "2.8.2"
|
||||
#Fossify
|
||||
commons = "5.4.0"
|
||||
commons = "5.5.0"
|
||||
mmslib = "1.0.0"
|
||||
indicator-fast-scroll = "4524cd0b61"
|
||||
#Gradle
|
||||
gradlePlugins-agp = "8.11.1"
|
||||
#build
|
||||
app-build-compileSDKVersion = "34"
|
||||
app-build-targetSDK = "34"
|
||||
app-build-compileSDKVersion = "36"
|
||||
app-build-targetSDK = "36"
|
||||
app-build-minimumSDK = "26"
|
||||
app-build-javaVersion = "VERSION_17"
|
||||
app-build-kotlinJVMTarget = "17"
|
||||
|
|
@ -34,6 +35,7 @@ ez-vcard = "0.12.1"
|
|||
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
|
||||
androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "androidx-lifecycleprocess" }
|
||||
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" }
|
||||
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-documentfile" }
|
||||
#Room
|
||||
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
||||
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ dependencyResolutionManagement {
|
|||
google()
|
||||
mavenCentral()
|
||||
maven { setUrl("https://jitpack.io") }
|
||||
mavenLocal()
|
||||
}
|
||||
}
|
||||
include(":app")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue