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]
return_empty_friends=1
[ui]
contacts_filter=sip.linphone.org
## 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)
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

View file

@ -57,6 +57,13 @@ class CorePreferences @UiThread constructor(private val context: Context) {
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
val checkForUpdateServerUrl: String
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)
}
// Calls settings
/* Call settings */
// This won't be done if bluetooth or wired headset is used
@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)
}
/* 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
var voiceRecordingMaxDuration: Int
get() = config.getInt("app", "voice_recording_max_duration", 600000) // in ms
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
var darkMode: Int
get() {
@ -124,14 +149,7 @@ class CorePreferences @UiThread constructor(private val context: Context) {
config.setInt("app", "dark_mode", value)
}
@get:WorkerThread @set:WorkerThread
var linphoneConfigurationVersion: Int
get() = config.getInt("app", "config_version", 52005)
set(value) {
config.setInt("app", "config_version", value)
}
/** Allows to make screenshots */
// Allows to make screenshots
@get:WorkerThread @set:WorkerThread
var enableSecureMode: Boolean
get() = config.getBool("ui", "enable_secure_mode", true)
@ -198,6 +216,8 @@ class CorePreferences @UiThread constructor(private val context: Context) {
val hideAssistantThirdPartySipAccount: Boolean
get() = config.getBool("ui", "assistant_hide_third_party_account", false)
/* Paths */
@get:WorkerThread
val defaultDomain: String
get() = config.getString("app", "default_domain", "sip.linphone.org")!!

View file

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