Merge tag 'v1.2.0' into sc

v1.2.0

Change-Id: I900672607ec264e60c96c886d0accb053934fa4a

Conflicts:
	vector/src/main/res/xml/vector_settings_labs.xml
This commit is contained in:
SpiritCroc 2021-08-12 09:03:42 +02:00
commit 58f5310e83
57 changed files with 1186 additions and 131 deletions

View file

@ -1,3 +1,17 @@
Changes in Element v1.2.0 (2021-08-12)
======================================
Features ✨
----------
- Reorganise Advanced Notifications in to Default Notifications, Keywords and Mentions, Other (This feature is hidden in the release ui until a future release date.) ([#3646](https://github.com/vector-im/element-android/issues/3646))
- Voice Message - Enable by default, remove from labs ([#3817](https://github.com/vector-im/element-android/issues/3817))
Bugfixes 🐛
----------
- Voice Message - UI Improvements ([#3798](https://github.com/vector-im/element-android/issues/3798))
- Stop VMs playing in the timeline if a new VM recording is started ([#3802](https://github.com/vector-im/element-android/issues/3802))
Changes in Element v1.1.16 (2021-08-09)
=======================================

View file

@ -0,0 +1,2 @@
Hlavní změny v této verzi: implementace hlasových zpráv dosupných v rámci laboratoře.
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
Main changes in this version: Voice Message is enabled by default.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.1.16

View file

@ -0,0 +1,2 @@
Põhilised muutused selles versioonis: häälsõnumid katsete all.
Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
تغییرات اصلی در این نگارش: پیاده‌سازی پیام صوتی در تنظیمات آزمایشگاه‌ها.
گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -1 +1 @@
گپ و تماس نامتمرکز امن. داده‌هایتان را از اشخاص سوم امن نگه دارید.
پیام‌رسان گروهی - پیام‌رسانی رمزنگاشته، گپ گروهی و تماس‌های ویدیویی

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : rafraîchissement des styles et des thèmes, et nouvelles fonctionnalités pour les espaces.
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.10

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : rafraîchissement des styles et des thèmes, et nouvelles fonctionnalités pour les espaces (correction for 1.1.10).
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.11

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : rafraîchissement des styles et des thèmes, et correction dun plantage après un appel vidéo.
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.12

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : principalement des corrections de bogues et de stabilité.
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.13

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : correction dun problème concernant les messages chiffrés.
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.14

View file

@ -0,0 +1,2 @@
Principaux changements pour cette version : ajout des messages vocaux dans les expérimentations.
Intégralité des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
Perubahan utama dalam versi ini: implementasi pesan suara dalam pengaturan labs.
Changelog lanjutan: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
Modifiche principali in questa versione: implementazione messaggi vocali nelle impostazioni Laboratori.
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
Principais mudanças nesta versão: implementação de mensagem de voz em configurações labs.
Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: tema- och stiluppdatering och nya funktioner för utrymmen.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.10

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: tema- och stiluppdatering och nya funktioner för utrymmen (buggfix för 1.1.10).
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.11

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: tema- och stiluppdatering och fixa en krasch efter videosamtal.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.12

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: huvudsakligen stabilitets- och buggfixuppdatering.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.13

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: fixa ett problem med krypterade meddelanden.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.14

View file

@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: röstmeddelandeimplementation under experimentinställningar.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -0,0 +1,2 @@
此版本中的主要變動:實驗室設定下,語音訊息的實作。
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.1.15

View file

@ -13,8 +13,8 @@ kapt {
// Note: 2 digits max for each value
ext.versionMajor = 1
ext.versionMinor = 1
ext.versionPatch = 16
ext.versionMinor = 2
ext.versionPatch = 0
ext.scVersion = 39
@ -144,6 +144,10 @@ android {
resValue "bool", "useLoginV1", "true"
resValue "bool", "useLoginV2", "false"
// NotificationSettingsV2 is disabled. To be released in conjunction with iOS/Web
resValue "bool", "useNotificationSettingsV1", "true"
resValue "bool", "useNotificationSettingsV2", "false"
buildConfigField "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy", "outboundSessionKeySharingStrategy", "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy.WhenTyping"
buildConfigField "Long", "VOICE_MESSAGE_DURATION_LIMIT_MS", "120_000L"

View file

@ -22,19 +22,10 @@ import android.view.View
import android.widget.RadioGroup
import androidx.preference.PreferenceViewHolder
import im.vector.app.R
import im.vector.app.features.settings.notifications.NotificationIndex
class PushRulePreference : VectorPreference {
enum class NotificationIndex(val index: Int) {
OFF(0),
SILENT(1),
NOISY(2);
companion object {
fun fromInt(index: Int) = values().first { it.index == index }
}
}
/**
* @return the selected push rule index
*/
@ -66,7 +57,7 @@ class PushRulePreference : VectorPreference {
*/
private fun refreshSummary() {
summary = context.getString(when (index) {
NotificationIndex.OFF -> R.string.notification_off
NotificationIndex.OFF -> R.string.notification_off
NotificationIndex.SILENT -> R.string.notification_silent
NotificationIndex.NOISY, null -> R.string.notification_noisy
})
@ -83,7 +74,7 @@ class PushRulePreference : VectorPreference {
radioGroup?.setOnCheckedChangeListener(null)
when (index) {
NotificationIndex.OFF -> {
NotificationIndex.OFF -> {
radioGroup?.check(R.id.bingPreferenceRadioBingRuleOff)
}
NotificationIndex.SILENT -> {

View file

@ -0,0 +1,45 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.core.preference
import android.content.Context
import android.util.AttributeSet
import android.widget.TextView
import androidx.preference.CheckBoxPreference
import androidx.preference.PreferenceViewHolder
class VectorCheckboxPreference : CheckBoxPreference {
// Note: @JvmOverload does not work here...
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context) : super(context)
init {
// Set to false to remove the space when there is no icon
isIconSpaceReserved = true
}
override fun onBindViewHolder(holder: PreferenceViewHolder) {
// display the title in multi-line to avoid ellipsis.
(holder.findViewById(android.R.id.title) as? TextView)?.isSingleLine = false
super.onBindViewHolder(holder)
}
}

View file

@ -989,7 +989,7 @@ class RoomDetailFragment @Inject constructor(
autoCompleter.exitSpecialMode()
views.composerLayout.collapse()
views.voiceMessageRecorderView.isVisible = text.isBlank() && vectorPreferences.labsUseVoiceMessage()
views.voiceMessageRecorderView.isVisible = text.isBlank()
updateComposerText(text)
views.composerLayout.views.sendButton.contentDescription = getString(R.string.send)
@ -1062,6 +1062,9 @@ class RoomDetailFragment @Inject constructor(
notificationDrawerManager.setCurrentRoom(roomDetailArgs.roomId)
roomDetailPendingActionStore.data?.let { handlePendingAction(it) }
roomDetailPendingActionStore.data = null
// Removed listeners should be set again
setupVoiceMessageView()
}
private fun handlePendingAction(roomDetailPendingAction: RoomDetailPendingAction) {
@ -1327,7 +1330,7 @@ class RoomDetailFragment @Inject constructor(
}
override fun onTextBlankStateChanged(isBlank: Boolean) {
if (!views.composerLayout.views.sendButton.isVisible && vectorPreferences.labsUseVoiceMessage()) {
if (!views.composerLayout.views.sendButton.isVisible) {
// Animate alpha to prevent overlapping with the animation of the send button
views.voiceMessageRecorderView.alpha = 0f
views.voiceMessageRecorderView.isVisible = true
@ -1347,7 +1350,6 @@ class RoomDetailFragment @Inject constructor(
if (text.isNotBlank()) {
// We collapse ASAP, if not there will be a slight annoying delay
views.composerLayout.collapse(true)
views.voiceMessageRecorderView.isVisible = vectorPreferences.labsUseVoiceMessage()
lockSendButton = true
roomDetailViewModel.handle(RoomDetailAction.SendMessage(text, vectorPreferences.isMarkdownEnabled()))
emojiPopup.dismiss()
@ -1401,10 +1403,10 @@ class RoomDetailFragment @Inject constructor(
if (state.canSendMessage) {
if (!views.voiceMessageRecorderView.isActive()) {
views.composerLayout.isVisible = true
views.voiceMessageRecorderView.isVisible = vectorPreferences.labsUseVoiceMessage() && views.composerLayout.text?.isBlank().orFalse()
views.voiceMessageRecorderView.isVisible = views.composerLayout.text?.isBlank().orFalse()
views.composerLayout.setRoomEncrypted(summary.isEncrypted)
views.notificationAreaView.render(NotificationAreaView.State.Hidden)
views.composerLayout.alwaysShowSendButton = !vectorPreferences.labsUseVoiceMessage()
views.composerLayout.alwaysShowSendButton = false
}
} else {
views.composerLayout.isVisible = false

View file

@ -20,6 +20,7 @@ import android.content.Context
import android.text.format.DateUtils
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
@ -87,6 +88,15 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
initListeners()
}
override fun onVisibilityChanged(changedView: View, visibility: Int) {
super.onVisibilityChanged(changedView, visibility)
if (changedView == this && visibility == VISIBLE) {
views.voiceMessageMicButton.contentDescription = context.getString(R.string.a11y_start_voice_message)
} else {
views.voiceMessageMicButton.contentDescription = ""
}
}
fun initVoiceRecordingViews() {
recordingState = RecordingState.NONE
@ -211,6 +221,7 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
}
RecordingState.CANCELLED -> {
hideRecordingViews(isCancelled = true)
vibrate(context)
}
RecordingState.LOCKED -> {
if (isRecordingStateChanged) { // Do not update views if it was already in locked state.
@ -222,6 +233,9 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
}
RecordingState.STARTED -> {
showRecordingViews()
val translationAmount = distanceX.coerceAtMost(distanceToCancel)
views.voiceMessageMicButton.translationX = -translationAmount * rtlXMultiplier
views.voiceMessageSlideToCancel.translationX = -translationAmount / 2 * rtlXMultiplier
}
RecordingState.NONE -> Timber.d("VoiceMessageRecorderView shouldn't be in NONE state while moving.")
RecordingState.PLAYBACK -> Timber.d("VoiceMessageRecorderView shouldn't be in PLAYBACK state while moving.")
@ -237,9 +251,9 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
if (recordingState == RecordingState.STARTED) {
// Determine if cancelling or locking for the first move action.
if (((currentX < firstX && rtlXMultiplier == 1) || (currentX > firstX && rtlXMultiplier == -1))
&& distanceX > distanceY) {
&& distanceX > distanceY && distanceX > lastDistanceX) {
recordingState = RecordingState.CANCELLING
} else if (currentY < firstY && distanceY > distanceX) {
} else if (currentY < firstY && distanceY > distanceX && distanceY > lastDistanceY) {
recordingState = RecordingState.LOCKING
}
} else if (recordingState == RecordingState.CANCELLING) {
@ -518,12 +532,14 @@ class VoiceMessageRecorderView @JvmOverloads constructor(
}
is VoiceMessagePlaybackTracker.Listener.State.Playing -> {
views.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_pause)
views.voicePlaybackControlButton.contentDescription = context.getString(R.string.a11y_pause_voice_message)
val formattedTimerText = DateUtils.formatElapsedTime((state.playbackTime / 1000).toLong())
views.voicePlaybackTime.text = formattedTimerText
}
is VoiceMessagePlaybackTracker.Listener.State.Paused,
is VoiceMessagePlaybackTracker.Listener.State.Idle -> {
views.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_play)
views.voicePlaybackControlButton.contentDescription = context.getString(R.string.a11y_play_voice_message)
}
}
}

View file

@ -68,7 +68,8 @@ class VoiceMessagePlaybackTracker @Inject constructor() {
.forEach { key ->
val state = states[key]
if (state is Listener.State.Playing) {
setState(key, Listener.State.Paused(state.playbackTime))
// Paused(state.playbackTime) state should also be considered later.
setState(key, Listener.State.Idle)
}
}
}

View file

@ -74,6 +74,7 @@ abstract class MessageVoiceItem : AbsMessageItem<MessageVoiceItem.Holder>() {
contentUploadStateTrackerBinder.bind(attributes.informationData.eventId, izLocalFile, holder.progressLayout)
} else {
holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_cross)
holder.voicePlaybackControlButton.contentDescription = holder.view.context.getString(R.string.error_voice_message_unable_to_play)
holder.progressLayout.isVisible = false
}
@ -101,16 +102,19 @@ abstract class MessageVoiceItem : AbsMessageItem<MessageVoiceItem.Holder>() {
private fun renderIdleState(holder: Holder) {
holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_play)
holder.voicePlaybackControlButton.contentDescription = holder.view.context.getString(R.string.a11y_play_voice_message)
holder.voicePlaybackTime.text = formatPlaybackTime(duration)
}
private fun renderPlayingState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Playing) {
holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_pause)
holder.voicePlaybackControlButton.contentDescription = holder.view.context.getString(R.string.a11y_pause_voice_message)
holder.voicePlaybackTime.text = formatPlaybackTime(state.playbackTime)
}
private fun renderPausedState(holder: Holder, state: VoiceMessagePlaybackTracker.Listener.State.Paused) {
holder.voicePlaybackControlButton.setImageResource(R.drawable.ic_play_pause_play)
holder.voicePlaybackControlButton.contentDescription = holder.view.context.getString(R.string.a11y_play_voice_message)
holder.voicePlaybackTime.text = formatPlaybackTime(state.playbackTime)
}

View file

@ -156,8 +156,6 @@ class VectorPreferences @Inject constructor(private val context: Context) {
const val SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE = "SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE"
const val SETTINGS_LABS_SPACES_HOME_AS_ORPHAN = "SETTINGS_LABS_SPACES_HOME_AS_ORPHAN"
const val SETTINGS_LABS_VOICE_MESSAGE = "SETTINGS_LABS_VOICE_MESSAGE"
private const val SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY"
private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY"
private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
@ -1100,8 +1098,4 @@ class VectorPreferences @Inject constructor(private val context: Context) {
putInt(TAKE_PHOTO_VIDEO_MODE, mode)
}
}
fun labsUseVoiceMessage(): Boolean {
return defaultPrefs.getBoolean(SETTINGS_LABS_VOICE_MESSAGE, false)
}
}

View file

@ -0,0 +1,54 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.notifications
import org.matrix.android.sdk.api.pushrules.rest.PushRule
import org.matrix.android.sdk.api.pushrules.toJson
enum class NotificationIndex {
OFF,
SILENT,
NOISY;
}
/**
* Given a push rule determine the NotificationIndex by comparing it to the static push rule definitions.
* Used when determining the selected state of the PushRulePreference.
*/
val PushRule.notificationIndex: NotificationIndex? get() =
NotificationIndex.values().firstOrNull {
// Get the actions for the index
val standardAction = getStandardAction(this.ruleId, it) ?: return@firstOrNull false
val indexActions = standardAction.actions ?: listOf()
// Check if the input rule matches a rule generated from the static rule definitions
val targetRule = this.copy(enabled = standardAction != StandardActions.Disabled, actions = indexActions.toJson())
ruleMatches(this, targetRule)
}
/**
* A check to determine if two push rules should be considered a match.
*/
private fun ruleMatches(rule: PushRule, targetRule: PushRule): Boolean {
// Rules match if both are disabled, or if both are enabled and their highlight/sound/notify actions match up.
return (!rule.enabled && !targetRule.enabled)
|| (rule.enabled
&& targetRule.enabled
&& rule.getHighlight() == targetRule.getHighlight()
&& rule.getNotificationSound() == targetRule.getNotificationSound()
&& rule.shouldNotify() == targetRule.shouldNotify()
&& rule.shouldNotNotify() == targetRule.shouldNotNotify())
}

View file

@ -16,76 +16,75 @@
package im.vector.app.features.settings.notifications
import im.vector.app.core.preference.PushRulePreference
import org.matrix.android.sdk.api.pushrules.RuleIds
fun getStandardAction(ruleId: String, index: PushRulePreference.NotificationIndex): StandardActions? {
fun getStandardAction(ruleId: String, index: NotificationIndex): StandardActions? {
return when (ruleId) {
RuleIds.RULE_ID_CONTAIN_DISPLAY_NAME ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.HighlightDefaultSound
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.HighlightDefaultSound
}
RuleIds.RULE_ID_CONTAIN_USER_NAME ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.HighlightDefaultSound
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.HighlightDefaultSound
}
RuleIds.RULE_ID_ROOM_NOTIF ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.Highlight
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.Highlight
}
RuleIds.RULE_ID_ONE_TO_ONE_ROOM ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.DontNotify
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.DontNotify
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_ONE_TO_ONE_ENCRYPTED_ROOM ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.DontNotify
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.DontNotify
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_ALL_OTHER_MESSAGES_ROOMS ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.DontNotify
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.DontNotify
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_ENCRYPTED ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.DontNotify
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.DontNotify
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_INVITE_ME ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_CALL ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyRingSound
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.NotifyRingSound
}
RuleIds.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.DontNotify
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Disabled
PushRulePreference.NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
NotificationIndex.OFF -> StandardActions.DontNotify
NotificationIndex.SILENT -> StandardActions.Disabled
NotificationIndex.NOISY -> StandardActions.NotifyDefaultSound
}
RuleIds.RULE_ID_TOMBSTONE ->
when (index) {
PushRulePreference.NotificationIndex.OFF -> StandardActions.Disabled
PushRulePreference.NotificationIndex.SILENT -> StandardActions.Notify
PushRulePreference.NotificationIndex.NOISY -> StandardActions.Highlight
NotificationIndex.OFF -> StandardActions.Disabled
NotificationIndex.SILENT -> StandardActions.Notify
NotificationIndex.NOISY -> StandardActions.Highlight
}
else -> null
}

View file

@ -18,16 +18,13 @@ package im.vector.app.features.settings.notifications
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import im.vector.app.R
import im.vector.app.core.preference.PushRulePreference.NotificationIndex
import im.vector.app.core.preference.PushRulePreference
import im.vector.app.core.preference.VectorPreference
import im.vector.app.core.utils.toast
import im.vector.app.features.settings.VectorSettingsBaseFragment
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.pushrules.RuleIds
import org.matrix.android.sdk.api.pushrules.rest.PushRule
import org.matrix.android.sdk.api.pushrules.rest.PushRuleAndKind
import org.matrix.android.sdk.api.pushrules.toJson
import javax.inject.Inject
class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor()
@ -41,7 +38,6 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor()
for (preferenceKey in prefKeyToPushRuleId.keys) {
val preference = findPreference<VectorPreference>(preferenceKey)
if (preference is PushRulePreference) {
// preference.isEnabled = null != rules && isConnected && pushManager.areDeviceNotificationsAllowed()
val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(prefKeyToPushRuleId[preferenceKey])
if (ruleAndKind == null) {
@ -49,7 +45,7 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor()
preference.isVisible = false
} else {
preference.isVisible = true
val initialIndex = getNotificationIndexForRule(ruleAndKind.pushRule)
val initialIndex = ruleAndKind.pushRule.notificationIndex
preference.setIndex(initialIndex)
preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val newIndex = newValue as NotificationIndex
@ -87,28 +83,6 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor()
}
}
private fun getNotificationIndexForRule(rule: PushRule): NotificationIndex? {
return NotificationIndex.values().firstOrNull {
// Get the actions for the index
val standardAction = getStandardAction(rule.ruleId, it) ?: return@firstOrNull false
val indexActions = standardAction.actions ?: listOf()
// Check if the input rule matches a rule generated from the static rule definitions
val targetRule = rule.copy(enabled = standardAction != StandardActions.Disabled, actions = indexActions.toJson())
ruleMatches(rule, targetRule)
}
}
private fun ruleMatches(rule: PushRule, targetRule: PushRule): Boolean {
// Rules match if both are disabled, or if both are enabled and their highlight/sound/notify actions match up.
return (!rule.enabled && !targetRule.enabled)
|| (rule.enabled
&& targetRule.enabled
&& rule.getHighlight() == targetRule.getHighlight()
&& rule.getNotificationSound() == targetRule.getNotificationSound()
&& rule.shouldNotify() == targetRule.shouldNotify()
&& rule.shouldNotNotify() == targetRule.shouldNotNotify())
}
private fun refreshDisplay() {
listView?.adapter?.notifyDataSetChanged()
}

View file

@ -0,0 +1,35 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.notifications
import im.vector.app.R
import org.matrix.android.sdk.api.pushrules.RuleIds
class VectorSettingsDefaultNotificationPreferenceFragment
: VectorSettingsPushRuleNotificationPreferenceFragment() {
override var titleRes: Int = R.string.settings_notification_default
override val preferenceXmlRes = R.xml.vector_settings_notification_default
override val prefKeyToPushRuleId = mapOf(
"SETTINGS_PUSH_RULE_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY" to RuleIds.RULE_ID_ONE_TO_ONE_ROOM,
"SETTINGS_PUSH_RULE_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY" to RuleIds.RULE_ID_ALL_OTHER_MESSAGES_ROOMS,
"SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY" to RuleIds.RULE_ID_ONE_TO_ONE_ENCRYPTED_ROOM,
"SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY" to RuleIds.RULE_ID_ENCRYPTED
)
}

View file

@ -0,0 +1,34 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.notifications
import im.vector.app.R
import org.matrix.android.sdk.api.pushrules.RuleIds
class VectorSettingsKeywordAndMentionsNotificationPreferenceFragment
: VectorSettingsPushRuleNotificationPreferenceFragment() {
override var titleRes: Int = R.string.settings_notification_mentions_and_keywords
override val preferenceXmlRes = R.xml.vector_settings_notification_mentions_and_keywords
override val prefKeyToPushRuleId = mapOf(
"SETTINGS_PUSH_RULE_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY" to RuleIds.RULE_ID_CONTAIN_DISPLAY_NAME,
"SETTINGS_PUSH_RULE_CONTAINING_MY_USER_NAME_PREFERENCE_KEY" to RuleIds.RULE_ID_CONTAIN_USER_NAME,
"SETTINGS_PUSH_RULE_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY" to RuleIds.RULE_ID_ROOM_NOTIF
)
}

View file

@ -0,0 +1,35 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.notifications
import im.vector.app.R
import org.matrix.android.sdk.api.pushrules.RuleIds
class VectorSettingsOtherNotificationPreferenceFragment
: VectorSettingsPushRuleNotificationPreferenceFragment() {
override var titleRes: Int = R.string.settings_notification_other
override val preferenceXmlRes = R.xml.vector_settings_notification_other
override val prefKeyToPushRuleId = mapOf(
"SETTINGS_PUSH_RULE_INVITED_TO_ROOM_PREFERENCE_KEY" to RuleIds.RULE_ID_INVITE_ME,
"SETTINGS_PUSH_RULE_CALL_INVITATIONS_PREFERENCE_KEY" to RuleIds.RULE_ID_CALL,
"SETTINGS_PUSH_RULE_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY" to RuleIds.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS,
"SETTINGS_PUSH_RULE_ROOMS_UPGRADED_KEY" to RuleIds.RULE_ID_TOMBSTONE
)
}

View file

@ -0,0 +1,80 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.notifications
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import im.vector.app.core.preference.VectorCheckboxPreference
import im.vector.app.core.utils.toast
import im.vector.app.features.settings.VectorSettingsBaseFragment
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.pushrules.rest.PushRuleAndKind
abstract class VectorSettingsPushRuleNotificationPreferenceFragment
: VectorSettingsBaseFragment() {
abstract val prefKeyToPushRuleId: Map<String, String>
override fun bindPref() {
for (preferenceKey in prefKeyToPushRuleId.keys) {
val preference = findPreference<VectorCheckboxPreference>(preferenceKey)!!
val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(prefKeyToPushRuleId[preferenceKey])
if (ruleAndKind == null) {
// The rule is not defined, hide the preference
preference.isVisible = false
} else {
preference.isVisible = true
val initialIndex = ruleAndKind.pushRule.notificationIndex
preference.isChecked = initialIndex != NotificationIndex.OFF
preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
val newIndex = if (newValue as Boolean) NotificationIndex.NOISY else NotificationIndex.OFF
val standardAction = getStandardAction(ruleAndKind.pushRule.ruleId, newIndex) ?: return@OnPreferenceChangeListener false
val enabled = standardAction != StandardActions.Disabled
val newActions = standardAction.actions
displayLoadingView()
lifecycleScope.launch {
val result = runCatching {
session.updatePushRuleActions(ruleAndKind.kind,
ruleAndKind.pushRule.ruleId,
enabled,
newActions)
}
if (!isAdded) {
return@launch
}
hideLoadingView()
result.onSuccess {
preference.isChecked = newValue
}
result.onFailure { failure ->
// Restore the previous value
refreshDisplay()
activity?.toast(errorFormatter.toHumanReadable(failure))
}
}
false
}
}
}
}
private fun refreshDisplay() {
listView?.adapter?.notifyDataSetChanged()
}
}

View file

@ -35,11 +35,6 @@ class TestPushRulesSettings @Inject constructor(private val activeSessionHolder:
RuleIds.RULE_ID_ONE_TO_ONE_ROOM,
RuleIds.RULE_ID_ALL_OTHER_MESSAGES_ROOMS)
val ruleSettingsName = arrayOf(R.string.settings_containing_my_display_name,
R.string.settings_containing_my_user_name,
R.string.settings_messages_in_one_to_one,
R.string.settings_messages_in_group_chat)
override fun perform(activityResultLauncher: ActivityResultLauncher<Intent>) {
val session = activeSessionHolder.getSafeActiveSession() ?: return
val pushRules = session.getPushRules().getAllRules()

View file

@ -76,4 +76,3 @@
</LinearLayout>

View file

@ -2794,7 +2794,7 @@
<string name="command_description_create_space">Založit prostor</string>
<string name="search_hint_room_name">Hledat jméno</string>
<string name="room_settings_room_access_restricted_description">Kdokoli v prostoru s touto místností ji může nalézt a vstoupit. Jen správci místnosti ji mohou připojit k prostoru.</string>
<string name="room_settings_room_access_restricted_title">Prostory</string>
<string name="room_settings_room_access_restricted_title">Pouze členové prostoru</string>
<string name="room_settings_room_access_public_description">Kdokoli může místnost nalézt a vstoupit</string>
<string name="room_settings_room_access_public_title">Veřejná</string>
<string name="room_settings_room_access_private_description">Pouze pozvaní mohou místnost nalézt a vstoupit</string>
@ -2903,4 +2903,36 @@
<item quantity="few">%d zmeškané hlasové hovory</item>
<item quantity="other">%d zmeškaných hlasových hovorů</item>
</plurals>
<string name="decide_which_spaces_can_access">Rozhodněte, které prostory mají přístup do této místnosti. Pokud je vybrán prostor, jeho členové budou moci najít název místnosti a připojit se k ní.</string>
<string name="other_spaces_or_rooms_you_might_not_know">Další prostory nebo místnosti, které možná neznáte</string>
<string name="space_you_know_that_contains_this_room">Prostor, o kterém víte, že obsahuje tuto místnost</string>
<string name="decide_who_can_find_and_join">Rozhodněte, kdo může tuto místnost najít a připojit se k ní.</string>
<string name="tap_to_edit_spaces">Klepnutím upravíte prostory</string>
<string name="allow_anyone_in_room_to_access">Povolit vyhledání a přístup komukoli v %s. Můžete vybrat i další prostory.</string>
<string name="upgrade_required">Vyžadována aktualizace</string>
<string name="upgrade_room_for_restricted_no_param">Každý, kdo se nachází v nadřazeném prostoru, bude moci tuto místnost najít a připojit se k ní - není třeba všechny zvát ručně. Tuto možnost budete moci kdykoli změnit v nastavení místnosti.</string>
<string name="upgrade_room_for_restricted">Kdokoli v %s bude moci tuto místnost najít a připojit se k ní - není třeba všechny zvát ručně. Toto nastavení budete moci kdykoli změnit v nastavení místnosti.</string>
<string name="voice_message_tap_to_stop_toast">Klepnutím na nahrávku ji zastavíte nebo posloucháte</string>
<string name="select_spaces">Vybrat prostory</string>
<string name="upgrade_room_for_restricted_note">Upozorňujeme, že aktualizací vznikne nová verze místnosti. Všechny aktuální zprávy zůstanou v této archivované místnosti.</string>
<string name="voice_message_reply_content">Hlasová zpráva (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Nelze odpovídat ani upravovat, když je hlasová zpráva aktivní</string>
<string name="error_voice_message_unable_to_record">Nelze nahrát hlasovou zprávu</string>
<string name="error_voice_message_unable_to_play">Nelze přehrát tuto hlasovou zprávu</string>
<string name="labs_use_voice_message">Povolit hlasovou zprávu</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds zbývá</string>
<string name="voice_message_release_to_send_toast">Podržením nahrajte, uvolněním odešlete</string>
<string name="a11y_delete_recorded_voice_message">Odstranit nahranou hlasovou zprávu</string>
<string name="a11y_recording_voice_message">Nahrát hlasovou zprávu</string>
<string name="a11y_pause_voice_message">Pozastavit hlasovou zprávu</string>
<string name="a11y_play_voice_message">Přehrát hlasovou zprávu</string>
<string name="a11y_lock_voice_message">Zámek hlasové zprávy</string>
<string name="voice_message_slide_to_cancel">Posunutím zrušíte</string>
<string name="a11y_start_voice_message">Zahájení hlasové zprávy</string>
<string name="sent_a_voice_message">Hlasová zpráva</string>
<string name="spaces_which_can_access">Prostory, které mají přístup</string>
<string name="allow_space_member_to_find_and_access">Umožněte členům prostoru ho najít a zpřístupnit.</string>
<string name="room_create_member_of_space_name_can_join">Členové prostoru %s mohou vyhledávat, prohlížet a připojovat se.</string>
<string name="room_settings_room_access_private_invite_only_title">Soukromé (pouze pro pozvané)</string>
<string name="denied_permission_voice_message">Chcete-li odesílat hlasové zprávy, povolte oprávnění mikrofonu.</string>
</resources>

View file

@ -2741,7 +2741,7 @@
<string name="a11y_unchecked">Pole kontrollitud</string>
<string name="search_hint_room_name">Otsi nime alusel</string>
<string name="room_settings_room_access_restricted_description">Kõik sellise kogukonnakeskuse liikmed, kuhu see jututuba kuulub, võivad seda leida ja temaga liituda. Ainult selle jututoa haldajad võivad teda kogukonnakeskusesse liita.</string>
<string name="room_settings_room_access_restricted_title">Kogukonnakeskused</string>
<string name="room_settings_room_access_restricted_title">Vaid kogukonna liikmetele</string>
<string name="room_settings_room_access_public_description">Kõik võivad jututuba leida ja sellega liituda</string>
<string name="room_settings_room_access_public_title">Avalik</string>
<string name="room_settings_room_access_private_description">Jututuba saab leida ja sellega liituda vaid kutsete alusel</string>
@ -2848,4 +2848,16 @@
<item quantity="one">Vastamata kõne</item>
<item quantity="other">%d vastamata kõnet</item>
</plurals>
<string name="upgrade_required">Vajalik on uuendus</string>
<string name="other_spaces_or_rooms_you_might_not_know">Muud kogukonnad ja jututoad, mida sa ei pruugi teada</string>
<string name="space_you_know_that_contains_this_room">Sulle teadaolevad kogukonnad, milles osaleb see jututuba</string>
<string name="room_create_member_of_space_name_can_join">%s kogukonna liikmed saavad leida, vaadata eelvaadet ja liituda.</string>
<string name="decide_who_can_find_and_join">Vali kes saavad seda kogukonda leida ja võivad temaga liituda.</string>
<string name="tap_to_edit_spaces">Kogukondade muutmiseks klõpsi</string>
<string name="select_spaces">Vali kogukonnad</string>
<string name="decide_which_spaces_can_access">Vali mis kogukonnad pääsevad ligi sellele jututoale. Valitud kogukonna liikmed saavad seda jututuba leida ja temaga liituda.</string>
<string name="spaces_which_can_access">Kogukonnad, mis pääsevad ligi</string>
<string name="allow_space_member_to_find_and_access">Luba kogukonna liikmetel leida ja vaadata.</string>
<string name="room_settings_room_access_private_invite_only_title">Privaatne (vaid kutse alusel)</string>
<string name="denied_permission_voice_message">Häälsõnumite saatmiseks palun anna rakendusele õigus mikrofoni kasutada.</string>
</resources>

View file

@ -990,7 +990,7 @@
<string name="settings_notification_privacy_normal">عادی</string>
<string name="settings_notification_privacy_reduced">محرمانگی کاهش‌یافته</string>
<string name="settings_notification_privacy_need_permission">کاره برای اجرا در پس‌زمینه نیاز به اجازه دارد</string>
<string name="settings_notification_privacy_no_background_sync">کاره در پس‌زمینه، به وصل شدن به کارساز خانگی نیاز <b>ندارد</b>. این کار نصرف باتری را کاهش می‌دهد</string>
<string name="settings_notification_privacy_no_background_sync">کاره در پس‌زمینه، به وصل شدن به کارساز خانگی نیاز <b>ندارد</b>. این کار مصرف باتری را کاهش می‌دهد</string>
<string name="settings_notification_ringtone">صدای آگاهی</string>
<string name="settings_system_preferences_summary">گزینش رنگ چراغ، لرزش، صدا و…</string>
<string name="settings_containing_my_display_name">پیام‌های شامل نام نمایشی</string>
@ -1476,7 +1476,7 @@
<string name="new_session">ورود جدید. خودتان بودید؟</string>
<string name="new_session_review">برای بازبینی و تأیید بزنید</string>
<string name="verify_new_session_was_not_me">من نبودم</string>
<string name="verify_cancelled_notice">تأیید افزاره‌هایتان از تنظیمات.</string>
<string name="verify_cancelled_notice">تأیید لغو شد. می‌توانید تأیید را دوباره آغاز کنید.</string>
<string name="verification_cancelled">تأیید لغو شد</string>
<string name="recovery_passphrase">عبارت عبور بازیابی</string>
<string name="message_key">کلید پیام</string>
@ -1726,9 +1726,9 @@
<string name="settings_troubleshoot_test_push_loop_success">برنامه Push دریافت کرد</string>
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">برنامه منتظر دریافت Push است</string>
<string name="settings_troubleshoot_test_push_loop_title">تست Push</string>
<string name="settings_troubleshoot_test_token_registration_failed">ثبت توکن FCM در سرور موفقیت آمیز نبود:
<string name="settings_troubleshoot_test_token_registration_failed">شکست در ثبت ژتون FCM در کارساز خانگی:
\n%1$s</string>
<string name="settings_troubleshoot_test_token_registration_success">توکن FCM با موفقیت در سرور ثبت شد.</string>
<string name="settings_troubleshoot_test_token_registration_success">ژتون FCM با موفقیت در کارساز خانگی ثبت شد.</string>
<string name="settings_troubleshoot_test_token_registration_title">ثبت توکن</string>
<string name="settings_troubleshoot_test_fcm_failed_account_missing_quick_fix">افزودن حساب کاربری</string>
<string name="template_settings_troubleshoot_test_fcm_failed_account_missing">[%1$s]
@ -2100,7 +2100,7 @@
<string name="event_redacted">پیام پاک شد</string>
<string name="error_user_already_logged_in">به نظر در تلاش برای وصل شدن به کارساز خانگی دیگری هستید. می‌خواهید خارج شوید؟</string>
<string name="identity_server_not_defined_for_password_reset">برای بازنشانی گذرواژه‌ی خود نیاز به پیکربندی سرور هویت‌سنجی دارید.</string>
<string name="identity_server_not_defined">شما از سرور هویت‌سنجی استفاده نمی‌کنید</string>
<string name="identity_server_not_defined">از هیچ کارساز هویتی استفاده نمی‌کنید</string>
<string name="sas_error_unknown">خطای نامشخص</string>
<string name="sas_error_m_user_error">عدم تطابق کاربر</string>
<string name="sas_error_m_key_mismatch">عدم تطابق کلید</string>
@ -2200,7 +2200,7 @@
<string name="keys_backup_setup_backup_started_message">کلیدهای رمزگذاری شما اکنون در پس زمینه در حال پشتیبان‌گیری بر روی سرور است. تهیه نسخه‌ی پشتیبان اولیه ممکن است چند دقیقه طول بکشد.</string>
<string name="keys_backup_setup_step3_generating_key_status">در حال تولید کلید پشتیبان با استفاده از کلید امنیتی، این ممکن است چند ثانیه زمان ببرد.</string>
<string name="keys_backup_setup_override_backup_prompt_description">به نظر می‌رسد شما در یک نشست دیگر کلید پشتیبان تهیه کرده‌اید. آیا می‌خواهید آن را با موردی که ایجاد می‌کنید جایگزین کنید؟</string>
<string name="keys_backup_setup_override_backup_prompt_tile">یک نسخه‌ی پشتیبان از قبل در سرور وجود دارد</string>
<string name="keys_backup_setup_override_backup_prompt_tile">از پیش، پشتیبانی روی کارساز خانگیتان وجود دارد</string>
<string name="recovery_key_export_saved">کلید بازیابی ذخیره شد.</string>
<string name="recovery_key_export_saved_as_warning">کلید بازیابی در \\\'%s\\\' ذخیره شده است.
\n
@ -2443,9 +2443,9 @@
<string name="start_chatting">آغاز به گپ</string>
<string name="settings_export_trail">برون‌ریزی بازرسی</string>
<string name="create_room_disable_federation_description">اگر اتاق فقط برای تعامل با افراد داخل سرور خانه شما می‌باشد، این قابلیت را فعال کنید. این تنظیم را بعدا نمی‌توانید تغییر دهید.</string>
<string name="identity_server_consent_dialog_content">آیا می‌خواهید جهت کشف مخاطبینی که می شناسید، داده های مخاطب خود را (شماره تلفن و ایمیل) به سرور هویت‌سنجی(%1$s) ارسال کنید؟
<string name="identity_server_consent_dialog_content">با فرستادن داده‌های آشنایانتان (شماره‌های تلفن و/یا رایانامه‌ها) به کارساز هویت پیکربندی شده (%1$s) برای کشف آشنایان موجود، موافقت می‌کنید؟
\n
\nبرای حفظ حریم خصوصی بیشتر، داده‌ها قبل از ارسال هش می‌شوند.</string>
\nبرای محرمانگی بیش‌تر، داده‌ها پیش از ارسال، درهم ریخته می‌شوند.</string>
<string name="bottom_sheet_setup_secure_backup_security_key_subtitle">یک کلید امنیتی ایجاد کنید تا در مکانی امن مانند سامانه مدیریت رمز عبور یا گاوصندوق آن را ذخیره کنید.</string>
<string name="identity_server_error_no_current_binding_error">در حال حاضر هیچ ارتباطی با این شناسه وجود ندارد.</string>
<string name="confirm_your_identity_quad_s">هویت خود را تأیید کنید تا به پیام‌های رمز شده دسترسی پیدا کنید.</string>
@ -2650,16 +2650,16 @@
<string name="notice_room_server_acl_updated_ip_literals_not_allowed">لیترال‌های آی‌پی برای تطبیق سرور هم‌اکنون ممنوع شد.</string>
<string name="notice_room_server_acl_updated_ip_literals_allowed">لیترال‌های آی‌پی برای تطبیق سرور هم‌اکنون اجازه داده‌شد.</string>
<string name="notice_room_server_acl_updated_was_allowed">تطبیق سرور %s از لیست موارد مجاز حذف گردید.</string>
<string name="notice_room_server_acl_updated_allowed">تطبیق سرور %s هم‌اکنون اجازه داده‌شد.</string>
<string name="notice_room_server_acl_updated_allowed">• اکنون‌کارسازهای مطابق با %s مجاز شده‌اند.</string>
<string name="notice_room_server_acl_updated_was_banned">تطبیق سرور %s از لیست ممنوعیت‌ها حذف شد.</string>
<string name="notice_room_server_acl_updated_banned">تطبیق سرور %s هم‌اکنون ممنوع شد.</string>
<string name="notice_room_server_acl_updated_banned">• اکنون کارسازهای مطابق با %s تحریم شده‌اند.</string>
<string name="notice_room_server_acl_updated_title_by_you">شما سطح کنترل دسترسی این اتاق را تغییر دادید.</string>
<string name="notice_room_server_acl_set_ip_literals_allowed">لیترال‌های آی‌پی برای تطبیق سرور اجازه داده شده‌است.</string>
<string name="notice_room_server_acl_set_title">%s سطح کنترل دسترسی‌ها برای این اتاق را بر روی سرور تنظیم کرد.</string>
<string name="notice_room_server_acl_updated_title">%s سطح کنترل دسترسی برای این اتاق را تغییر داد.</string>
<string name="notice_room_server_acl_set_ip_literals_not_allowed">لیترال‌های آی‌پی برای تطبیق سرور ممنوع است.</string>
<string name="notice_room_server_acl_set_allowed">تطبیق سرور %s اجازه داده شده‌است.</string>
<string name="notice_room_server_acl_set_banned">تطبیق سرور %s ممنوع شده‌است.</string>
<string name="notice_room_server_acl_set_allowed">• کارسازهای مطابق با %s مجازند.</string>
<string name="notice_room_server_acl_set_banned">• کارسازهای مطابق با %s تحریم شده‌اند.</string>
<string name="notice_room_server_acl_set_title_by_you">شما ACL های سرور را برای این اتاق تنظیم کردید.</string>
<string name="event_status_delete_all_failed_dialog_message">مطمئنید که می‌خواهید تمام پیام‌های فرستاده نشده در این اتاق را حذف کنید؟</string>
<string name="event_status_delete_all_failed_dialog_title">حذف پیام‌های فرستاده نشده</string>
@ -2729,7 +2729,7 @@
<string name="create_spaces_make_sure_access">مطمئن شوید که افراد درست به %s دسترسی دارند. می‌توانید بعدها این را تغییر دهید.</string>
<string name="command_description_create_space">ساخت یک فضا</string>
<string name="room_settings_room_access_restricted_description">هر کسی در فضای این اتاق، می‌تواند اتاق را یافته و به آن بپیوندد. فقط مدیران این اتاق می توانند آن را به فضایی بیفزایند.</string>
<string name="room_settings_room_access_restricted_title">فضاها</string>
<string name="room_settings_room_access_restricted_title">فقط اعضای فضا</string>
<string name="spaces_header">فضا‌ها</string>
<string name="create_spaces_who_are_you_working_with">با چه کسانی کار می‌کنی؟</string>
<string name="create_spaces_join_info_help">برای پیوستن به یک فضای موجود، نیاز به دعوت دارید.</string>
@ -2840,4 +2840,40 @@
\nمیتوانید فضاهای موجود را به فضایی بیفزایید.</string>
<string name="labs_space_show_orphan_in_home">فضای آزمایشی - فقط نمایش یتسم‌ها در خانه</string>
<string name="call_transfer_consulting_with">مشاوره با %1$s</string>
<string name="voice_message_reply_content">پیام صوتی (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">نمی‌توان هنگام فعّال بودن پیام صوتی، پاسخ داد یا ویراست</string>
<string name="error_voice_message_unable_to_record">نمی‌توان پیام صوتی ضبط کرد</string>
<string name="error_voice_message_unable_to_play">نمی‌توان این پیام صوتی را پخش کرد</string>
<string name="labs_use_voice_message">به کار انداختن پیام صوتی</string>
<string name="voice_message_tap_to_stop_toast">برای توقّف یا شمیدن، روی ضبطتان بزنید</string>
<string name="voice_message_n_seconds_warning_toast">%1$dث مانده</string>
<string name="voice_message_release_to_send_toast">برای ضبط نگه دارید. برای فرستادن رها کنید</string>
<string name="a11y_delete_recorded_voice_message">حذف پیام صوتی ضبط‌شده</string>
<string name="a11y_recording_voice_message">ضبط کردن پیام صوتی</string>
<string name="a11y_pause_voice_message">مکث پیام صوتی</string>
<string name="a11y_play_voice_message">پخش پیام صوتی</string>
<string name="a11y_lock_voice_message">قفل پیام صوتی</string>
<string name="voice_message_slide_to_cancel">برای لغو، بکشید</string>
<string name="a11y_start_voice_message">آغاز پیام صوتی</string>
<string name="upgrade_required">نیازمند ارتقا</string>
<string name="sent_a_voice_message">صدا</string>
<string name="other_spaces_or_rooms_you_might_not_know">دیگر فضاها یا اتاق‌هایی که ممکن است نشناسید</string>
<string name="space_you_know_that_contains_this_room">فضاهایی که می‌دانید شامل این اتاقند</string>
<string name="decide_who_can_find_and_join">تصمیم بگیرید چه کسانی می‌توانند این اتاق را یافته و به آن بپیوندند.</string>
<string name="tap_to_edit_spaces">برای ویرایش فضاها، ضربه بزنید</string>
<string name="select_spaces">گزینش فضاها</string>
<string name="decide_which_spaces_can_access">تصمیم بگیرید چه فضاهایی می‌توانند به این اتاق دسترسی داشته باشند.اگر فضایی گزیده سود، اعضایش قادر خواهند بود نام اتاق را یافته و به آن بپیوندند.</string>
<string name="spaces_which_can_access">فضاهایی که می‌توانند دسترسی داشته باشند</string>
<string name="allow_space_member_to_find_and_access">اجازه به اعضای فضا برای یافتن و دسترسی.</string>
<string name="room_create_member_of_space_name_can_join">اعضای فضای %s می‌توانند یافته، دیده و بپیوندند.</string>
<string name="room_settings_room_access_private_invite_only_title">خصوصی (فقط با دعوت)</string>
<plurals name="missed_video_call">
<item quantity="one">تماس تصویری بی‌پاسخ</item>
<item quantity="other">%d تماس تصویری بی‌پاسخ</item>
</plurals>
<plurals name="missed_audio_call">
<item quantity="one">تماس صوتی بی‌پاسخ</item>
<item quantity="other">%d تماس صوتی بی‌پاسخ</item>
</plurals>
<string name="denied_permission_voice_message">لطفاً برای فرستادن پیام صوتی، اجازهٔ میکروفون را اعطا کنید.</string>
</resources>

View file

@ -2692,7 +2692,7 @@
<string name="a11y_unchecked">Décoché</string>
<string name="search_hint_room_name">Rechercher par nom</string>
<string name="room_settings_room_access_restricted_description">Tout membre dun espace contenant ce salon peut le trouver et le rejoindre. Seuls les administrateurs de ce salon peuvent lajouter à un espace.</string>
<string name="room_settings_room_access_restricted_title">Espaces</string>
<string name="room_settings_room_access_restricted_title">Seulement pour les membres de l\'espace</string>
<string name="room_settings_room_access_public_description">Tout le monde peut trouver ce salon et le rejoindre</string>
<string name="room_settings_room_access_public_title">Public</string>
<string name="room_settings_room_access_private_description">Seules les personnes invitées peuvent le trouver et le rejoindre</string>
@ -2855,4 +2855,36 @@
<string name="missing_permissions_title">Permissions manquantes</string>
<string name="denied_permission_camera">Pour effectuer cette action, veuillez autoriser la permission Caméra depuis les réglages système.</string>
<string name="denied_permission_generic">Certaines permissions manquent pour effectuer cette action, veuillez autoriser ces permissions depuis les réglages système.</string>
<string name="upgrade_room_for_restricted_note">Veuillez noter que la mise-à-jour créera une nouvelle version de ce salon. Tous les messages existants seront conservés dans ce salon archivé.</string>
<string name="upgrade_room_for_restricted_no_param">Quiconque dans lespace parent pourra trouver et rejoindre ce salon pas besoin dinviter les gens un par un. Vous pourrez changer cela à nimporte quel moment dans les réglages du salon.</string>
<string name="upgrade_room_for_restricted">Quiconque dans %s pourra trouver et rejoindre ce salon pas besoin dinviter les gens un par un. Vous pourrez changer cela à nimporte quel moment dans les réglages du salon.</string>
<string name="voice_message_reply_content">Message vocal (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Impossible de répondre ou déditer tant quun message vocal est actif</string>
<string name="error_voice_message_unable_to_record">Impossible denregistrer un message vocal</string>
<string name="error_voice_message_unable_to_play">Impossible de lire ce message vocal</string>
<string name="labs_use_voice_message">Activer les messages vocaux</string>
<string name="voice_message_tap_to_stop_toast">Touchez lenregistrement pour larrêter ou lécouter</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds restant</string>
<string name="voice_message_release_to_send_toast">Maintenir pour enregistrer, relâcher pour envoyer</string>
<string name="a11y_delete_recorded_voice_message">Supprimer lenregistrement du message vocal</string>
<string name="a11y_recording_voice_message">Enregistrement du message vocal</string>
<string name="a11y_pause_voice_message">Mettre en pause le message vocal</string>
<string name="a11y_play_voice_message">Lire le message vocal</string>
<string name="a11y_lock_voice_message">Verrou de message vocal</string>
<string name="voice_message_slide_to_cancel">Glisser pour annuler</string>
<string name="a11y_start_voice_message">Démarrer un message vocal</string>
<string name="allow_anyone_in_room_to_access">Autoriser quiconque dans %s à trouver et venir. Vous pouvez également sélectionner dautres espaces.</string>
<string name="upgrade_required">Mise-à-jour nécessaire</string>
<string name="sent_a_voice_message">Vocal</string>
<string name="other_spaces_or_rooms_you_might_not_know">Autres espaces ou salons que vous ne connaissez peut-être pas</string>
<string name="space_you_know_that_contains_this_room">Espace que vous connaissez dont ce salon fait partie</string>
<string name="decide_who_can_find_and_join">Choisir qui peut trouver et rejoindre ce salon.</string>
<string name="tap_to_edit_spaces">Toucher pour modifier les espaces</string>
<string name="select_spaces">Sélectionner des espaces</string>
<string name="decide_which_spaces_can_access">Choisir les espaces pouvant accéder à ce salon. Si un espace est sélectionné, ces membres pourront trouver et rejoindre le salon.</string>
<string name="spaces_which_can_access">Espaces pouvant accéder</string>
<string name="allow_space_member_to_find_and_access">Autoriser les membres de lespace à trouver et venir.</string>
<string name="room_create_member_of_space_name_can_join">Les membres de lespace %s peuvent trouver, prévisualiser et venir.</string>
<string name="room_settings_room_access_private_invite_only_title">Privé (seulement sur invitation)</string>
<string name="denied_permission_voice_message">Pour envoyer des messages vocaux, veuillez accorder la permission Microphone.</string>
</resources>

View file

@ -983,4 +983,356 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.</string>
<string name="summary_you_sent_image">Anda mengirim gambar.</string>
<string name="summary_user_sent_image">%1$s mengirim gambar.</string>
<string name="summary_message">%1$s: %2$s</string>
<string name="settings_background_fdroid_sync_mode_real_time">Dioptimalkan untuk real-time</string>
<string name="template_settings_background_fdroid_sync_mode_battery_description">${app_name} akan mengsinkron di latar belakang dengan cara yang akan mempertahankan sumber daya (baterai) yang terbatas.
\nTergantung pada keadaan sumber daya perangkat Anda, sinkronisasi dapat ditangguhkan oleh operasi sistem.</string>
<string name="settings_background_fdroid_sync_mode_battery">Dioptimalkan untuk baterai</string>
<string name="settings_background_fdroid_sync_mode">Mode Sinkronisasi Latar Belakang</string>
<string name="settings_notification_privacy_no_background_sync">Aplikasinya <b>tidak</b> perlu menghubung ke homeserver di latar belakang, itu seharusnya akan mengurangi penggunaan baterai</string>
<string name="settings_troubleshoot_test_notification_notification_clicked">Pemberitahuannya telah ditekan!</string>
<string name="settings_troubleshoot_test_notification_notice">Silakan tekan notifikasinya. Jika Anda tidak melihat notifikasinya, silakan periksa pengaturan sistem.</string>
<string name="settings_troubleshoot_test_notification_title">Tampilan Pemberitahuan</string>
<string name="settings_troubleshoot_test_push_notification_content">Anda melihat pemberitahuan ini! Tekan saya!</string>
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">Aplikasi ini sedang menunggu push</string>
<string name="settings_troubleshoot_test_push_loop_success">Aplikasi ini menerima push</string>
<string name="settings_troubleshoot_test_push_loop_failed">Gagal menerima push. Solusinya adalah untuk menginstal ulang aplikasi.</string>
<string name="settings_troubleshoot_test_push_loop_title">Percobaan Push</string>
<string name="error_threepid_auth_failed">Pastikan Anda mengklik tautan di email yang telah kami kirimkan kepada Anda.</string>
<string name="settings_remove_three_pid_confirmation_content">Hapus %s\?</string>
<string name="settings_add_3pid_authentication_needed">Diperlukan otentikasi</string>
<string name="template_settings_add_3pid_flow_not_supported">Anda tidak dapat melakukan ini dari ponsel ${app_name}</string>
<string name="settings_add_3pid_confirm_password_title">Konfirmasi password Anda</string>
<string name="settings_phone_number_empty">Tidak ada nomor telepon yang ditambahkan ke akun Anda</string>
<string name="search_is_not_supported_in_e2e_room">Pencarian di ruangan terenkripsi belum didukung.</string>
<string name="search_banned_user_hint">Meng-filter pengguna yang dicekal</string>
<string name="room_permissions_change_topic">Mengubah topik</string>
<string name="room_permissions_upgrade_the_room">Meng-upgrade ruangan ini</string>
<string name="room_permissions_send_m_room_server_acl_events">Mengirim event m.room.server_acl</string>
<string name="room_permissions_send_messages">Mengirim pesan</string>
<string name="room_permissions_invite_users">Mengundang pengguna</string>
<string name="room_permissions_kick_users">Meng-kick pengguna</string>
<string name="room_permissions_ban_users">Mencekal pengguna</string>
<string name="room_permissions_change_permissions">Mengubah izin</string>
<string name="room_permissions_change_room_name">Mengubah nama ruangan</string>
<string name="room_permissions_change_history_visibility">Mengubah visibilitas sejarah</string>
<string name="room_permissions_enable_room_encryption">Mengaktifkan enkripsi ruangan</string>
<string name="room_permissions_change_main_address_for_the_room">Mengubah alamat utama untuk ruangan ini</string>
<string name="room_permissions_change_room_avatar">Mengubah avatar ruangan</string>
<string name="room_permissions_modify_widgets">Mengubah widget</string>
<string name="room_permissions_notify_everyone">Beritahu semuanya</string>
<string name="room_permissions_remove_messages_sent_by_others">Menghapus pesan yang dikirim dari yang lain</string>
<string name="room_permissions_change_settings">Mengubah pengaturan</string>
<string name="room_permissions_default_role">Role bawaan</string>
<string name="room_permissions_notice_read_only">Anda tidak diizinkan untuk memperbarui peran yang diperlukan untuk mengubah berbagai bagian ruangan</string>
<string name="room_permissions_notice">Pilih role yang diperlukan untuk mengubah berbagai bagian ruangan</string>
<string name="room_permissions_title">Izin</string>
<string name="room_settings_permissions_subtitle">Lihat dan perbarui role yang diperlukan untuk mengubah berbagai bagian ruangan.</string>
<string name="room_settings_permissions_title">Izin ruangan</string>
<string name="room_participants_unban_prompt_msg">Membatalkan pencekalan pengguna akan mengizinkan mereka untuk bergabung ke ruangan.</string>
<string name="room_participants_unban_title">Batalkan pencekalan pengguna</string>
<string name="room_participants_ban_reason">Alasan untuk mencekal</string>
<string name="room_participants_ban_title">Cekal pengguna</string>
<string name="room_participants_kick_prompt_msg">Pengguna yang di-kick akan menghilangkannya dari ruangan ini.
\n
\nUntuk mencegah mereka bergabung lagi, Anda seharusnya mencekalnya.</string>
<string name="room_participants_kick_reason">Alasan untuk meng-kick</string>
<string name="room_participants_kick_title">Kick user</string>
<string name="room_participants_action_cancel_invite_prompt_msg">Apakah Anda yakin ingin membatalkan undangan untuk pengguna ini\?</string>
<string name="room_participants_action_cancel_invite_title">Batalkan undangan</string>
<string name="room_participants_action_unignore_prompt_msg">Membatalkan abaian pengguna ini akan menampilkan semua pesan dari mereka.</string>
<string name="room_participants_action_unignore_title">Batal pengabaian pengguna</string>
<string name="room_participants_action_ignore_prompt_msg">Mengabaikan pengguna ini akan menghilangkan pesan mereka dari ruangan yang Anda bagikan.
\n
\nAnda dapat membalikkan tindakan ini kapan saja dalam pengaturan umum.</string>
<string name="room_participants_action_ignore_title">Abaikan pengguna</string>
<string name="room_participants_power_level_demote">Turunkan</string>
<string name="room_participants_power_level_demote_warning_prompt">Anda tidak akan dapat membatalkan perubahan ini karena Anda menurunkan diri sendiri, jika Anda adalah pengguna istimewa terakhir di ruangan itu akan tidak mungkin untuk mendapatkan kembali hak istimewa.</string>
<string name="room_participants_power_level_demote_warning_title">Turunkan dirimu\?</string>
<string name="room_participants_action_cancel_invite">Batalkan undangan</string>
<string name="room_participants_leave_private_warning">Ruangan ini tidak umum. Anda tidak akan dapat bergabung kembali tanpa undangan.</string>
<string name="invite_no_identity_server_error">Tambahkan server identitas dalam pengaturan Anda untuk melakukan tindakan ini.</string>
<string name="continue_anyway">Lanjutkan</string>
<string name="permissions_denied_add_contact">Izinkan untuk mengakses kontak.</string>
<string name="permissions_denied_qr_code">Untuk dapat meng-scan kode QR, Anda harus mengizinkan akses kamera.</string>
<string name="call_held_by_you">Anda menjeda panggilan</string>
<string name="call_held_by_user">%s menjeda panggilan</string>
<string name="call_hold_action">Jeda</string>
<string name="call_resume_action">Lanjut</string>
<string name="return_to_call">Kembali ke panggilan</string>
<string name="active_call_with_duration">Panggilan Aktif (%s)</string>
<plurals name="missed_video_call">
<item quantity="other">%d panggilan video yang terjawab</item>
</plurals>
<plurals name="missed_audio_call">
<item quantity="other">%d panggilan audio yang terjawab</item>
</plurals>
<string name="settings_call_ringtone_use_default_stun_sum">Akan menggunakan %s sebagai bantuan ketika homeserver Anda tidak menawarkannya (alamat IP Anda akan dibagikan selama panggilan)</string>
<string name="settings_call_ringtone_use_default_stun">Izinkan menggunakan server bantuan panggilan sebagai fallback</string>
<string name="settings_call_show_confirmation_dialog_summary">Meminta untuk konfirmasi sebelum memulai panggilan</string>
<string name="settings_call_show_confirmation_dialog_title">Cegah panggilan tidak disengaja</string>
<string name="error_unauthorized">Tidak sah, tidak ada kredensial otentikasi yang valid</string>
<string name="login_error_ssl_handshake">Perangkat Anda menggunakan protokol keamanan TLS yang sudah usang, yang rentan terhadap serangan, untuk keamanan Anda tidak akan dapat menghubung</string>
<string name="login_error_ssl_other">Kesalahan SSL.</string>
<string name="login_error_ssl_peer_unverified">Kesalahan SSL: identitas peer belum diverifikasi.</string>
<string name="login_error_homeserver_not_found">Tidak dapat mencapai homeserver pada URL ini, silakan periksa</string>
<string name="login_error_no_homeserver_found">Ini bukan alamat server Matrix yang valid</string>
<string name="login_error_unknown_host">URL ini tidak dapat dijangkau, silakan periksa</string>
<string name="auth_msisdn_already_defined">Nomor telepon ini sudah ditentukan.</string>
<string name="auth_add_email_and_phone_message_2">Tetapkan surel untuk pemulihan akun. Gunakan surel atau nomor telepon nanti untuk dapat ditemukan oleh orang-orang yang mengenal Anda secara opsional.</string>
<string name="auth_add_email_phone_message_2">Tetapkan surel untuk pemulihan akun. Gunakan surel atau nomor telepon nanti untuk dapat ditemukan oleh orang-orang yang mengenal Anda secara opsional.</string>
<string name="auth_add_phone_message_2">Tetapkan nomor telepon, dan nanti dapat ditemukan oleh orang-orang yang mengenal Anda secara opsional.</string>
<string name="auth_add_email_message_2">Tetapkan surel untuk pemulihan akun, dan nanti dapat ditemukan oleh orang-orang yang mengenal Anda secara opsional.</string>
<string name="auth_login_sso">Masuk dengan single sign-on</string>
<string name="use_as_default_and_do_not_ask_again">Gunakan sebagai bawaan dan jangan tanya lagi</string>
<string name="option_always_ask">Selalu tanya</string>
<string name="call_format_turn_hd_on">Nyalakan HD</string>
<string name="call_format_turn_hd_off">Matikan HD</string>
<string name="call_camera_back">Belakang</string>
<string name="call_camera_front">Depan</string>
<string name="call_switch_camera">Ganti Kamera</string>
<string name="sound_device_wireless_headset">Headset Wireless</string>
<string name="sound_device_headset">Headset</string>
<string name="sound_device_speaker">Speaker</string>
<string name="sound_device_phone">Ponsel</string>
<string name="call_select_sound_device">Pilih Perangkat Suara</string>
<string name="call_failed_no_connection_description">Gagal membangun koneksi real-time.
\nSilakan minta administrator homeserver Anda untuk mengkonfigurasi server TURN agar panggilan untuk bekerja dengan andal.</string>
<string name="template_call_failed_no_connection">${app_name} Panggilan Gagal</string>
<string name="call_failed_dont_ask_again">Jangan tanya saya lagi</string>
<string name="call_failed_no_ice_use_alt">Coba menggunakan %s</string>
<string name="call_failed_no_ice_description">Silakan minta administrator homeserver Anda (%1$s) untuk mengkonfigurasi server TURN agar panggilan dapat bekerja dengan andal.
\n
\nAtau, Anda dapat mencoba menggunakan server publik di %2$s, tetapi ini tidak akan dapat diandalkan, dan itu akan membagikan alamat IP Anda dengan server itu. Anda juga dapat mengelola ini dalam Pengaturan.</string>
<string name="call_failed_no_ice_title">Panggilan gagal karena konfigurasi server yang salah</string>
<string name="hs_client_url">URL API homeserver</string>
<string name="send_bug_report_include_key_share_history">Kirim sejarah permintaan pemberian kunci</string>
<string name="spaces_header">Spaces</string>
<string name="spaces_invited_header">Undangan</string>
<string name="settings_room_directory_show_all_rooms_summary">Tampilkan semua ruangan di direktori ruangan, termasuk ruangan dengan konten eksplisit.</string>
<string name="settings_room_directory_show_all_rooms">Tampilkan ruangan dengan konten eksplisit</string>
<string name="settings_category_room_directory">Direktori ruangan</string>
<string name="people_no_identity_server">Tidak ada server identitas yang dikonfigurasi.</string>
<string name="no_more_results">Tidak ada hasil lainnya</string>
<string name="suggested_header">Ruangan yang Disarankan</string>
<string name="bottom_action_notification">Notifikasi</string>
<string name="dialog_edit_hint">Nilai baru</string>
<string name="dialog_title_success">Sukses</string>
<string name="action_return">Kembali</string>
<string name="action_unpublish">Tidak Dipublikasikan</string>
<string name="action_switch">Ganti</string>
<string name="action_add">Tambah</string>
<string name="action_copy">Salin</string>
<string name="action_mark_room_read">Tandai sebagai terbaca</string>
<string name="call_notification_hangup">Tutup Telepon</string>
<string name="call_notification_reject">Tolak</string>
<string name="call_notification_answer">Terima</string>
<string name="decline">Tolak</string>
<string name="review">Tinjauan</string>
<string name="ignore">Abaikan</string>
<string name="failed_to_remove_widget">Gagal menghapus widget</string>
<string name="failed_to_add_widget">Gagal menambahkan widget</string>
<string name="cannot_call_yourself_with_invite">Anda tidak dapat melakukan panggilan dengan diri sendiri, tunggu untuk peserta untuk menerima undangan</string>
<string name="cannot_call_yourself">Anda tidak dapat melakukan panggilan dengan diri sendiri</string>
<string name="audio_video_meeting_description">Pertemuan menggunakan kebijakan keamanan dan izin Jitsi. Semua orang saat ini berada di ruangan akan melihat undangan untuk bergabung saat pertemuan Anda sedang berlangsung.</string>
<string name="video_meeting">Mulai rapat video</string>
<string name="audio_meeting">Mulai rapat audio</string>
<string name="conference_call_in_progress">Konferensi sudah berlangsung!</string>
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Anda tidak memiliki izin untuk memulai panggilan</string>
<string name="no_permissions_to_start_webrtc_call">Anda tidak memiliki izin untuk memulai panggilan di ruangan ini</string>
<string name="no_permissions_to_start_conf_call_in_direct_room">Anda tidak memiliki izin untuk memulai panggilan konferensi</string>
<string name="no_permissions_to_start_conf_call">Anda tidak memiliki izin untuk memulai panggilan konferensi di ruangan ini</string>
<string name="missing_permissions_title">Tidak ada izin</string>
<string name="denied_permission_voice_message">Untuk mengirim pesan suara, silakan berikan izin Mikrofon.</string>
<string name="denied_permission_camera">Untuk melakukan tindakan ini, silakan berikan izin Kamera dari pengaturan sistem.</string>
<string name="denied_permission_generic">Beberapa izin hilang untuk melakukan tindakan ini, mohon berikan izin dari pengaturan sistem.</string>
<string name="start_chatting">Mulai Mengobrol</string>
<string name="reset">Atur Ulang</string>
<string name="dismiss">Hilangkan</string>
<string name="pause_video">Jeda</string>
<string name="play_video">Mainkan</string>
<string name="disconnect">Putuskan</string>
<string name="revoke">Batalkan</string>
<string name="none">Tidak Ada</string>
<string name="stay">Tetap</string>
<string name="title_activity_verify_device">Verifikasi sesi</string>
<string name="notification_sync_init">Inisialisasi layanan</string>
<string name="system_theme">Standar Sistem</string>
<string name="notice_end_to_end_unknown_algorithm_by_you">Anda mengaktifkan enkripsi ujung-ke-ujung. (algoritma tidak dikenali %1$s).</string>
<string name="notice_end_to_end_unknown_algorithm">%1$s mengaktifkan enkripsi ujung-ke-ujung. (algoritma tidak dikenali %2$s).</string>
<string name="notice_end_to_end_ok_by_you">Anda mengaktifkan enkripsi ujung-ke-ujung.</string>
<string name="notice_end_to_end_ok">%1$s mengaktifkan enkripsi ujung-ke-ujung.</string>
<string name="notice_direct_room_guest_access_forbidden_by_you">Anda telah mencegah para tamu untuk bergabung ruangan.</string>
<string name="notice_direct_room_guest_access_forbidden">%1$s telah mencegah para tamu untuk bergabung ruangan.</string>
<string name="notice_room_guest_access_forbidden_by_you">Anda telah mencegah para tamu untuk bergabung ruangan.</string>
<string name="notice_room_guest_access_forbidden">%1$s telah mencegah para tamu untuk bergabung ruangan.</string>
<string name="notice_room_guest_access_can_join">%1$s telah mengizinkan para tamu untuk bergabung ruangan.</string>
<string name="notice_room_guest_access_can_join_by_you">Anda telah mengizinkan para tamu untuk bergabung ruangan.</string>
<string name="notice_direct_room_guest_access_can_join_by_you">Anda telah mengizinkan para tamu untuk bergabung disini.</string>
<string name="notice_direct_room_guest_access_can_join">%1$s telah mengizinkan para tamu untuk bergabung disini.</string>
<string name="notice_room_canonical_alias_no_change_by_you">Anda mengubah alamat untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_no_change">%1$s mengubah alamat untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_main_and_alternative_changed_by_you">Anda mengubah alamat utama dan alamat alternatif untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_main_and_alternative_changed">%1$s mengubah alamat utama dan alamat alternatif untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_alternative_changed_by_you">Anda mengubah alamat alternatif untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_alternative_changed">%1$s mengubah alamat alternatif untuk ruangan ini.</string>
<plurals name="notice_room_canonical_alias_alternative_removed_by_you">
<item quantity="other">Anda menghapus alamat alternatif %1$s untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_canonical_alias_alternative_removed">
<item quantity="other">%1$s menghapus alamat alternatif %2$s untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_canonical_alias_alternative_added_by_you">
<item quantity="other">Anda menambahkan alamat alternatif %1$s untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_canonical_alias_alternative_added">
<item quantity="other">%1$s menambahkan alamat alternatif %2$s untuk ruangan ini.</item>
</plurals>
<string name="notice_room_canonical_alias_unset_by_you">Anda menghapus alamat utama untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_unset">%1$s menghapus alamat utama untuk ruangan ini.</string>
<string name="notice_room_canonical_alias_set_by_you">Anda menetapkan alamat utama untuk ruangan ini sebagai %1$s.</string>
<string name="notice_room_canonical_alias_set">%1$s menetapkan alamat utama untuk ruangan ini sebagai %2$s.</string>
<string name="notice_room_aliases_added_and_removed_by_you">Anda menambahkan %1$s dan menghapus %2$s sebagai alamat untuk ruangan ini.</string>
<string name="notice_room_aliases_added_and_removed">%1$s menambahkan %2$s dan menghapus %3$s sebagai alamat untuk ruangan ini.</string>
<plurals name="notice_room_aliases_removed_by_you">
<item quantity="other">Anda menghapus %2$s sebagai alamat untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_aliases_removed">
<item quantity="other">%1$s menghapus %2$s sebagai alamat untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_aliases_added_by_you">
<item quantity="other">Anda menambahkan %1$s sebagai alamat untuk ruangan ini.</item>
</plurals>
<plurals name="notice_room_aliases_added">
<item quantity="other">%1$s menambahkan %2$s sebagai alamat untuk ruangan ini.</item>
</plurals>
<string name="notice_room_withdraw_with_reason_by_you">Anda menarik undangan %1$s. Alasan: %2$s</string>
<string name="notice_room_withdraw_with_reason">%1$s menarik undangan %2$s. Alasan: %3$s</string>
<string name="notice_room_third_party_registered_invite_with_reason_by_you">Anda menerima undangan untuk %1$s. Alasan: %2$s</string>
<string name="notice_room_third_party_registered_invite_with_reason">%1$s menerima undangan untuk %2$s. Alasan: %3$s</string>
<string name="notice_room_third_party_revoked_invite_with_reason_by_you">Anda membatalkan undangan untuk %1$s untuk bergabung ruangan. Alasan: %2$s</string>
<string name="notice_room_third_party_revoked_invite_with_reason">%1$s membatalkan undangan untuk %2$s untuk bergabung ruangan. Alasan: %3$s</string>
<string name="notice_room_third_party_invite_with_reason_by_you">Anda mengirim undangan ke %1$s untuk bergabung ruangan. Alasan: %2$s</string>
<string name="notice_room_third_party_invite_with_reason">%1$s mengirim undangan ke %2$s untuk bergabung ruangan. Alasan: %3$s</string>
<string name="notice_room_ban_with_reason_by_you">Anda mencekal %1$s. Alasan: %2$s</string>
<string name="notice_room_ban_with_reason">%1$s mencekal %2$s. Alasan: %3$s</string>
<string name="notice_room_unban_with_reason">%1$s membatalkan pencekalan %2$s. Alasan: %3$s</string>
<string name="notice_room_unban_with_reason_by_you">Anda membatalkan pencekalan %1$s. Alasan: %2$s</string>
<string name="notice_room_kick_with_reason_by_you">Anda meng-kick %1$s. Alasan: %2$s</string>
<string name="notice_room_kick_with_reason">%1$s meng-kick %2$s. Alasan: %3$s</string>
<string name="notice_room_reject_with_reason_by_you">Anda menolak undangan. Alasan: %1$s</string>
<string name="notice_room_reject_with_reason">%1$s menolak undangan. Alasan: %2$s</string>
<string name="notice_direct_room_leave_with_reason_by_you">Anda meninggalkan ruangan. Alasan: %1$s</string>
<string name="notice_direct_room_leave_with_reason">%1$s meninggalkan ruangan. Alasan: %2$s</string>
<string name="notice_room_leave_with_reason_by_you">Anda meninggalkan ruangan. Alasan: %1$s</string>
<string name="notice_room_leave_with_reason">%1$s meninggalkan ruangan. Alasan: %2$s</string>
<string name="notice_direct_room_join_with_reason_by_you">Anda bergabung. Alasan %1$s</string>
<string name="notice_direct_room_join_with_reason">%1$s bergabung. Alasan %2$s</string>
<string name="notice_room_join_with_reason">%1$s bergabung ruangan. Alasan: %2$s</string>
<string name="notice_room_invite_you_with_reason">%1$s mengundang Anda. Alasan: %2$s</string>
<string name="notice_room_invite_with_reason_by_you">Anda mengundang %1$s. Alasan: %2$s</string>
<string name="notice_room_join_with_reason_by_you">Anda bergabung ruangan. Alasan %1$s</string>
<string name="notice_room_invite_with_reason">%1$s mengundang %2$s. Alasan: %3$s</string>
<string name="notice_room_invite_no_invitee_with_reason_by_you">Undangan Anda. Alasan: %1$s</string>
<string name="notice_room_invite_no_invitee_with_reason">Undangan %1$s. Alasan: %2$s</string>
<string name="clear_timeline_send_queue">Bersihkan antrian kiriman</string>
<string name="event_status_sending_message">Mengirim pesan…</string>
<string name="event_status_sent_message">Pesan terkirim</string>
<string name="initial_sync_start_importing_account_data">Sinkronisasi Awal:
\nMengimpor Data Akun</string>
<string name="initial_sync_start_importing_account_groups">Sinkronisasi Awal:
\nMengimpor Komunitas</string>
<string name="initial_sync_start_importing_account_left_rooms">Sinkronisasi Awal:
\nMengimpor Ruangan yang Ditinggalkan</string>
<string name="initial_sync_start_importing_account_invited_rooms">Sinkronisasi Awal:
\nMengimpor Ruangan yang Diundang</string>
<string name="initial_sync_start_importing_account_joined_rooms">Sinkronisasi Awal:
\nMengimpor Ruangan Tergabung</string>
<string name="initial_sync_start_importing_account_rooms">Sinkronisasi Awal:
\nMengimpor Ruangan</string>
<string name="initial_sync_start_importing_account_crypto">Sinkronisasi awal:
\nMengimpor crypto</string>
<string name="notice_power_level_changed">%1$s mengubah tingkat daya %2$s.</string>
<string name="initial_sync_start_importing_account">Sinkronisasi Awal:
\nMengimpor akun…</string>
<string name="initial_sync_start_downloading">Sinkronisasi Awal:
\nMengunduh data…</string>
<string name="initial_sync_start_server_computing">Sinkronisasi Awal:
\nMenunggu respons server…</string>
<string name="room_displayname_empty_room_was">Ruangan kosong (tadi adalah %s)</string>
<plurals name="room_displayname_four_and_more_members">
<item quantity="other">%1$s, %2$s, %3$s, dan %4$d lainnya</item>
</plurals>
<string name="room_displayname_4_members">%1$s, %2$s, %3$s, dan %4$s</string>
<string name="room_displayname_3_members">%1$s, %2$s, dan %3$s</string>
<string name="medium_phone_number">Nomor telepon</string>
<string name="medium_email">Surel</string>
<string name="room_error_join_failed_empty_room">Saat ini tidak mungkin untuk bergabung kembali ke ruangan kosong.</string>
<string name="matrix_error">Kesalahan Matrix</string>
<string name="network_error">Kesalahan jaringan</string>
<string name="message_failed_to_upload">Tidak dapat mengunggah gambar</string>
<string name="could_not_redact">Tidak dapat dihapus</string>
<string name="unable_to_send_message">Tidak dapat mengirim pesan</string>
<string name="notice_crypto_error_unkwown_inbound_session_id">Perangkat pengirim belum mengirimi kami kunci untuk pesan ini.</string>
<string name="notice_crypto_unable_to_decrypt">** Tidak dapat mendekripsi: %s **</string>
<string name="notice_power_level_diff">%1$s dari %2$s ke %3$s</string>
<string name="notice_power_level_changed_by_you">Anda mengubah tingkat daya %1$s.</string>
<string name="power_level_custom_no_value">Kustom</string>
<string name="power_level_custom">Kustom (%1$d)</string>
<string name="power_level_default">Standar</string>
<string name="power_level_moderator">Moderator</string>
<string name="power_level_admin">Admin</string>
<string name="notice_widget_jitsi_modified_by_you">Anda mengubah konferensi video</string>
<string name="notice_widget_jitsi_modified">Konferensi video diubah oleh %1$s</string>
<string name="notice_widget_jitsi_removed_by_you">Anda mengakhiri konferensi video</string>
<string name="notice_widget_jitsi_removed">Konferensi video diakhiri oleh %1$s</string>
<string name="notice_widget_jitsi_added_by_you">Anda memulai konferensi video</string>
<string name="notice_widget_jitsi_added">Konferensi video dimulai oleh %1$s</string>
<string name="notice_widget_modified_by_you">Anda mengubah widget %1$s</string>
<string name="notice_widget_modified">%1$s mengubah widget %2$s</string>
<string name="notice_widget_removed_by_you">Anda menghapus widget %1$s</string>
<string name="notice_widget_removed">%1$s menghapus widget %2$s</string>
<string name="notice_widget_added_by_you">Anda menambahkan widget %1$s</string>
<string name="notice_widget_added">%1$s menambahkan widget %2$s</string>
<string name="notice_room_third_party_registered_invite_by_you">Anda menerima undangan untuk %1$s</string>
<string name="notice_room_third_party_registered_invite">%1$s menerima undangan untuk %2$s</string>
<string name="notice_direct_room_third_party_revoked_invite_by_you">Anda membatalkan undangan untuk %1$s</string>
<string name="notice_direct_room_third_party_revoked_invite">%1$s membatalkan undangan untuk %2$s</string>
<string name="notice_room_third_party_revoked_invite_by_you">Anda membatalkan undangan untuk %1$s untuk bergabung ruangan</string>
<string name="notice_room_third_party_revoked_invite">%1$s membatalkan undangan untuk %2$s untuk bergabung ruangan</string>
<string name="notice_direct_room_third_party_invite_by_you">Anda mengundang %1$s</string>
<string name="notice_direct_room_third_party_invite">%1$s mengundang %2$s</string>
<string name="notice_room_third_party_invite_by_you">Anda mengirimkan undangan ke %1$s untuk bergabung ruangan</string>
<string name="notice_room_third_party_invite">%1$s mengirimkan undangan ke %2$s untuk bergabung ruangan</string>
<string name="notice_profile_change_redacted_by_you">Anda memperbarui profil Anda %1$s</string>
<string name="notice_profile_change_redacted">%1$s memperbarui profil mereka %2$s</string>
<string name="notice_event_redacted_by_with_reason">Pesan dihapus oleh %1$s [alasan: %2$s]</string>
<string name="notice_event_redacted_with_reason">Pesan dihapus [alasan: %1$s]</string>
<string name="notice_event_redacted_by">Pesan dihapus oleh %1$s</string>
<string name="notice_event_redacted">Pesan dihapus</string>
<string name="notice_room_avatar_removed_by_you">Anda menghapus avatar ruangan</string>
<string name="notice_room_avatar_removed">%1$s menghapus avatar ruangan</string>
<string name="notice_room_topic_removed_by_you">Anda menghapus topik ruangan</string>
<string name="notice_room_topic_removed">%1$s menghapus topik ruangan</string>
<string name="notice_room_name_removed_by_you">Anda menghapus nama ruangan</string>
<string name="notice_room_name_removed">%1$s menghapus nama ruangan</string>
<string name="notice_avatar_changed_too">(avatar juga diubah)</string>
<string name="notice_voip_finished">VoIP conference selesai</string>
<string name="notice_voip_started">Konferensi VoIP dimulai</string>
<string name="notice_requested_voip_conference_by_you">Anda meminta konferensi VoIP</string>
<string name="notice_requested_voip_conference">%1$s meminta konferensi VoIP</string>
<string name="notice_room_server_acl_allow_is_empty">🎉 Semua server dilarang untuk berpartisipasi! Ruangan ini tidak lagi bisa digunakan.</string>
<string name="notice_room_server_acl_updated_no_change">Tidak ada berubahan.</string>
<string name="settings_phone_numbers">Nomor telepon</string>
<string name="settings_emails_empty">Tidak ada surel yang ditambahkan ke akun Anda</string>
<string name="settings_emails">Surel</string>
<string name="notice_room_server_acl_updated_ip_literals_not_allowed">• Server yang cocok dengan literal IP sekarang dilarang.</string>
<string name="notice_room_server_acl_updated_banned">• Server yang cocok dengan %s sekarang dilarang.</string>
<string name="notice_room_server_acl_set_ip_literals_not_allowed">• Server yang cocok dengan literal IP dilarang.</string>
<string name="notice_room_server_acl_updated_ip_literals_allowed">• Server yang cocok dengan IP literal sekarang diizinkan.</string>
<string name="notice_room_server_acl_updated_was_allowed">• Server yang cocok dengan %s telah dihapus dari daftar izin.</string>
<string name="notice_room_server_acl_updated_allowed">• Server yang cocok dengan %s sekarang telah diizinkan.</string>
<string name="notice_room_server_acl_updated_was_banned">• Server yang cocok dengan %s dihapus dari daftar larangan.</string>
<string name="notice_room_server_acl_updated_title_by_you">Anda mengubah ACL server untuk ruangan ini.</string>
<string name="notice_room_server_acl_updated_title">%s mengubah ACL server untuk ruangan ini.</string>
<string name="notice_room_server_acl_set_ip_literals_allowed">• Server yang cocok dengan IP literal diizinkan.</string>
</resources>

View file

@ -2795,7 +2795,7 @@
<string name="a11y_unchecked">Deselezionato</string>
<string name="search_hint_room_name">Cerca nome</string>
<string name="room_settings_room_access_restricted_description">Chiunque in uno Spazio con questa stanza può trovarla ed entrarci. Solo gli amministratori della stanza possono aggiungerla ad uno Spazio.</string>
<string name="room_settings_room_access_restricted_title">Spazi</string>
<string name="room_settings_room_access_restricted_title">Spazio solo per membri</string>
<string name="room_settings_room_access_public_description">Chiunque può trovarla ed entrare</string>
<string name="room_settings_room_access_public_title">Pubblica</string>
<string name="room_settings_room_access_private_description">Solo le persone invitate possono trovarla ed entrare</string>
@ -2902,4 +2902,36 @@
<item quantity="one">Telefonata persa</item>
<item quantity="other">%d telefonate perse</item>
</plurals>
<string name="upgrade_room_for_restricted_note">Nota che aggiornare creerà una nuova versione della stanza. Tutti i messaggi attuali resteranno in questa stanza archiviata.</string>
<string name="upgrade_room_for_restricted_no_param">Chiunque in uno spazio superiore potrà trovare ed entrare in questa stanza - non serve invitare a mano tutti. Potrai cambiare questa cosa nelle impostazioni della stanza in qualsiasi momento.</string>
<string name="upgrade_room_for_restricted">Chiunque in %s potrà trovare ed entrare in questa stanza - non serve invitare a mano tutti. Potrai cambiare questa cosa nelle impostazioni della stanza in qualsiasi momento.</string>
<string name="voice_message_reply_content">Messaggio vocale (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Impossibile rispondere o modificare mentre un messaggio vocale è attivo</string>
<string name="error_voice_message_unable_to_record">Impossibile registrare un messaggio vocale</string>
<string name="error_voice_message_unable_to_play">Impossibile riprodurre questo messaggio vocale</string>
<string name="labs_use_voice_message">Attiva messaggio vocale</string>
<string name="voice_message_tap_to_stop_toast">Tocca la registrazione per fermare o ascoltare</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds rimasti</string>
<string name="voice_message_release_to_send_toast">Tieni premuto per registrare, rilascia per inviare</string>
<string name="a11y_delete_recorded_voice_message">Elimina messaggio vocale registrato</string>
<string name="a11y_recording_voice_message">Registrazione messaggio vocale</string>
<string name="a11y_pause_voice_message">Pausa messaggio vocale</string>
<string name="a11y_start_voice_message">Inizia messaggio vocale</string>
<string name="a11y_play_voice_message">Riproduci messaggio vocale</string>
<string name="a11y_lock_voice_message">Blocco messaggio vocale</string>
<string name="voice_message_slide_to_cancel">Scorri per annullare</string>
<string name="allow_anyone_in_room_to_access">Permetti a chiunque in %s di trovare ed accedere. Puoi selezionare anche altri spazi.</string>
<string name="upgrade_required">Aggiornamento necessario</string>
<string name="sent_a_voice_message">Vocale</string>
<string name="other_spaces_or_rooms_you_might_not_know">Altri spazi o stanze che potresti non conoscere</string>
<string name="space_you_know_that_contains_this_room">Spazi di cui sai che contengono questa stanza</string>
<string name="decide_who_can_find_and_join">Decidi chi può trovare ed entrare in questa stanza.</string>
<string name="tap_to_edit_spaces">Tocca per modificare gli spazi</string>
<string name="select_spaces">Seleziona spazi</string>
<string name="decide_which_spaces_can_access">Decidi quali spazi possono accedere a questa stanza. Se uno spazio è selezionato, i suoi membri potranno trovare ed entrare nella stanza.</string>
<string name="spaces_which_can_access">Spazi che possono accedere</string>
<string name="allow_space_member_to_find_and_access">Permetti ai membri dello spazio di trovare ed accedere.</string>
<string name="room_create_member_of_space_name_can_join">I membri dello spazio %s possono trovare, vedere l\'anteprima ed entrare.</string>
<string name="room_settings_room_access_private_invite_only_title">Privata (solo a invito)</string>
<string name="denied_permission_voice_message">Per inviare messaggi vocali, consenti l\'autorizzazione del microfono.</string>
</resources>

View file

@ -2743,7 +2743,7 @@
</plurals>
<string name="settings_server_upload_size_title">Limite de upload de arquivo do servidor</string>
<string name="room_settings_room_access_restricted_description">Qualquer pessoa num espaço com esta sala pode encontrá-la e juntar-se a ela. Somente admins desta sala podem adicioná-la a um espaço.</string>
<string name="room_settings_room_access_restricted_title">Espaços</string>
<string name="room_settings_room_access_restricted_title">Membros de espaço somente</string>
<string name="room_settings_room_access_public_description">Qualquer pessoa pode encontrar a sala e juntar-se</string>
<string name="room_settings_room_access_public_title">Pública</string>
<string name="room_settings_room_access_private_description">Somente pessoas convidadas podem encontrar e juntar-se</string>
@ -2918,4 +2918,36 @@
<item quantity="one">Chamadad de áudio perdida</item>
<item quantity="other">%d chamadas de áudio perdidas</item>
</plurals>
<string name="upgrade_room_for_restricted_note">Por favor note que fazer upgrade vai fazer uma nova versão da sala. Todas as mensagens atuais vão permanecer nesta sala arquivada.</string>
<string name="upgrade_room_for_restricted_no_param">Qualquer pessoa em um espaço pai vai ser capaz de encontrar e juntar-se a esta sala - não precisa convidar manualmente todo mundo. Você vai ser capaz de mudar isto em configurações de sala a qualquer hora.</string>
<string name="upgrade_room_for_restricted">Qualquer pessoa em %s vai ser capaz de encontrar e juntar-se a esta sala - não precisa convidar todo mundo. Você vai ser capaz de mudar isto em configurações de sala a qualquer hora.</string>
<string name="voice_message_reply_content">Mensagem de Voz (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Não dá para responder ou editar enquanto mensagem de voz está ativa</string>
<string name="error_voice_message_unable_to_record">Não dá para gravar uma mensagem de voz</string>
<string name="error_voice_message_unable_to_play">Não dá para tocar esta mensagem de voz</string>
<string name="labs_use_voice_message">Habilitar mensagem de voz</string>
<string name="voice_message_tap_to_stop_toast">Toque em sua gravação para parar ou escutar</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds restando</string>
<string name="voice_message_release_to_send_toast">Segure para gravar, solte para enviar</string>
<string name="a11y_delete_recorded_voice_message">Deletar mensagem de voz gravada</string>
<string name="a11y_recording_voice_message">Gravando mensagem de voz</string>
<string name="a11y_pause_voice_message">Pausar Mensagem de Voz</string>
<string name="a11y_play_voice_message">Tocar Mensagem de Voz</string>
<string name="a11y_lock_voice_message">Cadeado de Mensagem de Voz</string>
<string name="voice_message_slide_to_cancel">Deslize para cancelar</string>
<string name="a11y_start_voice_message">Começar Mensagem de Voz</string>
<string name="allow_anyone_in_room_to_access">Permitir qualquer pessoa em %s a encontrar e acessar. Você pode selecionar outros espaços também.</string>
<string name="upgrade_required">Upgrade Requerido</string>
<string name="sent_a_voice_message">Voz</string>
<string name="other_spaces_or_rooms_you_might_not_know">Outros espaços ou salas que você poderia não saber</string>
<string name="space_you_know_that_contains_this_room">Espaço que você sabe que contém esta sala</string>
<string name="decide_who_can_find_and_join">Decida quem pode encontrar e juntar-se a esta sala.</string>
<string name="tap_to_edit_spaces">Toque para editar espaços</string>
<string name="select_spaces">Selecionar espaços</string>
<string name="decide_which_spaces_can_access">Decida que espaços podem acessar esta sala. Se um espaço é selecionado seus membros vão ser capazes de encontrar e juntar-se a Nome de sala.</string>
<string name="spaces_which_can_access">Espaços que podem acessar</string>
<string name="allow_space_member_to_find_and_access">Permitir membros de espaço a encontrar e acessar.</string>
<string name="room_create_member_of_space_name_can_join">Membros de Escpaço %s podem encontrar, previsualizar e juntar-se.</string>
<string name="room_settings_room_access_private_invite_only_title">Privada (Convite Somente)</string>
<string name="denied_permission_voice_message">Para enviar mensagens de voz, por favor conceda a permissão Microfone.</string>
</resources>

View file

@ -2729,7 +2729,7 @@
<string name="command_description_create_space">Krijoni një Hapësirë</string>
<string name="search_hint_room_name">Kërko Për Emër</string>
<string name="room_settings_room_access_restricted_description">Cilido në një hapësirë me këtë dhomë mund ta kërkojë dhe hyjë në të. Vetëm përgjegjësit e kësaj dhome mund ta shtojnë te një hapësirë.</string>
<string name="room_settings_room_access_restricted_title">Hapësira</string>
<string name="room_settings_room_access_restricted_title">Vetëm anëtarë të hapësirës</string>
<string name="room_settings_room_access_public_description">Kushdo mund ta gjejë dhomën dhe të hyjë në të</string>
<string name="room_settings_room_access_public_title">Publike</string>
<string name="room_settings_room_access_private_description">Vetëm personat e ftuar mund ta gjejnë dhe hyjnë në të</string>
@ -2838,4 +2838,36 @@
<item quantity="one">Thirrje audio e humbur</item>
<item quantity="other">%d thirrje audio të humbura</item>
</plurals>
<string name="upgrade_room_for_restricted_note">Ju lutemi, kini parasysh se përmirësimi do të prodhojë një version të ri të dhomës. Krejt mesazhet e tanishëm do të mbeten në këtë dhomë të arkivuar.</string>
<string name="upgrade_room_for_restricted_no_param">Cilido në një hapësirë mëmë do të jetë në gjendje ta gjejë dhe hyjë në këtë dhomë - ska nevojë të ftohen dorazi një e nga një. Do të jeni në gjendje ta ndryshoni këtë te rregullimet e dhomës, në çfarëdo kohe.</string>
<string name="upgrade_room_for_restricted">Cilido te %s do të jetë në gjendje të gjejë dhe hyjë në këtë dhomë - ska nevojë të ftohen dorazi një e nga një. Do të jeni në gjendje ta ndryshoni këtë te rregullimet e kësaj dhome, në çfarëdo kohe.</string>
<string name="voice_message_reply_content">Mesazh Zanor (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">Smund të përgjigjet ose përpunohet, ndërkohë që mesazhi zanor është aktiv</string>
<string name="error_voice_message_unable_to_record">Sincizohet dot një mesazh zanor</string>
<string name="error_voice_message_unable_to_play">Ky mesazh zanor smund të luhet</string>
<string name="labs_use_voice_message">Aktivizo mesazh zanor</string>
<string name="voice_message_tap_to_stop_toast">Që ta ndalni ose ta dëgjoni, prekni mbi incizimin tuaj</string>
<string name="voice_message_n_seconds_warning_toast">Edhe %1$ds</string>
<string name="voice_message_release_to_send_toast">Mbajeni, që të incizojë, lëshojeni që të dërgohet</string>
<string name="a11y_delete_recorded_voice_message">Fshije mesazhin zanor të incizuar</string>
<string name="a11y_recording_voice_message">Po incizohet mesazh zanor</string>
<string name="a11y_pause_voice_message">Ndalni Mesazh Zanor</string>
<string name="a11y_play_voice_message">Luani Mesazh Zanor</string>
<string name="a11y_lock_voice_message">Kyçje Mesazhi Zanor</string>
<string name="voice_message_slide_to_cancel">Rrëshqiteni që të anulohet</string>
<string name="a11y_start_voice_message">Nisni Mesazh Zanor</string>
<string name="allow_anyone_in_room_to_access">Lejo cilindo te %s ta gjejë dhe hyjë. Mund të përzgjidhni edhe hapësira të tjera.</string>
<string name="upgrade_required">Lypset Domosdo Përmirësim</string>
<string name="sent_a_voice_message"></string>
<string name="other_spaces_or_rooms_you_might_not_know">Hapësira ose dhoma të tjera që mund të mos i dini</string>
<string name="space_you_know_that_contains_this_room">Hapësirë që e dini se përmban këtë dhomë</string>
<string name="decide_who_can_find_and_join">Vendosni se cilët mund të gjejnë dhe hyjnë në këtë dhomë.</string>
<string name="tap_to_edit_spaces">Që të përpunoni hapësira, prekeni</string>
<string name="select_spaces">Përzgjidhni hapësira</string>
<string name="decide_which_spaces_can_access">Vendosni se prej cilave hapësira mund të hyhet në këtë dhomë. Nëse përzgjidhet një hapësirë, anëtarët e saj do të mund ta gjejnë dhe hyjnë te emër Dhome.</string>
<string name="spaces_which_can_access">Hapësira nga të cilat mund të hyhet</string>
<string name="allow_space_member_to_find_and_access">Lejo anëtarë hapësirash ta gjejnë dhe hyjnë.</string>
<string name="room_create_member_of_space_name_can_join">Anëtarë të Hapësirës %s mund ta gjejnë, parashohin dhe hyjnë në të.</string>
<string name="room_settings_room_access_private_invite_only_title">Private (Vetëm Me Ftesa)</string>
<string name="denied_permission_voice_message">Për të dërguar mesazhe zanorë, ju lutemi, akordoni leje Mikrofoni.</string>
</resources>

View file

@ -2811,4 +2811,6 @@
\nVi kommer att förbättra detta som en del av betan, men ville låta dig veta.</string>
<string name="teammate_spaces_arent_quite_ready">Lagkamratsutrymmen är inte riktigt färdiga men du kan ändå testa dem</string>
<string name="continue_anyway">Fortsätt ändå</string>
<string name="denied_permission_camera">För att utföra detta, vänligen ge kameraåtkomst från systeminställningarna.</string>
<string name="denied_permission_generic">Vissa behörigheter saknas för att utföra detta, vänligen ge behörighet från systeminställningarna.</string>
</resources>

View file

@ -2708,7 +2708,7 @@
<string name="jitsi_leave_conf_to_join_another_one_content">离开当前的回忆并切换至其他会议?</string>
<string name="error_jitsi_join_conf">抱歉,在尝试加入会议时发生了错误</string>
<string name="room_settings_room_access_restricted_description">所有在此空间中的人都可以找到并加入它。仅有此聊天室的管理员可以将其添加到空间中。</string>
<string name="room_settings_room_access_restricted_title">空间</string>
<string name="room_settings_room_access_restricted_title">空间成员</string>
<string name="room_settings_room_access_public_description">任何人都能找到聊天室并加入</string>
<string name="room_settings_room_access_public_title">公开</string>
<string name="room_settings_room_access_private_description">仅有被邀请的人才能找到并加入</string>
@ -2803,4 +2803,36 @@
<plurals name="missed_audio_call">
<item quantity="other">%d 个未接音频电话</item>
</plurals>
<string name="upgrade_room_for_restricted_note">请注意,升级将使聊天室焕然一新。 所有当前消息都将保留在此存档的聊天室中。</string>
<string name="upgrade_room_for_restricted_no_param">主空间中的任何人都可以找到并加入此房间 - 无需手动邀请所有人。 您可以随时在聊天室设置中更改此设置。</string>
<string name="upgrade_room_for_restricted">%s 中的任何人将可以查找并加入此房间 - 无需手动邀请所有人。 您可以随时在聊天室设置中更改此设置。</string>
<string name="voice_message_reply_content">语音消息 (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">语音消息处于活动状态时无法回复或编辑</string>
<string name="error_voice_message_unable_to_record">无法录制语音消息</string>
<string name="error_voice_message_unable_to_play">无法播放此语音消息</string>
<string name="labs_use_voice_message">启用语音消息</string>
<string name="voice_message_tap_to_stop_toast">点按您的录音以停止或收听</string>
<string name="voice_message_n_seconds_warning_toast">剩余 %1$d秒</string>
<string name="voice_message_release_to_send_toast">按住录音,松开发送</string>
<string name="a11y_delete_recorded_voice_message">删除录制的语音消息</string>
<string name="a11y_recording_voice_message">录制语音消息</string>
<string name="a11y_pause_voice_message">暂停语音消息</string>
<string name="a11y_play_voice_message">播放语音消息</string>
<string name="a11y_lock_voice_message">语音消息锁</string>
<string name="voice_message_slide_to_cancel">滑动取消</string>
<string name="a11y_start_voice_message">开始语音消息</string>
<string name="allow_anyone_in_room_to_access">允许 %s 中的任何人查找和访问。 您也可以选择其他空间。</string>
<string name="upgrade_required">需要升级</string>
<string name="sent_a_voice_message">语音</string>
<string name="other_spaces_or_rooms_you_might_not_know">您可能不知道的其他空间或聊天室</string>
<string name="space_you_know_that_contains_this_room">你知道的包含这个聊天室的空间</string>
<string name="decide_who_can_find_and_join">决定谁能找到并加入这个聊天室。</string>
<string name="tap_to_edit_spaces">点按即可编辑空间</string>
<string name="select_spaces">选择空间</string>
<string name="decide_which_spaces_can_access">决定哪些空间可以进入这个房间。 如果选择了一个空间,其成员将能够找到并加入房间名称。</string>
<string name="spaces_which_can_access">可访问的空间</string>
<string name="allow_space_member_to_find_and_access">允许空间成员查找和访问。</string>
<string name="room_create_member_of_space_name_can_join">%s 空间的成员可找到、预览和加入。</string>
<string name="room_settings_room_access_private_invite_only_title">私人(仅限邀请)</string>
<string name="denied_permission_voice_message">要发送语音消息,请授予麦克风权限。</string>
</resources>

View file

@ -2689,7 +2689,7 @@
<string name="a11y_unchecked">未檢查</string>
<string name="search_hint_room_name">搜尋名稱</string>
<string name="room_settings_room_access_restricted_description">擁有此聊天室空間中的任何人都可以尋找並加入。僅此聊天室的管理員可以將其新增到空間中。</string>
<string name="room_settings_room_access_restricted_title">空間</string>
<string name="room_settings_room_access_restricted_title">空間成員</string>
<string name="room_settings_room_access_public_description">任何人都可以尋找聊天室並加入</string>
<string name="room_settings_room_access_public_title">公開</string>
<string name="room_settings_room_access_private_description">僅被邀請的夥伴可以尋找並加入</string>
@ -2793,4 +2793,36 @@
<plurals name="missed_audio_call">
<item quantity="other">%d 通未接聽通話</item>
</plurals>
<string name="upgrade_room_for_restricted_note">請注意,升級會讓聊天室變為新的版本。目前的所有訊息都將保留在此被封存的聊天室中。</string>
<string name="upgrade_room_for_restricted_no_param">上層空間中的任何人都可以找到並加入此聊天室,不需要手動邀請所有人。您隨時都可以在聊天室設定中變更此設定。</string>
<string name="upgrade_room_for_restricted">任何在 %s 中的人都可以找到並加入此聊天室,不需要手動邀請所有人。您隨時都可以在聊天室設定中變更此設定。</string>
<string name="voice_message_reply_content">語音訊息 (%1$s)</string>
<string name="error_voice_message_cannot_reply_or_edit">語音訊息作用中時無法回覆或編輯</string>
<string name="error_voice_message_unable_to_record">無法錄製語音訊息</string>
<string name="error_voice_message_unable_to_play">無法播放此語音訊息</string>
<string name="labs_use_voice_message">啟用語音訊息</string>
<string name="voice_message_tap_to_stop_toast">點擊您的錄音以停止或收聽</string>
<string name="voice_message_n_seconds_warning_toast">剩下%1$d秒</string>
<string name="voice_message_release_to_send_toast">按住以錄製,放開以傳送</string>
<string name="a11y_delete_recorded_voice_message">刪除已錄製的語音訊息</string>
<string name="a11y_recording_voice_message">正在錄製語音訊息</string>
<string name="a11y_pause_voice_message">暫停語音訊息</string>
<string name="a11y_play_voice_message">播放語音訊息</string>
<string name="a11y_lock_voice_message">語音訊息鎖定</string>
<string name="voice_message_slide_to_cancel">滑動以取消</string>
<string name="a11y_start_voice_message">開始語音訊息</string>
<string name="allow_anyone_in_room_to_access">允許任何在 %s 中的人都可以找到並存取。您也可以選取其他空間。</string>
<string name="upgrade_required">必須升級</string>
<string name="sent_a_voice_message">語音</string>
<string name="other_spaces_or_rooms_you_might_not_know">您可能不知道的其他空間或聊天室</string>
<string name="space_you_know_that_contains_this_room">您所知的包含此聊天是的空間</string>
<string name="decide_who_can_find_and_join">決定誰可以找到並加入此聊天室。</string>
<string name="tap_to_edit_spaces">點擊以編輯空間</string>
<string name="select_spaces">選取空間</string>
<string name="decide_which_spaces_can_access">決定哪些空間可以存取此聊天室。若選取了某個空間,其成員就可以找到並加入此聊天室。</string>
<string name="spaces_which_can_access">可以存取的空間</string>
<string name="allow_space_member_to_find_and_access">允許空間成員尋找並存取。</string>
<string name="room_create_member_of_space_name_can_join">空間 %s 的成員可以找到、預覽並加入。</string>
<string name="room_settings_room_access_private_invite_only_title">私人(僅邀請)</string>
<string name="denied_permission_voice_message">要傳送語音訊息,請授予「麥克風」權限。</string>
</resources>

View file

@ -1088,6 +1088,12 @@
<string name="settings_notification_advanced">Advanced Notification Settings</string>
<string name="settings_notification_by_event">Notification importance by event</string>
<string name="settings_notification_default">Default Notifications</string>
<string name="settings_notification_mentions_and_keywords">Mentions and Keywords</string>
<string name="settings_notification_other">Other</string>
<string name="settings_notification_notify_me_for">Notify me for</string>
<string name="settings_notification_privacy">Notification privacy</string>
<string name="settings_notification_troubleshoot">Troubleshoot Notifications</string>
<string name="settings_troubleshoot_diagnostic">Troubleshooting diagnostics</string>
@ -1196,15 +1202,28 @@
<string name="settings_silent_notifications_preferences">Configure Silent Notifications</string>
<string name="settings_system_preferences_summary">Choose LED color, vibration, sound…</string>
<string name="settings_messages_in_e2e_one_to_one">Encrypted messages in one-to-one chats</string>
<string name="settings_messages_in_e2e_group_chat">Encrypted messages in group chats</string>
<string name="settings_when_rooms_are_upgraded">When rooms are upgraded</string>
<string name="settings_containing_my_display_name">Msgs containing my display name</string>
<string name="settings_containing_my_user_name">Msgs containing my user name</string>
<string name="settings_messages_in_one_to_one">Msgs in one-to-one chats</string>
<string name="settings_messages_in_group_chat">Msgs in group chats</string>
<string name="settings_invited_to_room">When Im invited to a room</string>
<string name="settings_call_invitations">Call invitations</string>
<string name="settings_messages_sent_by_bot">Messages sent by bot</string>
<string name="settings_messages_containing_display_name">Messages containing my display name</string>
<string name="settings_messages_containing_username">Messages containing my username</string>
<string name="settings_messages_direct_messages">Direct messages</string>
<string name="settings_encrypted_direct_messages">Encrypted direct messages</string>
<string name="settings_group_messages">Group messages</string>
<string name="settings_encrypted_group_messages">Encrypted group messages</string>
<string name="settings_messages_at_room">Messages containing @room</string>
<string name="settings_room_invitations">Room invitations</string>
<string name="settings_call_invitations">Call invitations</string>
<string name="settings_messages_by_bot">Messages by bot</string>
<string name="settings_room_upgrades">Room upgrades</string>
<string name="settings_background_sync">Background synchronization</string>
<string name="settings_background_fdroid_sync_mode">Background Sync Mode</string>
<string name="settings_background_fdroid_sync_mode_battery">Optimized for battery</string>
@ -2966,10 +2985,6 @@
<string name="error_failed_to_import_keys">Failed to import keys</string>
<string name="settings_notification_configuration">Notifications configuration</string>
<string name="settings_messages_at_room">Messages containing @room</string>
<string name="settings_messages_in_e2e_one_to_one">Encrypted messages in one-to-one chats</string>
<string name="settings_messages_in_e2e_group_chat">Encrypted messages in group chats</string>
<string name="settings_when_rooms_are_upgraded">When rooms are upgraded</string>
<string name="settings_troubleshoot_title">Troubleshoot</string>
<string name="settings_notification_advanced_summary">Set notification importance by event</string>

View file

@ -81,9 +81,4 @@
android:key="SETTINGS_LABS_SPACES_HOME_AS_ORPHAN"
android:title="@string/labs_space_show_orphan_in_home"/>
<im.vector.app.core.preference.VectorSwitchPreference
android:defaultValue="false"
android:key="SETTINGS_LABS_VOICE_MESSAGE"
android:title="@string/labs_use_voice_message"/>
</androidx.preference.PreferenceScreen>

View file

@ -64,4 +64,4 @@
</im.vector.app.core.preference.VectorPreferenceCategory>
</androidx.preference.PreferenceScreen>
</androidx.preference.PreferenceScreen>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<im.vector.app.core.preference.VectorPreferenceCategory
android:key="SETTINGS_DEFAULT"
android:title="@string/settings_notification_notify_me_for">
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_messages_direct_messages" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_encrypted_direct_messages" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_group_messages" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_encrypted_group_messages" />
</im.vector.app.core.preference.VectorPreferenceCategory>
</androidx.preference.PreferenceScreen>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<im.vector.app.core.preference.VectorPreferenceCategory
android:key="SETTINGS_KEYWORDS_AND_MENTIONS"
android:title="@string/settings_notification_notify_me_for">
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_messages_containing_display_name" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_CONTAINING_MY_USER_NAME_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_messages_containing_username" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_messages_at_room" />
</im.vector.app.core.preference.VectorPreferenceCategory>
</androidx.preference.PreferenceScreen>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<im.vector.app.core.preference.VectorPreferenceCategory
android:key="SETTINGS_OTHER"
android:title="@string/settings_notification_notify_me_for">
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_INVITED_TO_ROOM_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_room_invitations" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_CALL_INVITATIONS_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_call_invitations" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_messages_by_bot" />
<im.vector.app.core.preference.VectorCheckboxPreference
android:key="SETTINGS_PUSH_RULE_ROOMS_UPGRADED_KEY"
android:persistent="false"
android:title="@string/settings_room_upgrades" />
</im.vector.app.core.preference.VectorPreferenceCategory>
</androidx.preference.PreferenceScreen>

View file

@ -26,7 +26,32 @@
android:persistent="false"
android:summary="@string/settings_notification_advanced_summary"
android:title="@string/settings_notification_advanced"
app:fragment="im.vector.app.features.settings.notifications.VectorSettingsAdvancedNotificationPreferenceFragment" />
app:fragment="im.vector.app.features.settings.notifications.VectorSettingsAdvancedNotificationPreferenceFragment"
app:isPreferenceVisible="@bool/useNotificationSettingsV1" />
<im.vector.app.core.preference.VectorPreference
android:dependency="SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY"
android:key="SETTINGS_NOTIFICATION_DEFAULT_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_notification_default"
app:fragment="im.vector.app.features.settings.notifications.VectorSettingsDefaultNotificationPreferenceFragment"
app:isPreferenceVisible="@bool/useNotificationSettingsV2"/>
<im.vector.app.core.preference.VectorPreference
android:dependency="SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY"
android:key="SETTINGS_NOTIFICATION_KEYWORD_AND_MENTIONS_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_notification_mentions_and_keywords"
app:fragment="im.vector.app.features.settings.notifications.VectorSettingsKeywordAndMentionsNotificationPreferenceFragment"
app:isPreferenceVisible="@bool/useNotificationSettingsV2"/>
<im.vector.app.core.preference.VectorPreference
android:dependency="SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY"
android:key="SETTINGS_NOTIFICATION_OTHER_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/settings_notification_other"
app:fragment="im.vector.app.features.settings.notifications.VectorSettingsOtherNotificationPreferenceFragment"
app:isPreferenceVisible="@bool/useNotificationSettingsV2"/>
</im.vector.app.core.preference.VectorPreferenceCategory>