mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-04-17 21:38:29 +00:00
Added a setting to show past meetings (now hidden by default)
This commit is contained in:
parent
c747bc76c1
commit
e14365be17
8 changed files with 74 additions and 1 deletions
|
|
@ -32,6 +32,7 @@ Group changes to describe their impact on the project, as follows:
|
||||||
- one to hide contacts that have neither a SIP address nor a phone number
|
- one to hide contacts that have neither a SIP address nor a phone number
|
||||||
- one to let app auto-answer call with video sending already enabled
|
- one to let app auto-answer call with video sending already enabled
|
||||||
- one to let edit native contacts Linphone copy in-app instead of opening native addressbook third party app
|
- one to let edit native contacts Linphone copy in-app instead of opening native addressbook third party app
|
||||||
|
- one to show past meetings (they are now hidden by default)
|
||||||
- Added a vu meter for recording & playback volumes (must be enabled in developer settings)
|
- Added a vu meter for recording & playback volumes (must be enabled in developer settings)
|
||||||
- Added support for HDMI audio devices
|
- Added support for HDMI audio devices
|
||||||
- Added video preview during in-call conversation
|
- Added video preview during in-call conversation
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,13 @@ class CorePreferences
|
||||||
config.setBool("app", "create_e2e_encrypted_conferences", value)
|
config.setBool("app", "create_e2e_encrypted_conferences", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@get:AnyThread @set:WorkerThread
|
||||||
|
var showPastMeetings: Boolean
|
||||||
|
get() = config.getBool("ui", "show_past_meetings", false)
|
||||||
|
set(value) {
|
||||||
|
config.setBool("ui", "show_past_meetings", value)
|
||||||
|
}
|
||||||
|
|
||||||
// Contacts related
|
// Contacts related
|
||||||
|
|
||||||
@get:AnyThread @set:WorkerThread
|
@get:AnyThread @set:WorkerThread
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import androidx.annotation.UiThread
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.core.Account
|
import org.linphone.core.Account
|
||||||
import org.linphone.core.AccountListenerStub
|
import org.linphone.core.AccountListenerStub
|
||||||
import org.linphone.core.ConferenceInfo
|
import org.linphone.core.ConferenceInfo
|
||||||
|
|
@ -114,6 +115,9 @@ class MeetingsListViewModel
|
||||||
fetchInProgress.postValue(true)
|
fetchInProgress.postValue(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val showPastMeetings = corePreferences.showPastMeetings
|
||||||
|
val nowInSecs = System.currentTimeMillis() / 1000
|
||||||
|
|
||||||
val sortedSource = source.toList().sortedBy {
|
val sortedSource = source.toList().sortedBy {
|
||||||
it.dateTime
|
it.dateTime
|
||||||
}
|
}
|
||||||
|
|
@ -135,6 +139,14 @@ class MeetingsListViewModel
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
} // This isn't a scheduled conference, don't display it
|
} // This isn't a scheduled conference, don't display it
|
||||||
|
|
||||||
|
if (!showPastMeetings && (info.dateTime + (info.duration * 60) < nowInSecs)) {
|
||||||
|
Log.d(
|
||||||
|
"$TAG Skipping conference info [${info.subject}] with uri [${info.uri?.asStringUriOnly()}] because it's in the past"
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
val add = if (filter.isNotEmpty()) {
|
val add = if (filter.isNotEmpty()) {
|
||||||
val organizerCheck = info.organizer?.asStringUriOnly()?.contains(
|
val organizerCheck = info.organizer?.asStringUriOnly()?.contains(
|
||||||
filter,
|
filter,
|
||||||
|
|
|
||||||
|
|
@ -325,6 +325,12 @@ class SettingsFragment : GenericMainFragment() {
|
||||||
binding.tunnelSettings.tunnelModeSpinner.setSelection(index)
|
binding.tunnelSettings.tunnelModeSpinner.setSelection(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewModel.forceRefreshMeetingsListEvent.observe(viewLifecycleOwner) {
|
||||||
|
it.consume {
|
||||||
|
sharedViewModel.forceRefreshMeetingsListEvent.postValue(Event(true))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.setTurnOnVfsClickListener {
|
binding.setTurnOnVfsClickListener {
|
||||||
showConfirmVfsDialog()
|
showConfirmVfsDialog()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,11 @@ class SettingsViewModel
|
||||||
// Meetings settings
|
// Meetings settings
|
||||||
val showMeetingsSettings = MutableLiveData<Boolean>()
|
val showMeetingsSettings = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
|
val showPastMeetings = MutableLiveData<Boolean>()
|
||||||
|
val forceRefreshMeetingsListEvent: MutableLiveData<Event<Boolean>> by lazy {
|
||||||
|
MutableLiveData<Event<Boolean>>()
|
||||||
|
}
|
||||||
|
|
||||||
val defaultLayout = MutableLiveData<Int>()
|
val defaultLayout = MutableLiveData<Int>()
|
||||||
val availableLayoutsNames = arrayListOf(
|
val availableLayoutsNames = arrayListOf(
|
||||||
AppUtils.getString(R.string.settings_meetings_layout_active_speaker_label),
|
AppUtils.getString(R.string.settings_meetings_layout_active_speaker_label),
|
||||||
|
|
@ -348,6 +353,7 @@ class SettingsViewModel
|
||||||
hideEmptyContacts.postValue(corePreferences.hideContactsWithoutPhoneNumberOrSipAddress)
|
hideEmptyContacts.postValue(corePreferences.hideContactsWithoutPhoneNumberOrSipAddress)
|
||||||
presenceSubscribe.postValue(core.isFriendListSubscriptionEnabled)
|
presenceSubscribe.postValue(core.isFriendListSubscriptionEnabled)
|
||||||
|
|
||||||
|
showPastMeetings.postValue(corePreferences.showPastMeetings)
|
||||||
defaultLayout.postValue(core.defaultConferenceLayout.toInt())
|
defaultLayout.postValue(core.defaultConferenceLayout.toInt())
|
||||||
|
|
||||||
autoShowDialpad.postValue(corePreferences.automaticallyShowDialpad)
|
autoShowDialpad.postValue(corePreferences.automaticallyShowDialpad)
|
||||||
|
|
@ -663,6 +669,16 @@ class SettingsViewModel
|
||||||
expandMeetings.value = expandMeetings.value == false
|
expandMeetings.value = expandMeetings.value == false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UiThread
|
||||||
|
fun toggleShowPastMeetings() {
|
||||||
|
val newValue = showPastMeetings.value == false
|
||||||
|
coreContext.postOnCoreThread {
|
||||||
|
corePreferences.showPastMeetings = newValue
|
||||||
|
showPastMeetings.postValue(newValue)
|
||||||
|
forceRefreshMeetingsListEvent.postValue(Event(true))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
fun setDefaultLayout(layoutValue: Int) {
|
fun setDefaultLayout(layoutValue: Int) {
|
||||||
coreContext.postOnCoreThread { core ->
|
coreContext.postOnCoreThread { core ->
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,35 @@
|
||||||
android:paddingBottom="20dp"
|
android:paddingBottom="20dp"
|
||||||
android:background="@drawable/shape_squircle_white_background">
|
android:background="@drawable/shape_squircle_white_background">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
style="@style/settings_title_style"
|
||||||
|
android:onClick="@{() -> viewModel.toggleShowPastMeetings()}"
|
||||||
|
android:id="@+id/show_past_meetings_title"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="@string/settings_meetings_show_past_meetings_title"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:labelFor="@id/show_past_meetings_switch"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/show_past_meetings_switch"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/show_past_meetings_switch"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/show_past_meetings_switch"/>
|
||||||
|
|
||||||
|
<com.google.android.material.materialswitch.MaterialSwitch
|
||||||
|
style="@style/material_switch_style"
|
||||||
|
android:id="@+id/show_past_meetings_switch"
|
||||||
|
android:onClick="@{() -> viewModel.toggleShowPastMeetings()}"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:checked="@{viewModel.showPastMeetings}"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
style="@style/settings_title_padding_style"
|
style="@style/settings_title_padding_style"
|
||||||
android:id="@+id/layout_title"
|
android:id="@+id/layout_title"
|
||||||
|
|
@ -28,7 +57,7 @@
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:labelFor="@id/layout_spinner"
|
android:labelFor="@id/layout_spinner"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toBottomOf="@id/show_past_meetings_switch"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"/>
|
app:layout_constraintEnd_toEndOf="parent"/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,7 @@
|
||||||
<string name="settings_contacts_ldap_error_toast">Une erreur s\'est produite, la configuration LDAP n\'a pas été sauvegardée !</string>
|
<string name="settings_contacts_ldap_error_toast">Une erreur s\'est produite, la configuration LDAP n\'a pas été sauvegardée !</string>
|
||||||
<string name="settings_contacts_ldap_empty_field_error_toast">Tous les champs doivent être remplis</string>
|
<string name="settings_contacts_ldap_empty_field_error_toast">Tous les champs doivent être remplis</string>
|
||||||
<string name="settings_meetings_title">Réunions</string>
|
<string name="settings_meetings_title">Réunions</string>
|
||||||
|
<string name="settings_meetings_show_past_meetings_title">Afficher les réunions passées</string>
|
||||||
<string name="settings_meetings_default_layout_title">Disposition par défaut</string>
|
<string name="settings_meetings_default_layout_title">Disposition par défaut</string>
|
||||||
<string name="settings_meetings_layout_active_speaker_label">Intervenant actif</string>
|
<string name="settings_meetings_layout_active_speaker_label">Intervenant actif</string>
|
||||||
<string name="settings_meetings_layout_mosaic_label">Mosaïque</string>
|
<string name="settings_meetings_layout_mosaic_label">Mosaïque</string>
|
||||||
|
|
|
||||||
|
|
@ -307,6 +307,7 @@
|
||||||
<string name="settings_contacts_ldap_error_toast">A error occurred, LDAP server not saved!</string>
|
<string name="settings_contacts_ldap_error_toast">A error occurred, LDAP server not saved!</string>
|
||||||
<string name="settings_contacts_ldap_empty_field_error_toast">All fields must be filled</string>
|
<string name="settings_contacts_ldap_empty_field_error_toast">All fields must be filled</string>
|
||||||
<string name="settings_meetings_title">Meetings</string>
|
<string name="settings_meetings_title">Meetings</string>
|
||||||
|
<string name="settings_meetings_show_past_meetings_title">Show past meetings</string>
|
||||||
<string name="settings_meetings_default_layout_title">Default layout</string>
|
<string name="settings_meetings_default_layout_title">Default layout</string>
|
||||||
<string name="settings_meetings_layout_active_speaker_label">Active speaker</string>
|
<string name="settings_meetings_layout_active_speaker_label">Active speaker</string>
|
||||||
<string name="settings_meetings_layout_mosaic_label">Mosaic</string>
|
<string name="settings_meetings_layout_mosaic_label">Mosaic</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue