Added post quantum ZRTP stats + show ZRTP Post Quantum instead of ZRTP in call encryption settings if available + updated ZRTP SAS dialog with new layout
This commit is contained in:
parent
1dc48002f3
commit
95de49be30
19 changed files with 302 additions and 146 deletions
|
@ -13,6 +13,7 @@ Group changes to describe their impact on the project, as follows:
|
|||
## [4.7.0] - Unreleased
|
||||
|
||||
### Added
|
||||
- Post Quantum encryption when using ZRTP
|
||||
- Conference creation with scheduling, video, different layouts, showing who is speaking and who is muted, etc...
|
||||
- Group calls directly from group chat rooms
|
||||
- Chat rooms can be individually muted (no notification when receiving a chat message)
|
||||
|
|
|
@ -15,6 +15,7 @@ auto_net_state_mon=1
|
|||
auto_answer_replacing_calls=1
|
||||
ping_with_options=0
|
||||
use_cpim=1
|
||||
zrtp_key_agreements_suites=MS_ZRTP_KEY_AGREEMENT_K255_KYB512
|
||||
|
||||
[sound]
|
||||
#remove this property for any application that is not Linphone public version itself
|
||||
|
|
|
@ -290,7 +290,11 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
|
|||
encryptionValues.add(MediaEncryption.SRTP.toInt())
|
||||
}
|
||||
if (core.mediaEncryptionSupported(MediaEncryption.ZRTP)) {
|
||||
labels.add(prefs.getString(R.string.call_settings_media_encryption_zrtp))
|
||||
if (core.postQuantumAvailable) {
|
||||
labels.add(prefs.getString(R.string.call_settings_media_encryption_zrtp_post_quantum))
|
||||
} else {
|
||||
labels.add(prefs.getString(R.string.call_settings_media_encryption_zrtp))
|
||||
}
|
||||
encryptionValues.add(MediaEncryption.ZRTP.toInt())
|
||||
}
|
||||
if (core.mediaEncryptionSupported(MediaEncryption.DTLS)) {
|
||||
|
|
|
@ -28,6 +28,8 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
|
||||
val videoStats = MutableLiveData<ArrayList<StatItemData>>()
|
||||
|
||||
val mediaEncryptionStats = MutableLiveData<ArrayList<StatItemData>>()
|
||||
|
||||
val isVideoEnabled = MutableLiveData<Boolean>()
|
||||
|
||||
private var enabled = false
|
||||
|
@ -48,11 +50,16 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
|
||||
val videoEnabled = call.currentParams.isVideoEnabled
|
||||
isVideoEnabled.value = videoEnabled
|
||||
|
||||
updateMediaEncryptionStats()
|
||||
}
|
||||
|
||||
fun enable() {
|
||||
enabled = true
|
||||
call.addListener(listener)
|
||||
|
||||
// Needed for media encryption stats
|
||||
updateMediaEncryptionStats()
|
||||
}
|
||||
|
||||
fun disable() {
|
||||
|
@ -65,8 +72,13 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
super.destroy()
|
||||
}
|
||||
|
||||
private fun updateMediaEncryptionStats() {
|
||||
initCallStats()
|
||||
}
|
||||
|
||||
private fun initCallStats() {
|
||||
val audioList = arrayListOf<StatItemData>()
|
||||
|
||||
audioList.add(StatItemData(StatType.CAPTURE))
|
||||
audioList.add(StatItemData(StatType.PLAYBACK))
|
||||
audioList.add(StatItemData(StatType.PAYLOAD))
|
||||
|
@ -79,9 +91,26 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
audioList.add(StatItemData(StatType.SENDER_LOSS))
|
||||
audioList.add(StatItemData(StatType.RECEIVER_LOSS))
|
||||
audioList.add(StatItemData(StatType.JITTER))
|
||||
|
||||
audioStats.value = audioList
|
||||
|
||||
val mediaEncryptionList = arrayListOf<StatItemData>()
|
||||
|
||||
mediaEncryptionList.add(StatItemData(StatType.MEDIA_ENCRYPTION))
|
||||
|
||||
// ZRTP stats are only available when authentication token isn't null !
|
||||
if (call.currentParams.mediaEncryption == MediaEncryption.ZRTP && call.authenticationToken != null) {
|
||||
mediaEncryptionList.add(StatItemData(StatType.ZRTP_CIPHER_ALGO))
|
||||
mediaEncryptionList.add(StatItemData(StatType.ZRTP_KEY_AGREEMENT_ALGO))
|
||||
mediaEncryptionList.add(StatItemData(StatType.ZRTP_HASH_ALGO))
|
||||
mediaEncryptionList.add(StatItemData(StatType.ZRTP_AUTH_TAG_ALGO))
|
||||
mediaEncryptionList.add(StatItemData(StatType.ZRTP_AUTH_SAS_ALGO))
|
||||
}
|
||||
|
||||
mediaEncryptionStats.value = mediaEncryptionList
|
||||
|
||||
val videoList = arrayListOf<StatItemData>()
|
||||
|
||||
videoList.add(StatItemData(StatType.CAPTURE))
|
||||
videoList.add(StatItemData(StatType.PLAYBACK))
|
||||
videoList.add(StatItemData(StatType.PAYLOAD))
|
||||
|
@ -98,6 +127,7 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
videoList.add(StatItemData(StatType.RECEIVED_RESOLUTION))
|
||||
videoList.add(StatItemData(StatType.SENT_FPS))
|
||||
videoList.add(StatItemData(StatType.RECEIVED_FPS))
|
||||
|
||||
videoStats.value = videoList
|
||||
}
|
||||
|
||||
|
@ -106,6 +136,9 @@ class CallStatisticsData(val call: Call) : GenericContactData(call.remoteAddress
|
|||
for (stat in audioStats.value.orEmpty()) {
|
||||
stat.update(call, stats)
|
||||
}
|
||||
for (stat in mediaEncryptionStats.value.orEmpty()) {
|
||||
stat.update(call, stats)
|
||||
}
|
||||
} else if (stats.type == StreamType.Video) {
|
||||
for (stat in videoStats.value.orEmpty()) {
|
||||
stat.update(call, stats)
|
||||
|
|
|
@ -23,6 +23,7 @@ import androidx.lifecycle.MutableLiveData
|
|||
import java.text.DecimalFormat
|
||||
import org.linphone.R
|
||||
import org.linphone.core.*
|
||||
import org.linphone.utils.AppUtils
|
||||
|
||||
enum class StatType(val nameResource: Int) {
|
||||
CAPTURE(R.string.call_stats_capture_filter),
|
||||
|
@ -41,7 +42,13 @@ enum class StatType(val nameResource: Int) {
|
|||
RECEIVED_RESOLUTION(R.string.call_stats_video_resolution_received),
|
||||
SENT_FPS(R.string.call_stats_video_fps_sent),
|
||||
RECEIVED_FPS(R.string.call_stats_video_fps_received),
|
||||
ESTIMATED_AVAILABLE_DOWNLOAD_BW(R.string.call_stats_estimated_download)
|
||||
ESTIMATED_AVAILABLE_DOWNLOAD_BW(R.string.call_stats_estimated_download),
|
||||
MEDIA_ENCRYPTION(R.string.call_stats_media_encryption),
|
||||
ZRTP_CIPHER_ALGO(R.string.call_stats_zrtp_cipher_algo),
|
||||
ZRTP_KEY_AGREEMENT_ALGO(R.string.call_stats_zrtp_key_agreement_algo),
|
||||
ZRTP_HASH_ALGO(R.string.call_stats_zrtp_hash_algo),
|
||||
ZRTP_AUTH_TAG_ALGO(R.string.call_stats_zrtp_auth_tag_algo),
|
||||
ZRTP_AUTH_SAS_ALGO(R.string.call_stats_zrtp_sas_algo)
|
||||
}
|
||||
|
||||
class StatItemData(val type: StatType) {
|
||||
|
@ -75,6 +82,26 @@ class StatItemData(val type: StatType) {
|
|||
StatType.SENT_FPS -> "${call.currentParams.sentFramerate}"
|
||||
StatType.RECEIVED_FPS -> "${call.currentParams.receivedFramerate}"
|
||||
StatType.ESTIMATED_AVAILABLE_DOWNLOAD_BW -> "${stats.estimatedDownloadBandwidth} kbit/s"
|
||||
StatType.MEDIA_ENCRYPTION -> {
|
||||
when (call.currentParams.mediaEncryption) {
|
||||
MediaEncryption.ZRTP -> {
|
||||
if (stats.isZrtpKeyAgreementAlgoPostQuantum) {
|
||||
AppUtils.getString(R.string.call_settings_media_encryption_zrtp_post_quantum)
|
||||
} else {
|
||||
AppUtils.getString(R.string.call_settings_media_encryption_zrtp)
|
||||
}
|
||||
}
|
||||
MediaEncryption.DTLS -> AppUtils.getString(R.string.call_settings_media_encryption_dtls)
|
||||
MediaEncryption.SRTP -> AppUtils.getString(R.string.call_settings_media_encryption_srtp)
|
||||
MediaEncryption.None -> AppUtils.getString(R.string.call_settings_media_encryption_none)
|
||||
else -> "Unexpected!"
|
||||
}
|
||||
}
|
||||
StatType.ZRTP_CIPHER_ALGO -> stats.zrtpCipherAlgo
|
||||
StatType.ZRTP_KEY_AGREEMENT_ALGO -> stats.zrtpKeyAgreementAlgo
|
||||
StatType.ZRTP_HASH_ALGO -> stats.zrtpHashAlgo
|
||||
StatType.ZRTP_AUTH_TAG_ALGO -> stats.zrtpAuthTagAlgo
|
||||
StatType.ZRTP_AUTH_SAS_ALGO -> stats.zrtpSasAlgo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,9 +112,13 @@ class StatusFragment : GenericFragment<VoipStatusFragmentBinding>() {
|
|||
viewModel.zrtpReadSas = toRead.uppercase(Locale.getDefault())
|
||||
viewModel.zrtpListenSas = toListen.uppercase(Locale.getDefault())
|
||||
viewModel.showIcon = true
|
||||
viewModel.iconResource = R.drawable.security_2_indicator
|
||||
viewModel.iconResource = if (call.audioStats?.isZrtpKeyAgreementAlgoPostQuantum == true) {
|
||||
R.drawable.security_post_quantum
|
||||
} else {
|
||||
R.drawable.security_2_indicator
|
||||
}
|
||||
|
||||
val dialog: Dialog = DialogUtils.getDialog(requireContext(), viewModel)
|
||||
val dialog: Dialog = DialogUtils.getVoipDialog(requireContext(), viewModel)
|
||||
|
||||
viewModel.showDeleteButton(
|
||||
{
|
||||
|
|
BIN
app/src/main/res/drawable-xhdpi/security_post_quantum.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/security_post_quantum.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
|
@ -43,62 +43,6 @@
|
|||
android:gravity="center"
|
||||
android:text="@{viewModel.message, default=Message}"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="5dp"
|
||||
android:orientation="vertical"
|
||||
android:visibility="@{viewModel.showZrtp ? View.VISIBLE : View.GONE, default=gone}">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/dialog_zrtp_local_sas"
|
||||
android:gravity="center"
|
||||
android:textAppearance="@style/dialog_zrtp_white_font" />
|
||||
|
||||
<TextView
|
||||
android:text="@{viewModel.zrtpReadSas}"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:textAppearance="@style/dialog_zrtp_colored_font" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/dialog_zrtp_remote_sas"
|
||||
android:gravity="center"
|
||||
android:textAppearance="@style/dialog_zrtp_white_font" />
|
||||
|
||||
<TextView
|
||||
android:text="@{viewModel.zrtpListenSas}"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:textAppearance="@style/dialog_zrtp_colored_font" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
style="@style/call_stats_font"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center" />
|
||||
|
|
|
@ -16,6 +16,24 @@
|
|||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
style="@style/call_stats_title_font"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical|center"
|
||||
android:text="@string/call_settings_encryption_title"
|
||||
tools:gravity="center" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingBottom="10dp"
|
||||
app:entries="@{data.mediaEncryptionStats}"
|
||||
app:layout="@{@layout/voip_call_stat_cell}" />
|
||||
|
||||
<TextView
|
||||
style="@style/call_stats_title_font"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
@ -15,99 +15,208 @@
|
|||
android:clickable="true"
|
||||
android:focusable="true">
|
||||
|
||||
<View
|
||||
android:id="@+id/background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:background="@drawable/shape_dialog_background"
|
||||
app:layout_constraintTop_toTopOf="@id/dialog_message"
|
||||
app:layout_constraintBottom_toBottomOf="@id/bottom_barrier"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cancel_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:background="@drawable/shape_rect_gray_button"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onCancelClicked()}"
|
||||
android:padding="10dp"
|
||||
android:text="@{viewModel.cancelLabel, default=Cancel}"
|
||||
android:visibility="@{viewModel.showCancel ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toStartOf="@id/delete_button"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintHorizontal_chainStyle="spread"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/delete_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_rect_orange_button"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onDeleteClicked()}"
|
||||
android:padding="10dp"
|
||||
android:text="@{viewModel.deleteLabel, default=Delete}"
|
||||
android:visibility="@{viewModel.showDelete ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toStartOf="@id/ok_button"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/cancel_button" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ok_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:background="@drawable/shape_rect_green_button"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onOkClicked()}"
|
||||
android:padding="10dp"
|
||||
android:text="@{viewModel.okLabel, default=OK}"
|
||||
android:visibility="@{viewModel.showOk ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/delete_button" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/top_barrier"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="top"
|
||||
app:barrierMargin="-10dp"
|
||||
app:constraint_referenced_ids="ok_button,delete_button,cancel_button"/>
|
||||
app:constraint_referenced_ids="dialog_icon, dialog_title, dialog_message" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/bottom_barrier"
|
||||
android:layout_width="wrap_content"
|
||||
<View
|
||||
android:id="@+id/background"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="-20dp"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:background="@drawable/shape_dialog_background"
|
||||
app:layout_constraintBottom_toBottomOf="@id/buttons_bottom_barrier"
|
||||
app:layout_constraintTop_toTopOf="@id/top_barrier"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dialog_icon"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:contentDescription="@{viewModel.title}"
|
||||
android:src="@{viewModel.iconResource, default=@drawable/security_alert_indicator}"
|
||||
android:visibility="@{viewModel.showIcon ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_title"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_title"
|
||||
style="@style/dialog_title_font"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="bottom"
|
||||
app:barrierMargin="20dp"
|
||||
app:constraint_referenced_ids="ok_button,delete_button,cancel_button"/>
|
||||
android:layout_margin="10dp"
|
||||
android:gravity="center"
|
||||
android:text="@{viewModel.title, default=Title}"
|
||||
android:visibility="@{viewModel.showTitle ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_message"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_icon" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_message"
|
||||
style="@style/dialog_message_font"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="10dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:gravity="center"
|
||||
android:text="@{viewModel.message, default=Message}"
|
||||
app:layout_constraintBottom_toTopOf="@id/top_barrier"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_zrtp_1"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_title" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/dialog_zrtp_group"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="@{viewModel.showZrtp ? View.VISIBLE : View.GONE}"
|
||||
app:constraint_referenced_ids="dialog_zrtp_1, dialog_zrtp_sas_1, dialog_zrtp_2, dialog_zrtp_sas_2" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_zrtp_1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/dialog_zrtp_local_sas"
|
||||
android:textAppearance="@style/dialog_zrtp_white_font"
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_zrtp_sas_1"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_message" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_zrtp_sas_1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:gravity="center"
|
||||
android:text="@{viewModel.zrtpReadSas}"
|
||||
android:textAppearance="@style/dialog_zrtp_colored_font"
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_zrtp_2"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_zrtp_1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_zrtp_2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/dialog_zrtp_remote_sas"
|
||||
android:textAppearance="@style/dialog_zrtp_white_font"
|
||||
app:layout_constraintBottom_toTopOf="@id/dialog_zrtp_sas_2"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_zrtp_sas_1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialog_zrtp_sas_2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:gravity="center"
|
||||
android:text="@{viewModel.zrtpListenSas}"
|
||||
android:textAppearance="@style/dialog_zrtp_colored_font"
|
||||
app:layout_constraintBottom_toTopOf="@id/cancel_button"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_zrtp_2" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cancel_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/shape_rect_gray_button"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onCancelClicked()}"
|
||||
android:padding="10dp"
|
||||
android:singleLine="true"
|
||||
android:text="@{viewModel.cancelLabel, default=Cancel}"
|
||||
android:visibility="@{viewModel.showCancel ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toStartOf="@id/delete_button"
|
||||
app:layout_constraintHorizontal_chainStyle="spread"
|
||||
app:layout_constraintStart_toStartOf="@id/background"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_zrtp_sas_2"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/delete_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/shape_rect_orange_button"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onDeleteClicked()}"
|
||||
android:padding="10dp"
|
||||
android:singleLine="true"
|
||||
android:text="@{viewModel.deleteLabel, default=Delete}"
|
||||
android:visibility="@{viewModel.showDelete ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toStartOf="@id/ok_button"
|
||||
app:layout_constraintStart_toEndOf="@id/cancel_button"
|
||||
app:layout_constraintTop_toBottomOf="@id/dialog_zrtp_sas_2"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ok_button"
|
||||
style="@style/big_orange_button_font"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/shape_rect_green_button"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:onClick="@{() -> viewModel.onOkClicked()}"
|
||||
android:padding="10dp"
|
||||
android:singleLine="true"
|
||||
android:text="@{viewModel.okLabel, default=OK}"
|
||||
android:visibility="@{viewModel.showOk ? View.VISIBLE : View.GONE}"
|
||||
app:layout_constraintEnd_toEndOf="@id/background"
|
||||
app:layout_constraintStart_toEndOf="@id/delete_button"
|
||||
app:layout_constraintTop_toTopOf="@id/delete_button"
|
||||
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/buttons_top_barrier"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="bottom"
|
||||
app:constraint_referenced_ids="dialog_message, dialog_zrtp_sas_2" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/buttons_bottom_barrier"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="bottom"
|
||||
app:constraint_referenced_ids="ok_button,delete_button,cancel_button" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
|
|
@ -414,7 +414,7 @@
|
|||
<string name="call_settings_media_encryption_none">Ninguno</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_encryption_mandatory_title">La encriptación de los medios es obligatoria</string>
|
||||
<string name="call_settings_overlay_title">Notificación de llamada superpuesta</string>
|
||||
<string name="call_settings_system_wide_overlay_summary">Se le pedirá que conceda el permiso de superposición</string>
|
||||
|
|
|
@ -277,7 +277,8 @@
|
|||
<string name="call_settings_media_encryption_none">Aucun</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_zrtp_post_quantum">ZRTP Post Quantique</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="content_description_menu_history">Historique</string>
|
||||
<string name="content_description_go_to_contact">Afficher les détails du contact</string>
|
||||
<string name="content_description_call_quality_0">La qualité est très mauvaise</string>
|
||||
|
@ -737,4 +738,10 @@
|
|||
<string name="conference_scheduled_terminated_filter">Terminées</string>
|
||||
<string name="conference_scheduled_future_filter">Programmées</string>
|
||||
<string name="content_description_chat_message_meeting_attachment">Invitation à une réunion</string>
|
||||
<string name="call_stats_media_encryption">Chiffrement du média :</string>
|
||||
<string name="call_stats_zrtp_cipher_algo">Algorithme de chiffrement :</string>
|
||||
<string name="call_stats_zrtp_key_agreement_algo">Algorithme d\'échange de clef :</string>
|
||||
<string name="call_stats_zrtp_hash_algo">Algorithme de hachage :</string>
|
||||
<string name="call_stats_zrtp_auth_tag_algo">Algorithme d\'authentification :</string>
|
||||
<string name="call_stats_zrtp_sas_algo">Algorithme SAS :</string>
|
||||
</resources>
|
|
@ -224,7 +224,7 @@
|
|||
<string name="call_settings_encryption_title">Média titkosítás</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_encryption_mandatory_title">Média titkosítása kötelező</string>
|
||||
<string name="call_settings_overlay_title">Hívás értesítés átfedése</string>
|
||||
<string name="call_settings_system_wide_overlay_title">Átfedés megjelenítése az alkalmazáson kívül</string>
|
||||
|
|
|
@ -254,7 +254,7 @@
|
|||
<string name="call_settings_media_encryption_none">Nenhuma</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_use_telecom_manager_title">Melhore as interações com dispositivos bluetooth</string>
|
||||
<string name="call_settings_use_telecom_manager_summary">Requer algumas permissões extras</string>
|
||||
<string name="call_settings_system_wide_overlay_title">Mostrar sobreposição fora do aplicativo</string>
|
||||
|
|
|
@ -256,7 +256,7 @@
|
|||
<string name="call_settings_go_to_android_notification_settings">Настройки уведомлений Android</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_auto_start_recording_title">Автоматически начинать запись разговоров</string>
|
||||
<string name="chat_settings_file_sharing_url_title">URL сервера обмена</string>
|
||||
<string name="chat_settings_file_sharing_url_summary">Не изменяйте, если вы не знаете, что делаете!</string>
|
||||
|
|
|
@ -271,7 +271,7 @@
|
|||
<string name="call_settings_media_encryption_none">無</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_system_wide_overlay_summary">系統將請您授權「顯示在其他應用程式上層」權限</string>
|
||||
<string name="call_settings_rfc2833_dtmf_title">傳送帶内撥號音(RFC 2833)</string>
|
||||
<string name="call_settings_auto_start_title">立即開始通話</string>
|
||||
|
|
|
@ -360,6 +360,12 @@
|
|||
<string name="call_stats_decoder_name">Decoder:</string>
|
||||
<string name="call_stats_player_filter">Player filter:</string>
|
||||
<string name="call_stats_capture_filter">Capture filter:</string>
|
||||
<string name="call_stats_media_encryption">Media encryption:</string>
|
||||
<string name="call_stats_zrtp_cipher_algo">Cipher algorithm:</string>
|
||||
<string name="call_stats_zrtp_key_agreement_algo">Key agreement algorithm:</string>
|
||||
<string name="call_stats_zrtp_hash_algo">Hash algorithm:</string>
|
||||
<string name="call_stats_zrtp_auth_tag_algo">Authentication algorithm:</string>
|
||||
<string name="call_stats_zrtp_sas_algo">SAS algorithm:</string>
|
||||
|
||||
<!-- Assistant -->
|
||||
<string name="assistant_welcome_title">Welcome</string>
|
||||
|
@ -497,7 +503,8 @@
|
|||
<string name="call_settings_media_encryption_none">None</string>
|
||||
<string name="call_settings_media_encryption_srtp">SRTP</string>
|
||||
<string name="call_settings_media_encryption_zrtp">ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS</string>
|
||||
<string name="call_settings_media_encryption_zrtp_post_quantum">Post Quantum ZRTP</string>
|
||||
<string name="call_settings_media_encryption_dtls">DTLS-SRTP</string>
|
||||
<string name="call_settings_encryption_mandatory_title">Media encryption mandatory</string>
|
||||
<string name="call_settings_use_telecom_manager_title">Improve interactions with bluetooth devices</string>
|
||||
<string name="call_settings_use_telecom_manager_summary">Requires some extra permissions</string>
|
||||
|
|
|
@ -341,7 +341,7 @@
|
|||
|
||||
<style name="dialog_title_font" parent="@android:style/TextAppearance.Medium">
|
||||
<item name="android:textColor">@color/white_color</item>
|
||||
<item name="android:textSize">21.7sp</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
<item name="android:fontFamily">sans-serif</item>
|
||||
<item name="android:lineSpacingExtra">6.7sp</item>
|
||||
|
@ -349,7 +349,7 @@
|
|||
|
||||
<style name="dialog_message_font" parent="@android:style/TextAppearance.Small">
|
||||
<item name="android:textColor">@color/white_color</item>
|
||||
<item name="android:textSize">21sp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
</style>
|
||||
|
||||
<style name="dialog_cancel_button_font" parent="@android:style/TextAppearance.Medium">
|
||||
|
@ -374,7 +374,7 @@
|
|||
|
||||
<style name="dialog_zrtp_white_font" parent="@android:style/TextAppearance.Medium">
|
||||
<item name="android:textColor">@color/white_color</item>
|
||||
<item name="android:textSize">20sp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
<item name="android:fontFamily">sans-serif</item>
|
||||
<item name="android:lineSpacingExtra">8.3sp</item>
|
||||
</style>
|
||||
|
|
Loading…
Reference in a new issue