diff --git a/app/src/main/assets/linphonerc_default b/app/src/main/assets/linphonerc_default index fb1fcee9d..1a719178b 100644 --- a/app/src/main/assets/linphonerc_default +++ b/app/src/main/assets/linphonerc_default @@ -47,4 +47,7 @@ fec_enabled=1 [magic_search] return_empty_friends=1 +[ui] +contacts_filter=sip.linphone.org + ## End of default rc diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index d90088e84..3c90c1378 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -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 diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index e85446081..7ef49adec 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -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")!! diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt index 967537c6f..cbbb03cab 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt @@ -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" + ) } }