Added some customization settings

This commit is contained in:
Sylvain Berfini 2024-03-14 15:38:52 +01:00
parent 37af11d3e1
commit 7d7b037741
12 changed files with 83 additions and 8 deletions

View file

@ -120,19 +120,49 @@ class CorePreferences @UiThread constructor(private val context: Context) {
}
@get:WorkerThread
private val darkModeAllowed: Boolean
get() = config.getBool("app", "dark_mode_allowed", true)
val darkModeAllowed: Boolean
get() = config.getBool("ui", "dark_mode_allowed", true)
// Will disable chat feature completely
@get:WorkerThread
val disableChat: Boolean
get() = config.getBool("app", "disable_chat_feature", false)
get() = config.getBool("ui", "disable_chat_feature", false)
// Will disable meetings feature completely
@get:WorkerThread
val disableMeetings: Boolean
get() = config.getBool("app", "disable_meetings_feature", false)
@get:WorkerThread
val disableBroadcasts: Boolean
get() = config.getBool("ui", "disable_broadcast_feature", true) // TODO: not implemented
@get:WorkerThread
val disableCallRecordings: Boolean // TODO FIXME: also disable recording in call
get() = config.getBool("ui", "disable_call_recordings_feature", true) // TODO: not implemented
@get:WorkerThread
val oneAccountMax: Boolean
get() = config.getBool("ui", "one_account_max", false)
@get:WorkerThread
val hideSettings: Boolean
get() = config.getBool("ui", "hide_settings", false)
@get:WorkerThread
val hideAccountSettings: Boolean
get() = config.getBool("ui", "hide_account_settings", false)
@get:WorkerThread
val hideAssistantCreateAccount: Boolean
get() = config.getBool("ui", "assistant_hide_create_account", false)
@get:WorkerThread
val hideAssistantScanQrCode: Boolean
get() = config.getBool("ui", "assistant_disable_qr_code", false)
@get:WorkerThread
val hideAssistantThirdPartySipAccount: Boolean
get() = config.getBool("ui", "assistant_hide_third_party_account", false)
@get:WorkerThread
val defaultDomain: String
get() = config.getString("app", "default_domain", "sip.linphone.org")!!

View file

@ -37,6 +37,12 @@ class LandingViewModel @UiThread constructor() : ViewModel() {
val sipIdentity = MutableLiveData<String>()
val hideCreateAccount = MutableLiveData<Boolean>()
val hideScanQrCode = MutableLiveData<Boolean>()
val hideThirdPartyAccount = MutableLiveData<Boolean>()
val redirectToDigestAuthEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
}
@ -51,6 +57,9 @@ class LandingViewModel @UiThread constructor() : ViewModel() {
coreContext.postOnCoreThread { core ->
// Prevent user from leaving assistant if no account was configured yet
showBackButton.postValue(core.accountList.isNotEmpty())
hideCreateAccount.postValue(corePreferences.hideAssistantCreateAccount)
hideScanQrCode.postValue(corePreferences.hideAssistantScanQrCode)
hideThirdPartyAccount.postValue(corePreferences.hideAssistantThirdPartySipAccount)
conditionsAndPrivacyPolicyAccepted = corePreferences.conditionsAndPrivacyPolicyAccepted
}
}

View file

@ -28,6 +28,7 @@ import java.util.Calendar
import java.util.Locale
import java.util.TimeZone
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.core.Address
import org.linphone.core.ChatRoom
@ -76,6 +77,8 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
val conferenceCreatedEvent = MutableLiveData<Event<Boolean>>()
val hideBroadcast = MutableLiveData<Boolean>()
private var startTimestamp = 0L
private var endTimestamp = 0L
@ -160,6 +163,9 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
}
init {
coreContext.postOnCoreThread {
hideBroadcast.postValue(corePreferences.disableBroadcasts)
}
isBroadcastSelected.value = false
showBroadcastHelp.value = false
allDayMeeting.value = false

View file

@ -4,6 +4,7 @@ import androidx.annotation.UiThread
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.core.Account
import org.linphone.core.DialPlan
import org.linphone.core.Factory
@ -46,6 +47,8 @@ class AccountProfileViewModel @UiThread constructor() : ViewModel() {
val expandDevices = MutableLiveData<Boolean>()
val hideAccountSettings = MutableLiveData<Boolean>()
val accountRemovedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
@ -57,6 +60,7 @@ class AccountProfileViewModel @UiThread constructor() : ViewModel() {
expandDevices.value = false // TODO: set to true when feature will be available
coreContext.postOnCoreThread {
hideAccountSettings.postValue(corePreferences.hideAccountSettings)
dialPlansLabelList.add("") // To allow removing selected dial plan
val dialPlans = Factory.instance().dialPlans.toList()

View file

@ -87,6 +87,7 @@ class SettingsViewModel @UiThread constructor() : ViewModel() {
// Contacts settings
val showContactsSettings = MutableLiveData<Boolean>()
val ldapAvailable = MutableLiveData<Boolean>()
val ldapServers = MutableLiveData<List<CardDavLdapModel>>()
val cardDavFriendsLists = MutableLiveData<List<CardDavLdapModel>>()
@ -123,6 +124,7 @@ class SettingsViewModel @UiThread constructor() : ViewModel() {
val useWifiOnly = MutableLiveData<Boolean>()
// User Interface settings
val showThemeSelector = MutableLiveData<Boolean>()
val theme = MutableLiveData<Int>()
val availableThemesNames = arrayListOf(
AppUtils.getString(R.string.settings_user_interface_auto_theme_label),
@ -146,6 +148,8 @@ class SettingsViewModel @UiThread constructor() : ViewModel() {
hideVideoCallSetting.postValue(!core.isVideoEnabled)
showConversationsSettings.postValue(!corePreferences.disableChat)
showMeetingsSettings.postValue(!corePreferences.disableMeetings)
ldapAvailable.postValue(core.ldapAvailable())
showThemeSelector.postValue(corePreferences.darkModeAllowed)
}
showContactsSettings.value = true

View file

@ -25,6 +25,7 @@ import androidx.annotation.WorkerThread
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.core.Account
import org.linphone.core.Core
import org.linphone.core.CoreListenerStub
@ -39,6 +40,12 @@ class DrawerMenuViewModel @UiThread constructor() : ViewModel() {
val accounts = MutableLiveData<ArrayList<AccountModel>>()
val hideAddAccount = MutableLiveData<Boolean>()
val hideRecordings = MutableLiveData<Boolean>()
val hideSettings = MutableLiveData<Boolean>()
val startAssistantEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
@ -96,6 +103,9 @@ class DrawerMenuViewModel @UiThread constructor() : ViewModel() {
coreContext.postOnCoreThread { core ->
core.addListener(coreListener)
hideRecordings.postValue(corePreferences.disableCallRecordings)
hideSettings.postValue(corePreferences.hideSettings)
computeAccountsList()
}
}
@ -140,5 +150,7 @@ class DrawerMenuViewModel @UiThread constructor() : ViewModel() {
list.add(model)
}
accounts.postValue(list)
hideAddAccount.postValue(corePreferences.oneAccountMax && list.isNotEmpty())
}
}

View file

@ -516,6 +516,7 @@
android:background="@drawable/action_background"
android:text="@string/manage_account_settings"
android:drawableStart="@drawable/gear"
android:visibility="@{viewModel.hideAccountSettings ? View.GONE : View.VISIBLE}"
app:layout_constraintTop_toTopOf="@id/actions_background"
app:layout_constraintStart_toStartOf="@id/actions_background"
app:layout_constraintEnd_toEndOf="@id/actions_background"/>

View file

@ -169,6 +169,7 @@
android:text="@string/assistant_scan_qr_code"
android:drawableStart="@drawable/qr_code"
android:drawablePadding="8dp"
android:visibility="@{viewModel.hideScanQrCode ? View.GONE : View.VISIBLE}"
app:drawableTint="@color/secondary_button_label_color"
app:layout_constraintWidth_max="@dimen/button_max_width"
app:layout_constraintStart_toStartOf="parent"
@ -187,6 +188,7 @@
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/assistant_login_third_party_sip_account"
android:visibility="@{viewModel.hideThirdPartyAccount ? View.GONE : View.VISIBLE}"
app:layout_constraintWidth_max="@dimen/button_max_width"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@ -202,6 +204,7 @@
android:text="@string/assistant_no_account_yet"
android:textSize="14sp"
android:textColor="?attr/color_main2_700"
android:visibility="@{viewModel.hideCreateAccount ? View.GONE : View.VISIBLE}"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/register"
@ -220,6 +223,7 @@
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/assistant_account_register"
android:visibility="@{viewModel.hideCreateAccount ? View.GONE : View.VISIBLE}"
app:layout_constraintVertical_bias="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/no_account_yet"

View file

@ -115,6 +115,7 @@
android:text="@string/drawer_menu_add_account"
android:drawableStart="@drawable/plus_circle"
android:drawablePadding="8dp"
android:visibility="@{viewModel.hideAddAccount ? View.GONE : View.VISIBLE}"
app:drawableTint="@color/secondary_button_label_color"
app:layout_constraintWidth_max="@dimen/button_max_width"
app:layout_constraintStart_toStartOf="parent"
@ -146,6 +147,7 @@
android:drawableStart="@drawable/gear"
android:drawableEnd="@drawable/caret_right"
android:drawablePadding="8dp"
android:visibility="@{viewModel.hideSettings ? View.GONE : View.VISIBLE}"
app:drawableTint="?attr/color_main2_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@ -164,6 +166,7 @@
android:drawableStart="@drawable/microphone_stage"
android:drawableEnd="@drawable/caret_right"
android:drawablePadding="8dp"
android:visibility="@{viewModel.hideRecordings ? View.GONE : View.VISIBLE}"
app:drawableTint="?attr/color_main2_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -97,7 +97,7 @@
android:paddingBottom="@dimen/primary_secondary_buttons_label_padding"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:visibility="@{viewModel.isBroadcastSelected ? View.GONE : View.VISIBLE}"
android:visibility="@{viewModel.hideBroadcast || viewModel.isBroadcastSelected ? View.GONE : View.VISIBLE}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/broadcast"/>
@ -123,7 +123,7 @@
android:paddingBottom="@dimen/primary_secondary_buttons_label_padding"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:visibility="@{viewModel.isBroadcastSelected ? View.GONE : View.VISIBLE}"
android:visibility="@{viewModel.hideBroadcast || viewModel.isBroadcastSelected ? View.GONE : View.VISIBLE}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/meeting_selected"
app:layout_constraintEnd_toEndOf="parent"/>

View file

@ -30,6 +30,7 @@
android:ellipsize="end"
android:drawableEnd="@drawable/caret_right"
android:drawableTint="?attr/color_main2_600"
android:visibility="@{viewModel.ldapAvailable ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/existing_ldap_servers"
app:layout_constraintStart_toStartOf="parent"

View file

@ -248,6 +248,7 @@
android:text="@string/settings_user_interface_title"
android:drawableEnd="@{viewModel.expandUserInterface ? @drawable/caret_up : @drawable/caret_down, default=@drawable/caret_up}"
android:drawableTint="?attr/color_main2_600"
android:visibility="@{viewModel.showThemeSelector ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/network_settings"/>
@ -260,7 +261,7 @@
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:visibility="@{viewModel.expandUserInterface ? View.VISIBLE : View.GONE}"
android:visibility="@{viewModel.showThemeSelector &amp;&amp; viewModel.expandUserInterface ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toBottomOf="@id/user_interface"
bind:viewModel="@{viewModel}"/>