Copione merged onto master
commit
0ccd93f38d
|
@ -80,8 +80,8 @@ protobuf {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def canonicalVersionCode = 710
|
def canonicalVersionCode = 711
|
||||||
def canonicalVersionName = "4.72.1"
|
def canonicalVersionName = "4.72.2"
|
||||||
|
|
||||||
def postFixSize = 10
|
def postFixSize = 10
|
||||||
def abiPostFix = ['universal' : 0,
|
def abiPostFix = ['universal' : 0,
|
||||||
|
|
|
@ -126,6 +126,11 @@ public class WebRtcCallActivity extends AppCompatActivity implements SafetyNumbe
|
||||||
if (!isInPipMode()) {
|
if (!isInPipMode()) {
|
||||||
EventBus.getDefault().unregister(this);
|
EventBus.getDefault().unregister(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CallParticipantsState state = viewModel.getCallParticipantsState().getValue();
|
||||||
|
if (state != null && state.getCallState() == WebRtcViewModel.State.CALL_PRE_JOIN) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -46,7 +46,8 @@ import static org.thoughtcrime.securesms.database.MentionUtil.MENTION_STARTER;
|
||||||
|
|
||||||
public class ComposeText extends EmojiEditText {
|
public class ComposeText extends EmojiEditText {
|
||||||
|
|
||||||
private CharSequence combinedHint;
|
private CharSequence hint;
|
||||||
|
private SpannableString subHint;
|
||||||
private MentionRendererDelegate mentionRendererDelegate;
|
private MentionRendererDelegate mentionRendererDelegate;
|
||||||
private MentionValidatorWatcher mentionValidatorWatcher;
|
private MentionValidatorWatcher mentionValidatorWatcher;
|
||||||
|
|
||||||
|
@ -84,8 +85,14 @@ public class ComposeText extends EmojiEditText {
|
||||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
super.onLayout(changed, left, top, right, bottom);
|
super.onLayout(changed, left, top, right, bottom);
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(combinedHint)) {
|
if (!TextUtils.isEmpty(hint)) {
|
||||||
setHint(combinedHint);
|
if (!TextUtils.isEmpty(subHint)) {
|
||||||
|
setHint(new SpannableStringBuilder().append(ellipsizeToWidth(hint))
|
||||||
|
.append("\n")
|
||||||
|
.append(ellipsizeToWidth(subHint)));
|
||||||
|
} else {
|
||||||
|
setHint(ellipsizeToWidth(hint));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,18 +150,24 @@ public class ComposeText extends EmojiEditText {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHint(@NonNull String hint, @Nullable CharSequence subHint) {
|
public void setHint(@NonNull String hint, @Nullable CharSequence subHint) {
|
||||||
if (subHint != null) {
|
this.hint = hint;
|
||||||
Spannable subHintSpannable = new SpannableString(subHint);
|
|
||||||
subHintSpannable.setSpan(new RelativeSizeSpan(0.5f), 0, subHintSpannable.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
|
||||||
|
|
||||||
combinedHint = new SpannableStringBuilder().append(ellipsizeToWidth(hint))
|
if (subHint != null) {
|
||||||
.append("\n")
|
this.subHint = new SpannableString(subHint);
|
||||||
.append(ellipsizeToWidth(subHintSpannable));
|
this.subHint.setSpan(new RelativeSizeSpan(0.5f), 0, subHint.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||||
} else {
|
} else {
|
||||||
combinedHint = ellipsizeToWidth(hint);
|
this.subHint = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
super.setHint(combinedHint);
|
if (this.subHint != null) {
|
||||||
|
super.setHint(new SpannableStringBuilder().append(ellipsizeToWidth(this.hint))
|
||||||
|
.append("\n")
|
||||||
|
.append(ellipsizeToWidth(this.subHint)));
|
||||||
|
} else {
|
||||||
|
super.setHint(ellipsizeToWidth(this.hint));
|
||||||
|
}
|
||||||
|
|
||||||
|
super.setHint(hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void appendInvite(String invite) {
|
public void appendInvite(String invite) {
|
||||||
|
|
|
@ -1991,7 +1991,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
});
|
});
|
||||||
|
|
||||||
composeText.setMentionQueryChangedListener(query -> {
|
composeText.setMentionQueryChangedListener(query -> {
|
||||||
if (getRecipient().isPushV2Group()) {
|
if (getRecipient().isPushV2Group() && getRecipient().isActiveGroup()) {
|
||||||
if (!mentionsSuggestions.resolved()) {
|
if (!mentionsSuggestions.resolved()) {
|
||||||
mentionsSuggestions.get();
|
mentionsSuggestions.get();
|
||||||
}
|
}
|
||||||
|
@ -2000,7 +2000,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
});
|
});
|
||||||
|
|
||||||
composeText.setMentionValidator(annotations -> {
|
composeText.setMentionValidator(annotations -> {
|
||||||
if (!getRecipient().isPushV2Group()) {
|
if (!getRecipient().isPushV2Group() || !getRecipient().isActiveGroup()) {
|
||||||
return annotations;
|
return annotations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3334,7 +3334,6 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
long expiresIn = recipient.get().getExpireMessages() * 1000L;
|
long expiresIn = recipient.get().getExpireMessages() * 1000L;
|
||||||
int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1);
|
int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1);
|
||||||
boolean initiating = threadId == -1;
|
boolean initiating = threadId == -1;
|
||||||
QuoteModel quote = inputPanel.getQuote().orNull();
|
|
||||||
SlideDeck slideDeck = new SlideDeck();
|
SlideDeck slideDeck = new SlideDeck();
|
||||||
|
|
||||||
if (MediaUtil.isGif(contentType)) {
|
if (MediaUtil.isGif(contentType)) {
|
||||||
|
@ -3348,7 +3347,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
sendMediaMessage(isSmsForced(),
|
sendMediaMessage(isSmsForced(),
|
||||||
"",
|
"",
|
||||||
slideDeck,
|
slideDeck,
|
||||||
quote,
|
null,
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
composeText.getMentions(),
|
composeText.getMentions(),
|
||||||
|
@ -3356,7 +3355,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
false,
|
false,
|
||||||
subscriptionId,
|
subscriptionId,
|
||||||
initiating,
|
initiating,
|
||||||
true);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class UnverifiedDismissedListener implements UnverifiedBannerView.DismissListener {
|
private class UnverifiedDismissedListener implements UnverifiedBannerView.DismissListener {
|
||||||
|
|
|
@ -84,6 +84,8 @@ class ConversationDataSource extends PositionalDataSource<ConversationMessage> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long mentionStart = System.currentTimeMillis();
|
||||||
|
|
||||||
mentionHelper.fetchMentions(context);
|
mentionHelper.fetchMentions(context);
|
||||||
|
|
||||||
if (!isInvalid()) {
|
if (!isInvalid()) {
|
||||||
|
@ -94,7 +96,7 @@ class ConversationDataSource extends PositionalDataSource<ConversationMessage> {
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
callback.onResult(items, params.requestedStartPosition, result.getTotal());
|
callback.onResult(items, params.requestedStartPosition, result.getTotal());
|
||||||
Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.requestedStartPosition + ", requestedSize: " + params.requestedLoadSize + ", actualSize: " + result.getItems().size() + ", totalCount: " + result.getTotal());
|
Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms (mentions: " + (System.currentTimeMillis() - mentionStart) + " ms) | thread: " + threadId + ", start: " + params.requestedStartPosition + ", requestedSize: " + params.requestedLoadSize + ", actualSize: " + result.getItems().size() + ", totalCount: " + result.getTotal());
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.requestedStartPosition + ", requestedSize: " + params.requestedLoadSize + ", totalCount: " + totalCount + " -- invalidated");
|
Log.d(TAG, "[Initial Load] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.requestedStartPosition + ", requestedSize: " + params.requestedLoadSize + ", totalCount: " + totalCount + " -- invalidated");
|
||||||
}
|
}
|
||||||
|
@ -116,6 +118,8 @@ class ConversationDataSource extends PositionalDataSource<ConversationMessage> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long mentionStart = System.currentTimeMillis();
|
||||||
|
|
||||||
mentionHelper.fetchMentions(context);
|
mentionHelper.fetchMentions(context);
|
||||||
|
|
||||||
List<ConversationMessage> items = Stream.of(records)
|
List<ConversationMessage> items = Stream.of(records)
|
||||||
|
@ -123,7 +127,7 @@ class ConversationDataSource extends PositionalDataSource<ConversationMessage> {
|
||||||
.toList();
|
.toList();
|
||||||
callback.onResult(items);
|
callback.onResult(items);
|
||||||
|
|
||||||
Log.d(TAG, "[Update] " + (System.currentTimeMillis() - start) + " ms | thread: " + threadId + ", start: " + params.startPosition + ", size: " + params.loadSize + (isInvalid() ? " -- invalidated" : ""));
|
Log.d(TAG, "[Update] " + (System.currentTimeMillis() - start) + " ms (mentions: " + (System.currentTimeMillis() - mentionStart) + " ms) | thread: " + threadId + ", start: " + params.startPosition + ", size: " + params.loadSize + (isInvalid() ? " -- invalidated" : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class MentionHelper {
|
private static class MentionHelper {
|
||||||
|
|
|
@ -1521,7 +1521,7 @@ public class ConversationItem extends LinearLayout implements BindableConversati
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(@NonNull View widget) {
|
public void onClick(@NonNull View widget) {
|
||||||
if (eventListener != null && !Recipient.resolved(mentionedRecipientId).isLocalNumber()) {
|
if (eventListener != null) {
|
||||||
VibrateUtil.vibrateTick(context);
|
VibrateUtil.vibrateTick(context);
|
||||||
eventListener.onGroupMemberClicked(mentionedRecipientId, conversationRecipient.get().requireGroupId());
|
eventListener.onGroupMemberClicked(mentionedRecipientId, conversationRecipient.get().requireGroupId());
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class MentionsPickerFragment extends LoggingFragment {
|
||||||
private View bottomDivider;
|
private View bottomDivider;
|
||||||
private BottomSheetBehavior<View> behavior;
|
private BottomSheetBehavior<View> behavior;
|
||||||
private MentionsPickerViewModel viewModel;
|
private MentionsPickerViewModel viewModel;
|
||||||
|
private Runnable lockSheetAfterListUpdate = () -> behavior.setHideable(false);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public @Nullable View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
@ -62,6 +63,7 @@ public class MentionsPickerFragment extends LoggingFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeBehavior() {
|
private void initializeBehavior() {
|
||||||
|
behavior.setHideable(true);
|
||||||
behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
|
behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
|
||||||
|
|
||||||
behavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
|
behavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
|
||||||
|
@ -69,6 +71,7 @@ public class MentionsPickerFragment extends LoggingFragment {
|
||||||
public void onStateChanged(@NonNull View bottomSheet, int newState) {
|
public void onStateChanged(@NonNull View bottomSheet, int newState) {
|
||||||
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
|
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
|
||||||
adapter.submitList(Collections.emptyList());
|
adapter.submitList(Collections.emptyList());
|
||||||
|
showDividers(false);
|
||||||
} else {
|
} else {
|
||||||
showDividers(true);
|
showDividers(true);
|
||||||
}
|
}
|
||||||
|
@ -109,9 +112,10 @@ public class MentionsPickerFragment extends LoggingFragment {
|
||||||
if (isShowing) {
|
if (isShowing) {
|
||||||
list.scrollToPosition(0);
|
list.scrollToPosition(0);
|
||||||
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||||
list.post(() -> behavior.setHideable(false));
|
list.post(lockSheetAfterListUpdate);
|
||||||
showDividers(true);
|
showDividers(true);
|
||||||
} else {
|
} else {
|
||||||
|
list.getHandler().removeCallbacks(lockSheetAfterListUpdate);
|
||||||
behavior.setHideable(true);
|
behavior.setHideable(true);
|
||||||
behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
|
behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,8 @@ public class MentionsPickerViewModel extends ViewModel {
|
||||||
|
|
||||||
LiveData<Recipient> recipient = Transformations.switchMap(liveRecipient, LiveRecipient::getLiveData);
|
LiveData<Recipient> recipient = Transformations.switchMap(liveRecipient, LiveRecipient::getLiveData);
|
||||||
LiveData<List<RecipientId>> fullMembers = Transformations.distinctUntilChanged(LiveDataUtil.mapAsync(recipient, mentionsPickerRepository::getMembers));
|
LiveData<List<RecipientId>> fullMembers = Transformations.distinctUntilChanged(LiveDataUtil.mapAsync(recipient, mentionsPickerRepository::getMembers));
|
||||||
LiveData<Query> query = Transformations.distinctUntilChanged(liveQuery);
|
|
||||||
LiveData<MentionQuery> mentionQuery = LiveDataUtil.combineLatest(query, fullMembers, (q, m) -> new MentionQuery(q.query, m));
|
LiveData<MentionQuery> mentionQuery = LiveDataUtil.combineLatest(liveQuery, fullMembers, (q, m) -> new MentionQuery(q.query, m));
|
||||||
|
|
||||||
this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> Stream.of(mentionsPickerRepository.search(q)).<MappingModel<?>>map(MentionViewState::new).toList());
|
this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> Stream.of(mentionsPickerRepository.search(q)).<MappingModel<?>>map(MentionViewState::new).toList());
|
||||||
}
|
}
|
||||||
|
|
|
@ -437,7 +437,7 @@ public class AttachmentDatabase extends Database {
|
||||||
public void trimAllAbandonedAttachments() {
|
public void trimAllAbandonedAttachments() {
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME;
|
String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME;
|
||||||
String selectDataInUse = "SELECT DISTINCT " + DATA + " FROM " + TABLE_NAME + " WHERE " + QUOTE + " = 0 AND " + MMS_ID + " IN (" + selectAllMmsIds + ")";
|
String selectDataInUse = "SELECT DISTINCT " + DATA + " FROM " + TABLE_NAME + " WHERE " + QUOTE + " = 0 AND (" + MMS_ID + " IN (" + selectAllMmsIds + ") OR " + MMS_ID + " = " + PREUPLOAD_MESSAGE_ID + ")";
|
||||||
String where = MMS_ID + " NOT IN (" + selectAllMmsIds + ") AND " + DATA + " NOT IN (" + selectDataInUse + ")";
|
String where = MMS_ID + " NOT IN (" + selectAllMmsIds + ") AND " + DATA + " NOT IN (" + selectDataInUse + ")";
|
||||||
|
|
||||||
db.delete(TABLE_NAME, where, null);
|
db.delete(TABLE_NAME, where, null);
|
||||||
|
@ -1209,87 +1209,94 @@ public class AttachmentDatabase extends Database {
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
Log.d(TAG, "Inserting attachment for mms id: " + mmsId);
|
Log.d(TAG, "Inserting attachment for mms id: " + mmsId);
|
||||||
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
|
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
database.beginTransaction();
|
||||||
DataInfo dataInfo = null;
|
try {
|
||||||
long uniqueId = System.currentTimeMillis();
|
DataInfo dataInfo = null;
|
||||||
|
long uniqueId = System.currentTimeMillis();
|
||||||
|
|
||||||
if (attachment.getUri() != null) {
|
if (attachment.getUri() != null) {
|
||||||
dataInfo = setAttachmentData(attachment.getUri(), null);
|
dataInfo = setAttachmentData(attachment.getUri(), null);
|
||||||
Log.d(TAG, "Wrote part to file: " + dataInfo.file.getAbsolutePath());
|
Log.d(TAG, "Wrote part to file: " + dataInfo.file.getAbsolutePath());
|
||||||
}
|
|
||||||
|
|
||||||
Attachment template = attachment;
|
|
||||||
|
|
||||||
if (dataInfo != null && dataInfo.hash != null) {
|
|
||||||
Attachment possibleTemplate = findTemplateAttachment(dataInfo.hash);
|
|
||||||
|
|
||||||
if (possibleTemplate != null) {
|
|
||||||
Log.i(TAG, "Found a duplicate attachment upon insertion. Using it as a template.");
|
|
||||||
template = possibleTemplate;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
boolean useTemplateUpload = template.getUploadTimestamp() > attachment.getUploadTimestamp() &&
|
Attachment template = attachment;
|
||||||
template.getTransferState() == TRANSFER_PROGRESS_DONE &&
|
|
||||||
template.getTransformProperties().shouldSkipTransform() &&
|
|
||||||
!attachment.getTransformProperties().isVideoEdited();
|
|
||||||
|
|
||||||
ContentValues contentValues = new ContentValues();
|
if (dataInfo != null && dataInfo.hash != null) {
|
||||||
contentValues.put(MMS_ID, mmsId);
|
Attachment possibleTemplate = findTemplateAttachment(dataInfo.hash);
|
||||||
contentValues.put(CONTENT_TYPE, template.getContentType());
|
|
||||||
contentValues.put(TRANSFER_STATE, attachment.getTransferState());
|
|
||||||
contentValues.put(UNIQUE_ID, uniqueId);
|
|
||||||
contentValues.put(CDN_NUMBER, useTemplateUpload ? template.getCdnNumber() : attachment.getCdnNumber());
|
|
||||||
contentValues.put(CONTENT_LOCATION, useTemplateUpload ? template.getLocation() : attachment.getLocation());
|
|
||||||
contentValues.put(DIGEST, useTemplateUpload ? template.getDigest() : attachment.getDigest());
|
|
||||||
contentValues.put(CONTENT_DISPOSITION, useTemplateUpload ? template.getKey() : attachment.getKey());
|
|
||||||
contentValues.put(NAME, useTemplateUpload ? template.getRelay() : attachment.getRelay());
|
|
||||||
contentValues.put(FILE_NAME, StorageUtil.getCleanFileName(attachment.getFileName()));
|
|
||||||
contentValues.put(SIZE, template.getSize());
|
|
||||||
contentValues.put(FAST_PREFLIGHT_ID, attachment.getFastPreflightId());
|
|
||||||
contentValues.put(VOICE_NOTE, attachment.isVoiceNote() ? 1 : 0);
|
|
||||||
contentValues.put(BORDERLESS, attachment.isBorderless() ? 1 : 0);
|
|
||||||
contentValues.put(WIDTH, template.getWidth());
|
|
||||||
contentValues.put(HEIGHT, template.getHeight());
|
|
||||||
contentValues.put(QUOTE, quote);
|
|
||||||
contentValues.put(CAPTION, attachment.getCaption());
|
|
||||||
contentValues.put(UPLOAD_TIMESTAMP, useTemplateUpload ? template.getUploadTimestamp() : attachment.getUploadTimestamp());
|
|
||||||
if (attachment.getTransformProperties().isVideoEdited()) {
|
|
||||||
contentValues.putNull(VISUAL_HASH);
|
|
||||||
contentValues.put(TRANSFORM_PROPERTIES, attachment.getTransformProperties().serialize());
|
|
||||||
} else {
|
|
||||||
contentValues.put(VISUAL_HASH, getVisualHashStringOrNull(template));
|
|
||||||
contentValues.put(TRANSFORM_PROPERTIES, template.getTransformProperties().serialize());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attachment.isSticker()) {
|
if (possibleTemplate != null) {
|
||||||
contentValues.put(STICKER_PACK_ID, attachment.getSticker().getPackId());
|
Log.i(TAG, "Found a duplicate attachment upon insertion. Using it as a template.");
|
||||||
contentValues.put(STICKER_PACK_KEY, attachment.getSticker().getPackKey());
|
template = possibleTemplate;
|
||||||
contentValues.put(STICKER_ID, attachment.getSticker().getStickerId());
|
}
|
||||||
contentValues.put(STICKER_EMOJI, attachment.getSticker().getEmoji());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (dataInfo != null) {
|
boolean useTemplateUpload = template.getUploadTimestamp() > attachment.getUploadTimestamp() &&
|
||||||
contentValues.put(DATA, dataInfo.file.getAbsolutePath());
|
template.getTransferState() == TRANSFER_PROGRESS_DONE &&
|
||||||
contentValues.put(SIZE, dataInfo.length);
|
template.getTransformProperties().shouldSkipTransform() &&
|
||||||
contentValues.put(DATA_RANDOM, dataInfo.random);
|
!attachment.getTransformProperties().isVideoEdited();
|
||||||
|
|
||||||
|
ContentValues contentValues = new ContentValues();
|
||||||
|
contentValues.put(MMS_ID, mmsId);
|
||||||
|
contentValues.put(CONTENT_TYPE, template.getContentType());
|
||||||
|
contentValues.put(TRANSFER_STATE, attachment.getTransferState());
|
||||||
|
contentValues.put(UNIQUE_ID, uniqueId);
|
||||||
|
contentValues.put(CDN_NUMBER, useTemplateUpload ? template.getCdnNumber() : attachment.getCdnNumber());
|
||||||
|
contentValues.put(CONTENT_LOCATION, useTemplateUpload ? template.getLocation() : attachment.getLocation());
|
||||||
|
contentValues.put(DIGEST, useTemplateUpload ? template.getDigest() : attachment.getDigest());
|
||||||
|
contentValues.put(CONTENT_DISPOSITION, useTemplateUpload ? template.getKey() : attachment.getKey());
|
||||||
|
contentValues.put(NAME, useTemplateUpload ? template.getRelay() : attachment.getRelay());
|
||||||
|
contentValues.put(FILE_NAME, StorageUtil.getCleanFileName(attachment.getFileName()));
|
||||||
|
contentValues.put(SIZE, template.getSize());
|
||||||
|
contentValues.put(FAST_PREFLIGHT_ID, attachment.getFastPreflightId());
|
||||||
|
contentValues.put(VOICE_NOTE, attachment.isVoiceNote() ? 1 : 0);
|
||||||
|
contentValues.put(BORDERLESS, attachment.isBorderless() ? 1 : 0);
|
||||||
|
contentValues.put(WIDTH, template.getWidth());
|
||||||
|
contentValues.put(HEIGHT, template.getHeight());
|
||||||
|
contentValues.put(QUOTE, quote);
|
||||||
|
contentValues.put(CAPTION, attachment.getCaption());
|
||||||
|
contentValues.put(UPLOAD_TIMESTAMP, useTemplateUpload ? template.getUploadTimestamp() : attachment.getUploadTimestamp());
|
||||||
if (attachment.getTransformProperties().isVideoEdited()) {
|
if (attachment.getTransformProperties().isVideoEdited()) {
|
||||||
contentValues.putNull(DATA_HASH);
|
contentValues.putNull(VISUAL_HASH);
|
||||||
|
contentValues.put(TRANSFORM_PROPERTIES, attachment.getTransformProperties().serialize());
|
||||||
} else {
|
} else {
|
||||||
contentValues.put(DATA_HASH, dataInfo.hash);
|
contentValues.put(VISUAL_HASH, getVisualHashStringOrNull(template));
|
||||||
|
contentValues.put(TRANSFORM_PROPERTIES, template.getTransformProperties().serialize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (attachment.isSticker()) {
|
||||||
|
contentValues.put(STICKER_PACK_ID, attachment.getSticker().getPackId());
|
||||||
|
contentValues.put(STICKER_PACK_KEY, attachment.getSticker().getPackKey());
|
||||||
|
contentValues.put(STICKER_ID, attachment.getSticker().getStickerId());
|
||||||
|
contentValues.put(STICKER_EMOJI, attachment.getSticker().getEmoji());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataInfo != null) {
|
||||||
|
contentValues.put(DATA, dataInfo.file.getAbsolutePath());
|
||||||
|
contentValues.put(SIZE, dataInfo.length);
|
||||||
|
contentValues.put(DATA_RANDOM, dataInfo.random);
|
||||||
|
if (attachment.getTransformProperties().isVideoEdited()) {
|
||||||
|
contentValues.putNull(DATA_HASH);
|
||||||
|
} else {
|
||||||
|
contentValues.put(DATA_HASH, dataInfo.hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean notifyPacks = attachment.isSticker() && !hasStickerAttachments();
|
||||||
|
long rowId = database.insert(TABLE_NAME, null, contentValues);
|
||||||
|
AttachmentId attachmentId = new AttachmentId(rowId, uniqueId);
|
||||||
|
|
||||||
|
if (notifyPacks) {
|
||||||
|
notifyStickerPackListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
database.setTransactionSuccessful();
|
||||||
|
|
||||||
|
return attachmentId;
|
||||||
|
} finally {
|
||||||
|
database.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean notifyPacks = attachment.isSticker() && !hasStickerAttachments();
|
|
||||||
long rowId = database.insert(TABLE_NAME, null, contentValues);
|
|
||||||
AttachmentId attachmentId = new AttachmentId(rowId, uniqueId);
|
|
||||||
|
|
||||||
if (notifyPacks) {
|
|
||||||
notifyStickerPackListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
return attachmentId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable DatabaseAttachment findTemplateAttachment(@NonNull String dataHash) {
|
private @Nullable DatabaseAttachment findTemplateAttachment(@NonNull String dataHash) {
|
||||||
|
|
|
@ -283,12 +283,12 @@ public class ThreadDatabase extends Database {
|
||||||
mmsSmsDatabase.deleteAbandonedMessages();
|
mmsSmsDatabase.deleteAbandonedMessages();
|
||||||
attachmentDatabase.trimAllAbandonedAttachments();
|
attachmentDatabase.trimAllAbandonedAttachments();
|
||||||
groupReceiptDatabase.deleteAbandonedRows();
|
groupReceiptDatabase.deleteAbandonedRows();
|
||||||
|
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
||||||
db.setTransactionSuccessful();
|
db.setTransactionSuccessful();
|
||||||
} finally {
|
} finally {
|
||||||
db.endTransaction();
|
db.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
|
||||||
|
|
||||||
notifyAttachmentListeners();
|
notifyAttachmentListeners();
|
||||||
notifyStickerListeners();
|
notifyStickerListeners();
|
||||||
|
@ -312,12 +312,12 @@ public class ThreadDatabase extends Database {
|
||||||
mmsSmsDatabase.deleteAbandonedMessages();
|
mmsSmsDatabase.deleteAbandonedMessages();
|
||||||
attachmentDatabase.trimAllAbandonedAttachments();
|
attachmentDatabase.trimAllAbandonedAttachments();
|
||||||
groupReceiptDatabase.deleteAbandonedRows();
|
groupReceiptDatabase.deleteAbandonedRows();
|
||||||
|
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
||||||
db.setTransactionSuccessful();
|
db.setTransactionSuccessful();
|
||||||
} finally {
|
} finally {
|
||||||
db.endTransaction();
|
db.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
|
||||||
|
|
||||||
notifyAttachmentListeners();
|
notifyAttachmentListeners();
|
||||||
notifyStickerListeners();
|
notifyStickerListeners();
|
||||||
|
|
|
@ -91,7 +91,7 @@ public final class LeaveGroupDialog {
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setMessage(R.string.ConversationActivity_are_you_sure_you_want_to_leave_this_group)
|
.setMessage(R.string.ConversationActivity_are_you_sure_you_want_to_leave_this_group)
|
||||||
.setPositiveButton(R.string.yes, (dialog, which) -> {
|
.setPositiveButton(R.string.yes, (dialog, which) -> {
|
||||||
SimpleProgressDialog.DismissibleDialog progressDialog = SimpleProgressDialog.showDelayed(activity);
|
AlertDialog progressDialog = SimpleProgressDialog.show(activity);
|
||||||
SimpleTask.run(activity.getLifecycle(), this::leaveGroup, result -> {
|
SimpleTask.run(activity.getLifecycle(), this::leaveGroup, result -> {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
handleLeaveGroupResult(result);
|
handleLeaveGroupResult(result);
|
||||||
|
|
|
@ -172,7 +172,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
return jobs;
|
return jobs;
|
||||||
|
|
||||||
} catch (ProtocolInvalidVersionException e) {
|
} catch (ProtocolInvalidVersionException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.INVALID_VERSION,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.INVALID_VERSION,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
@ -180,7 +180,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
envelope.getTimestamp()));
|
envelope.getTimestamp()));
|
||||||
|
|
||||||
} catch (ProtocolInvalidMessageException | ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolUntrustedIdentityException e) {
|
} catch (ProtocolInvalidMessageException | ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolUntrustedIdentityException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.CORRUPT_MESSAGE,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.CORRUPT_MESSAGE,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
@ -188,7 +188,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
envelope.getTimestamp()));
|
envelope.getTimestamp()));
|
||||||
|
|
||||||
} catch (ProtocolNoSessionException e) {
|
} catch (ProtocolNoSessionException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.NO_SESSION,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.NO_SESSION,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
@ -196,7 +196,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
envelope.getTimestamp()));
|
envelope.getTimestamp()));
|
||||||
|
|
||||||
} catch (ProtocolLegacyMessageException e) {
|
} catch (ProtocolLegacyMessageException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.LEGACY_MESSAGE,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.LEGACY_MESSAGE,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
@ -204,7 +204,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
envelope.getTimestamp()));
|
envelope.getTimestamp()));
|
||||||
|
|
||||||
} catch (ProtocolDuplicateMessageException e) {
|
} catch (ProtocolDuplicateMessageException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.DUPLICATE_MESSAGE,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.DUPLICATE_MESSAGE,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
@ -212,7 +212,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
envelope.getTimestamp()));
|
envelope.getTimestamp()));
|
||||||
|
|
||||||
} catch (InvalidMetadataVersionException | InvalidMetadataMessageException e) {
|
} catch (InvalidMetadataVersionException | InvalidMetadataMessageException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
||||||
} catch (SelfSendException e) {
|
} catch (SelfSendException e) {
|
||||||
|
@ -220,7 +220,7 @@ public final class PushDecryptMessageJob extends BaseJob {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
||||||
} catch (UnsupportedDataMessageException e) {
|
} catch (UnsupportedDataMessageException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, String.valueOf(envelope.getTimestamp()), e);
|
||||||
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.UNSUPPORTED_DATA_MESSAGE,
|
return Collections.singletonList(new PushProcessMessageJob(PushProcessMessageJob.MessageState.UNSUPPORTED_DATA_MESSAGE,
|
||||||
toExceptionMetadata(e),
|
toExceptionMetadata(e),
|
||||||
messageId,
|
messageId,
|
||||||
|
|
|
@ -458,37 +458,37 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
switch (messageState) {
|
switch (messageState) {
|
||||||
|
|
||||||
case INVALID_VERSION:
|
case INVALID_VERSION:
|
||||||
Log.w(TAG, "Handling invalid version");
|
Log.w(TAG, "Handling invalid version (" + timestamp + ")");
|
||||||
handleInvalidVersionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
handleInvalidVersionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CORRUPT_MESSAGE:
|
case CORRUPT_MESSAGE:
|
||||||
Log.w(TAG, "Handling corrupt message");
|
Log.w(TAG, "Handling corrupt message (" + timestamp + ")");
|
||||||
handleCorruptMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
handleCorruptMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NO_SESSION:
|
case NO_SESSION:
|
||||||
Log.w(TAG, "Handling no session");
|
Log.w(TAG, "Handling no session (" + timestamp + ")");
|
||||||
handleNoSessionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
handleNoSessionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LEGACY_MESSAGE:
|
case LEGACY_MESSAGE:
|
||||||
Log.w(TAG, "Handling legacy message");
|
Log.w(TAG, "Handling legacy message (" + timestamp + ")");
|
||||||
handleLegacyMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
handleLegacyMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DUPLICATE_MESSAGE:
|
case DUPLICATE_MESSAGE:
|
||||||
Log.w(TAG, "Handling duplicate message");
|
Log.w(TAG, "Handling duplicate message (" + timestamp + ")");
|
||||||
handleDuplicateMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
handleDuplicateMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UNSUPPORTED_DATA_MESSAGE:
|
case UNSUPPORTED_DATA_MESSAGE:
|
||||||
Log.w(TAG, "Handling unsupported data message");
|
Log.w(TAG, "Handling unsupported data message (" + timestamp + ")");
|
||||||
handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.fromNullable(e.groupId), timestamp, smsMessageId);
|
handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.fromNullable(e.groupId), timestamp, smsMessageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new AssertionError("Not handled " + messageState);
|
throw new AssertionError("Not handled " + messageState + ". (" + timestamp + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.util.StringUtil;
|
||||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
|
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
import org.whispersystems.libsignal.util.guava.Optional;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
class EditProfileViewModel extends ViewModel {
|
class EditProfileViewModel extends ViewModel {
|
||||||
|
@ -121,9 +122,9 @@ class EditProfileViewModel extends ViewModel {
|
||||||
|
|
||||||
repository.uploadProfile(profileName,
|
repository.uploadProfile(profileName,
|
||||||
displayName,
|
displayName,
|
||||||
!Objects.equals(oldDisplayName, displayName),
|
!Objects.equals(StringUtil.stripBidiProtection(oldDisplayName), displayName),
|
||||||
newAvatar,
|
newAvatar,
|
||||||
oldAvatar != newAvatar,
|
!Arrays.equals(oldAvatar, newAvatar),
|
||||||
uploadResultConsumer);
|
uploadResultConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.thoughtcrime.securesms.recipients.ui.sharablegrouplink;
|
package org.thoughtcrime.securesms.recipients.ui.sharablegrouplink;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -19,6 +20,7 @@ import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
import org.thoughtcrime.securesms.groups.LiveGroup;
|
import org.thoughtcrime.securesms.groups.LiveGroup;
|
||||||
import org.thoughtcrime.securesms.recipients.ui.sharablegrouplink.qr.GroupLinkShareQrDialogFragment;
|
import org.thoughtcrime.securesms.recipients.ui.sharablegrouplink.qr.GroupLinkShareQrDialogFragment;
|
||||||
|
import org.thoughtcrime.securesms.sharing.ShareActivity;
|
||||||
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
||||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
|
@ -68,8 +70,14 @@ public final class GroupLinkBottomSheetDialogFragment extends BottomSheetDialogF
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
shareViaSignalButton.setOnClickListener(v -> dismiss()); // Todo [Alan] GV2 Add share within signal
|
shareViaSignalButton.setOnClickListener(v -> {
|
||||||
shareViaSignalButton.setVisibility(View.GONE);
|
Context context = requireContext();
|
||||||
|
Intent intent = new Intent(context, ShareActivity.class);
|
||||||
|
intent.putExtra(Intent.EXTRA_TEXT, groupLink.getUrl());
|
||||||
|
context.startActivity(intent);
|
||||||
|
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
copyButton.setOnClickListener(v -> {
|
copyButton.setOnClickListener(v -> {
|
||||||
Context context = requireContext();
|
Context context = requireContext();
|
||||||
|
|
|
@ -18,6 +18,7 @@ import androidx.lifecycle.ViewModelProviders;
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||||
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
||||||
|
|
||||||
public final class ShareableGroupLinkDialogFragment extends DialogFragment {
|
public final class ShareableGroupLinkDialogFragment extends DialogFragment {
|
||||||
|
@ -78,6 +79,8 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment {
|
||||||
View shareRow = view.findViewById(R.id.shareable_group_link_share_row);
|
View shareRow = view.findViewById(R.id.shareable_group_link_share_row);
|
||||||
View resetLinkRow = view.findViewById(R.id.shareable_group_link_reset_link_row);
|
View resetLinkRow = view.findViewById(R.id.shareable_group_link_reset_link_row);
|
||||||
View approveNewMembersRow = view.findViewById(R.id.shareable_group_link_approve_new_members_row);
|
View approveNewMembersRow = view.findViewById(R.id.shareable_group_link_approve_new_members_row);
|
||||||
|
View membersSectionHeader = view.findViewById(R.id.shareable_group_link_member_requests_section_header);
|
||||||
|
View descriptionRow = view.findViewById(R.id.shareable_group_link_display_row2);
|
||||||
|
|
||||||
Toolbar toolbar = view.findViewById(R.id.shareable_group_link_toolbar);
|
Toolbar toolbar = view.findViewById(R.id.shareable_group_link_toolbar);
|
||||||
|
|
||||||
|
@ -87,6 +90,13 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment {
|
||||||
shareableGroupLinkSwitch.setChecked(groupLink.isEnabled());
|
shareableGroupLinkSwitch.setChecked(groupLink.isEnabled());
|
||||||
approveNewMembersSwitch.setChecked(groupLink.isRequiresApproval());
|
approveNewMembersSwitch.setChecked(groupLink.isRequiresApproval());
|
||||||
shareableGroupLinkDisplay.setText(formatForFullWidthWrapping(groupLink.getUrl()));
|
shareableGroupLinkDisplay.setText(formatForFullWidthWrapping(groupLink.getUrl()));
|
||||||
|
|
||||||
|
ViewUtil.setEnabledRecursive(shareableGroupLinkDisplay, groupLink.isEnabled());
|
||||||
|
ViewUtil.setEnabledRecursive(shareRow, groupLink.isEnabled());
|
||||||
|
ViewUtil.setEnabledRecursive(resetLinkRow, groupLink.isEnabled());
|
||||||
|
ViewUtil.setEnabledRecursive(membersSectionHeader, groupLink.isEnabled());
|
||||||
|
ViewUtil.setEnabledRecursive(approveNewMembersRow, groupLink.isEnabled());
|
||||||
|
ViewUtil.setEnabledRecursive(descriptionRow, groupLink.isEnabled());
|
||||||
});
|
});
|
||||||
|
|
||||||
shareRow.setOnClickListener(v -> GroupLinkBottomSheetDialogFragment.show(requireFragmentManager(), groupId));
|
shareRow.setOnClickListener(v -> GroupLinkBottomSheetDialogFragment.show(requireFragmentManager(), groupId));
|
||||||
|
|
|
@ -84,7 +84,7 @@ class ContactConflictMerger implements StorageSyncHelper.ConflictMerger<SignalCo
|
||||||
IdentityState identityState = remote.getIdentityState();
|
IdentityState identityState = remote.getIdentityState();
|
||||||
byte[] identityKey = remote.getIdentityKey().or(local.getIdentityKey()).orNull();
|
byte[] identityKey = remote.getIdentityKey().or(local.getIdentityKey()).orNull();
|
||||||
boolean blocked = remote.isBlocked();
|
boolean blocked = remote.isBlocked();
|
||||||
boolean profileSharing = remote.isProfileSharingEnabled() || local.isProfileSharingEnabled();
|
boolean profileSharing = remote.isProfileSharingEnabled();
|
||||||
boolean archived = remote.isArchived();
|
boolean archived = remote.isArchived();
|
||||||
boolean matchesRemote = doParamsMatch(remote, unknownFields, address, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived);
|
boolean matchesRemote = doParamsMatch(remote, unknownFields, address, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived);
|
||||||
boolean matchesLocal = doParamsMatch(local, unknownFields, address, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived);
|
boolean matchesLocal = doParamsMatch(local, unknownFields, address, givenName, familyName, profileKey, username, identityState, identityKey, blocked, profileSharing, archived);
|
||||||
|
|
|
@ -181,6 +181,12 @@ public final class StringUtil {
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static @Nullable String stripBidiProtection(@Nullable String text) {
|
||||||
|
if (text == null) return null;
|
||||||
|
|
||||||
|
return text.replaceAll("[\\u2068\\u2069\\u202c]", "");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trims a {@link CharSequence} of starting and trailing whitespace. Behavior matches
|
* Trims a {@link CharSequence} of starting and trailing whitespace. Behavior matches
|
||||||
* {@link String#trim()} to preserve expectations around results.
|
* {@link String#trim()} to preserve expectations around results.
|
||||||
|
|
|
@ -263,4 +263,17 @@ public final class ViewUtil {
|
||||||
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||||
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables or disables a view and all child views recursively.
|
||||||
|
*/
|
||||||
|
public static void setEnabledRecursive(@NonNull View view, boolean enabled) {
|
||||||
|
view.setEnabled(enabled);
|
||||||
|
if (view instanceof ViewGroup) {
|
||||||
|
ViewGroup viewGroup = (ViewGroup) view;
|
||||||
|
for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
||||||
|
setEnabledRecursive(viewGroup.getChildAt(i), enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?title_text_color_disabled" android:state_enabled="false" />
|
||||||
|
<item android:color="?colorAccent" />
|
||||||
|
</selector>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?title_text_color_disabled" android:state_enabled="false" />
|
||||||
|
<item android:color="?title_text_color_primary" />
|
||||||
|
</selector>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?title_text_color_disabled" android:state_enabled="false" />
|
||||||
|
<item android:color="?title_text_color_secondary" />
|
||||||
|
</selector>
|
|
@ -66,7 +66,7 @@
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="10dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="12dp"
|
||||||
android:paddingBottom="10dp"
|
android:paddingBottom="10dp"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Caption"
|
android:textAppearance="@style/TextAppearance.Signal.Subtitle"
|
||||||
android:textColor="?title_text_color_secondary"
|
android:textColor="?title_text_color_secondary"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="@string/ManageGroupActivity_legacy_group_learn_more"
|
tools:text="@string/ManageGroupActivity_legacy_group_learn_more"
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
android:layout_marginStart="20dp"
|
android:layout_marginStart="20dp"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
android:text="@string/GroupsLearnMore_how_do_i_use_new_groups"
|
android:text="@string/GroupsLearnMore_can_i_upgrade_a_legacy_group"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
|
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
|
||||||
android:textColor="?title_text_color_primary"
|
android:textColor="?title_text_color_primary"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_2_a"
|
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_2_a"
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
android:layout_marginTop="20dp"
|
android:layout_marginTop="20dp"
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
android:text="@string/GroupsLearnMore_paragraph_3"
|
android:text="@string/GroupsLearnMore_paragraph_3"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
android:textColor="?title_text_color_secondary"
|
android:textColor="?title_text_color_secondary"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_1"
|
app:layout_constraintBottom_toTopOf="@+id/lbs_paragraph_1"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__share"
|
android:text="@string/ShareableGroupLinkDialogFragment__share"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
android:textColor="?title_text_color_secondary"
|
android:textColor="@color/text_color_secondary_enabled_selector"
|
||||||
tools:text="https://signal.group/#CjQKIKUBM1ER-gTjdWwktuuHJk4t-2Iujh0zkXl2VBB3bASIEhDwi34i-5OMAl5sFYt9VElW" />
|
tools:text="https://signal.group/#CjQKIKUBM1ER-gTjdWwktuuHJk4t-2Iujh0zkXl2VBB3bASIEhDwi34i-5OMAl5sFYt9VElW" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -115,12 +115,13 @@
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:drawablePadding="8dp"
|
android:drawablePadding="8dp"
|
||||||
|
android:drawableTint="@color/text_color_primary_enabled_selector"
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:gravity="center_vertical|start"
|
android:gravity="center_vertical|start"
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__share"
|
android:text="@string/ShareableGroupLinkDialogFragment__share"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
android:textColor="?title_text_color_primary"
|
android:textColor="@color/text_color_primary_enabled_selector"
|
||||||
app:drawableStartCompat="?share_icon" />
|
app:drawableStartCompat="?share_icon" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -145,12 +146,13 @@
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:drawablePadding="8dp"
|
android:drawablePadding="8dp"
|
||||||
|
android:drawableTint="@color/text_color_primary_enabled_selector"
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:gravity="center_vertical|start"
|
android:gravity="center_vertical|start"
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__reset_link"
|
android:text="@string/ShareableGroupLinkDialogFragment__reset_link"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
android:textColor="?title_text_color_primary"
|
android:textColor="@color/text_color_primary_enabled_selector"
|
||||||
app:drawableStartCompat="?reset_link_icon" />
|
app:drawableStartCompat="?reset_link_icon" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -163,7 +165,7 @@
|
||||||
android:layout_marginTop="36dp"
|
android:layout_marginTop="36dp"
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__member_requests"
|
android:text="@string/ShareableGroupLinkDialogFragment__member_requests"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
|
android:textAppearance="@style/TextAppearance.Signal.Body2.Bold"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="@color/text_color_accent_enabled_selector"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/shareable_group_link_reset_link_row" />
|
app:layout_constraintTop_toBottomOf="@id/shareable_group_link_reset_link_row" />
|
||||||
|
@ -189,7 +191,8 @@
|
||||||
android:gravity="center_vertical|start"
|
android:gravity="center_vertical|start"
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__approve_new_members"
|
android:text="@string/ShareableGroupLinkDialogFragment__approve_new_members"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2" />
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
|
android:textColor="@color/text_color_primary_enabled_selector" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/shareable_group_link_approve_new_members_switch"
|
android:id="@+id/shareable_group_link_approve_new_members_switch"
|
||||||
|
@ -226,7 +229,7 @@
|
||||||
android:text="@string/ShareableGroupLinkDialogFragment__require_an_admin_to_approve_new_members_joining_via_the_group_link"
|
android:text="@string/ShareableGroupLinkDialogFragment__require_an_admin_to_approve_new_members_joining_via_the_group_link"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
android:textAppearance="@style/TextAppearance.Signal.Body2"
|
||||||
android:textColor="?title_text_color_secondary" />
|
android:textColor="@color/text_color_secondary_enabled_selector" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -2385,7 +2385,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">المجموعات من الطراز القديم مقارنة بالمجموعات من الطراز القديم</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">المجموعات من الطراز القديم مقارنة بالمجموعات من الطراز القديم</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">ماهي المجموعات من الطراز القديم؟</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">ماهي المجموعات من الطراز القديم؟</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">المجموعات من الطراز القديم هي المجموعات الغير متوائمة مع الميزات الجديدة الموجودة في الطراز الجديد مثل خاصية المشرفين وتحديثات وصف المجموعة.</string>
|
<string name="GroupsLearnMore_paragraph_1">المجموعات من الطراز القديم هي المجموعات الغير متوائمة مع الميزات الجديدة الموجودة في الطراز الجديد مثل خاصية المشرفين وتحديثات وصف المجموعة.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">كيف استعمل المجموعات من الطراز الجديد؟</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">كيف استعمل المجموعات من الطراز الجديد؟</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">المجموعات من الطراز القديم لا يمكن تحويلها إلى الطراز الجديد، ولكن يمكنك أن تنشأ مجموعة جديدة بنفس الأعضاء ولكن من الطراز الجديد.</string>
|
<string name="GroupsLearnMore_paragraph_2">المجموعات من الطراز القديم لا يمكن تحويلها إلى الطراز الجديد، ولكن يمكنك أن تنشأ مجموعة جديدة بنفس الأعضاء ولكن من الطراز الجديد.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">عندما تنشئ مجموعة من الطراز الجديد، جميع الأعضاء يتوجب عليهم تحديث Signal لأحدث نسخة.</string>
|
<string name="GroupsLearnMore_paragraph_3">عندما تنشئ مجموعة من الطراز الجديد، جميع الأعضاء يتوجب عليهم تحديث Signal لأحدث نسخة.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2292,7 +2292,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare spram novih grupa</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare spram novih grupa</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Šta su stare gurpe?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Šta su stare gurpe?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Stare su one grupe koje nisu kompatibilne s novim grupnim opcijama poput administratora i detaljnih grupnih izvještaja.</string>
|
<string name="GroupsLearnMore_paragraph_1">Stare su one grupe koje nisu kompatibilne s novim grupnim opcijama poput administratora i detaljnih grupnih izvještaja.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kako ću koristiti nove grupe?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kako ću koristiti nove grupe?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Stare grupe ne mogu se preinačiti u nove, ali možete kreirati novu grupu sa istim članovima.</string>
|
<string name="GroupsLearnMore_paragraph_2">Stare grupe ne mogu se preinačiti u nove, ali možete kreirati novu grupu sa istim članovima.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Da biste mogli kreirati novu grupu, svi članovi moraju koristiti zadnju objavljenu verziju Signala.</string>
|
<string name="GroupsLearnMore_paragraph_3">Da biste mogli kreirati novu grupu, svi članovi moraju koristiti zadnju objavljenu verziju Signala.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2224,7 +2224,7 @@ S\'ha rebut un missatge d\'intercanvi de claus per a una versió del protocol no
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Grups de llegat vs. grups nous</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Grups de llegat vs. grups nous</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Què són els grups de llegat?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Què són els grups de llegat?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Els grups de llegat són grups que no són compatibles amb les funcions dels grups nous com ara els administradors i les actualitzacions més descriptives.</string>
|
<string name="GroupsLearnMore_paragraph_1">Els grups de llegat són grups que no són compatibles amb les funcions dels grups nous com ara els administradors i les actualitzacions més descriptives.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Com uso els grups nous?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Com uso els grups nous?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Els grups de llegat no es poden convertir a grups nous, però podeu crear un grup nou amb els mateixos membres.</string>
|
<string name="GroupsLearnMore_paragraph_2">Els grups de llegat no es poden convertir a grups nous, però podeu crear un grup nou amb els mateixos membres.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Per crear un grup nou, tots els membres han d\'actualitzar el Signal a la darrera versió.</string>
|
<string name="GroupsLearnMore_paragraph_3">Per crear un grup nou, tots els membres han d\'actualitzar el Signal a la darrera versió.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2353,7 +2353,7 @@ Obdržen požadavek na výměnu klíčů pro neplatnou verzi protokolu.
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Starší a nové skupiny</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Starší a nové skupiny</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Co jsou starší skupiny?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Co jsou starší skupiny?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Starší skupiny neumí vlastnosti nových skupin, jako je nastavení administrátorů a popisnější aktualizace skupin,</string>
|
<string name="GroupsLearnMore_paragraph_1">Starší skupiny neumí vlastnosti nových skupin, jako je nastavení administrátorů a popisnější aktualizace skupin,</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Jak použít nové skupiny?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Jak použít nové skupiny?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Starší skupiny nemohou být převedeny na nové, ale můžete vytvořit novou skupinu se stejnými členy.</string>
|
<string name="GroupsLearnMore_paragraph_2">Starší skupiny nemohou být převedeny na nové, ale můžete vytvořit novou skupinu se stejnými členy.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Pro vytvoření nové skupiny je třeba, aby všichni členové skupiny aktualizovali na poslední verzi Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Pro vytvoření nové skupiny je třeba, aby všichni členové skupiny aktualizovali na poslední verzi Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2356,7 +2356,7 @@ Send neges heb ei ddiogelu?</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Hen Grŵp o\'i gymharu â Grŵp Newydd</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Hen Grŵp o\'i gymharu â Grŵp Newydd</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Beth yw Hen Grwpiau?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Beth yw Hen Grwpiau?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Mae Hen Grwpiau yn grwpiau sydd ddim yn gydnaws â nodweddion Grŵp Newydd fel gweinyddwyr a diweddariadau grwpiau mwy disgrifiadol.</string>
|
<string name="GroupsLearnMore_paragraph_1">Mae Hen Grwpiau yn grwpiau sydd ddim yn gydnaws â nodweddion Grŵp Newydd fel gweinyddwyr a diweddariadau grwpiau mwy disgrifiadol.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Sut mae defnyddio Grwpiau Newydd?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Sut mae defnyddio Grwpiau Newydd?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Nid oes modd trosi Hen Grwpiau yn Grwpiau Newydd, ond gallwch greu Grŵp Newydd gyda\'r un aelodau.</string>
|
<string name="GroupsLearnMore_paragraph_2">Nid oes modd trosi Hen Grwpiau yn Grwpiau Newydd, ond gallwch greu Grŵp Newydd gyda\'r un aelodau.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">I greu Grŵp Newydd, dylai\'r holl aelodau ddiweddaru i\'r fersiwn ddiweddaraf o Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">I greu Grŵp Newydd, dylai\'r holl aelodau ddiweddaru i\'r fersiwn ddiweddaraf o Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2231,7 +2231,7 @@ Der er %d dage tilbage</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Forældede vs. nye grupper</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Forældede vs. nye grupper</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Hvad er forældede grupper?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Hvad er forældede grupper?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Forældede grupper, er grupper der ikke er kompatible med nye gruppefunktioner, som administratorer og mere beskrivende opdateringer af grupper</string>
|
<string name="GroupsLearnMore_paragraph_1">Forældede grupper, er grupper der ikke er kompatible med nye gruppefunktioner, som administratorer og mere beskrivende opdateringer af grupper</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Hvordan bruger jeg nye grupper?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Hvordan bruger jeg nye grupper?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Forældede grupper kan ikke konverteres til nye grupper, men du kan oprette en ny gruppe med de samme medlemmer</string>
|
<string name="GroupsLearnMore_paragraph_2">Forældede grupper kan ikke konverteres til nye grupper, men du kan oprette en ny gruppe med de samme medlemmer</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">For at oprette en ny gruppe, skal alle medlemmer opdatere til den nyeste version af Signal</string>
|
<string name="GroupsLearnMore_paragraph_3">For at oprette en ny gruppe, skal alle medlemmer opdatere til den nyeste version af Signal</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2219,7 +2219,7 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen</s
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Alt- vs. Neu-Gruppen</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Alt- vs. Neu-Gruppen</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Was sind Alt-Gruppen?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Was sind Alt-Gruppen?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Alt-Gruppen sind Gruppen, die nicht kompatibel sind mit Features von Neu-Gruppen wie Admins oder anschaulicheren Gruppenaktualisierungen.</string>
|
<string name="GroupsLearnMore_paragraph_1">Alt-Gruppen sind Gruppen, die nicht kompatibel sind mit Features von Neu-Gruppen wie Admins oder anschaulicheren Gruppenaktualisierungen.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Wie verwende ich Neu-Gruppen?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Wie verwende ich Neu-Gruppen?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Alt-Gruppen können nicht in Neu-Gruppen umgewandelt werden, aber du kannst eine Neu-Gruppe mit denselben Mitgliedern erstellen.</string>
|
<string name="GroupsLearnMore_paragraph_2">Alt-Gruppen können nicht in Neu-Gruppen umgewandelt werden, aber du kannst eine Neu-Gruppe mit denselben Mitgliedern erstellen.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Zum Erstellen einer Neu-Gruppe sollten alle Mitglieder Signal auf die neueste Version aktualisieren.</string>
|
<string name="GroupsLearnMore_paragraph_3">Zum Erstellen einer Neu-Gruppe sollten alle Mitglieder Signal auf die neueste Version aktualisieren.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2226,7 +2226,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Ομάδες παλαιού τύπου και νέες ομάδες</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Ομάδες παλαιού τύπου και νέες ομάδες</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Τι είναι οι ομάδες παλαιού τύπου;</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Τι είναι οι ομάδες παλαιού τύπου;</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Οι ομάδες παλαιού τύπου είναι ομάδες που δεν είναι συμβατές με χαρακτηριστικά των νέων ομαδών, όπως οι διαχειριστές και οι πιο περιγραφικές ανανεώσεις της ομάδας.</string>
|
<string name="GroupsLearnMore_paragraph_1">Οι ομάδες παλαιού τύπου είναι ομάδες που δεν είναι συμβατές με χαρακτηριστικά των νέων ομαδών, όπως οι διαχειριστές και οι πιο περιγραφικές ανανεώσεις της ομάδας.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Πως χρησιμοποιώ τις νέες ομάδες;</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Πως χρησιμοποιώ τις νέες ομάδες;</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Οι ομάδες παλαιού τύπου δεν μπορούν να μετατραπούν σε νέες ομάδες, αλλά μπορείς να δημιουργήσεις μια νέα ομάδα με τα ίδια μέλη.</string>
|
<string name="GroupsLearnMore_paragraph_2">Οι ομάδες παλαιού τύπου δεν μπορούν να μετατραπούν σε νέες ομάδες, αλλά μπορείς να δημιουργήσεις μια νέα ομάδα με τα ίδια μέλη.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Για τη δημιουργία ομάδας νέου τύπου, όλα τα μέλη θα πρέπει να αναβαθμίσουν στην πιο πρόσφατη έκδοση του Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Για τη δημιουργία ομάδας νέου τύπου, όλα τα μέλη θα πρέπει να αναβαθμίσουν στην πιο πρόσφατη έκδοση του Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2229,7 +2229,7 @@ Ricevis mesaĝon pri interŝanĝo de ŝlosiloj por nevalida protokola versio.
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Malnovtipaj kaj novtipaj grupoj</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Malnovtipaj kaj novtipaj grupoj</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Kio estas malnovtipaj grupoj?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Kio estas malnovtipaj grupoj?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Malnovtipaj grupoj estas grupoj, kiuj ne kongruas kun trajtoj de Novtipaj grupoj kiel administrantoj kaj grupaj ĝisdatigoj.</string>
|
<string name="GroupsLearnMore_paragraph_1">Malnovtipaj grupoj estas grupoj, kiuj ne kongruas kun trajtoj de Novtipaj grupoj kiel administrantoj kaj grupaj ĝisdatigoj.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kiel uzi Novtipajn grupojn?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kiel uzi Novtipajn grupojn?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Malnovtipaj grupoj ne konverteblas al Novtipaj grupoj, sed vi povas krei novtipan grupon kun la samaj anoj.</string>
|
<string name="GroupsLearnMore_paragraph_2">Malnovtipaj grupoj ne konverteblas al Novtipaj grupoj, sed vi povas krei novtipan grupon kun la samaj anoj.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Por krei novtipan grupon, ĉiuj anoj devas ĝisdatigi ilian Signal-version al la lasta.</string>
|
<string name="GroupsLearnMore_paragraph_3">Por krei novtipan grupon, ĉiuj anoj devas ĝisdatigi ilian Signal-version al la lasta.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2231,7 +2231,7 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Chats en grupo nuevos y antiguos</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Chats en grupo nuevos y antiguos</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">¿Qué son los chats en grupo antiguos?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">¿Qué son los chats en grupo antiguos?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Los chats en grupo antiguos no son compatibles con las características de los chats en grupo nuevos como admins o actualizaciones más descriptivas.</string>
|
<string name="GroupsLearnMore_paragraph_1">Los chats en grupo antiguos no son compatibles con las características de los chats en grupo nuevos como admins o actualizaciones más descriptivas.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">¿Cómo uso los nuevos chats en grupo?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">¿Cómo uso los nuevos chats en grupo?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Los chats en grupo antiguos no pueden convertirse en chats en grupo nuevos, pero puedes crear un grupo nuevo con la misma gente.</string>
|
<string name="GroupsLearnMore_paragraph_2">Los chats en grupo antiguos no pueden convertirse en chats en grupo nuevos, pero puedes crear un grupo nuevo con la misma gente.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Para crear un nuevo chat en grupo, tod*s l*s participantes deben tener su versión de Signal actualizada.</string>
|
<string name="GroupsLearnMore_paragraph_3">Para crear un nuevo chat en grupo, tod*s l*s participantes deben tener su versión de Signal actualizada.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2119,7 +2119,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Vanad vs uued grupid</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Vanad vs uued grupid</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Mis on vana tüüpi grupid?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Mis on vana tüüpi grupid?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Vana tüüpi grupid on need grupid, mis pole ühilduvad uut tüüpi gruppide funktsionaalsustega nagu administraatorid ja rohkem kirjeldavad grupi muudatused.</string>
|
<string name="GroupsLearnMore_paragraph_1">Vana tüüpi grupid on need grupid, mis pole ühilduvad uut tüüpi gruppide funktsionaalsustega nagu administraatorid ja rohkem kirjeldavad grupi muudatused.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kuidas ma saan uusi gruppe kasutada?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kuidas ma saan uusi gruppe kasutada?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Vana tüüpi gruppe ei saa uut tüüpi gruppideks teisendada, aga sa saad luua samade liikmetega uut tüüpi grupi.</string>
|
<string name="GroupsLearnMore_paragraph_2">Vana tüüpi gruppe ei saa uut tüüpi gruppideks teisendada, aga sa saad luua samade liikmetega uut tüüpi grupi.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Uue grupi loomiseks peavad kõik liikmed uuendama enda Signal-i uusimale versioonile.</string>
|
<string name="GroupsLearnMore_paragraph_3">Uue grupi loomiseks peavad kõik liikmed uuendama enda Signal-i uusimale versioonile.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2231,7 +2231,7 @@ Inportatu \'SMSBackup and Restorekin\' bateragarria den enkriptatu gabeko babesk
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Jarauntsitako Taldeak vs. Talde Berriak</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Jarauntsitako Taldeak vs. Talde Berriak</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Zer dira Jarauntsitako Taldeak?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Zer dira Jarauntsitako Taldeak?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Jarauntsitako Taldeak ez dira taldeen ezaugarri berriekin bateragarriak; esate baterako, administratzaileak eta taldeen egunerapenei buruzko informazio zehatzagoa izateko aukerak.</string>
|
<string name="GroupsLearnMore_paragraph_1">Jarauntsitako Taldeak ez dira taldeen ezaugarri berriekin bateragarriak; esate baterako, administratzaileak eta taldeen egunerapenei buruzko informazio zehatzagoa izateko aukerak.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Nola erabili dezaket Talde Berriak?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Nola erabili dezaket Talde Berriak?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Jarauntsitako Taldeak ezin dira Talde Berri bihurtu, baina kide berak dituen Talde Berri bat sortu dezakezu.</string>
|
<string name="GroupsLearnMore_paragraph_2">Jarauntsitako Taldeak ezin dira Talde Berri bihurtu, baina kide berak dituen Talde Berri bat sortu dezakezu.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Talde Berri bat sortzeko, kide guztiek Signal-en azkenengo bertsioa izan behar dute.</string>
|
<string name="GroupsLearnMore_paragraph_3">Talde Berri bat sortzeko, kide guztiek Signal-en azkenengo bertsioa izan behar dute.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -865,7 +865,7 @@
|
||||||
<string name="MessageRecord_s_joined_the_group_via_the_group_link">%1$s از طریق پیوند گروه به گروه پیوست.</string>
|
<string name="MessageRecord_s_joined_the_group_via_the_group_link">%1$s از طریق پیوند گروه به گروه پیوست.</string>
|
||||||
<!--GV2 group link requests-->
|
<!--GV2 group link requests-->
|
||||||
<string name="MessageRecord_you_sent_a_request_to_join_the_group">شما یک درخواست برای پیوستن به گروه ارسال کردید</string>
|
<string name="MessageRecord_you_sent_a_request_to_join_the_group">شما یک درخواست برای پیوستن به گروه ارسال کردید</string>
|
||||||
<string name="MessageRecord_s_requested_to_join_via_the_group_link">%1$s درخواست برای پیوستن به گروه از طریق پیوند ارسال کرد.</string>
|
<string name="MessageRecord_s_requested_to_join_via_the_group_link">%1$s درخواستی برای پیوستن به گروه از طریق پیوند ارسال کرد.</string>
|
||||||
<!--GV2 group link approvals-->
|
<!--GV2 group link approvals-->
|
||||||
<string name="MessageRecord_s_approved_your_request_to_join_the_group">%1$s با درخواست شما را برای پیوستن به گروه موافقت کرد.</string>
|
<string name="MessageRecord_s_approved_your_request_to_join_the_group">%1$s با درخواست شما را برای پیوستن به گروه موافقت کرد.</string>
|
||||||
<string name="MessageRecord_s_approved_a_request_to_join_the_group_from_s">%1$s با درخواستی از %2$s برای پیوستن به گروه موافقت کرد.</string>
|
<string name="MessageRecord_s_approved_a_request_to_join_the_group_from_s">%1$s با درخواستی از %2$s برای پیوستن به گروه موافقت کرد.</string>
|
||||||
|
@ -873,6 +873,7 @@
|
||||||
<string name="MessageRecord_your_request_to_join_the_group_has_been_approved">با درخواست شما برای پیوستن به گروه موافقت شد.</string>
|
<string name="MessageRecord_your_request_to_join_the_group_has_been_approved">با درخواست شما برای پیوستن به گروه موافقت شد.</string>
|
||||||
<string name="MessageRecord_a_request_to_join_the_group_from_s_has_been_approved">با درخواستی از %1$s برای پیوستن به گروه موافقت شد.</string>
|
<string name="MessageRecord_a_request_to_join_the_group_from_s_has_been_approved">با درخواستی از %1$s برای پیوستن به گروه موافقت شد.</string>
|
||||||
<!--GV2 group link deny-->
|
<!--GV2 group link deny-->
|
||||||
|
<string name="MessageRecord_your_request_to_join_the_group_has_been_denied_by_an_admin">درخواست شما برای پیوستن به گروه از طرف یک مدیر رد شد.</string>
|
||||||
<string name="MessageRecord_s_denied_a_request_to_join_the_group_from_s">%1$s درخواست %2$s برای پیوستن به گروه را رد کرد</string>
|
<string name="MessageRecord_s_denied_a_request_to_join_the_group_from_s">%1$s درخواست %2$s برای پیوستن به گروه را رد کرد</string>
|
||||||
<string name="MessageRecord_a_request_to_join_the_group_from_s_has_been_denied">درخواست %1$s برای پیوستن به گروه رد شد.</string>
|
<string name="MessageRecord_a_request_to_join_the_group_from_s_has_been_denied">درخواست %1$s برای پیوستن به گروه رد شد.</string>
|
||||||
<string name="MessageRecord_you_canceled_your_request_to_join_the_group">شما درخواست خود را برای پیوستن به گروه لغو کردید.</string>
|
<string name="MessageRecord_you_canceled_your_request_to_join_the_group">شما درخواست خود را برای پیوستن به گروه لغو کردید.</string>
|
||||||
|
@ -1407,7 +1408,7 @@
|
||||||
<string name="conversation_activity__sim_n">سیم کارت %1$d</string>
|
<string name="conversation_activity__sim_n">سیم کارت %1$d</string>
|
||||||
<string name="conversation_activity__send">ارسال</string>
|
<string name="conversation_activity__send">ارسال</string>
|
||||||
<string name="conversation_activity__compose_description">نوشتن پیام</string>
|
<string name="conversation_activity__compose_description">نوشتن پیام</string>
|
||||||
<string name="conversation_activity__emoji_toggle_description">تعویض صفحهکلید شکلکها</string>
|
<string name="conversation_activity__emoji_toggle_description">تعویض صفحهکلید ایموجی</string>
|
||||||
<string name="conversation_activity__attachment_thumbnail">تصویر بندانگشتی پیوست</string>
|
<string name="conversation_activity__attachment_thumbnail">تصویر بندانگشتی پیوست</string>
|
||||||
<string name="conversation_activity__quick_attachment_drawer_toggle_camera_description">تغییر وضعیت نگه دارنده پیوست دوربین سریع</string>
|
<string name="conversation_activity__quick_attachment_drawer_toggle_camera_description">تغییر وضعیت نگه دارنده پیوست دوربین سریع</string>
|
||||||
<string name="conversation_activity__quick_attachment_drawer_record_and_send_audio_description">ضبط و ارسال پیوست صوتی</string>
|
<string name="conversation_activity__quick_attachment_drawer_record_and_send_audio_description">ضبط و ارسال پیوست صوتی</string>
|
||||||
|
@ -1806,8 +1807,8 @@
|
||||||
<string name="preferences_storage__s_messages">%1$s پیام</string>
|
<string name="preferences_storage__s_messages">%1$s پیام</string>
|
||||||
<string name="preferences_storage__custom">دلخواه</string>
|
<string name="preferences_storage__custom">دلخواه</string>
|
||||||
<!-- Removed by excludeNonTranslatables <string name="preferences_Storage__custom_conversation_length_limit">محدودیت طول مکالمه سفارشی</string> -->
|
<!-- Removed by excludeNonTranslatables <string name="preferences_Storage__custom_conversation_length_limit">محدودیت طول مکالمه سفارشی</string> -->
|
||||||
<string name="preferences_advanced__use_system_emoji">استفاده از شکلکهای سیستم</string>
|
<string name="preferences_advanced__use_system_emoji">استفاده از ایموجیهای سیستم</string>
|
||||||
<string name="preferences_advanced__disable_signal_built_in_emoji_support">غیرفعال کردن پشتیبانی از شکلکهای داخل Signal</string>
|
<string name="preferences_advanced__disable_signal_built_in_emoji_support">غیرفعال کردن پشتیبانی از ایموجیهای درونی Signal</string>
|
||||||
<string name="preferences_advanced__relay_all_calls_through_the_signal_server_to_avoid_revealing_your_ip_address">گذراندن تمامی تماسها از سرور Signal به منظور جلوگیری از آشکار شدن نشانی اینترنتی شما برای مخاطبانتان. فعالسازی این گزینه باعث کاهش کیفیت تماس میگردد.</string>
|
<string name="preferences_advanced__relay_all_calls_through_the_signal_server_to_avoid_revealing_your_ip_address">گذراندن تمامی تماسها از سرور Signal به منظور جلوگیری از آشکار شدن نشانی اینترنتی شما برای مخاطبانتان. فعالسازی این گزینه باعث کاهش کیفیت تماس میگردد.</string>
|
||||||
<string name="preferences_advanced__always_relay_calls">عبور تمامی تماسها از سرور Signal</string>
|
<string name="preferences_advanced__always_relay_calls">عبور تمامی تماسها از سرور Signal</string>
|
||||||
<string name="preferences_app_protection__who_can">چه کسی میتواند….</string>
|
<string name="preferences_app_protection__who_can">چه کسی میتواند….</string>
|
||||||
|
@ -2227,7 +2228,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">گروههای قدیمی در مقابل گروههای جدید</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">گروههای قدیمی در مقابل گروههای جدید</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">گروههای قدیمی چیستند؟</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">گروههای قدیمی چیستند؟</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">گروههای قدیمی گروههایی هستند که با قابلیتهای گروه جدید مثل مدیران و بهروزرسانیهای مشروح گروه سازگار نیستند.</string>
|
<string name="GroupsLearnMore_paragraph_1">گروههای قدیمی گروههایی هستند که با قابلیتهای گروه جدید مثل مدیران و بهروزرسانیهای مشروح گروه سازگار نیستند.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">چگونه از گروههای جدید استفاده کنم؟</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">چگونه از گروههای جدید استفاده کنم؟</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">گروههای قدیمی نمیتوانند به گروههای جدید تبدیل شوند، اما شما میتوانید گروهی جدید با همان اعضا بسازید.</string>
|
<string name="GroupsLearnMore_paragraph_2">گروههای قدیمی نمیتوانند به گروههای جدید تبدیل شوند، اما شما میتوانید گروهی جدید با همان اعضا بسازید.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">برای ایجاد یک گروه جدید، همهٔ اعضا باید به آخرین نسخهٔ Signal بهروزرسانی کنند.</string>
|
<string name="GroupsLearnMore_paragraph_3">برای ایجاد یک گروه جدید، همهٔ اعضا باید به آخرین نسخهٔ Signal بهروزرسانی کنند.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -798,12 +798,12 @@
|
||||||
<string name="MessageRecord_you_are_no_longer_an_admin">Et ole enää ylläpitäjä.</string>
|
<string name="MessageRecord_you_are_no_longer_an_admin">Et ole enää ylläpitäjä.</string>
|
||||||
<!--GV2 invitations-->
|
<!--GV2 invitations-->
|
||||||
<string name="MessageRecord_you_invited_s_to_the_group">Kutsuit käyttäjän %1$s ryhmään.</string>
|
<string name="MessageRecord_you_invited_s_to_the_group">Kutsuit käyttäjän %1$s ryhmään.</string>
|
||||||
<string name="MessageRecord_s_invited_you_to_the_group">%1$s kutsui sinut ryhmään.</string>
|
<string name="MessageRecord_s_invited_you_to_the_group">%1$s kutsui sinut liittymään ryhmään.</string>
|
||||||
<plurals name="MessageRecord_s_invited_members">
|
<plurals name="MessageRecord_s_invited_members">
|
||||||
<item quantity="one">%1$s kutsui 1 henkilön ryhmään.</item>
|
<item quantity="one">%1$s kutsui 1 henkilön ryhmään.</item>
|
||||||
<item quantity="other">%1$s kutsui %2$d henkilöä ryhmään.</item>
|
<item quantity="other">%1$s kutsui %2$d henkilöä ryhmään.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="MessageRecord_you_were_invited_to_the_group">Sinut kutsuttiin ryhmään.</string>
|
<string name="MessageRecord_you_were_invited_to_the_group">Sinut kutsuttiin liittymään ryhmään.</string>
|
||||||
<plurals name="MessageRecord_d_people_were_invited_to_the_group">
|
<plurals name="MessageRecord_d_people_were_invited_to_the_group">
|
||||||
<item quantity="one">1 henkilö kutsuttiin ryhmään.</item>
|
<item quantity="one">1 henkilö kutsuttiin ryhmään.</item>
|
||||||
<item quantity="other">%1$d henkilöä kutsuttiin ryhmään.</item>
|
<item quantity="other">%1$d henkilöä kutsuttiin ryhmään.</item>
|
||||||
|
@ -811,7 +811,7 @@
|
||||||
<!--GV2 invitation revokes-->
|
<!--GV2 invitation revokes-->
|
||||||
<plurals name="MessageRecord_you_revoked_invites">
|
<plurals name="MessageRecord_you_revoked_invites">
|
||||||
<item quantity="one">Peruutit yhden kutsun ryhmään.</item>
|
<item quantity="one">Peruutit yhden kutsun ryhmään.</item>
|
||||||
<item quantity="other">Peruutit %1$d kutsua ryhmään.</item>
|
<item quantity="other">Peruutit %1$d kutsua liittyä ryhmään.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<plurals name="MessageRecord_s_revoked_invites">
|
<plurals name="MessageRecord_s_revoked_invites">
|
||||||
<item quantity="one">%1$s perui yhden kutsun ryhmään.</item>
|
<item quantity="one">%1$s perui yhden kutsun ryhmään.</item>
|
||||||
|
@ -2224,7 +2224,7 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Vanhan tyyliset vs. uudet ryhmät</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Vanhan tyyliset vs. uudet ryhmät</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Mitä ovat vanhan tyylin ryhmät?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Mitä ovat vanhan tyylin ryhmät?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Vanhan tyylin ryhmät ovat ryhmiä, jotka eivät ole yhteensopivia uusien ryhmien ominaisuuksien kanssa, kuten ylläpitäjyyden ja kuvaavien ryhmäpäivityksien.</string>
|
<string name="GroupsLearnMore_paragraph_1">Vanhan tyylin ryhmät ovat ryhmiä, jotka eivät ole yhteensopivia uusien ryhmien ominaisuuksien kanssa, kuten ylläpitäjyyden ja kuvaavien ryhmäpäivityksien.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kuinka voin käyttää uusia ryhmiä?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kuinka voin käyttää uusia ryhmiä?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Vanhan tyylin ryhmiä ei voida muuttaa uusiksi ryhmiksi, mutta voit luoda uuden ryhmän samoilla jäsenillä.</string>
|
<string name="GroupsLearnMore_paragraph_2">Vanhan tyylin ryhmiä ei voida muuttaa uusiksi ryhmiksi, mutta voit luoda uuden ryhmän samoilla jäsenillä.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Uuden ryhmän luomiseksi kaikkien jäsenten tulee päivittää Signalin uusimpaan versioon.</string>
|
<string name="GroupsLearnMore_paragraph_3">Uuden ryhmän luomiseksi kaikkien jäsenten tulee päivittää Signalin uusimpaan versioon.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2220,7 +2220,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Les groupes hérités comparés aux nouveaux</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Les groupes hérités comparés aux nouveaux</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Que sont les groupes hérités ?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Que sont les groupes hérités ?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Les groupes hérités sont des groupes qui ne sont pas compatibles avec les fonctions des nouveaux groupes, telles que les administrateurs et les mises à jour plus descriptives des groupes.</string>
|
<string name="GroupsLearnMore_paragraph_1">Les groupes hérités sont des groupes qui ne sont pas compatibles avec les fonctions des nouveaux groupes, telles que les administrateurs et les mises à jour plus descriptives des groupes.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Comment utiliser les nouveaux groupes ?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Comment utiliser les nouveaux groupes ?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Les groupes hérités ne peuvent pas être convertis en nouveaux groupes, mais vous pouvez créer un nouveau groupe avec les mêmes membres.</string>
|
<string name="GroupsLearnMore_paragraph_2">Les groupes hérités ne peuvent pas être convertis en nouveaux groupes, mais vous pouvez créer un nouveau groupe avec les mêmes membres.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Pour créer un nouveau groupe, tous les membres devraient mettre Signal à jour vers la version la plus récente.</string>
|
<string name="GroupsLearnMore_paragraph_3">Pour créer un nouveau groupe, tous les membres devraient mettre Signal à jour vers la version la plus récente.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2233,7 +2233,7 @@ Kulcs-csere üzenet érkezett érvénytelen protokoll verzióhoz.
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Régi vs. új csoportok</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Régi vs. új csoportok</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Mik azok a régi típusú csoportok?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Mik azok a régi típusú csoportok?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">A régi típusú csoportok olyan csoportok, amelyek nem kompatibilisek az új típusú csoportokban rendelkezésre álló újabb funkciókkal, mint amilyen pl. a csoport-adminok kijelölése vagy a részletesebb csoportfrissítések használata.</string>
|
<string name="GroupsLearnMore_paragraph_1">A régi típusú csoportok olyan csoportok, amelyek nem kompatibilisek az új típusú csoportokban rendelkezésre álló újabb funkciókkal, mint amilyen pl. a csoport-adminok kijelölése vagy a részletesebb csoportfrissítések használata.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Hogyan használhatóm az új típusú csoportokat?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Hogyan használhatóm az új típusú csoportokat?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">A régi típusú csoportokat nem lehet új típusúvá alakítani, viszont lehetőséged van egy új típusú csoport létrehozására a régivel megegyező csoporttagsággal.</string>
|
<string name="GroupsLearnMore_paragraph_2">A régi típusú csoportokat nem lehet új típusúvá alakítani, viszont lehetőséged van egy új típusú csoport létrehozására a régivel megegyező csoporttagsággal.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Az új típusú csoport létrehozásához az összes tagnak frissítenie kell a Signal legújabb verziójára.</string>
|
<string name="GroupsLearnMore_paragraph_3">Az új típusú csoport létrehozásához az összes tagnak frissítenie kell a Signal legújabb verziójára.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2230,7 +2230,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Gruppi Legacy vs. Nuovi</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Gruppi Legacy vs. Nuovi</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Cos\'è un Gruppo Legacy?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Cos\'è un Gruppo Legacy?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">I Gruppi Legacy sono gruppi che non sono compatibili con le funzionalità dei Nuovi Gruppi come amministratori e aggiornamenti del gruppo più descrittivi.</string>
|
<string name="GroupsLearnMore_paragraph_1">I Gruppi Legacy sono gruppi che non sono compatibili con le funzionalità dei Nuovi Gruppi come amministratori e aggiornamenti del gruppo più descrittivi.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Come si usano i Nuovi Gruppi?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Come si usano i Nuovi Gruppi?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">I Gruppi Legacy non possono essere convertiti in Nuovi Gruppi, ma puoi creare un Nuovo Gruppo con gli stessi membri.</string>
|
<string name="GroupsLearnMore_paragraph_2">I Gruppi Legacy non possono essere convertiti in Nuovi Gruppi, ma puoi creare un Nuovo Gruppo con gli stessi membri.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Per creare un Nuovo Gruppo, tutti i membri devono eseguire l\'aggiornamento all\'ultima versione di Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Per creare un Nuovo Gruppo, tutti i membri devono eseguire l\'aggiornamento all\'ultima versione di Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -924,6 +924,7 @@
|
||||||
<string name="MessageRecord_who_can_edit_group_membership_has_been_changed_to_s">מי יכול לערוך חברות קבוצה השתנה אל \"%1$s\".</string>
|
<string name="MessageRecord_who_can_edit_group_membership_has_been_changed_to_s">מי יכול לערוך חברות קבוצה השתנה אל \"%1$s\".</string>
|
||||||
<!--GV2 group link invite access level change-->
|
<!--GV2 group link invite access level change-->
|
||||||
<string name="MessageRecord_you_turned_off_the_group_link">כיבית את קישור הקבוצה.</string>
|
<string name="MessageRecord_you_turned_off_the_group_link">כיבית את קישור הקבוצה.</string>
|
||||||
|
<string name="MessageRecord_s_turned_off_the_group_link">%1$s כיבה/כיבתה את קישור הקבוצה.</string>
|
||||||
<!--GV2 group link reset-->
|
<!--GV2 group link reset-->
|
||||||
<string name="MessageRecord_you_reset_the_group_link">איפסת את קישור הקבוצה.</string>
|
<string name="MessageRecord_you_reset_the_group_link">איפסת את קישור הקבוצה.</string>
|
||||||
<string name="MessageRecord_s_reset_the_group_link">%1$s איפס/ה את קישור הקבוצה.</string>
|
<string name="MessageRecord_s_reset_the_group_link">%1$s איפס/ה את קישור הקבוצה.</string>
|
||||||
|
@ -2323,7 +2324,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">קבוצות מיושנות לעומת חדשות</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">קבוצות מיושנות לעומת חדשות</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">מהן קבוצות מיושנות?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">מהן קבוצות מיושנות?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">קבוצות מיושנות הן קבוצות שאינן תואמות עם מאפיינים של קבוצה חדשה כמו מנהלנים ועדכוני קבוצה תיאוריים יותר.</string>
|
<string name="GroupsLearnMore_paragraph_1">קבוצות מיושנות הן קבוצות שאינן תואמות עם מאפיינים של קבוצה חדשה כמו מנהלנים ועדכוני קבוצה תיאוריים יותר.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">איך אני משתמש בקבוצות חדשות?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">איך אני משתמש בקבוצות חדשות?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">קבוצות מיושנות אינן ניתנות להמרה אל קבוצות חדשות, אבל אתה יכול ליצור קבוצה חדשה עם אותם חברי קבוצה.</string>
|
<string name="GroupsLearnMore_paragraph_2">קבוצות מיושנות אינן ניתנות להמרה אל קבוצות חדשות, אבל אתה יכול ליצור קבוצה חדשה עם אותם חברי קבוצה.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">כדי ליצור קבוצה חדשה, כל חברי הקבוצה צריכים לעדכן אל הגרסה האחרונה של Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">כדי ליצור קבוצה חדשה, כל חברי הקבוצה צריכים לעדכן אל הגרסה האחרונה של Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2158,7 +2158,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">レガシーグループと新グループ</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">レガシーグループと新グループ</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">レガシーグループとは?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">レガシーグループとは?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">レガシーグループは新グループとは互換性がなく、管理機能や詳細なグループ内の更新情報などの機能を使用できません。</string>
|
<string name="GroupsLearnMore_paragraph_1">レガシーグループは新グループとは互換性がなく、管理機能や詳細なグループ内の更新情報などの機能を使用できません。</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">どうすれば新グループを使えますか?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">どうすれば新グループを使えますか?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">レガシーグループを新グループに変換することはできませんが、同じメンバーで新グループを作成できます。</string>
|
<string name="GroupsLearnMore_paragraph_2">レガシーグループを新グループに変換することはできませんが、同じメンバーで新グループを作成できます。</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">新グループを作成するには、すべてのメンバーが最新バージョンのSignalにアップデートしてください。</string>
|
<string name="GroupsLearnMore_paragraph_3">新グループを作成するには、すべてのメンバーが最新バージョンのSignalにアップデートしてください。</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2354,7 +2354,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Pasenusios grupės lyginant su naujosiomis</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Pasenusios grupės lyginant su naujosiomis</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Kas yra pasenusios grupės?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Kas yra pasenusios grupės?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Pasenusios grupės – tai grupės, kurios yra nesuderinamos su naujųjų grupių ypatybėmis, tokiomis kaip administratoriai ir išsamesni grupių atnaujinimai.</string>
|
<string name="GroupsLearnMore_paragraph_1">Pasenusios grupės – tai grupės, kurios yra nesuderinamos su naujųjų grupių ypatybėmis, tokiomis kaip administratoriai ir išsamesni grupių atnaujinimai.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kaip naudoti naująsias grupes?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kaip naudoti naująsias grupes?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Pasenusios grupės negali būti pakeistos į naująsias grupes, bet galite sukurti naująją grupę su tais pačiais nariais.</string>
|
<string name="GroupsLearnMore_paragraph_2">Pasenusios grupės negali būti pakeistos į naująsias grupes, bet galite sukurti naująją grupę su tais pačiais nariais.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Norint sukurti naująją grupę, visi nariai turėtų atsinaujinti į naujausią Signal versiją.</string>
|
<string name="GroupsLearnMore_paragraph_3">Norint sukurti naująją grupę, visi nariai turėtų atsinaujinti į naujausią Signal versiją.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2039,7 +2039,7 @@ grūpp apḍē</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">ലെഗസി vs. പുതിയ ഗ്രൂപ്പുകൾ</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">ലെഗസി vs. പുതിയ ഗ്രൂപ്പുകൾ</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">ലെഗസി ഗ്രൂപ്പുകൾ എന്താണ്?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">ലെഗസി ഗ്രൂപ്പുകൾ എന്താണ്?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">പുതിയ ഗ്രൂപ്പ് സവിശേഷതകളായ അഡ്മിനുകൾ, കൂടുതൽ വിവരണാത്മക ഗ്രൂപ്പ് അപ്ഡേറ്റുകൾ എന്നിവയുമായി പൊരുത്തപ്പെടാത്ത ഗ്രൂപ്പുകളാണ് ലെഗസി ഗ്രൂപ്പുകൾ.</string>
|
<string name="GroupsLearnMore_paragraph_1">പുതിയ ഗ്രൂപ്പ് സവിശേഷതകളായ അഡ്മിനുകൾ, കൂടുതൽ വിവരണാത്മക ഗ്രൂപ്പ് അപ്ഡേറ്റുകൾ എന്നിവയുമായി പൊരുത്തപ്പെടാത്ത ഗ്രൂപ്പുകളാണ് ലെഗസി ഗ്രൂപ്പുകൾ.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">പുതിയ ഗ്രൂപ്പുകൾ എങ്ങനെ ഉപയോഗിക്കാം?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">പുതിയ ഗ്രൂപ്പുകൾ എങ്ങനെ ഉപയോഗിക്കാം?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">ലെഗസി ഗ്രൂപ്പുകളെ പുതിയ ഗ്രൂപ്പുകളായി പരിവർത്തനം ചെയ്യാൻ കഴിയില്ല, എന്നാൽ സമാന അംഗങ്ങളുമായി നിങ്ങൾക്ക് ഒരു പുതിയ ഗ്രൂപ്പ് സൃഷ്ടിക്കാൻ കഴിയും.</string>
|
<string name="GroupsLearnMore_paragraph_2">ലെഗസി ഗ്രൂപ്പുകളെ പുതിയ ഗ്രൂപ്പുകളായി പരിവർത്തനം ചെയ്യാൻ കഴിയില്ല, എന്നാൽ സമാന അംഗങ്ങളുമായി നിങ്ങൾക്ക് ഒരു പുതിയ ഗ്രൂപ്പ് സൃഷ്ടിക്കാൻ കഴിയും.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">ഒരു പുതിയ ഗ്രൂപ്പ് സൃഷ്ടിക്കുന്നതിന്, എല്ലാ അംഗങ്ങൾക്കും Signalന്റെ ഏറ്റവും പുതിയ വേർഷൻ ഉണ്ടായിരിക്കണം</string>
|
<string name="GroupsLearnMore_paragraph_3">ഒരു പുതിയ ഗ്രൂപ്പ് സൃഷ്ടിക്കുന്നതിന്, എല്ലാ അംഗങ്ങൾക്കും Signalന്റെ ഏറ്റവും പുതിയ വേർഷൻ ഉണ്ടായിരിക്കണം</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2062,7 +2062,7 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversion.</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Legacy vs nye grupper</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Legacy vs nye grupper</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Hva er \"legacy\" grupper?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Hva er \"legacy\" grupper?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Legacy grupper er grupper som ikke er kompatible med nye gruppefunksjoner som administrator og mer beskrivende gruppeoppdateringer.</string>
|
<string name="GroupsLearnMore_paragraph_1">Legacy grupper er grupper som ikke er kompatible med nye gruppefunksjoner som administrator og mer beskrivende gruppeoppdateringer.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Hvordan bruker jeg nye grupper?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Hvordan bruker jeg nye grupper?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Legacy grupper kan ikke konverteres til nye grupper, men du kan lage en ny gruppe med de samme medlemmene.</string>
|
<string name="GroupsLearnMore_paragraph_2">Legacy grupper kan ikke konverteres til nye grupper, men du kan lage en ny gruppe med de samme medlemmene.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">For å lage en ny gruppe, burde alle medlemmer oppdatere til den nyeste versjonen av Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">For å lage en ny gruppe, burde alle medlemmer oppdatere til den nyeste versjonen av Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -1543,7 +1543,7 @@ Tot slot moet Signal de telefoonstatus kunnen lezen om te voorkomen dat Signal-o
|
||||||
<string name="import_fragment__import_plaintext_backup">Onversleuteld back-up-bestand importeren</string>
|
<string name="import_fragment__import_plaintext_backup">Onversleuteld back-up-bestand importeren</string>
|
||||||
<string name="import_fragment__import_a_plaintext_backup_file">Importeer een onversleuteld back-up-bestand. Compatibel met ‘Sms back-up & Herstellen’.</string>
|
<string name="import_fragment__import_a_plaintext_backup_file">Importeer een onversleuteld back-up-bestand. Compatibel met ‘Sms back-up & Herstellen’.</string>
|
||||||
<!--load_more_header-->
|
<!--load_more_header-->
|
||||||
<string name="load_more_header__see_full_conversation">Volledig gesprek bekijken</string>
|
<string name="load_more_header__see_full_conversation">Volledig gesprek weergeven</string>
|
||||||
<string name="load_more_header__loading">Aan het laden</string>
|
<string name="load_more_header__loading">Aan het laden</string>
|
||||||
<!--media_overview_activity-->
|
<!--media_overview_activity-->
|
||||||
<string name="media_overview_activity__no_media">Geen media</string>
|
<string name="media_overview_activity__no_media">Geen media</string>
|
||||||
|
@ -1797,7 +1797,7 @@ Signal zal nu toestemming vragen om je contactenlijst te lezen, om na te gaan wi
|
||||||
<string name="preferences_storage__videos">Video\'s</string>
|
<string name="preferences_storage__videos">Video\'s</string>
|
||||||
<string name="preferences_storage__files">Documenten</string>
|
<string name="preferences_storage__files">Documenten</string>
|
||||||
<string name="preferences_storage__audio">Audio</string>
|
<string name="preferences_storage__audio">Audio</string>
|
||||||
<string name="preferences_storage__review_storage">Alle bestanden bekijken</string>
|
<string name="preferences_storage__review_storage">Alle bestanden weergeven</string>
|
||||||
<string name="preferences_storage__delete_older_messages">Oude berichten wissen?</string>
|
<string name="preferences_storage__delete_older_messages">Oude berichten wissen?</string>
|
||||||
<string name="preferences_storage__clear_message_history">Berichtengeschiedenis wissen?</string>
|
<string name="preferences_storage__clear_message_history">Berichtengeschiedenis wissen?</string>
|
||||||
<string name="preferences_storage__this_will_permanently_delete_all_message_history_and_media">Dit zal pertinent alle gespreksgeschiedenis en media ouder dan %1$s van dit apparaat wissen.</string>
|
<string name="preferences_storage__this_will_permanently_delete_all_message_history_and_media">Dit zal pertinent alle gespreksgeschiedenis en media ouder dan %1$s van dit apparaat wissen.</string>
|
||||||
|
@ -2215,7 +2215,7 @@ Signal zal nu toestemming vragen om je contactenlijst te lezen, om na te gaan wi
|
||||||
<string name="RecipientBottomSheet_add_to_contacts">Aan contactenlijst toevoegen</string>
|
<string name="RecipientBottomSheet_add_to_contacts">Aan contactenlijst toevoegen</string>
|
||||||
<string name="RecipientBottomSheet_add_to_a_group">Aan een groep toevoegen</string>
|
<string name="RecipientBottomSheet_add_to_a_group">Aan een groep toevoegen</string>
|
||||||
<string name="RecipientBottomSheet_add_to_another_group">Aan nog een andere groep toevoegen</string>
|
<string name="RecipientBottomSheet_add_to_another_group">Aan nog een andere groep toevoegen</string>
|
||||||
<string name="RecipientBottomSheet_view_safety_number">Veiligheidsnummer bekijken</string>
|
<string name="RecipientBottomSheet_view_safety_number">Veiligheidsnummer weergeven</string>
|
||||||
<string name="RecipientBottomSheet_make_group_admin">Groepsbeheerder maken</string>
|
<string name="RecipientBottomSheet_make_group_admin">Groepsbeheerder maken</string>
|
||||||
<string name="RecipientBottomSheet_remove_as_admin">Beheerdersbevoegdheden intrekken</string>
|
<string name="RecipientBottomSheet_remove_as_admin">Beheerdersbevoegdheden intrekken</string>
|
||||||
<string name="RecipientBottomSheet_remove_from_group">Van de groep verwijderen</string>
|
<string name="RecipientBottomSheet_remove_from_group">Van de groep verwijderen</string>
|
||||||
|
@ -2235,7 +2235,7 @@ Signal zal nu toestemming vragen om je contactenlijst te lezen, om na te gaan wi
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Verouderde groepen tegenover nieuwe groepen</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Verouderde groepen tegenover nieuwe groepen</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Wat zijn oude groepen?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Wat zijn oude groepen?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Verouderde groepen zijn groepen waarin je geen gebruik kunt maken van nieuwe functionaliteiten zoals beheerders en meer gedetailleerde meldingen.</string>
|
<string name="GroupsLearnMore_paragraph_1">Verouderde groepen zijn groepen waarin je geen gebruik kunt maken van nieuwe functionaliteiten zoals beheerders en meer gedetailleerde meldingen.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Hoe kan ik de nieuwe groepen gebruiken?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Hoe kan ik de nieuwe groepen gebruiken?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Verouderde groepen kunnen niet worden omgezet in nieuwe groepen, maar je kunt wel een nieuwe groep aanmaken met dezelfde leden.</string>
|
<string name="GroupsLearnMore_paragraph_2">Verouderde groepen kunnen niet worden omgezet in nieuwe groepen, maar je kunt wel een nieuwe groep aanmaken met dezelfde leden.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Om een nieuwe groep aan te maken moeten alle leden hun Signal app bijwerken naar de meest recente versie.</string>
|
<string name="GroupsLearnMore_paragraph_3">Om een nieuwe groep aan te maken moeten alle leden hun Signal app bijwerken naar de meest recente versie.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2238,7 +2238,7 @@ Du er à jour!</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Eldre vs. Nye grupper</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Eldre vs. Nye grupper</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Kva er Eldre grupper?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Kva er Eldre grupper?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Eldre grupper er grupper som ikkje er kompatible med funksjonane til Nye grupper, slik som administratorar og meir beskrivande gruppeoppdateringar.</string>
|
<string name="GroupsLearnMore_paragraph_1">Eldre grupper er grupper som ikkje er kompatible med funksjonane til Nye grupper, slik som administratorar og meir beskrivande gruppeoppdateringar.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Korleis bruker eg Nye grupper?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Korleis bruker eg Nye grupper?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Eldre grupper kan ikkje konverterast til Nye grupper, men du kan oppretta ei Ny gruppe med same medlem.</string>
|
<string name="GroupsLearnMore_paragraph_2">Eldre grupper kan ikkje konverterast til Nye grupper, men du kan oppretta ei Ny gruppe med same medlem.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">For å laga ei Ny gruppe bør alle medlem oppdatera til nyaste utgåve av Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">For å laga ei Ny gruppe bør alle medlem oppdatera til nyaste utgåve av Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -531,7 +531,7 @@
|
||||||
<string name="ManageGroupActivity_member_requests_and_invites">Prośby o przyjęcie i zaproszenia</string>
|
<string name="ManageGroupActivity_member_requests_and_invites">Prośby o przyjęcie i zaproszenia</string>
|
||||||
<string name="ManageGroupActivity_add_members">Dodaj członków</string>
|
<string name="ManageGroupActivity_add_members">Dodaj członków</string>
|
||||||
<string name="ManageGroupActivity_edit_group_info">Edytuj informacje o grupie</string>
|
<string name="ManageGroupActivity_edit_group_info">Edytuj informacje o grupie</string>
|
||||||
<string name="ManageGroupActivity_choose_who_can_edit_the_group_name_avatar_and_disappearing_messages">Wybierz kto może edytować nazwę i awatara grupy, oraz czas znikania wiadomości.</string>
|
<string name="ManageGroupActivity_choose_who_can_edit_the_group_name_avatar_and_disappearing_messages">Kto może edytować nazwę i awatara grupy, i czas znikania wiadomości.</string>
|
||||||
<string name="ManageGroupActivity_choose_who_can_add_or_invite_new_members">Wybierz, kto może dodawać lub zapraszać nowych członków.</string>
|
<string name="ManageGroupActivity_choose_who_can_add_or_invite_new_members">Wybierz, kto może dodawać lub zapraszać nowych członków.</string>
|
||||||
<string name="ManageGroupActivity_group_link">Link do grupy</string>
|
<string name="ManageGroupActivity_group_link">Link do grupy</string>
|
||||||
<string name="ManageGroupActivity_block_group">Zablokuj grupę</string>
|
<string name="ManageGroupActivity_block_group">Zablokuj grupę</string>
|
||||||
|
@ -2346,7 +2346,7 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare vs. Nowe grupy</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare vs. Nowe grupy</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Czym są Stare grupy?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Czym są Stare grupy?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Stare grupy nie obsługują takich funkcji nowych grup jak administratorzy i dokładniejsze informacje o zmianach w grupach.</string>
|
<string name="GroupsLearnMore_paragraph_1">Stare grupy nie obsługują takich funkcji nowych grup jak administratorzy i dokładniejsze informacje o zmianach w grupach.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Jak skorzystać z Nowych grup?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Jak skorzystać z Nowych grup?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Starych grup nie można przekonwertować na Nowe, ale możesz stworzyć Nową grupę z tymi samymi członkami.</string>
|
<string name="GroupsLearnMore_paragraph_2">Starych grup nie można przekonwertować na Nowe, ale możesz stworzyć Nową grupę z tymi samymi członkami.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Aby utworzyć Nową grupę, wszyscy członkowie muszą zaktualizować Signal do najnowszej wersji.</string>
|
<string name="GroupsLearnMore_paragraph_3">Aby utworzyć Nową grupę, wszyscy członkowie muszą zaktualizować Signal do najnowszej wersji.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2230,7 +2230,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Legado vs Novos Grupos</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Legado vs Novos Grupos</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">O que são Grupos Legados?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">O que são Grupos Legados?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Grupos Legados são grupos que não são compatíveis com recursos dos Novos grupos como admins e atualizações de grupo mais descritivas.</string>
|
<string name="GroupsLearnMore_paragraph_1">Grupos Legados são grupos que não são compatíveis com recursos dos Novos grupos como admins e atualizações de grupo mais descritivas.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Como utilizar Novos Grupos?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Como utilizar Novos Grupos?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Grupos Legados não podem ser convertidos em Novos Grupos, mas você pode criar um Novo Grupo com os mesmos membros.</string>
|
<string name="GroupsLearnMore_paragraph_2">Grupos Legados não podem ser convertidos em Novos Grupos, mas você pode criar um Novo Grupo com os mesmos membros.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Para criar um Novo Grupo, todos os membros devem atualizar para a versão do Signal mais recente.</string>
|
<string name="GroupsLearnMore_paragraph_3">Para criar um Novo Grupo, todos os membros devem atualizar para a versão do Signal mais recente.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2226,7 +2226,7 @@ Mensagem de troca de chaves inválida para esta versão do protocolo.
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupos legados vs Grupos novos</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupos legados vs Grupos novos</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">O que são \'Grupos legados\'?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">O que são \'Grupos legados\'?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Os \'Grupos legados\' são grupos que não são compatíveis com os recursos de \'Grupo novo\' tais como administradores e atualizações mais descritivas do grupo.</string>
|
<string name="GroupsLearnMore_paragraph_1">Os \'Grupos legados\' são grupos que não são compatíveis com os recursos de \'Grupo novo\' tais como administradores e atualizações mais descritivas do grupo.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Como utilizo os \'Grupos novos\'?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Como utilizo os \'Grupos novos\'?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">OS \'Grupos legados\' não podem ser convertidos em \'Grupos novos\', mas você pode criar um \'Grupo novo\' com os mesmos membros.</string>
|
<string name="GroupsLearnMore_paragraph_2">OS \'Grupos legados\' não podem ser convertidos em \'Grupos novos\', mas você pode criar um \'Grupo novo\' com os mesmos membros.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Para criar um \'Grupo novo\', todos os membros deverão atualizar para a última versão do Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Para criar um \'Grupo novo\', todos os membros deverão atualizar para a última versão do Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2289,7 +2289,7 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupuri vechi vs. grupuri noi</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupuri vechi vs. grupuri noi</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Ce sunt grupurile vechi?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Ce sunt grupurile vechi?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Grupurile vechi sunt grupuri care nu sunt compatibile cu funcționalitățiile Grupului nou, cum ar fi administratorii și actualizări mai descriptive ale grupului.</string>
|
<string name="GroupsLearnMore_paragraph_1">Grupurile vechi sunt grupuri care nu sunt compatibile cu funcționalitățiile Grupului nou, cum ar fi administratorii și actualizări mai descriptive ale grupului.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Cum folosesc noile grupuri?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Cum folosesc noile grupuri?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Grupurile vechi nu pot fi convertite la Noul grup, dar puteți creea un nou grup cu aceeași membrii.</string>
|
<string name="GroupsLearnMore_paragraph_2">Grupurile vechi nu pot fi convertite la Noul grup, dar puteți creea un nou grup cu aceeași membrii.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Pentru a creea un grup nou, toți membrii ar trebui să se actualizeze la cea mai recentă versiune a Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Pentru a creea un grup nou, toți membrii ar trebui să se actualizeze la cea mai recentă versiune a Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2347,7 +2347,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Сравнение Старых и Новых групп</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Сравнение Старых и Новых групп</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Что такое Старые группы?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Что такое Старые группы?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Старые группы — это группы, которые несовместимы с функциями Новых групп, например администраторами и более подробными описаниями изменений в группе.</string>
|
<string name="GroupsLearnMore_paragraph_1">Старые группы — это группы, которые несовместимы с функциями Новых групп, например администраторами и более подробными описаниями изменений в группе.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Как я могу использовать Новые группы?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Как я могу использовать Новые группы?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Старые группы не могут быть преобразованы в Новые, но вы можете создать Новую группу с теми же участниками.</string>
|
<string name="GroupsLearnMore_paragraph_2">Старые группы не могут быть преобразованы в Новые, но вы можете создать Новую группу с теми же участниками.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Для создания Новой группы все участники должны обновиться до новейшей версии Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Для создания Новой группы все участники должны обновиться до новейшей версии Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2345,7 +2345,7 @@ Prejeto sporočilo za izmenjavo ključev za napačno različico protokola.</stri
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare in Nove skupine</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Stare in Nove skupine</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Kaj so stare skupine?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Kaj so stare skupine?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Stare skupine so skupine, ki niso združljive z naprednimi funkcijami Novih skupin, kot so skrbniki in bolj natančno upravljanje.</string>
|
<string name="GroupsLearnMore_paragraph_1">Stare skupine so skupine, ki niso združljive z naprednimi funkcijami Novih skupin, kot so skrbniki in bolj natančno upravljanje.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Kako uporabljam Nove skupine?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Kako uporabljam Nove skupine?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Stare skupine ne morejo biti pretvorjene v Nove, lahko pa ustvarite Novo skupino z identičnim članstvom.</string>
|
<string name="GroupsLearnMore_paragraph_2">Stare skupine ne morejo biti pretvorjene v Nove, lahko pa ustvarite Novo skupino z identičnim članstvom.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Če želite ustvariti Novo skupino, morajo vsi člani nadgraditi Signal na zadnjo različico.</string>
|
<string name="GroupsLearnMore_paragraph_3">Če želite ustvariti Novo skupino, morajo vsi člani nadgraditi Signal na zadnjo različico.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2233,7 +2233,7 @@ spastrohet dhe krejt lënda do të fshihet.</item>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupe të Dikurshëm vs. Grupesh të Rinj</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Grupe të Dikurshëm vs. Grupesh të Rinj</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Ç’janë Grupet e Dikurshëm?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Ç’janë Grupet e Dikurshëm?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Grupet e dikurshëm janë grupe që nuk janë të përputhshëm me veçori Grupesh të Rinj, bie fjala, përgjegjës dhe përditësime grupi më përshkruese.</string>
|
<string name="GroupsLearnMore_paragraph_1">Grupet e dikurshëm janë grupe që nuk janë të përputhshëm me veçori Grupesh të Rinj, bie fjala, përgjegjës dhe përditësime grupi më përshkruese.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Si t’i përdor Grupet e Rinj?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Si t’i përdor Grupet e Rinj?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Grupet e Dikurshëm s’mund të shndërrohen në Grupe të Rinj, por mund të krijoni një Grup të ri me të njëjtët anëtarë.</string>
|
<string name="GroupsLearnMore_paragraph_2">Grupet e Dikurshëm s’mund të shndërrohen në Grupe të Rinj, por mund të krijoni një Grup të ri me të njëjtët anëtarë.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Që të krijoni një Grup të Ri, krejt anëtarët duhet ta përditësojnë Signal-in me versionin më të ri.</string>
|
<string name="GroupsLearnMore_paragraph_3">Që të krijoni një Grup të Ri, krejt anëtarët duhet ta përditësojnë Signal-in me versionin më të ri.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -2224,7 +2224,7 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.</string>
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Äldre vs. Nya grupper</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Äldre vs. Nya grupper</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Vad är Äldre grupper?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Vad är Äldre grupper?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Äldre grupper är grupper som inte är kompatibla med nya gruppfunktioner som administratörer och mer beskrivande gruppuppdateringar.</string>
|
<string name="GroupsLearnMore_paragraph_1">Äldre grupper är grupper som inte är kompatibla med nya gruppfunktioner som administratörer och mer beskrivande gruppuppdateringar.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Hur använder jag Nya grupper?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Hur använder jag Nya grupper?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Äldre grupper kan inte konverteras till nya grupper, men du kan skapa en ny grupp med samma medlemmar.</string>
|
<string name="GroupsLearnMore_paragraph_2">Äldre grupper kan inte konverteras till nya grupper, men du kan skapa en ny grupp med samma medlemmar.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">För att skapa en Ny grupp, bör alla medlemmar uppdatera till den senaste versionen av Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">För att skapa en Ny grupp, bör alla medlemmar uppdatera till den senaste versionen av Signal.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2156,7 +2156,7 @@ Nhận thông tin trao đổi mã khóa về phiên bản giao thức không h
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Nhóm Mới và Nhóm Cũ</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Nhóm Mới và Nhóm Cũ</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">Nhóm Cũ là gì?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">Nhóm Cũ là gì?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Nhóm Cũ là nhóm không tương thích với các tính năng mới như quản trị viên hay cập nhật cụ thể thông tin nhóm.</string>
|
<string name="GroupsLearnMore_paragraph_1">Nhóm Cũ là nhóm không tương thích với các tính năng mới như quản trị viên hay cập nhật cụ thể thông tin nhóm.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">Làm thế nào tôi có thể sử dụng Nhóm Mới?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">Làm thế nào tôi có thể sử dụng Nhóm Mới?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">Nhóm Cũ không thể được chuyển đổi thành Nhóm Mới, nhưng bạn có thể tạo một Nhóm Mới với những thành viên cũ.</string>
|
<string name="GroupsLearnMore_paragraph_2">Nhóm Cũ không thể được chuyển đổi thành Nhóm Mới, nhưng bạn có thể tạo một Nhóm Mới với những thành viên cũ.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">Để tạo Nhóm Mới, tất cả thành viên cần phải cập nhật lên phiên bản Signal mới nhất.</string>
|
<string name="GroupsLearnMore_paragraph_3">Để tạo Nhóm Mới, tất cả thành viên cần phải cập nhật lên phiên bản Signal mới nhất.</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -578,6 +578,7 @@
|
||||||
<string name="MessageRecord_you_set_disappearing_message_time_to_s">设置阅后即焚消失时间为 %1$s。</string>
|
<string name="MessageRecord_you_set_disappearing_message_time_to_s">设置阅后即焚消失时间为 %1$s。</string>
|
||||||
<string name="MessageRecord_s_set_disappearing_message_time_to_s">%1$s 设置阅后即焚消失时间为 %2$s。</string>
|
<string name="MessageRecord_s_set_disappearing_message_time_to_s">%1$s 设置阅后即焚消失时间为 %2$s。</string>
|
||||||
<!--Profile change updates-->
|
<!--Profile change updates-->
|
||||||
|
<string name="MessageRecord_changed_their_profile_name_from_to">%1$s 的个人资料名称已从 %2$s 更改为 %3$s。</string>
|
||||||
<!--GV2 specific-->
|
<!--GV2 specific-->
|
||||||
<string name="MessageRecord_you_created_the_group">您创建了群组</string>
|
<string name="MessageRecord_you_created_the_group">您创建了群组</string>
|
||||||
<string name="MessageRecord_group_updated">群组更新完成。</string>
|
<string name="MessageRecord_group_updated">群组更新完成。</string>
|
||||||
|
@ -1144,7 +1145,7 @@
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="expiration_days_abbreviated">%d 天</string>
|
<string name="expiration_days_abbreviated">%d 天</string>
|
||||||
<plurals name="expiration_weeks">
|
<plurals name="expiration_weeks">
|
||||||
<item quantity="other">%d weeks</item>
|
<item quantity="other">%d 周</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="expiration_weeks_abbreviated">%d 周</string>
|
<string name="expiration_weeks_abbreviated">%d 周</string>
|
||||||
<string name="expiration_combined">%1$s %2$s</string>
|
<string name="expiration_combined">%1$s %2$s</string>
|
||||||
|
@ -1371,6 +1372,7 @@
|
||||||
<string name="preferences__slow">缓慢</string>
|
<string name="preferences__slow">缓慢</string>
|
||||||
<string name="preferences__help">帮助</string>
|
<string name="preferences__help">帮助</string>
|
||||||
<string name="preferences__advanced">高级</string>
|
<string name="preferences__advanced">高级</string>
|
||||||
|
<string name="preferences__donate_to_signal">捐赠 Signal</string>
|
||||||
<string name="preferences__privacy">隐私</string>
|
<string name="preferences__privacy">隐私</string>
|
||||||
<string name="preferences__mms_user_agent">彩信用户代理</string>
|
<string name="preferences__mms_user_agent">彩信用户代理</string>
|
||||||
<string name="preferences__advanced_mms_access_point_names">手动设置彩信</string>
|
<string name="preferences__advanced_mms_access_point_names">手动设置彩信</string>
|
||||||
|
|
|
@ -2165,7 +2165,7 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">舊版 vs. 新群組</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">舊版 vs. 新群組</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">什麼是舊版的群組?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">什麼是舊版的群組?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">舊版群組是與新群組功能,例如管理員和更具描述性的群組更新,不相容的群組。</string>
|
<string name="GroupsLearnMore_paragraph_1">舊版群組是與新群組功能,例如管理員和更具描述性的群組更新,不相容的群組。</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">我該如何使用新群組?</string>
|
<!-- Removed by excludeNonTranslatables <string name="GroupsLearnMore_how_do_i_use_new_groups">我該如何使用新群組?</string> -->
|
||||||
<string name="GroupsLearnMore_paragraph_2">舊版群組無法轉換為新群組,但是你可以建立具有相同成員的新群組。</string>
|
<string name="GroupsLearnMore_paragraph_2">舊版群組無法轉換為新群組,但是你可以建立具有相同成員的新群組。</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">要建立新群組,所有成員都應更新到Signal的最新版本。</string>
|
<string name="GroupsLearnMore_paragraph_3">要建立新群組,所有成員都應更新到Signal的最新版本。</string>
|
||||||
<!--GroupLinkBottomSheetDialogFragment-->
|
<!--GroupLinkBottomSheetDialogFragment-->
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
<attr name="title_text_color_primary" format="color"/>
|
<attr name="title_text_color_primary" format="color"/>
|
||||||
<attr name="title_text_color_secondary" format="color"/>
|
<attr name="title_text_color_secondary" format="color"/>
|
||||||
|
<attr name="title_text_color_disabled" format="color"/>
|
||||||
|
|
||||||
<attr name="attachment_type_selector_background" format="color"/>
|
<attr name="attachment_type_selector_background" format="color"/>
|
||||||
<attr name="attachment_document_icon_small" format="reference" />
|
<attr name="attachment_document_icon_small" format="reference" />
|
||||||
|
|
|
@ -622,7 +622,7 @@
|
||||||
|
|
||||||
<string name="ManageGroupActivity_edit_name_and_picture">Edit name and picture</string>
|
<string name="ManageGroupActivity_edit_name_and_picture">Edit name and picture</string>
|
||||||
<string name="ManageGroupActivity_legacy_group">Legacy Group</string>
|
<string name="ManageGroupActivity_legacy_group">Legacy Group</string>
|
||||||
<string name="ManageGroupActivity_legacy_group_learn_more">This is a Legacy Group. To access features like group admins, create a New Group.</string>
|
<string name="ManageGroupActivity_legacy_group_learn_more">This is a Legacy Group. Features like group admins are only available for New Groups.</string>
|
||||||
<string name="ManageGroupActivity_this_is_an_insecure_mms_group">This is an insecure MMS Group. To chat privately and access features like group names, invite your contacts to Signal.</string>
|
<string name="ManageGroupActivity_this_is_an_insecure_mms_group">This is an insecure MMS Group. To chat privately and access features like group names, invite your contacts to Signal.</string>
|
||||||
<string name="ManageGroupActivity_invite_now">Invite now</string>
|
<string name="ManageGroupActivity_invite_now">Invite now</string>
|
||||||
|
|
||||||
|
@ -2659,9 +2659,9 @@
|
||||||
<string name="GroupsLearnMore_legacy_vs_new_groups">Legacy vs. New Groups</string>
|
<string name="GroupsLearnMore_legacy_vs_new_groups">Legacy vs. New Groups</string>
|
||||||
<string name="GroupsLearnMore_what_are_legacy_groups">What are Legacy Groups?</string>
|
<string name="GroupsLearnMore_what_are_legacy_groups">What are Legacy Groups?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_1">Legacy Groups are groups that are not compatible with New Group features like admins and more descriptive group updates.</string>
|
<string name="GroupsLearnMore_paragraph_1">Legacy Groups are groups that are not compatible with New Group features like admins and more descriptive group updates.</string>
|
||||||
<string name="GroupsLearnMore_how_do_i_use_new_groups">How do I use New Groups?</string>
|
<string name="GroupsLearnMore_can_i_upgrade_a_legacy_group">Can I upgrade a Legacy Group?</string>
|
||||||
<string name="GroupsLearnMore_paragraph_2">Legacy Groups can’t be converted into New Groups, but you can create a New Group with the same members.</string>
|
<string name="GroupsLearnMore_paragraph_2">Legacy Groups can\'t yet be upgraded to New Groups, but you can create a New Group with the same members if they\'re on the latest version of Signal.</string>
|
||||||
<string name="GroupsLearnMore_paragraph_3">To create a New Group, all members should update to the latest version of Signal.</string>
|
<string name="GroupsLearnMore_paragraph_3">Signal will offer a way to upgrade Legacy Groups in the future.</string>
|
||||||
|
|
||||||
<!-- GroupLinkBottomSheetDialogFragment -->
|
<!-- GroupLinkBottomSheetDialogFragment -->
|
||||||
<string name="GroupLinkBottomSheet_share_via_signal">Share via Signal</string>
|
<string name="GroupLinkBottomSheet_share_via_signal">Share via Signal</string>
|
||||||
|
|
|
@ -118,6 +118,10 @@
|
||||||
<style name="TextAppearance.Signal.Caption" parent="@style/TextAppearance.AppCompat.Caption">
|
<style name="TextAppearance.Signal.Caption" parent="@style/TextAppearance.AppCompat.Caption">
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.Signal.Subtitle" parent="TextAppearance.Signal.Caption">
|
||||||
|
<item name="android:textSize">13sp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="TextAppearance.Signal.Subtitle2" parent="@style/TextAppearance.MaterialComponents.Subtitle2">
|
<style name="TextAppearance.Signal.Subtitle2" parent="@style/TextAppearance.MaterialComponents.Subtitle2">
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -172,6 +172,7 @@
|
||||||
|
|
||||||
<item name="title_text_color_primary">@color/core_grey_90</item>
|
<item name="title_text_color_primary">@color/core_grey_90</item>
|
||||||
<item name="title_text_color_secondary">@color/core_grey_60</item>
|
<item name="title_text_color_secondary">@color/core_grey_60</item>
|
||||||
|
<item name="title_text_color_disabled">@color/core_grey_25</item>
|
||||||
|
|
||||||
<item name="bottomSheetDialogTheme">@style/Theme.Design.Light.BottomSheetDialog</item>
|
<item name="bottomSheetDialogTheme">@style/Theme.Design.Light.BottomSheetDialog</item>
|
||||||
|
|
||||||
|
@ -510,6 +511,7 @@
|
||||||
|
|
||||||
<item name="title_text_color_primary">@color/core_grey_05</item>
|
<item name="title_text_color_primary">@color/core_grey_05</item>
|
||||||
<item name="title_text_color_secondary">@color/core_grey_25</item>
|
<item name="title_text_color_secondary">@color/core_grey_25</item>
|
||||||
|
<item name="title_text_color_disabled">@color/core_grey_60</item>
|
||||||
|
|
||||||
<item name="bottomSheetDialogTheme">@style/Theme.Design.BottomSheetDialog</item>
|
<item name="bottomSheetDialogTheme">@style/Theme.Design.BottomSheetDialog</item>
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class ContactConflictMergerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void merge_alwaysPreferRemote_exceptProfileSharingIsEitherOr() {
|
public void merge_alwaysPreferRemote() {
|
||||||
SignalContactRecord remote = new SignalContactRecord.Builder(byteArray(1), new SignalServiceAddress(UUID_A, E164_A))
|
SignalContactRecord remote = new SignalContactRecord.Builder(byteArray(1), new SignalServiceAddress(UUID_A, E164_A))
|
||||||
.setBlocked(true)
|
.setBlocked(true)
|
||||||
.setIdentityKey(byteArray(2))
|
.setIdentityKey(byteArray(2))
|
||||||
|
@ -79,7 +79,7 @@ public class ContactConflictMergerTest {
|
||||||
assertEquals("AFirst", merged.getGivenName().get());
|
assertEquals("AFirst", merged.getGivenName().get());
|
||||||
assertEquals("ALast", merged.getFamilyName().get());
|
assertEquals("ALast", merged.getFamilyName().get());
|
||||||
assertEquals("username A", merged.getUsername().get());
|
assertEquals("username A", merged.getUsername().get());
|
||||||
assertTrue(merged.isProfileSharingEnabled());
|
assertFalse(merged.isProfileSharingEnabled());
|
||||||
assertFalse(merged.isArchived());
|
assertFalse(merged.isArchived());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue