mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Added advanced setting letting user choose whether to record in MKV or SMFF
This commit is contained in:
parent
6375e0db87
commit
043ed77c3a
8 changed files with 82 additions and 5 deletions
|
|
@ -119,6 +119,13 @@ class CorePreferences
|
|||
config.setBool("app", "route_audio_to_speaker_when_video_enabled", value)
|
||||
}
|
||||
|
||||
@get:WorkerThread @set:WorkerThread
|
||||
var callRecordingUseSmffFormat: Boolean
|
||||
get() = config.getBool("app", "use_smff_for_call_recording", false)
|
||||
set(value) {
|
||||
config.setBool("app", "use_smff_for_call_recording", value)
|
||||
}
|
||||
|
||||
@get:WorkerThread @set:WorkerThread
|
||||
var automaticallyStartCallRecording: Boolean
|
||||
get() = config.getBool("app", "auto_start_call_record", false)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import org.linphone.core.tools.Log
|
|||
import org.linphone.ui.GenericViewModel
|
||||
import org.linphone.ui.main.recordings.model.RecordingModel
|
||||
import org.linphone.utils.AudioUtils
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
class RecordingMediaPlayerViewModel
|
||||
@UiThread
|
||||
|
|
@ -56,6 +57,8 @@ class RecordingMediaPlayerViewModel
|
|||
|
||||
val position = MutableLiveData<Int>()
|
||||
|
||||
val isUsingSmffFileFormat = MutableLiveData<Boolean>()
|
||||
|
||||
private var audioFocusRequest: AudioFocusRequestCompat? = null
|
||||
|
||||
private val playerListener = PlayerListener {
|
||||
|
|
@ -88,6 +91,7 @@ class RecordingMediaPlayerViewModel
|
|||
recordingModel = model
|
||||
|
||||
coreContext.postOnCoreThread { core ->
|
||||
isUsingSmffFileFormat.postValue(model.filePath.endsWith(LinphoneUtils.RECORDING_SMFF_FILE_EXTENSION))
|
||||
initPlayer()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ class SettingsViewModel
|
|||
// Advanced settings
|
||||
val startAtBoot = MutableLiveData<Boolean>()
|
||||
val keepAliveThirdPartyAccountsService = MutableLiveData<Boolean>()
|
||||
val useSmffForCallRecording = MutableLiveData<Boolean>()
|
||||
|
||||
val deviceName = MutableLiveData<String>()
|
||||
val fileSharingServerUrl = MutableLiveData<String>()
|
||||
|
|
@ -293,6 +294,7 @@ class SettingsViewModel
|
|||
videoFecEnabled.postValue(core.isFecEnabled)
|
||||
vibrateDuringIncomingCall.postValue(core.isVibrationOnIncomingCallEnabled)
|
||||
autoRecordCalls.postValue(corePreferences.automaticallyStartCallRecording)
|
||||
useSmffForCallRecording.postValue(corePreferences.callRecordingUseSmffFormat)
|
||||
|
||||
useWifiOnly.postValue(core.isWifiOnlyEnabled)
|
||||
allowIpv6.postValue(core.isIpv6Enabled)
|
||||
|
|
@ -419,6 +421,15 @@ class SettingsViewModel
|
|||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun toggleUseSmffForCallRecording() {
|
||||
val newValue = useSmffForCallRecording.value == false
|
||||
coreContext.postOnCoreThread { core ->
|
||||
corePreferences.callRecordingUseSmffFormat = newValue
|
||||
useSmffForCallRecording.postValue(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun toggleVibrateOnIncomingCalls() {
|
||||
val newValue = vibrateDuringIncomingCall.value == false
|
||||
|
|
|
|||
|
|
@ -61,7 +61,8 @@ class LinphoneUtils {
|
|||
|
||||
const val RECORDING_FILE_NAME_HEADER = "call_recording_"
|
||||
const val RECORDING_FILE_NAME_URI_TIMESTAMP_SEPARATOR = "_on_"
|
||||
const val RECORDING_FILE_EXTENSION = ".smff"
|
||||
const val RECORDING_MKV_FILE_EXTENSION = ".mkv"
|
||||
const val RECORDING_SMFF_FILE_EXTENSION = ".smff"
|
||||
|
||||
@WorkerThread
|
||||
fun getDefaultAccount(): Account? {
|
||||
|
|
@ -451,7 +452,13 @@ class LinphoneUtils {
|
|||
|
||||
@WorkerThread
|
||||
fun getRecordingFilePathForAddress(address: Address): String {
|
||||
val fileName = "${RECORDING_FILE_NAME_HEADER}${address.asStringUriOnly()}${RECORDING_FILE_NAME_URI_TIMESTAMP_SEPARATOR}${System.currentTimeMillis()}$RECORDING_FILE_EXTENSION"
|
||||
val extension = if (corePreferences.callRecordingUseSmffFormat) {
|
||||
RECORDING_SMFF_FILE_EXTENSION
|
||||
} else {
|
||||
RECORDING_MKV_FILE_EXTENSION
|
||||
}
|
||||
Log.i("$TAG Using [$extension] file format for call recording")
|
||||
val fileName = "${RECORDING_FILE_NAME_HEADER}${address.asStringUriOnly()}${RECORDING_FILE_NAME_URI_TIMESTAMP_SEPARATOR}${System.currentTimeMillis()}$extension"
|
||||
return FileUtils.getFileStoragePath(fileName, isRecording = true).absolutePath
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@
|
|||
android:padding="15dp"
|
||||
android:src="@drawable/share_network"
|
||||
android:contentDescription="@string/content_description_share_file"
|
||||
android:visibility="gone"
|
||||
android:visibility="@{viewModel.isUsingSmffFileFormat ? View.GONE : View.VISIBLE}"
|
||||
app:tint="@color/gray_main2_500"
|
||||
app:layout_constraintEnd_toStartOf="@id/save"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
|
@ -176,7 +176,7 @@
|
|||
android:padding="15dp"
|
||||
android:src="@drawable/download_simple"
|
||||
android:contentDescription="@string/content_description_save_file"
|
||||
android:visibility="gone"
|
||||
android:visibility="@{viewModel.isUsingSmffFileFormat ? View.GONE : View.VISIBLE}"
|
||||
app:tint="@color/gray_main2_500"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
|
|
|||
|
|
@ -145,6 +145,50 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/keep_alive_service_switch" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/settings_title_style"
|
||||
android:onClick="@{() -> viewModel.toggleUseSmffForCallRecording()}"
|
||||
android:id="@+id/use_smff_call_recording_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:text="@string/settings_advanced_use_smff_format_for_call_recordings_title"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
app:layout_constraintTop_toTopOf="@id/use_smff_call_recording_switch"
|
||||
app:layout_constraintBottom_toTopOf="@id/use_smff_call_recording_subtitle"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/use_smff_call_recording_switch"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/settings_subtitle_style"
|
||||
android:onClick="@{() -> viewModel.toggleUseSmffForCallRecording()}"
|
||||
android:id="@+id/use_smff_call_recording_subtitle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:text="@string/settings_advanced_use_smff_format_for_call_recordings_subtitle"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
app:layout_constraintTop_toBottomOf="@id/use_smff_call_recording_title"
|
||||
app:layout_constraintBottom_toBottomOf="@id/use_smff_call_recording_switch"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/use_smff_call_recording_switch"/>
|
||||
|
||||
<com.google.android.material.materialswitch.MaterialSwitch
|
||||
style="@style/material_switch_style"
|
||||
android:id="@+id/use_smff_call_recording_switch"
|
||||
android:onClick="@{() -> viewModel.toggleUseSmffForCallRecording()}"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:checked="@{viewModel.useSmffForCallRecording}"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/enable_fec_switch" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/settings_title_style"
|
||||
android:id="@+id/media_encryption_label"
|
||||
|
|
@ -156,7 +200,7 @@
|
|||
android:paddingBottom="8dp"
|
||||
android:text="@string/settings_advanced_media_encryption_title"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/enable_fec_switch"/>
|
||||
app:layout_constraintTop_toBottomOf="@id/use_smff_call_recording_switch"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatSpinner
|
||||
style="@style/default_text_style"
|
||||
|
|
|
|||
|
|
@ -266,6 +266,8 @@
|
|||
<string name="settings_advanced_device_id">Nom de l\'appareil</string>
|
||||
<string name="settings_advanced_device_id_hint">Caractères alpha-numériques uniquement</string>
|
||||
<string name="settings_advanced_upload_server_url">URL du serveur de partage de fichier</string>
|
||||
<string name="settings_advanced_use_smff_format_for_call_recordings_title">Enregistrer les appels vidéos utilisant H265/AV1</string>
|
||||
<string name="settings_advanced_use_smff_format_for_call_recordings_subtitle">Utilisera un format de fichier propriétaire</string>
|
||||
<string name="settings_advanced_media_encryption_title">Chiffrement du média</string>
|
||||
<string name="settings_advanced_media_encryption_mandatory_title">Rendre le chiffrement du média obligatoire</string>
|
||||
<string name="settings_advanced_create_e2e_encrypted_conferences_title">Créer en mode chiffré de bout en bout les réunions et les appels de groupe</string>
|
||||
|
|
|
|||
|
|
@ -306,6 +306,8 @@
|
|||
<string name="settings_advanced_device_id">Device ID</string>
|
||||
<string name="settings_advanced_device_id_hint">Alpha-numerical characters only</string>
|
||||
<string name="settings_advanced_upload_server_url">File sharing server URL</string>
|
||||
<string name="settings_advanced_use_smff_format_for_call_recordings_title">Record video calls using H265/AV1</string>
|
||||
<string name="settings_advanced_use_smff_format_for_call_recordings_subtitle">Will use a proprietary file format</string>
|
||||
<string name="settings_advanced_media_encryption_title">Media encryption</string>
|
||||
<string name="settings_advanced_media_encryption_mandatory_title">Media encryption mandatory</string>
|
||||
<string name="settings_advanced_create_e2e_encrypted_conferences_title">Create end-to-end encrypted meetings & group calls</string>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue