Store selected contacts list filter & show favorites user preferences to re-use them later

This commit is contained in:
Sylvain Berfini 2024-07-31 14:49:52 +02:00
parent 5cc491335c
commit 8a410fc77f
4 changed files with 72 additions and 26 deletions

View file

@ -47,4 +47,7 @@ fec_enabled=1
[magic_search] [magic_search]
return_empty_friends=1 return_empty_friends=1
[ui]
contacts_filter=sip.linphone.org
## End of default rc ## End of default rc

View file

@ -442,6 +442,13 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
core.config.setBool("magic_search", "return_empty_friends", true) core.config.setBool("magic_search", "return_empty_friends", true)
Log.i("$TAG Showing 'empty' friends enabled") Log.i("$TAG Showing 'empty' friends enabled")
if (LinphoneUtils.getDefaultAccount()?.params?.domain == corePreferences.defaultDomain) {
corePreferences.contactsFilter = corePreferences.defaultDomain
Log.i(
"$TAG Setting default contacts list filter to [${corePreferences.contactsFilter}]"
)
}
} }
corePreferences.linphoneConfigurationVersion = currentVersion corePreferences.linphoneConfigurationVersion = currentVersion

View file

@ -57,6 +57,13 @@ class CorePreferences @UiThread constructor(private val context: Context) {
config.setBool("app", "first_6.0_launch", value) config.setBool("app", "first_6.0_launch", value)
} }
@get:WorkerThread @set:WorkerThread
var linphoneConfigurationVersion: Int
get() = config.getInt("app", "config_version", 52005)
set(value) {
config.setInt("app", "config_version", value)
}
@get:WorkerThread @get:WorkerThread
val checkForUpdateServerUrl: String val checkForUpdateServerUrl: String
get() = config.getString("misc", "version_check_url_root", "").orEmpty() get() = config.getString("misc", "version_check_url_root", "").orEmpty()
@ -82,7 +89,7 @@ class CorePreferences @UiThread constructor(private val context: Context) {
config.setBool("app", "keep_service_alive", value) config.setBool("app", "keep_service_alive", value)
} }
// Calls settings /* Call settings */
// This won't be done if bluetooth or wired headset is used // This won't be done if bluetooth or wired headset is used
@get:WorkerThread @set:WorkerThread @get:WorkerThread @set:WorkerThread
@ -106,14 +113,32 @@ class CorePreferences @UiThread constructor(private val context: Context) {
config.setBool("app", "show_confirmation_dialog_zrtp_trust_call", value) config.setBool("app", "show_confirmation_dialog_zrtp_trust_call", value)
} }
/* Voice Recordings */ /* Contacts related */
@get:WorkerThread @set:WorkerThread
var contactsFilter: String
get() = config.getString("ui", "contacts_filter", "")!! // Default value must be empty!
set(value) {
config.setString("ui", "contacts_filter", value)
}
@get:WorkerThread @set:WorkerThread
var showFavoriteContacts: Boolean
get() = config.getBool("ui", "show_favorites_contacts", true)
set(value) {
config.setBool("ui", "show_favorites_contacts", value)
}
/* Voice recordings related */
@get:WorkerThread @set:WorkerThread @get:WorkerThread @set:WorkerThread
var voiceRecordingMaxDuration: Int var voiceRecordingMaxDuration: Int
get() = config.getInt("app", "voice_recording_max_duration", 600000) // in ms get() = config.getInt("app", "voice_recording_max_duration", 600000) // in ms
set(value) = config.setInt("app", "voice_recording_max_duration", value) set(value) = config.setInt("app", "voice_recording_max_duration", value)
/** -1 means auto, 0 no, 1 yes */ /* User interface related */
// -1 means auto, 0 no, 1 yes
@get:WorkerThread @set:WorkerThread @get:WorkerThread @set:WorkerThread
var darkMode: Int var darkMode: Int
get() { get() {
@ -124,14 +149,7 @@ class CorePreferences @UiThread constructor(private val context: Context) {
config.setInt("app", "dark_mode", value) config.setInt("app", "dark_mode", value)
} }
@get:WorkerThread @set:WorkerThread // Allows to make screenshots
var linphoneConfigurationVersion: Int
get() = config.getInt("app", "config_version", 52005)
set(value) {
config.setInt("app", "config_version", value)
}
/** Allows to make screenshots */
@get:WorkerThread @set:WorkerThread @get:WorkerThread @set:WorkerThread
var enableSecureMode: Boolean var enableSecureMode: Boolean
get() = config.getBool("ui", "enable_secure_mode", true) get() = config.getBool("ui", "enable_secure_mode", true)
@ -198,6 +216,8 @@ class CorePreferences @UiThread constructor(private val context: Context) {
val hideAssistantThirdPartySipAccount: Boolean val hideAssistantThirdPartySipAccount: Boolean
get() = config.getBool("ui", "assistant_hide_third_party_account", false) get() = config.getBool("ui", "assistant_hide_third_party_account", false)
/* Paths */
@get:WorkerThread @get:WorkerThread
val defaultDomain: String val defaultDomain: String
get() = config.getString("app", "default_domain", "sip.linphone.org")!! get() = config.getString("app", "default_domain", "sip.linphone.org")!!

View file

@ -94,7 +94,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
init { init {
fetchInProgress.value = true fetchInProgress.value = true
showFavourites.value = true showFavourites.value = corePreferences.showFavoriteContacts
coreContext.postOnCoreThread { core -> coreContext.postOnCoreThread { core ->
updateDomainFilter() updateDomainFilter()
@ -103,9 +103,11 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
magicSearch = core.createMagicSearch() magicSearch = core.createMagicSearch()
magicSearch.limitedSearch = false magicSearch.limitedSearch = false
magicSearch.addListener(magicSearchListener) magicSearch.addListener(magicSearchListener)
}
applyFilter(currentFilter) coreContext.postOnMainThread {
applyFilter(currentFilter)
}
}
} }
@UiThread @UiThread
@ -139,14 +141,21 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
@UiThread @UiThread
fun changeContactsFilter(onlyLinphoneContacts: Boolean, onlySipContacts: Boolean) { fun changeContactsFilter(onlyLinphoneContacts: Boolean, onlySipContacts: Boolean) {
domainFilter = if (onlyLinphoneContacts) { coreContext.postOnCoreThread {
corePreferences.defaultDomain domainFilter = if (onlyLinphoneContacts) {
} else if (onlySipContacts) { corePreferences.defaultDomain
"*" } else if (onlySipContacts) {
} else { "*"
"" } else {
""
}
corePreferences.contactsFilter = domainFilter
Log.i("$TAG Newly set filter is [${corePreferences.contactsFilter}]")
coreContext.postOnMainThread {
applyFilter(currentFilter)
}
} }
applyFilter(currentFilter)
} }
fun areAllContactsDisplayed(): Boolean { fun areAllContactsDisplayed(): Boolean {
@ -155,7 +164,9 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
@UiThread @UiThread
fun toggleFavouritesVisibility() { fun toggleFavouritesVisibility() {
showFavourites.value = showFavourites.value == false val show = showFavourites.value == false
showFavourites.value = show
corePreferences.showFavoriteContacts = show
} }
@WorkerThread @WorkerThread
@ -163,10 +174,15 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
val defaultAccount = coreContext.core.defaultAccount val defaultAccount = coreContext.core.defaultAccount
val defaultDomain = defaultAccount?.params?.domain == corePreferences.defaultDomain val defaultDomain = defaultAccount?.params?.domain == corePreferences.defaultDomain
isDefaultAccountLinphone.postValue(defaultDomain) isDefaultAccountLinphone.postValue(defaultDomain)
domainFilter = if (isEndToEndEncryptionMandatory()) {
corePreferences.defaultDomain Log.i("$TAG Currently selected filter is [${corePreferences.contactsFilter}]")
} else { domainFilter = corePreferences.contactsFilter
"*" if (isEndToEndEncryptionMandatory() && (domainFilter.isEmpty() || domainFilter == "*")) {
domainFilter = corePreferences.defaultDomain
corePreferences.contactsFilter = domainFilter
Log.i(
"$TAG Filter updated to [${corePreferences.contactsFilter}] to match mandatory IM encryption"
)
} }
} }