Merge remote-tracking branch 'upstream/dev' into libsession-integration

This commit is contained in:
0x330a 2023-04-05 15:59:19 +10:00
commit 7e4e36c3f7
No known key found for this signature in database
GPG Key ID: 267811D6E6A2698C
83 changed files with 509 additions and 167 deletions

View File

@ -161,8 +161,8 @@ dependencies {
testImplementation 'org.robolectric:shadows-multidex:4.4'
}
def canonicalVersionCode = 333
def canonicalVersionName = "1.16.5"
def canonicalVersionCode = 334
def canonicalVersionName = "1.16.6"
def postFixSize = 10
def abiPostFix = ['armeabi-v7a' : 1,

View File

@ -5,8 +5,9 @@ import androidx.annotation.AttrRes
/**
* Represents an action to be rendered
*/
data class ActionItem(
data class ActionItem @JvmOverloads constructor(
@AttrRes val iconRes: Int,
val title: CharSequence,
val action: Runnable
val action: Runnable,
val contentDescription: String? = null
)

View File

@ -77,6 +77,7 @@ class ContextMenuList(recyclerView: RecyclerView, onItemClick: () -> Unit) {
context.theme.resolveAttribute(model.item.iconRes, typedValue, true)
icon.setImageDrawable(ContextCompat.getDrawable(context, typedValue.resourceId))
}
itemView.contentDescription = model.item.contentDescription
title.text = model.item.title
itemView.setOnClickListener {
model.item.action.run()

View File

@ -858,7 +858,9 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
val recipient = viewModel.recipient ?: return
if (!isShowingMentionCandidatesView) {
additionalContentContainer.removeAllViews()
val view = MentionCandidatesView(this)
val view = MentionCandidatesView(this).apply {
contentDescription = context.getString(R.string.AccessibilityId_mentions_list)
}
view.glide = glide
view.onCandidateSelected = { handleMentionSelected(it) }
additionalContentContainer.addView(view)
@ -1035,7 +1037,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
override fun block(deleteThread: Boolean) {
val title = R.string.RecipientPreferenceActivity_block_this_contact_question
val message = R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_and_calls_from_this_contact
AlertDialog.Builder(this)
val dialog = AlertDialog.Builder(this)
.setTitle(title)
.setMessage(message)
.setNegativeButton(android.R.string.cancel, null)
@ -1046,6 +1048,8 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
finish()
}
}.show()
val button = dialog.getButton(DialogInterface.BUTTON_POSITIVE)
button.setContentDescription("Confirm block")
}
override fun copySessionID(sessionId: String) {

View File

@ -660,10 +660,14 @@ public final class ConversationReactionOverlay extends FrameLayout {
String userPublicKey = TextSecurePreferences.getLocalNumber(getContext());
// Select message
items.add(new ActionItem(R.attr.menu_select_icon, getContext().getResources().getString(R.string.conversation_context__menu_select), () -> handleActionItemClicked(Action.SELECT)));
items.add(new ActionItem(R.attr.menu_select_icon, getContext().getResources().getString(R.string.conversation_context__menu_select), () -> handleActionItemClicked(Action.SELECT),
getContext().getResources().getString(R.string.AccessibilityId_select)));
// Reply
if (!message.isPending() && !message.isFailed()) {
items.add(new ActionItem(R.attr.menu_reply_icon, getContext().getResources().getString(R.string.conversation_context__menu_reply), () -> handleActionItemClicked(Action.REPLY)));
items.add(
new ActionItem(R.attr.menu_reply_icon, getContext().getResources().getString(R.string.conversation_context__menu_reply), () -> handleActionItemClicked(Action.REPLY),
getContext().getResources().getString(R.string.AccessibilityId_reply_message))
);
}
// Copy message text
if (!containsControlMessage && hasText) {
@ -671,11 +675,17 @@ public final class ConversationReactionOverlay extends FrameLayout {
}
// Copy Session ID
if (recipient.isGroupRecipient() && !recipient.isOpenGroupRecipient() && !message.getRecipient().getAddress().toString().equals(userPublicKey)) {
items.add(new ActionItem(R.attr.menu_copy_icon, getContext().getResources().getString(R.string.activity_conversation_menu_copy_session_id), () -> handleActionItemClicked(Action.COPY_SESSION_ID)));
items.add(new ActionItem(
R.attr.menu_copy_icon, getContext().getResources().getString(R.string.activity_conversation_menu_copy_session_id), () -> handleActionItemClicked(Action.COPY_SESSION_ID))
);
}
// Delete message
if (ConversationMenuItemHelper.userCanDeleteSelectedItems(getContext(), message, openGroup, userPublicKey, blindedPublicKey)) {
items.add(new ActionItem(R.attr.menu_trash_icon, getContext().getResources().getString(R.string.delete), () -> handleActionItemClicked(Action.DELETE)));
items.add(new ActionItem(R.attr.menu_trash_icon, getContext().getResources().getString(R.string.delete),
() -> handleActionItemClicked(Action.DELETE),
getContext().getResources().getString(R.string.AccessibilityId_delete_message)
)
);
}
// Ban user
if (ConversationMenuItemHelper.userCanBanSelectedUsers(getContext(), message, openGroup, userPublicKey, blindedPublicKey)) {
@ -695,7 +705,9 @@ public final class ConversationReactionOverlay extends FrameLayout {
}
// Save media
if (message.isMms() && ((MediaMmsMessageRecord)message).containsMediaSlide()) {
items.add(new ActionItem(R.attr.menu_save_icon, getContext().getResources().getString(R.string.conversation_context_image__save_attachment), () -> handleActionItemClicked(Action.DOWNLOAD)));
items.add(new ActionItem(R.attr.menu_save_icon, getContext().getResources().getString(R.string.conversation_context_image__save_attachment), () -> handleActionItemClicked(Action.DOWNLOAD),
getContext().getResources().getString(R.string.AccessibilityId_save_attachment))
);
}
backgroundView.setVisibility(View.VISIBLE);

View File

@ -57,9 +57,9 @@ class InputBar : RelativeLayout, InputBarEditTextDelegate, QuoteViewDelegate, Li
val attachmentButtonsContainerHeight: Int
get() = binding.attachmentsButtonContainer.height
private val attachmentsButton by lazy { InputBarButton(context, R.drawable.ic_plus_24) }
private val microphoneButton by lazy { InputBarButton(context, R.drawable.ic_microphone) }
private val sendButton by lazy { InputBarButton(context, R.drawable.ic_arrow_up, true) }
private val attachmentsButton by lazy { InputBarButton(context, R.drawable.ic_plus_24).apply { contentDescription = context.getString(R.string.AccessibilityId_attachments_button)} }
private val microphoneButton by lazy { InputBarButton(context, R.drawable.ic_microphone).apply { contentDescription = context.getString(R.string.AccessibilityId_microphone_button)} }
private val sendButton by lazy { InputBarButton(context, R.drawable.ic_arrow_up, true).apply { contentDescription = context.getString(R.string.AccessibilityId_send_message_button)} }
// region Lifecycle
constructor(context: Context) : super(context) { initialize() }

View File

@ -7,6 +7,7 @@ import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ListView
import dagger.hilt.android.AndroidEntryPoint
import network.loki.messenger.R
import org.session.libsession.messaging.mentions.Mention
import org.thoughtcrime.securesms.database.LokiThreadDatabase
import org.thoughtcrime.securesms.mms.GlideRequests
@ -41,7 +42,9 @@ class MentionCandidatesView(context: Context, attrs: AttributeSet?, defStyleAttr
override fun getItem(position: Int): Mention { return candidates[position] }
override fun getView(position: Int, cellToBeReused: View?, parent: ViewGroup): View {
val cell = cellToBeReused as MentionCandidateView? ?: MentionCandidateView(context)
val cell = cellToBeReused as MentionCandidateView? ?: MentionCandidateView(context).apply {
contentDescription = context.getString(R.string.AccessibilityId_contact)
}
val mentionCandidate = getItem(position)
cell.glide = glide
cell.candidate = mentionCandidate

View File

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.conversation.v2.menus
import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.PorterDuff
@ -186,7 +187,7 @@ object ConversationMenuHelper {
private fun call(context: Context, thread: Recipient) {
if (!TextSecurePreferences.isCallNotificationsEnabled(context)) {
AlertDialog.Builder(context)
val dialog = AlertDialog.Builder(context)
.setTitle(R.string.ConversationActivity_call_title)
.setMessage(R.string.ConversationActivity_call_prompt)
.setPositiveButton(R.string.activity_settings_title) { _, _ ->
@ -195,7 +196,10 @@ object ConversationMenuHelper {
}
.setNeutralButton(R.string.cancel) { d, _ ->
d.dismiss()
}.show()
}.create()
dialog.getButton(DialogInterface.BUTTON_POSITIVE)?.contentDescription = context.getString(R.string.AccessibilityId_settings)
dialog.getButton(DialogInterface.BUTTON_NEGATIVE)?.contentDescription = context.getString(R.string.AccessibilityId_cancel_button)
dialog.show()
return
}

View File

@ -31,6 +31,7 @@ class ControlMessageView : LinearLayout {
binding.dateBreakTextView.showDateBreak(message, previous)
binding.iconImageView.visibility = View.GONE
var messageBody: CharSequence = message.getDisplayBody(context)
binding.root.contentDescription= null
when {
message.isExpirationTimerUpdate -> {
binding.iconImageView.setImageDrawable(
@ -46,6 +47,7 @@ class ControlMessageView : LinearLayout {
}
message.isMessageRequestResponse -> {
messageBody = context.getString(R.string.message_requests_accepted)
binding.root.contentDescription=context.getString(R.string.AccessibilityId_message_request_config_message)
}
message.isCallLog -> {
val drawable = when {

View File

@ -13,6 +13,9 @@ import android.view.HapticFeedbackConstants
import android.view.MotionEvent
import android.view.View
import android.widget.LinearLayout
import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
@ -194,7 +197,7 @@ class VisibleMessageView : LinearLayout {
binding.dateBreakTextView.isVisible = showDateBreak
// Message status indicator
if (message.isOutgoing) {
val (iconID, iconColor, textId) = getMessageStatusImage(message)
val (iconID, iconColor, textId, contentDescription) = getMessageStatusImage(message)
if (textId != null) {
binding.messageStatusTextView.setText(textId)
@ -209,6 +212,7 @@ class VisibleMessageView : LinearLayout {
}
binding.messageStatusImageView.setImageDrawable(drawable)
}
binding.messageStatusImageView.contentDescription = contentDescription
val lastMessageID = mmsSmsDb.getLastMessageID(message.threadId)
binding.messageStatusTextView.isVisible = (
@ -283,17 +287,43 @@ class VisibleMessageView : LinearLayout {
}
}
private fun getMessageStatusImage(message: MessageRecord): Triple<Int?,Int?,Int?> {
data class MessageStatusInfo(@DrawableRes val iconId: Int?,
@ColorInt val iconTint: Int?,
@StringRes val messageText: Int?,
val contentDescription: String?)
private fun getMessageStatusImage(message: MessageRecord): MessageStatusInfo {
return when {
!message.isOutgoing -> Triple(null, null, null)
!message.isOutgoing -> MessageStatusInfo(null,
null,
null,
null)
message.isFailed ->
Triple(R.drawable.ic_delivery_status_failed, resources.getColor(R.color.destructive, context.theme), R.string.delivery_status_failed)
MessageStatusInfo(
R.drawable.ic_delivery_status_failed,
resources.getColor(R.color.destructive, context.theme),
R.string.delivery_status_failed,
null
)
message.isPending ->
Triple(R.drawable.ic_delivery_status_sending, context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_sending)
MessageStatusInfo(
R.drawable.ic_delivery_status_sending,
context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_sending,
context.getString(R.string.AccessibilityId_message_sent_status_pending)
)
message.isRead ->
Triple(R.drawable.ic_delivery_status_read, context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_read)
MessageStatusInfo(
R.drawable.ic_delivery_status_read,
context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_read,
null
)
else ->
Triple(R.drawable.ic_delivery_status_sent, context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_sent)
MessageStatusInfo(
R.drawable.ic_delivery_status_sent,
context.getColorFromAttr(R.attr.message_status_color),
R.string.delivery_status_sent,
context.getString(R.string.AccessibilityId_message_sent_status_tick)
)
}
}

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.permissions;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
@ -12,6 +13,7 @@ import android.util.DisplayMetrics;
import android.view.Display;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@ -162,12 +164,13 @@ public class Permissions {
@SuppressWarnings("ConstantConditions")
private void executePermissionsRequestWithRationale(PermissionsRequest request) {
RationaleDialog.createFor(permissionObject.getContext(), rationaleDialogMessage, rationalDialogHeader)
.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> executePermissionsRequest(request))
.setNegativeButton(R.string.Permissions_not_now, (dialog, which) -> executeNoPermissionsRequest(request))
.show()
.getWindow()
.setLayout((int)(permissionObject.getWindowWidth() * .75), ViewGroup.LayoutParams.WRAP_CONTENT);
AlertDialog dialog = RationaleDialog.createFor(permissionObject.getContext(), rationaleDialogMessage, rationalDialogHeader)
.setPositiveButton(R.string.Permissions_continue, (d, which) -> executePermissionsRequest(request))
.setNegativeButton(R.string.Permissions_not_now, (d, which) -> executeNoPermissionsRequest(request))
.show();
dialog.getWindow().setLayout((int)(permissionObject.getWindowWidth() * .75), ViewGroup.LayoutParams.WRAP_CONTENT);
Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
positiveButton.setContentDescription("Continue");
}
private void executePermissionsRequest(PermissionsRequest request) {
@ -353,12 +356,17 @@ public class Permissions {
Context context = this.context.get();
if (context != null) {
new AlertDialog.Builder(context, R.style.ThemeOverlay_Session_AlertDialog)
AlertDialog alertDialog = new AlertDialog.Builder(context, R.style.ThemeOverlay_Session_AlertDialog)
.setTitle(R.string.Permissions_permission_required)
.setMessage(message)
.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> context.startActivity(getApplicationSettingsIntent(context)))
.setNegativeButton(android.R.string.cancel, null)
.show();
.create();
Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (positiveButton != null) {
positiveButton.setContentDescription(context.getString(R.string.AccessibilityId_continue));
}
alertDialog.show();
}
}
}

View File

@ -5,10 +5,12 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -179,7 +181,7 @@ public class PrivacySettingsPreferenceFragment extends ListSummaryPreferenceFrag
boolean val = (boolean) newValue;
if (val) {
// check if we've shown the info dialog and check for microphone permissions
new AlertDialog.Builder(new ContextThemeWrapper(context.requireContext(), R.style.ThemeOverlay_Session_AlertDialog))
AlertDialog dialog = new AlertDialog.Builder(new ContextThemeWrapper(context.requireContext(), R.style.ThemeOverlay_Session_AlertDialog))
.setTitle(R.string.dialog_voice_video_title)
.setMessage(R.string.dialog_voice_video_message)
.setPositiveButton(R.string.dialog_link_preview_enable_button_title, (d, w) -> {
@ -189,6 +191,8 @@ public class PrivacySettingsPreferenceFragment extends ListSummaryPreferenceFrag
})
.show();
Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
positiveButton.setContentDescription("Enable");
return false;
} else {
return true;

View File

@ -33,6 +33,7 @@
<EditText
style="@style/SessionEditText"
android:id="@+id/displayNameEditText"
android:contentDescription="@string/AccessibilityId_enter_display_name"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
@ -52,6 +53,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/registerButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -32,6 +32,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_create_session_id"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
@ -42,6 +43,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/restoreButton"
android:contentDescription="@string/AccessibilityId_restore_your_session"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
@ -51,6 +53,7 @@
<Button
android:id="@+id/linkButton"
android:contentDescription="@string/AccessibilityId_link_a_device"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -19,6 +19,7 @@
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:contentDescription="@string/AccessibilityId_message_notifications"
android:text="@string/activity_pn_mode_message_notifications" />
<TextView
@ -32,6 +33,7 @@
android:text="@string/activity_pn_mode_explanation" />
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_fast_mode_notifications_option"
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -70,6 +72,7 @@
</org.thoughtcrime.securesms.util.PNModeView>
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_slow_mode_notifications_option"
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -86,7 +89,8 @@
android:textSize="@dimen/medium_font_size"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
android:text="@string/activity_pn_mode_slow_mode" />
android:text="@string/activity_pn_mode_slow_mode"
/>
<TextView
android:layout_width="match_parent"
@ -101,6 +105,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/registerButton"
android:contentDescription="@string/AccessibilityId_continue_message_notifications"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -34,6 +34,7 @@
<EditText
style="@style/SessionEditText"
android:id="@+id/mnemonicEditText"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
@ -54,6 +55,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/restoreButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -33,6 +33,7 @@
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_session_id"
android:id="@+id/publicKeyTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -49,6 +50,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/registerButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -39,6 +39,7 @@
<TextView
style="@style/SessionIDTextView"
android:id="@+id/seedTextView"
android:contentDescription="@string/AccessibilityId_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/very_large_spacing"
@ -67,6 +68,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_recovery_phrase"
android:id="@+id/copyButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"

View File

@ -33,6 +33,7 @@
<EditText
style="@style/SessionEditText"
android:id="@+id/mnemonicEditText"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
@ -53,6 +54,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:id="@+id/continueButton"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"

View File

@ -59,6 +59,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/button"
android:contentDescription="@string/AccessibilityId_continue"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_marginLeft="4dp"

View File

@ -89,6 +89,7 @@
android:id="@+id/gifButtonContainer"
android:layout_width="@dimen/input_bar_button_expanded_size"
android:layout_height="@dimen/input_bar_button_expanded_size"
android:contentDescription="@string/AccessibilityId_gif_button"
android:alpha="0" />
<RelativeLayout
@ -96,6 +97,7 @@
android:layout_marginTop="8dp"
android:layout_width="@dimen/input_bar_button_expanded_size"
android:layout_height="@dimen/input_bar_button_expanded_size"
android:contentDescription="@string/AccessibilityId_documents_folder"
android:alpha="0" />
<RelativeLayout
@ -103,6 +105,7 @@
android:layout_marginTop="8dp"
android:layout_width="@dimen/input_bar_button_expanded_size"
android:layout_height="@dimen/input_bar_button_expanded_size"
android:contentDescription="@string/AccessibilityId_images_folder"
android:alpha="0" />
<RelativeLayout
@ -110,6 +113,7 @@
android:layout_marginTop="8dp"
android:layout_width="@dimen/input_bar_button_expanded_size"
android:layout_height="@dimen/input_bar_button_expanded_size"
android:contentDescription="@string/AccessibilityId_select_camera_button"
android:alpha="0" />
</LinearLayout>
@ -176,6 +180,7 @@
<RelativeLayout
android:id="@+id/blockedBanner"
android:contentDescription="@string/AccessibilityId_blocked_banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/toolbar"
@ -185,6 +190,7 @@
<TextView
android:id="@+id/blockedBannerTextView"
android:contentDescription="@string/AccessibilityId_blocked_banner_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
@ -208,14 +214,15 @@
<TextView
android:id="@+id/messageRequestBlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/AccessibilityId_block_message_request_button"
android:textColor="@color/destructive"
android:paddingHorizontal="@dimen/massive_spacing"
android:paddingVertical="@dimen/small_spacing"
android:textSize="@dimen/text_size"
android:text="@string/activity_conversation_block_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:text="@string/activity_conversation_block_user"/>
<TextView
android:id="@+id/sendAcceptsTextView"
@ -237,6 +244,7 @@
<Button
android:id="@+id/acceptMessageRequestButton"
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_accept_message_request_button"
android:layout_width="0dp"
android:layout_height="@dimen/medium_button_height"
android:layout_weight="1"
@ -245,6 +253,7 @@
<Button
android:id="@+id/declineMessageRequestButton"
style="@style/Widget.Session.Button.Common.DestructiveOutline"
android:contentDescription="@string/AccessibilityId_decline_message_request_button"
android:layout_width="0dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginStart="@dimen/medium_spacing"

View File

@ -23,6 +23,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:contentDescription="@string/AccessibilityId_username"
tools:text="@tools:sample/full_names"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"

View File

@ -32,6 +32,7 @@
<EditText
style="@style/SmallSessionEditText"
android:contentDescription="@string/AccessibilityId_enter_display_name"
android:id="@+id/displayNameEditText"
android:layout_width="match_parent"
android:layout_height="64dp"
@ -51,6 +52,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"

View File

@ -32,6 +32,7 @@
android:id="@+id/btnCancelGroupNameEdit"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@string/AccessibilityId_cancel_name_change"
android:src="@drawable/ic_baseline_clear_24"/>
<EditText
@ -48,6 +49,7 @@
android:inputType="text"
android:singleLine="true"
android:imeOptions="actionDone"
android:contentDescription="@string/AccessibilityId_group_name"
android:hint="@string/activity_edit_closed_group_edit_text_hint" />
<ImageView
@ -55,6 +57,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@string/AccessibilityId_accept_name_change"
android:src="@drawable/ic_baseline_done_24"/>
</LinearLayout>
@ -72,6 +75,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/AccessibilityId_group_name"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold"
@ -113,10 +117,10 @@
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:layout_width="wrap_content"
android:layout_height="@dimen/small_button_height"
android:layout_marginTop="@dimen/small_spacing"
android:layout_marginVertical="@dimen/small_spacing"
android:layout_marginEnd="@dimen/medium_spacing"
android:layout_marginStart="@dimen/small_spacing"
android:layout_marginBottom="@dimen/small_spacing"
android:contentDescription="@string/AccessibilityId_add_members"
android:paddingStart="@dimen/medium_spacing"
android:paddingEnd="@dimen/medium_spacing"
android:text="@string/activity_edit_closed_group_add_members" />

View File

@ -34,7 +34,8 @@
android:layout_height="@dimen/small_profile_picture_size"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="9dp" />
android:layout_marginLeft="9dp"
android:contentDescription="@string/AccessibilityId_user_settings" />
<org.thoughtcrime.securesms.home.PathStatusView
android:id="@+id/pathStatusView"
@ -56,6 +57,7 @@
<RelativeLayout
android:id="@+id/searchViewContainer"
android:contentDescription="@string/AccessibilityId_search_icon"
android:layout_width="@dimen/small_profile_picture_size"
android:layout_height="@dimen/small_profile_picture_size"
android:layout_alignParentRight="true"
@ -170,6 +172,7 @@
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/newConversationButton"
android:contentDescription="@string/AccessibilityId_new_conversation_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"

View File

@ -32,6 +32,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_create_session_id"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
@ -41,6 +42,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_restore_your_session"
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
@ -50,11 +52,11 @@
android:text="@string/activity_landing_restore_button_title" />
<Button
android:contentDescription="@string/AccessibilityId_link_a_device"
android:id="@+id/linkButton"
android:layout_width="match_parent"
android:layout_height="@dimen/onboarding_button_bottom_offset"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginHorizontal="@dimen/massive_spacing"
android:gravity="center"
android:background="@color/transparent"
android:textAllCaps="false"

View File

@ -20,9 +20,9 @@
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:animateLayoutChanges="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<RelativeLayout
android:id="@+id/loader"
@ -35,8 +35,8 @@
style="@style/SpinKitView.Large.ThreeBounce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_centerInParent="true"
android:layout_marginTop="8dp"
app:SpinKit_Color="@android:color/white" />
</RelativeLayout>

View File

@ -39,6 +39,7 @@
android:visibility="gone">
<TextView
android:contentDescription="@string/AccessibilityId_empty_message_request_folder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/message_request_empty_state_message"
@ -48,6 +49,7 @@
</LinearLayout>
<Button
android:contentDescription="@string/AccessibilityId_clear_all_message_requests"
android:id="@+id/clearAllMessageRequestsButton"
style="@style/Widget.Session.Button.Common.DestructiveOutline"
android:layout_width="196dp"

View File

@ -19,6 +19,7 @@
android:textSize="@dimen/large_font_size"
android:textStyle="bold"
android:textColor="?android:textColorPrimary"
android:contentDescription="@string/AccessibilityId_message_notifications"
android:text="@string/activity_pn_mode_message_notifications" />
<TextView
@ -32,6 +33,7 @@
android:text="@string/activity_pn_mode_explanation" />
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_fast_mode_notifications_option"
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -70,6 +72,7 @@
</org.thoughtcrime.securesms.util.PNModeView>
<org.thoughtcrime.securesms.util.PNModeView
android:contentDescription="@string/AccessibilityId_slow_mode_notifications_option"
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -100,6 +103,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue_message_notifications"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"

View File

@ -32,19 +32,20 @@
android:text="@string/activity_restore_explanation" />
<EditText
style="@style/SmallSessionEditText"
android:id="@+id/mnemonicEditText"
style="@style/SmallSessionEditText"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:gravity="center_vertical"
android:hint="@string/activity_restore_seed_edit_text_hint"
android:inputType="textMultiLine"
android:maxLines="3"
android:hint="@string/activity_restore_seed_edit_text_hint" />
android:paddingTop="0dp"
android:paddingBottom="0dp" />
<View
android:layout_width="match_parent"
@ -53,6 +54,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"

View File

@ -33,6 +33,7 @@
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_session_id"
android:id="@+id/publicKeyTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -49,6 +50,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
@ -58,6 +60,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_session_id"
android:id="@+id/copyButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"

View File

@ -38,6 +38,7 @@
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_recovery_phrase"
android:id="@+id/seedTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -68,6 +69,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_copy_recovery_phrase"
android:id="@+id/copyButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"

View File

@ -25,10 +25,12 @@
android:id="@+id/profilePictureView"
android:layout_width="@dimen/large_profile_picture_size"
android:layout_height="@dimen/large_profile_picture_size"
android:layout_marginTop="@dimen/medium_spacing" />
android:layout_marginTop="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_profile_picture" />
<RelativeLayout
android:id="@+id/ctnGroupNameSection"
android:contentDescription="@string/AccessibilityId_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/large_spacing"
@ -36,12 +38,12 @@
android:layout_marginRight="@dimen/large_spacing">
<EditText
style="@style/SessionEditText"
android:id="@+id/displayNameEditText"
style="@style/SessionEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAlignment="center"
android:contentDescription="@string/AccessibilityId_username"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:visibility="invisible"
@ -52,6 +54,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:contentDescription="@string/AccessibilityId_username"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" />
@ -77,6 +80,7 @@
android:textColor="?android:textColorPrimary"
android:fontFamily="@font/space_mono_regular"
android:textAlignment="center"
android:contentDescription="@string/AccessibilityId_session_id"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
<LinearLayout
@ -188,7 +192,8 @@
android:id="@+id/notificationsButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_notifications">
<ImageView
android:id="@+id/notificationsContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -208,7 +213,8 @@
android:textStyle="bold"
android:gravity="center"
android:layout_toEndOf="@+id/notificationsContainer"
android:text="@string/activity_settings_notifications_button_title" />
android:text="@string/activity_settings_notifications_button_title"
/>
</RelativeLayout>
@ -222,7 +228,9 @@
android:id="@+id/chatsButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_conversations">
<ImageView
android:id="@+id/chatsContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -255,7 +263,8 @@
android:id="@+id/messageRequestsButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_message_requests">
<ImageView
android:id="@+id/messageRequestsContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -288,7 +297,8 @@
android:id="@+id/appearanceButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_appearance">
<ImageView
android:id="@+id/appearanceContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -321,7 +331,8 @@
android:id="@+id/inviteFriendButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_invite_friend">
<ImageView
android:id="@+id/inviteFriendContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -354,7 +365,8 @@
android:id="@+id/seedButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_recovery_phrase">
<ImageView
android:id="@+id/seedContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -387,7 +399,8 @@
android:id="@+id/helpButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_help">
<ImageView
android:id="@+id/helpContainer"
android:layout_width="@dimen/small_profile_picture_size"
@ -420,7 +433,8 @@
android:id="@+id/clearAllDataButton"
android:paddingHorizontal="@dimen/large_spacing"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height">
android:layout_height="@dimen/setting_button_height"
android:contentDescription="@string/AccessibilityId_clear_data">
<ImageView
android:id="@+id/clearContainer"
android:layout_width="@dimen/small_profile_picture_size"

View File

@ -16,6 +16,7 @@
/>
<TextView
android:contentDescription="@string/AccessibilityId_contact"
android:textSize="@dimen/text_size"
android:textStyle="bold"
android:layout_width="0dp"

View File

@ -5,6 +5,7 @@
android:layout_marginVertical="@dimen/medium_spacing"
android:layout_height="wrap_content">
<TextView
android:contentDescription="@string/AccessibilityId_blocked_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/medium_spacing"

View File

@ -32,6 +32,7 @@
android:layout_marginStart="6dp"
android:layout_width="12dp"
android:layout_height="12dp"
android:contentDescription="@string/AccessibilityId_timer_icon"
android:visibility="gone"
tools:visibility="visible"/>

View File

@ -45,6 +45,7 @@
<Button
style="@style/Widget.Session.Button.Dialog.Unimportant"
android:id="@+id/unblockButton"
android:contentDescription="@string/AccessibilityId_block_confirm"
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"

View File

@ -40,6 +40,7 @@
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:contentDescription="@string/AccessibilityId_dont_download_media"
android:text="@string/cancel" />
<Button
@ -49,6 +50,7 @@
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:layout_marginStart="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_download_media"
android:text="@string/dialog_download_button_title" />
</LinearLayout>

View File

@ -40,7 +40,8 @@
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:text="@string/cancel" />
android:text="@string/cancel"
android:contentDescription="@string/AccessibilityId_cancel_link_preview_button"/>
<Button
style="@style/Widget.Session.Button.Dialog.Unimportant"
@ -49,7 +50,10 @@
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:layout_marginStart="@dimen/medium_spacing"
android:text="@string/dialog_link_preview_enable_button_title" />
android:text="@string/dialog_link_preview_enable_button_title"
android:contentDescription="@string/AccessibilityId_enable_link_preview_button"
/>
</LinearLayout>

View File

@ -28,6 +28,7 @@
<TextView
style="@style/SessionIDTextView"
android:contentDescription="@string/AccessibilityId_recovery_phrase"
android:id="@+id/seedTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -46,6 +47,7 @@
<Button
style="@style/Widget.Session.Button.Dialog.UnimportantText"
android:contentDescription="@string/AccessibilityId_cancel_button"
android:id="@+id/copyButton"
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
@ -55,6 +57,7 @@
<Button
style="@style/Widget.Session.Button.Dialog.UnimportantText"
android:contentDescription="@string/AccessibilityId_copy_recovery_phrase"
android:id="@+id/closeButton"
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"

View File

@ -12,6 +12,7 @@
<cn.carbswang.android.numberpickerview.library.NumberPickerView
android:id="@+id/expiration_number_picker"
android:contentDescription="@string/AccessibilityId_disappearing_messages_time_picker"
android:layout_alignParentTop="true"
app:npv_WrapSelectorWheel="false"
app:npv_DividerColor="#cbc8ea"

View File

@ -12,6 +12,7 @@
<TextView
android:id="@+id/detailsTextView"
style="@style/BottomSheetActionItem"
android:contentDescription="@string/AccessibilityId_details"
android:drawableStart="@drawable/ic_info_outline_white_24dp"
android:drawableTint="?attr/colorControlNormal"
android:text="@string/details" />
@ -35,6 +36,7 @@
<TextView
android:id="@+id/pinTextView"
style="@style/BottomSheetActionItem"
android:contentDescription="@string/AccessibilityId_pin"
android:drawableStart="?attr/menu_pin_icon"
android:text="@string/conversation_pin"
android:visibility="gone"
@ -51,6 +53,7 @@
<TextView
android:id="@+id/blockTextView"
style="@style/BottomSheetActionItem"
android:contentDescription="@string/AccessibilityId_block"
android:drawableStart="?attr/menu_block_icon"
android:text="@string/RecipientPreferenceActivity_block"
android:visibility="gone"
@ -67,6 +70,7 @@
<TextView
android:id="@+id/muteNotificationsTextView"
style="@style/BottomSheetActionItem"
android:contentDescription="@string/AccessibilityId_mute_notifications"
android:drawableStart="@drawable/ic_outline_notifications_off_24"
android:text="@string/MuteDialog_mute_notifications"
tools:visibility="visible"
@ -102,6 +106,7 @@
<TextView
android:id="@+id/deleteTextView"
style="@style/BottomSheetActionItem"
android:contentDescription="@string/AccessibilityId_delete"
android:drawableStart="?attr/menu_trash_icon"
android:text="@string/delete" />

View File

@ -56,6 +56,7 @@
android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/large_spacing"
android:layout_marginBottom="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_group_name_input"
android:hint="@string/activity_create_closed_group_edit_text_hint"
android:maxLength="30"
app:layout_constraintEnd_toEndOf="parent"
@ -102,6 +103,7 @@
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginVertical="@dimen/large_spacing"
android:contentDescription="@string/AccessibilityId_create_group"
android:text="@string/activity_create_group_create_button_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -11,18 +11,21 @@
<TextView
android:id="@+id/deleteForMeTextView"
android:contentDescription="@string/AccessibilityId_delete_just_for_me"
style="@style/BottomSheetActionItem"
android:text="@string/delete_message_for_me"
android:textColor="@color/destructive"/>
<TextView
android:id="@+id/deleteForEveryoneTextView"
android:contentDescription="@string/delete_message_for_everyone"
style="@style/BottomSheetActionItem"
android:text="@string/delete_message_for_everyone"
android:textColor="@color/destructive"/>
<TextView
android:id="@+id/cancelTextView"
android:contentDescription="@string/AccessibilityId_cancel_deletion"
style="@style/BottomSheetActionItem"
android:text="@string/cancel" />

View File

@ -33,6 +33,7 @@
android:layout_height="64dp"
android:layout_marginHorizontal="@dimen/large_spacing"
android:layout_marginTop="@dimen/large_spacing"
android:contentDescription="@string/AccessibilityId_session_id_input"
android:gravity="center_vertical"
android:hint="@string/fragment_enter_public_key_edit_text_hint"
android:imeOptions="actionDone"
@ -131,6 +132,7 @@
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"
android:layout_marginVertical="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_next"
android:text="@string/next"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"

View File

@ -59,6 +59,7 @@
<TextView
android:id="@+id/createPrivateChatButton"
android:contentDescription="@string/AccessibilityId_new_direct_message"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height"
android:drawablePadding="@dimen/large_spacing"
@ -84,6 +85,7 @@
<TextView
android:id="@+id/createClosedGroupButton"
android:contentDescription="@string/AccessibilityId_create_group"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height"
android:drawablePadding="@dimen/large_spacing"
@ -109,6 +111,7 @@
<TextView
android:id="@+id/joinCommunityButton"
android:contentDescription="@string/AccessibilityId_join_community"
android:layout_width="match_parent"
android:layout_height="@dimen/setting_button_height"
android:drawablePadding="@dimen/large_spacing"

View File

@ -35,9 +35,9 @@
android:id="@+id/mnemonicEditText"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginHorizontal="@dimen/very_large_spacing"
android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing"
android:contentDescription="@string/AccessibilityId_enter_your_recovery_phrase"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:gravity="center_vertical"
@ -55,9 +55,9 @@
android:id="@+id/continueButton"
android:layout_width="match_parent"
android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginHorizontal="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_link_device"
android:text="@string/continue_2" />
</LinearLayout>

View File

@ -54,6 +54,7 @@
<ImageView
android:layout_width="20dp"
android:layout_height="22dp"
android:contentDescription="@string/AccessibilityId_edit_user_nickname"
android:paddingTop="2dp"
android:src="@drawable/ic_baseline_edit_24" />
@ -71,6 +72,7 @@
android:id="@+id/cancelNicknameEditingButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@string/AccessibilityId_cancel"
android:src="@drawable/ic_baseline_clear_24" />
<EditText
@ -79,11 +81,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/small_spacing"
android:layout_marginEnd="@dimen/small_spacing"
android:layout_marginHorizontal="@dimen/small_spacing"
android:contentDescription="@string/AccessibilityId_username"
android:textAlignment="center"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingVertical="12dp"
android:inputType="text"
android:singleLine="true"
android:imeOptions="actionDone"
@ -94,6 +95,7 @@
android:id="@+id/saveNicknameButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@string/AccessibilityId_apply"
android:src="@drawable/ic_baseline_done_24" />
</LinearLayout>
@ -106,6 +108,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:contentDescription="@string/AccessibilityId_session_id"
android:textSize="@dimen/medium_font_size"
android:textIsSelectable="true"
tools:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
@ -116,8 +119,8 @@
android:layout_width="wrap_content"
android:layout_height="@dimen/medium_button_height"
android:layout_marginTop="@dimen/medium_spacing"
android:paddingLeft="@dimen/large_spacing"
android:paddingRight="@dimen/large_spacing"
android:contentDescription="@string/AccessibilityId_message_user"
android:paddingHorizontal="@dimen/large_spacing"
android:text="@string/ConversationActivity_message" />
</LinearLayout>

View File

@ -31,6 +31,7 @@
<TextView
android:id="@+id/textView"
android:contentDescription="@string/AccessibilityId_control_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"

View File

@ -40,6 +40,7 @@
<TextView
android:id="@+id/conversationViewDisplayNameTextView"
android:contentDescription="@string/AccessibilityId_conversation_list_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"

View File

@ -19,6 +19,7 @@
<TextView
android:id="@+id/deleteTitleTextView"
android:contentDescription="@string/AccessibilityId_deleted_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"

View File

@ -7,7 +7,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:padding="@dimen/medium_spacing"
android:gravity="center">
android:gravity="center"
android:contentDescription="@string/AccessibilityId_document">
<ImageView
android:id="@+id/documentViewIconImageView"

View File

@ -24,6 +24,7 @@
<RelativeLayout
android:id="@+id/attachmentsButtonContainer"
android:contentDescription="@string/AccessibilityId_attachments_button"
android:layout_width="@dimen/input_bar_button_expanded_size"
android:layout_height="@dimen/input_bar_button_expanded_size"
android:layout_alignParentStart="true"
@ -32,6 +33,7 @@
<org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarEditText
android:id="@+id/inputBarEditText"
android:contentDescription="@string/AccessibilityId_message_input"
android:inputType="textMultiLine"
android:layout_width="match_parent"
android:layout_height="40dp"

View File

@ -29,7 +29,8 @@
android:layout_height="16dp"
android:src="@drawable/ic_crown"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" />
android:layout_alignParentBottom="true"
android:contentDescription="@string/AccessibilityId_contact_mentions"/>
</RelativeLayout>
@ -41,6 +42,7 @@
android:textSize="@dimen/small_font_size"
android:textColor="?android:textColorPrimary"
android:maxLines="1"
android:contentDescription="@string/AccessibilityId_contact_mentions"
android:ellipsize="end" />
</LinearLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:contentDescription="@string/AccessibilityId_message_request"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"

View File

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:contentDescription="@string/AccessibilityId_message_request_banner"
android:layout_height="wrap_content"
android:background="@drawable/conversation_view_background"
android:gravity="center_vertical"

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<org.thoughtcrime.securesms.components.ProfilePictureView
android:contentDescription="@string/AccessibilityId_profile_picture"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

View File

@ -19,6 +19,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@string/AccessibilityId_recovery_phrase_reminder"
android:gravity="center_vertical"
android:padding="@dimen/medium_spacing"
android:orientation="horizontal">
@ -58,6 +59,7 @@
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:contentDescription="@string/AccessibilityId_continue"
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="28dp"

View File

@ -2,9 +2,10 @@
<org.thoughtcrime.securesms.conversation.v2.messages.UntrustedAttachmentView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:contentDescription="@string/AccessibilityId_untrusted_attachment_message"
android:orientation="horizontal"
android:padding="@dimen/medium_spacing"
android:gravity="center">

View File

@ -4,6 +4,7 @@
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="@drawable/conversation_view_background"
android:contentDescription="@string/AccessibilityId_contact"
android:orientation="vertical">
<LinearLayout
@ -23,6 +24,7 @@
<TextView
android:id="@+id/nameTextView"
android:contentDescription="@string/AccessibilityId_contact"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/medium_spacing"
@ -36,6 +38,7 @@
<ImageView
android:id="@+id/actionIndicatorImageView"
android:contentDescription="@string/AccessibilityId_select_contact"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="@dimen/medium_spacing"

View File

@ -88,6 +88,7 @@
android:layout_height="12dp"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="@dimen/small_spacing"
android:contentDescription="@string/AccessibilityId_timer_icon"
android:visibility="invisible"
tools:visibility="visible" />

View File

@ -99,6 +99,7 @@
app:barrierDirection="bottom"/>
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:contentDescription="@string/AccessibilityId_message_body"
app:layout_constraintHorizontal_bias="0"
tools:visibility="visible"
android:visibility="gone"

View File

@ -3,6 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainVoiceMessageViewContainer"
android:contentDescription="@string/AccessibilityId_voice_message"
android:layout_width="160dp"
android:layout_height="36dp">

View File

@ -5,11 +5,13 @@
<item
android:title="@string/conversation__menu_view_all_media"
android:id="@+id/menu_view_all_media" />
android:id="@+id/menu_view_all_media"
android:contentDescription="@string/AccessibilityId_all_media"/>
<item
android:title="@string/SearchToolbar_search"
android:id="@+id/menu_search"
android:contentDescription="@string/AccessibilityId_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView" />

View File

@ -4,6 +4,7 @@
<item
android:title="@string/recipient_preferences__block"
android:contentDescription="@string/AccessibilityId_block"
android:id="@+id/menu_block" />
</menu>

View File

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="@string/conversation_context__menu_call"
android:contentDescription="@string/AccessibilityId_call_button"
android:icon="@drawable/ic_baseline_call_24"
app:showAsAction="always"
android:id="@+id/menu_call"/>

View File

@ -5,11 +5,13 @@
<item
android:id="@+id/menu_edit_group"
android:contentDescription="@string/AccessibilityId_edit_group"
android:title="@string/conversation__menu_edit_group"
app:showAsAction="collapseActionView" />
<item
android:id="@+id/menu_leave_group"
android:contentDescription="@string/AccessibilityId_leave_group"
android:title="@string/conversation__menu_leave_group"
app:showAsAction="collapseActionView"/>

View File

@ -5,6 +5,7 @@
<item
android:title="@string/activity_conversation_menu_copy_session_id"
android:id="@+id/menu_copy_session_id"
android:icon="@drawable/ic_content_copy_white_24dp" />
android:icon="@drawable/ic_content_copy_white_24dp"
android:contentDescription="@string/AccessibilityId_copy_session_id"/>
</menu>

View File

@ -4,6 +4,7 @@
<item
android:title="@string/conversation_expiring_off__disappearing_messages"
android:contentDescription="@string/AccessibilityId_disappearing_messages"
android:id="@+id/menu_expiring_messages_off"
android:icon="@drawable/ic_baseline_timer_off_24" />

View File

@ -5,6 +5,7 @@
<item
android:id="@+id/menu_expiring_messages"
android:contentDescription="@string/AccessibilityId_disappearing_messages_timer"
app:actionLayout="@layout/expiration_timer_menu"
app:showAsAction="always"
android:title="@string/menu_conversation_expiring_on__messages_expiring" />

View File

@ -2,5 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="@string/RecipientPreferenceActivity_notification_settings"
android:id="@+id/menu_notification_settings"/>
android:id="@+id/menu_notification_settings"
android:contentDescription="@string/AccessibilityId_notification_settings"/>
</menu>

View File

@ -4,6 +4,7 @@
<item
android:title="@string/conversation_unmuted__mute_notifications"
android:id="@+id/menu_mute_notifications" />
android:id="@+id/menu_mute_notifications"
android:contentDescription="@string/AccessibilityId_mute_notifications" />
</menu>

View File

@ -6,6 +6,7 @@
android:title="@string/menu_done_button"
android:id="@+id/doneButton"
android:icon="?menu_accept_icon"
android:contentDescription="@string/AccessibilityId_done"
app:showAsAction="always" />
</menu>

View File

@ -4,8 +4,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:title="@string/menu_apply_button"
android:id="@+id/action_apply"
android:title="@string/menu_apply_button"
android:contentDescription="@string/AccessibilityId_apply_changes"
app:showAsAction="always|withText" />
</menu>

View File

@ -1,24 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEEzCCAvugAwIBAgIUY9RQqbjhsQEkdeSgV9L0os9xZ7AwDQYJKoZIhvcNAQEL
BQAwfDELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlN
ZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNoIEZvdW5kYXRpb24x
HzAdBgNVBAMMFnB1YmxpYy5sb2tpLmZvdW5kYXRpb24wHhcNMjEwNDA3MDExMDMx
WhcNMjMwNDA3MDExMDMxWjB8MQswCQYDVQQGEwJBVTERMA8GA1UECAwIVmljdG9y
aWExEjAQBgNVBAcMCU1lbGJvdXJuZTElMCMGA1UECgwcT3hlbiBQcml2YWN5IFRl
Y2ggRm91bmRhdGlvbjEfMB0GA1UEAwwWcHVibGljLmxva2kuZm91bmRhdGlvbjCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM5dBJSIR5+VNNUxUOo6FG0e
RmZteRqBt50KXGbOi2A23a6sa57pLFh9Yw3hmlWV+QCL7ipG1X4IC55OStgoesf+
K65VwEMP6Mtq0sSJS3R5TiuV2ZSRdSZTVjUyRXVe5T4Aw6wXVTAbc/HsyS780tDh
GclfDHhonPhZpmTAnSbfMOS+BfOnBNvDxdto0kVh6k5nrGlkT4ECloulHTQF2lwJ
0D6IOtv9AJplPdg6s2c4dY7durOdvr3NNVfvn5PTeRvbEPqzZur4WUUKIPNGu6mY
PxImqd4eUsL0Vod4aAsTIx4YMmCTi0m9W6zJI6nXcK/6a+iiA3+NTNMzEA9gQhEC
AwEAAaOBjDCBiTAdBgNVHQ4EFgQU/zahokxLvvFUpbnM6z/pwS1KsvwwHwYDVR0j
BBgwFoAU/zahokxLvvFUpbnM6z/pwS1KsvwwDwYDVR0TAQH/BAUwAwEB/zAhBgNV
HREEGjAYghZwdWJsaWMubG9raS5mb3VuZGF0aW9uMBMGA1UdJQQMMAoGCCsGAQUF
BwMBMA0GCSqGSIb3DQEBCwUAA4IBAQBql+JvoqpaYrFFTOuDn08U+pdcd3GM7tbI
zRH5LU+YnIpp9aRheek+2COW8DXsIy/kUngETCMLmX6ZaUj/WdHnTDkB0KTgxSHv
ad3ZznKPKZ26qJOklr+0ZWj4J3jHbisSzql6mqq7R2Kp4ESwzwqxvkbykM5RUnmz
Go/3Ol7bpN/ZVwwEkGfD/5rRHf57E/gZn2pBO+zotlQgr7HKRsIXQ2hIXVQqWmPQ
lvfIwrwAZlfES7BARFnHOpyVQxV8uNcV5K5eXzuVFjHBqvq+BtyGhWkP9yKJCHS9
OUXxch0rzRsH2C/kRVVhEk0pI3qlFiRC8pCJs98SNE9l69EQtG7I
-----END CERTIFICATE-----

View File

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIUWk96HLAovn4uFSI057KhnMxqosowDQYJKoZIhvcNAQEL
BQAwejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlN
ZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNoIEZvdW5kYXRpb24x
HTAbBgNVBAMMFHNlZWQxLmdldHNlc3Npb24ub3JnMB4XDTIzMDQwNTAxMjQzNVoX
DTMzMDQwNTAxMjQzNVowejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3Rvcmlh
MRIwEAYDVQQHDAlNZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNo
IEZvdW5kYXRpb24xHTAbBgNVBAMMFHNlZWQxLmdldHNlc3Npb24ub3JnMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2wlGkR2aDOHoizik4mqvWEwDPOQG
o/Afd/6VqKzo4BpNerVZQNgdMgdLTedZE4FRfetubonYu6iSYALK2iKoGsIlru1u
Q9dUl0abA9v+yg6duh1aHw8oS16JPL0zdq8QevJaTxd0MeDnx4eXfFjtv8L0xO4r
CRFH+H6ATcJy+zhVBcWLjiNPe6mGSHM4trx3hwJY6OuuWX5FkO0tMqj9aKJtJ+l0
NArra0BZ9MaMwAFE7AxWwyD0jWIcSvwK06eap+6jBcZIr+cr7fPO5mAlT+CoGB68
yUFwh1wglcVdNPoa1mbFQssCsCRa3MWgpzbMq+KregVzjVEtilwLFjx7FQIDAQAB
o4GKMIGHMB0GA1UdDgQWBBQ1XAjGKhyIU22mYdUEIlzlktogNzAfBgNVHSMEGDAW
gBQ1XAjGKhyIU22mYdUEIlzlktogNzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdEQQY
MBaCFHNlZWQxLmdldHNlc3Npb24ub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0G
CSqGSIb3DQEBCwUAA4IBAQC4PRiu4LyxK71Gk+f3dDvjinuE9F0XtAamKfRlLMEo
KxK8dtLrT8p62rME7QiigSv15AmSNyqAp751N/j0th1prOnxBoG38BXKLBDDClri
u91MR4h034G6LIYCiM99ldc8Q5a5WCKu9/9z6CtVxZcNlfe477d6lKHSwb3mQ581
1Ui3RnpkkU1n4XULI+TW2n/Hb8gN6IyTHFB9y2jb4kdg7N7PZIN8FS3n3XGiup9r
b/Rujkuy7rFW78Q1BuHWrQPbJ3RU2CKh1j5o6mtcJFRqP1PfqWmbuaomam48s5hU
4JEiR9tyxP+ewl/bToFcet+5Lp9wRLxn0afm/3V00WyP
-----END CERTIFICATE-----

View File

@ -1,25 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUJsox1ZQPK/6iDsCC+MUJfNAlFuYwDQYJKoZIhvcNAQEL
BQAwgYAxCzAJBgNVBAYTAkFVMREwDwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJ
TWVsYm91cm5lMSUwIwYDVQQKDBxPeGVuIFByaXZhY3kgVGVjaCBGb3VuZGF0aW9u
MSMwIQYDVQQDDBpzdG9yYWdlLnNlZWQxLmxva2kubmV0d29yazAeFw0yMTA0MDcw
MTE5MjZaFw0yMzA0MDcwMTE5MjZaMIGAMQswCQYDVQQGEwJBVTERMA8GA1UECAwI
VmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTElMCMGA1UECgwcT3hlbiBQcml2
YWN5IFRlY2ggRm91bmRhdGlvbjEjMCEGA1UEAwwac3RvcmFnZS5zZWVkMS5sb2tp
Lm5ldHdvcmswggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtWH3Rz8Dd
kEmM7tcBWHrJ/G8drr/+qidboEVYzxpyRjszaDxKXVhx4eBBsAD5RuCWuTuZmM8k
TKEDLtf8xfb5SQ7YNX+346s9NXS5Poy4CIPASiW/QWXgIHFbVdv2hC+cKOP61OLM
OGnOxfig6tQyd6EaCkedpY1DvSa2lPnQSOwC/jXCx6Vboc0zTY5R2bHtNc9hjIFP
F4VClLAQSh2F4R1V9MH5KZMW+CCP6oaJY658W9JYXYRwlLrL2EFOVxHgcxq/6+fw
+axXK9OXJrGZjuA+hiz+L/uAOtE4WuxrSeuNMHSrMtM9QqVn4bBuMJ21mAzfNoMP
OIwgMT9DwUjVAgMBAAGjgZAwgY0wHQYDVR0OBBYEFOubJp9SoXIw+ONiWgkOaW8K
zI/TMB8GA1UdIwQYMBaAFOubJp9SoXIw+ONiWgkOaW8KzI/TMA8GA1UdEwEB/wQF
MAMBAf8wJQYDVR0RBB4wHIIac3RvcmFnZS5zZWVkMS5sb2tpLm5ldHdvcmswEwYD
VR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAIiHNhNrjYvwXVWs
gacx8T/dpqpu9GE3L17LotgQr4R+IYHpNtcmwOTdtWWFfUTr75OCs+c3DqgRKEoj
lnULOsVcalpAGIvW15/fmZWOf66Dpa4+ljDmAc3SOQiD0gGNtqblgI5zG1HF38QP
hjYRhCZ5CVeGOLucvQ8tVVwQvArPFIkBr0jH9jHVgRWEI2MeI3FsU2H93D4TfGln
N4SmmCfYBqygaaZBWkJEt0bYhn8uGHdU9UY9L2FPtfHVKkmFgO7cASGlvXS7B/TT
/8IgbtM3O8mZc2asmdQhGwoAKz93ryyCd8X2UZJg/IwCSCayOlYZWY2fR4OPQmmV
gxJsm+g=
-----END CERTIFICATE-----

View File

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIUXkVaUNO/G727mNeaiso9MjvBEm4wDQYJKoZIhvcNAQEL
BQAwejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlN
ZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNoIEZvdW5kYXRpb24x
HTAbBgNVBAMMFHNlZWQyLmdldHNlc3Npb24ub3JnMB4XDTIzMDQwNTAxMjI0MloX
DTMzMDQwNTAxMjI0MlowejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3Rvcmlh
MRIwEAYDVQQHDAlNZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNo
IEZvdW5kYXRpb24xHTAbBgNVBAMMFHNlZWQyLmdldHNlc3Npb24ub3JnMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvT493tt1EWdyIa++X59ffrQt+ghK
+3Hv/guCPmR0FxPUeVnayoLbeKgbe8dduThh7nlmlYnpwbulvDnMF/rRpX51AZiT
A8UGktBzGXi17/D/X71EXGqlM41QZfVm5MCdQcghvbwO8MP0nWmbV4DdiNYAwSNh
fpGMEiblCvKtGN71clTkOW+8Moq4eOxT9tKIlOv97uvkUS21NgmSzsj453hrb6oj
XR3rtW264zn99+Gv83rDE1jk0qfDjxCkaUb0BvRDREc+1q3p8GZ6euEFBM3AcXe7
Yl0qbJgIXd5I+W5nMJJCyJHPTxQNvS+uJqL4kLvdwQRFAkwEM+t9GCH1PQIDAQAB
o4GKMIGHMB0GA1UdDgQWBBQOdqxllTHj+fmGjmdgIXBl+k0PRDAfBgNVHSMEGDAW
gBQOdqxllTHj+fmGjmdgIXBl+k0PRDAPBgNVHRMBAf8EBTADAQH/MB8GA1UdEQQY
MBaCFHNlZWQyLmdldHNlc3Npb24ub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0G
CSqGSIb3DQEBCwUAA4IBAQBkmmX+mopdnhzQC5b5rgbU7wVhlDaG7eJCRgUvqkYm
Pbv6XFfvtshykhw2BjSyQetofJaBh5KOR7g0MGRSn3AqRPBeEpXfkBI9urhqFwBF
F5atmp1rTCeHuAS6w4mL6rmj7wHl2CRSom7czRdUCNM+Tu1iK6xOrtOLwQ1H1ps1
KK3siJb3W0eKykHnheQPn77RulVBNLz1yedEUTVkkuVhzSUj5yc8tiwrcagwWX6m
BlfVCJgsBbrJ754rg0AJ0k59wriRamimcUIBvKIo3g3UhJHDI8bt4+SvsRYkSmbi
rzVthAlJjSlRA28X/OLnknWcgEdkGhu0F1tkBtVjIQXd
-----END CERTIFICATE-----

View File

@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIUTz5rHKUe+VA9IM6vY6QACc0ORFkwDQYJKoZIhvcNAQEL
BQAwejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlN
ZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNoIEZvdW5kYXRpb24x
HTAbBgNVBAMMFHNlZWQzLmdldHNlc3Npb24ub3JnMB4XDTIzMDQwNTAxMjYzMVoX
DTMzMDQwNTAxMjYzMVowejELMAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3Rvcmlh
MRIwEAYDVQQHDAlNZWxib3VybmUxJTAjBgNVBAoMHE94ZW4gUHJpdmFjeSBUZWNo
IEZvdW5kYXRpb24xHTAbBgNVBAMMFHNlZWQzLmdldHNlc3Npb24ub3JnMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6FgxIk9KmYISL5fk7BLaGAW6lBx8
b4VL3DjlyrFMz7ZhSbcUcavWyyYB+iJxBRhfQGJ7vbwJZ1AwVJisjDFdiLcWzTF8
gzZ7LVXH8qlVnqcx0gksrWYFnG3Y2WJrxEBFdD29lP7LVN3xLQdplMitOciqg5jN
oRjtwGo+wzaMW6WNPzgTvxLzPce9Rl3oN4tSK7qlA9VtsyHwOWBMcogv9LC9IUFZ
2yu0RdcxPdlwLwywYtSRt/W87KbAWTcYY1DfN2VA68p9Cip7/dPOokRduMh1peux
swmIybpC/wz/Ql6J6scSOjDUp/2UsIdYIvyP/Dibi4nHRmD+oz9kb+J3AQIDAQAB
o4GKMIGHMB0GA1UdDgQWBBSQAFetDPIzVg9rfgOI7bfaeEHd8TAfBgNVHSMEGDAW
gBSQAFetDPIzVg9rfgOI7bfaeEHd8TAPBgNVHRMBAf8EBTADAQH/MB8GA1UdEQQY
MBaCFHNlZWQzLmdldHNlc3Npb24ub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0G
CSqGSIb3DQEBCwUAA4IBAQCiBNdbKNSHyCZJKvC/V+pHy9E/igwvih2GQ5bNZJFA
daOiKBgaADxaxB4lhtzasr2LdgZdLrn0oONw+wYaui9Z12Yfdr9oWuOgktn8HKLY
oKkJc5EcMYFsd00FnnFcO2U8lQoL6PB/tdcEmpOfqtvShpNhp8SbadSNiqlttvtV
1dqvqSBiRdQm1kz2b8hA6GR6SPzSKlSuwI0J+ZcXEi232EJFbgJ3ESHFVHrhUZro
8A16/WDvZOMWCjOqJsFBw15WzosW9kyNwBtZinXVO3LW/7tVl08PDcarpH4IWjd0
LDpU7zGjcD/A19tfdfMFTOmETuq40I8xxtlR2NENFOAL
-----END CERTIFICATE-----

View File

@ -1,25 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUc486Dy9Y00bUFfDeYmJIgSS5xREwDQYJKoZIhvcNAQEL
BQAwgYAxCzAJBgNVBAYTAkFVMREwDwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJ
TWVsYm91cm5lMSUwIwYDVQQKDBxPeGVuIFByaXZhY3kgVGVjaCBGb3VuZGF0aW9u
MSMwIQYDVQQDDBpzdG9yYWdlLnNlZWQzLmxva2kubmV0d29yazAeFw0yMTA0MDcw
MTIwNTJaFw0yMzA0MDcwMTIwNTJaMIGAMQswCQYDVQQGEwJBVTERMA8GA1UECAwI
VmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTElMCMGA1UECgwcT3hlbiBQcml2
YWN5IFRlY2ggRm91bmRhdGlvbjEjMCEGA1UEAwwac3RvcmFnZS5zZWVkMy5sb2tp
Lm5ldHdvcmswggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtokMlsFzf
piYeD0EVNikMyvjltpF6fUEde9NOVrTtNTQT6kkDk+/0HF5LYgPaatv6v7fpUQHi
kIwd6F0LTRGeWDFdsaWMdtlR1n/GxLPrOROsE8dcLt6GLavPf9rDabgva93m/JD6
XW+Ne+MPEwqS8dAmFGhZd0gju6AtKFoSHnIf5pSQN6fSZUF/JQtHLVprAKKWKDiS
ZwmWbmrZR2aofLD/VRpetabajnZlv9EeWloQwvUsw1C1hkAmmtFeeXtg7ePwrOzo
6CnmcUJwOmi+LWqQV4A+58RZPFKaZoC5pzaKd0OYB8eZ8HB1F41UjGJgheX5Cyl4
+amfF3l8dSq1AgMBAAGjgZAwgY0wHQYDVR0OBBYEFM9VSq4pGydjtX92Beul4+ml
jBKtMB8GA1UdIwQYMBaAFM9VSq4pGydjtX92Beul4+mljBKtMA8GA1UdEwEB/wQF
MAMBAf8wJQYDVR0RBB4wHIIac3RvcmFnZS5zZWVkMy5sb2tpLm5ldHdvcmswEwYD
VR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAAYxmhhkcKE1n6g1
JqOa3UCBo4EfbqY5+FDZ0FVqv/cwemwVpKLbe6luRIS8poomdPCyMOS45V7wN3H9
cFpfJ1TW19ydPVKmCXrl29ngmnY1q7YDwE/4qi3VK/UiqDkTHMKWjVPkenOyi8u6
VVQANXSnKrn6GtigNFjGyD38O+j7AUSXBtXOJczaoF6r6BWgwQZ2WmgjuwvKTWSN
4r8uObERoAQYVaeXfgdr4e9X/JdskBDaLFfoW/rrSozHB4FqVNFW96k+aIUgRa5p
9kv115QcBPCSh9qOyTHij4tswS6SyOFaiKrNC4hgHQXP4QgioKmtsR/2Y+qJ6ddH
6oo+4QU=
-----END CERTIFICATE-----

View File

@ -9,6 +9,145 @@
<string name="save">Save</string>
<string name="note_to_self">Note to Self</string>
<string name="version_s">Version %s</string>
<!--Accessibility ID's-->
<!-- Landing Page -->
<string name="AccessibilityId_create_session_id">Create session ID</string>
<string name="AccessibilityId_restore_your_session">Restore Your Session</string>
<string name="AccessibilityId_link_a_device">Link a device</string>
<string name="AccessibilityId_link_device">Link Device</string>
<!-- Session ID Page-->
<string name="AccessibilityId_session_id">Session ID</string>
<string name="AccessibilityId_recovery_phrase_reminder">Recovery phrase reminder</string>
<string name="AccessibilityId_continue">Continue</string>
<!-- Recovery phrase input -->
<string name="AccessibilityId_copy_session_id">Copy Session ID</string>
<!--Restore by seed page-->
<string name="AccessibilityId_enter_your_recovery_phrase">Enter your recovery phrase</string>
<!--Create Display Name -->
<string name="AccessibilityId_enter_display_name">Enter display name</string>
<!--Message Notifications Options-->
<string name="AccessibilityId_message_notifications">Message Notifications</string>
<string name="AccessibilityId_fast_mode_notifications_option">Fast mode notifications option</string>
<string name="AccessibilityId_slow_mode_notifications_option">Slow mode notifications option</string>
<string name="AccessibilityId_continue_message_notifications">Continue with settings</string>
<!--Recovery Phrase reminder-->
<string name="AccessibilityId_recovery_phrase">Recovery Phrase</string>
<string name="AccessibilityId_copy_recovery_phrase">Copy Recovery Phrase</string>
<!--Home Page-->
<string name="AccessibilityId_profile_picture">User settings</string>
<string name="AccessibilityId_search_icon">Search icon</string>
<string name="AccessibilityId_conversation_list_item">Conversation list item</string>
<string name="AccessibilityId_details">Details</string>
<string name="AccessibilityId_pin">Pin</string>
<!--Settings Page -->
<string name="AccessibilityId_blocked_contacts">Blocked contacts</string>
<!--Message requests-->
<string name="AccessibilityId_message_request_banner">Message requests banner</string>
<string name="AccessibilityId_message_request">Message request</string>
<string name="AccessibilityId_empty_message_request_folder">No pending message requests</string>
<string name="AccessibilityId_clear_all_message_requests">Clear all</string>
<!--New conversation pop up-->
<string name="AccessibilityId_new_conversation_button">New conversation button</string>
<string name="AccessibilityId_new_direct_message">New direct message</string>
<string name="AccessibilityId_create_group">Create group</string>
<string name="AccessibilityId_join_community">Join community</string>
<!-- Conversation options (three dots menu)-->
<string name="AccessibilityId_all_media">All media</string>
<string name="AccessibilityId_search">Search</string>
<string name="AccessibilityId_add_to_home_screen">Add to home screen</string>
<string name="AccessibilityId_disappearing_messages">Disappearing messages</string>
<string name="AccessibilityId_block">Block</string>
<string name="AccessibilityId_block_confirm">Confirm block</string>
<string name="AccessibilityId_notification_settings">Notification settings</string>
<string name="AccessibilityId_mute_notifications">Mute notifications</string>
<string name="AccessibilityId_delete">Delete</string>
<string name="AccessibilityId_enable">Enable</string>
<!-- Conversation options for closed group-->
<string name="AccessibilityId_edit_group">Edit group</string>
<string name="AccessibilityId_leave_group">Leave group</string>
<string name="AccessibilityId_group_name">Group name</string>
<string name="AccessibilityId_accept_name_change">Accept name change</string>
<string name="AccessibilityId_cancel_name_change">Cancel name change</string>
<string name="AccessibilityId_apply_changes">Apply changes</string>
<string name="AccessibilityId_add_members">Add members</string>
<string name="AccessibilityId_done">Done</string>
<string name="AccessibilityId_mentions_list">Mentions list</string>
<string name="AccessibilityId_contact_mentions">Contact mentions</string>
<!-- Conversation icons -->
<string name="AccessibilityId_call_button">Call button</string>
<string name="AccessibilityId_settings">Settings</string>
<string name="AccessibilityId_disappearing_messages_timer">Disappearing messages timer</string>
<string name="AccessibilityId_disappearing_messages_time_picker">Time selector</string>
<string name="AccessibilityId_accept_message_request_button">Accept message request</string>
<string name="AccessibilityId_decline_message_request_button">Decline message request</string>
<string name="AccessibilityId_block_message_request_button">Block message request</string>
<string name="AccessibilityId_timer_icon">Timer icon</string>
<!-- Configuration messages -->
<string name="AccessibilityId_control_message">Configuration message</string>
<string name="AccessibilityId_blocked_banner">Blocked banner</string>
<string name="AccessibilityId_blocked_banner_text">Blocked banner text</string>
<!--New Session -->
<string name="AccessibilityId_session_id_input">Session id input box</string>
<string name="AccessibilityId_next">Next</string>
<!-- New group -->
<string name="AccessibilityId_group_name_input">Group name input</string>
<string name="AccessibilityId_continue_group_creation">Continue group creation</string>
<string name="AccessibilityId_contact">Contact</string>
<string name="AccessibilityId_select_contact">Select contact</string>
<!--Conversation screen -->
<string name="AccessibilityId_message_input">Message input box</string>
<string name="AccessibilityId_microphone_button">New voice message</string>
<string name="AccessibilityId_send_message_button">Send message button</string>
<string name="AccessibilityId_attachments_button">Attachments button</string>
<string name="AccessibilityId_select_camera_button">Select camera button</string>
<string name="AccessibilityId_images_folder">Images folder</string>
<string name="AccessibilityId_documents_folder">Documents folder</string>
<string name="AccessibilityId_gif_button">GIF button</string>
<string name="AccessibilityId_untrusted_attachment_message">Untrusted attachment message</string>
<string name="AccessibilityId_download_media">Download media</string>
<string name="AccessibilityId_dont_download_media">Don\'t download media</string>
<!-- Conversation View-->
<string name="AccessibilityId_message_sent_status_tick">Message sent status: Sent</string>
<string name="AccessibilityId_message_sent_status_pending">Message sent status pending</string>
<string name="AccessibilityId_message_request_config_message">Message request has been accepted</string>
<string name="AccessibilityId_message_body">Message Body</string>
<string name="AccessibilityId_voice_message">Voice message</string>
<string name="AccessibilityId_document">Document</string>
<string name="AccessibilityId_deleted_message">Deleted message</string>
<string name="AccessibilityId_delete_message">Delete message</string>
<string name="AccessibilityId_reply_message">Reply to message</string>
<string name="AccessibilityId_select">Select</string>
<string name="AccessibilityId_save_attachment">Save attachment</string>
<!-- Delete message modal-->
<string name="AccessibilityId_delete_just_for_me">Delete just for me</string>
<string name="AccessibilityId_delete_for_everyone">Delete for everyone</string>
<string name="AccessibilityId_cancel_deletion">Cancel deletion</string>
<!--Settings Page-->
<string name="AccessibilityId_username_input">Username input</string>
<string name="AccessibilityId_username_text">Username text</string>
<string name="AccessibilityId_user_settings">User settings</string>
<string name="AccessibilityId_username">Username</string>
<string name="AccessibilityId_privacy">Privacy</string>
<string name="AccessibilityId_show_recovery_phrase">Show recovery phrase</string>
<string name="AccessibilityId_edit_user_nickname">Edit user nickname</string>
<string name="AccessibilityId_apply">Apply</string>
<string name="AccessibilityId_cancel">Cancel</string>
<string name="AccessibilityId_message_user">Message user</string>
<string name="AccessibilityId_notifications">Notifications</string>
<string name="AccessibilityId_conversations">Conversations</string>
<string name="AccessibilityId_message_requests">Message requests</string>
<string name="AccessibilityId_appearance">Appearance</string>
<string name="AccessibilityId_invite_friend">Invite a friend</string>
<string name="AccessibilityId_help">Help</string>
<string name="AccessibilityId_clear_data">Clear data</string>
<!-- Recovery Phrase Dialog-->
<string name="AccessibilityId_cancel_button">Cancel</string>
<!-- Link preview Dialog-->
<string name="AccessibilityId_enable_link_preview_button">Enable</string>
<string name="AccessibilityId_cancel_link_preview_button">Cancel</string>
<!-- AbstractNotificationBuilder -->
<string name="AbstractNotificationBuilder_new_message">New message</string>
<!-- AlbumThumbnailView -->

View File

@ -4,21 +4,21 @@
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="false">public.loki.foundation</domain>
<domain includeSubdomains="false">seed1.getsession.org</domain>
<trust-anchors>
<certificates src="@raw/lf_session_cert"/>
<certificates src="@raw/seed1"/>
</trust-anchors>
</domain-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="false">storage.seed1.loki.network</domain>
<domain includeSubdomains="false">seed2.getsession.org</domain>
<trust-anchors>
<certificates src="@raw/seed1cert"/>
<certificates src="@raw/seed2"/>
</trust-anchors>
</domain-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="false">storage.seed3.loki.network</domain>
<domain includeSubdomains="false">seed3.getsession.org</domain>
<trust-anchors>
<certificates src="@raw/seed3cert"/>
<certificates src="@raw/seed3"/>
</trust-anchors>
</domain-config>
</network-security-config>

View File

@ -72,12 +72,16 @@ object SnodeAPI {
private val minimumSnodePoolCount = 12
private val minimumSwarmSnodeCount = 3
// Use port 4433 if the API level can handle the network security configuration and enforce pinned certificates
private val seedNodePort = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) 443 else 4433
private val seedNodePort = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) 443 else 4443
private val seedNodePool by lazy {
if (useTestnet) {
setOf( "http://public.loki.foundation:38157" )
} else {
setOf( "https://storage.seed1.loki.network:$seedNodePort", "https://storage.seed3.loki.network:$seedNodePort", "https://public.loki.foundation:$seedNodePort" )
setOf(
"https://seed1.getsession.org:$seedNodePort",
"https://seed2.getsession.org:$seedNodePort",
"https://seed3.getsession.org:$seedNodePort",
)
}
}
private const val snodeFailureThreshold = 3