diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index b8cc02bf0..7c46baba3 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -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")!! diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt index 2b9f83975..a361506b4 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/LandingViewModel.kt @@ -37,6 +37,12 @@ class LandingViewModel @UiThread constructor() : ViewModel() { val sipIdentity = MutableLiveData() + val hideCreateAccount = MutableLiveData() + + val hideScanQrCode = MutableLiveData() + + val hideThirdPartyAccount = MutableLiveData() + val redirectToDigestAuthEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -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 } } diff --git a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/ScheduleMeetingViewModel.kt b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/ScheduleMeetingViewModel.kt index 73b15ba28..027b04c3d 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/ScheduleMeetingViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/viewmodel/ScheduleMeetingViewModel.kt @@ -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>() + val hideBroadcast = MutableLiveData() + 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 diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt index 3677a073d..9d9956985 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt @@ -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() + val hideAccountSettings = MutableLiveData() + val accountRemovedEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -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() diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt index 69634ce6e..e93b136ee 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt @@ -87,6 +87,7 @@ class SettingsViewModel @UiThread constructor() : ViewModel() { // Contacts settings val showContactsSettings = MutableLiveData() + val ldapAvailable = MutableLiveData() val ldapServers = MutableLiveData>() val cardDavFriendsLists = MutableLiveData>() @@ -123,6 +124,7 @@ class SettingsViewModel @UiThread constructor() : ViewModel() { val useWifiOnly = MutableLiveData() // User Interface settings + val showThemeSelector = MutableLiveData() val theme = MutableLiveData() 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 diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt index 7f6024865..0e0b923c1 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/DrawerMenuViewModel.kt @@ -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>() + val hideAddAccount = MutableLiveData() + + val hideRecordings = MutableLiveData() + + val hideSettings = MutableLiveData() + val startAssistantEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -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()) } } diff --git a/app/src/main/res/layout/account_profile_fragment.xml b/app/src/main/res/layout/account_profile_fragment.xml index 0c69f7bc7..c9c84f135 100644 --- a/app/src/main/res/layout/account_profile_fragment.xml +++ b/app/src/main/res/layout/account_profile_fragment.xml @@ -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"/> diff --git a/app/src/main/res/layout/assistant_landing_fragment.xml b/app/src/main/res/layout/assistant_landing_fragment.xml index 8abba59d0..1b48c4e78 100644 --- a/app/src/main/res/layout/assistant_landing_fragment.xml +++ b/app/src/main/res/layout/assistant_landing_fragment.xml @@ -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" diff --git a/app/src/main/res/layout/drawer_menu.xml b/app/src/main/res/layout/drawer_menu.xml index 2a0ae00ef..4d12c9513 100644 --- a/app/src/main/res/layout/drawer_menu.xml +++ b/app/src/main/res/layout/drawer_menu.xml @@ -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" diff --git a/app/src/main/res/layout/meeting_schedule_fragment.xml b/app/src/main/res/layout/meeting_schedule_fragment.xml index 5cd6ee365..2ae071e27 100644 --- a/app/src/main/res/layout/meeting_schedule_fragment.xml +++ b/app/src/main/res/layout/meeting_schedule_fragment.xml @@ -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"/> diff --git a/app/src/main/res/layout/settings_contacts.xml b/app/src/main/res/layout/settings_contacts.xml index 33dc9a35b..733ca61b9 100644 --- a/app/src/main/res/layout/settings_contacts.xml +++ b/app/src/main/res/layout/settings_contacts.xml @@ -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" diff --git a/app/src/main/res/layout/settings_fragment.xml b/app/src/main/res/layout/settings_fragment.xml index dbbd89f65..7c6cf1f74 100644 --- a/app/src/main/res/layout/settings_fragment.xml +++ b/app/src/main/res/layout/settings_fragment.xml @@ -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 && viewModel.expandUserInterface ? View.VISIBLE : View.GONE}" app:layout_constraintTop_toBottomOf="@id/user_interface" bind:viewModel="@{viewModel}"/>