Route system camera quick restore qr scan into Signal camera.

This commit is contained in:
Cody Henthorne
2025-11-21 15:39:55 -05:00
committed by jeffrey-signal
parent 8783d69406
commit 87e56bf4bf
8 changed files with 417 additions and 28 deletions

View File

@@ -636,6 +636,13 @@
<data android:scheme="sgnl" />
<data android:host="signal.link" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sgnl" />
<data android:host="rereg" />
</intent-filter>
</activity>
<activity android:name=".conversation.v2.ConversationActivity"

View File

@@ -934,6 +934,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
handleSignalMeIntent(intent)
handleCallLinkInIntent(intent)
handleDonateReturnIntent(intent)
handleQuickRestoreIntent(intent)
}
@SuppressLint("NewApi")
@@ -990,6 +991,14 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
}
}
private fun handleQuickRestoreIntent(intent: Intent) {
intent.data?.let { data ->
CommunicationActions.handlePotentialQuickRestoreUrl(this, data.toString()) {
onCameraClick(MainNavigationListLocation.CHATS, isForQuickRestore = true)
}
}
}
private fun updateNotificationProfileStatus(notificationProfiles: List<NotificationProfile>) {
val activeProfile = NotificationProfiles.getActiveProfile(notificationProfiles)
if (activeProfile != null) {
@@ -1028,6 +1037,39 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
}
}
private fun onCameraClick(destination: MainNavigationListLocation, isForQuickRestore: Boolean) {
val onGranted = {
val intent = if (isForQuickRestore) {
MediaSelectionActivity.cameraForQuickRestore(context = this@MainActivity)
} else {
MediaSelectionActivity.camera(
context = this@MainActivity,
isStory = destination == MainNavigationListLocation.STORIES
)
}
startActivity(intent)
}
if (CameraXUtil.isSupported()) {
onGranted()
} else {
Permissions.with(this@MainActivity)
.request(Manifest.permission.CAMERA)
.ifNecessary()
.withRationaleDialog(getString(R.string.CameraXFragment_allow_access_camera), getString(R.string.CameraXFragment_to_capture_photos_and_video_allow_camera), R.drawable.symbol_camera_24)
.withPermanentDenialDialog(
getString(R.string.CameraXFragment_signal_needs_camera_access_capture_photos),
null,
R.string.CameraXFragment_allow_access_camera,
R.string.CameraXFragment_to_capture_photos_videos,
supportFragmentManager
)
.onAllGranted(onGranted)
.onAnyDenied { Toast.makeText(this@MainActivity, R.string.CameraXFragment_signal_needs_camera_access_capture_photos, Toast.LENGTH_LONG).show() }
.execute()
}
}
inner class ToolbarCallback : MainToolbarCallback {
override fun onNewGroupClick() {
@@ -1125,33 +1167,7 @@ class MainActivity : PassphraseRequiredActivity(), VoiceNoteMediaControllerOwner
}
override fun onCameraClick(destination: MainNavigationListLocation) {
val onGranted = {
startActivity(
MediaSelectionActivity.camera(
context = this@MainActivity,
isStory = destination == MainNavigationListLocation.STORIES
)
)
}
if (CameraXUtil.isSupported()) {
onGranted()
} else {
Permissions.with(this@MainActivity)
.request(Manifest.permission.CAMERA)
.ifNecessary()
.withRationaleDialog(getString(R.string.CameraXFragment_allow_access_camera), getString(R.string.CameraXFragment_to_capture_photos_and_video_allow_camera), R.drawable.symbol_camera_24)
.withPermanentDenialDialog(
getString(R.string.CameraXFragment_signal_needs_camera_access_capture_photos),
null,
R.string.CameraXFragment_allow_access_camera,
R.string.CameraXFragment_to_capture_photos_videos,
supportFragmentManager
)
.onAllGranted(onGranted)
.onAnyDenied { Toast.makeText(this@MainActivity, R.string.CameraXFragment_signal_needs_camera_access_capture_photos, Toast.LENGTH_LONG).show() }
.execute()
}
onCameraClick(destination, false)
}
override fun onMegaphoneVisible(megaphone: Megaphone) {

View File

@@ -183,6 +183,10 @@ class MediaSelectionActivity :
.subscribe(this::handleError)
onBackPressedDispatcher.addCallback(OnBackPressed())
if (savedInstanceState == null && intent.getBooleanExtra(IS_FOR_QUICK_RESTORE, false)) {
QuickRestoreInfoDialog.show(supportFragmentManager)
}
}
private fun handleError(error: MediaValidator.FilterError) {
@@ -385,6 +389,7 @@ class MediaSelectionActivity :
private const val IS_STORY = "is_story"
private const val AS_TEXT_STORY = "as_text_story"
private const val IS_ADD_TO_GROUP_STORY_FLOW = "is_add_to_group_story_flow"
private const val IS_FOR_QUICK_RESTORE = "is_for_quick_restore"
@JvmStatic
fun camera(context: Context): Intent {
@@ -400,6 +405,14 @@ class MediaSelectionActivity :
)
}
fun cameraForQuickRestore(context: Context): Intent {
return buildIntent(
context = context,
startAction = R.id.action_directly_to_mediaCaptureFragment,
isForQuickRestore = true
)
}
fun addToGroupStory(
context: Context,
recipientId: RecipientId
@@ -508,7 +521,8 @@ class MediaSelectionActivity :
isReply: Boolean = false,
isStory: Boolean = false,
asTextStory: Boolean = false,
isAddToGroupStoryFlow: Boolean = false
isAddToGroupStoryFlow: Boolean = false,
isForQuickRestore: Boolean = false
): Intent {
return Intent(context, MediaSelectionActivity::class.java).apply {
putExtra(START_ACTION, startAction)
@@ -520,6 +534,7 @@ class MediaSelectionActivity :
putExtra(IS_STORY, isStory)
putExtra(AS_TEXT_STORY, asTextStory)
putExtra(IS_ADD_TO_GROUP_STORY_FLOW, isAddToGroupStoryFlow)
putExtra(IS_FOR_QUICK_RESTORE, isForQuickRestore)
}
}
}

View File

@@ -0,0 +1,88 @@
package org.thoughtcrime.securesms.mediasend.v2
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.fragment.app.FragmentManager
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
import org.thoughtcrime.securesms.util.BottomSheetUtil
/**
* Bottom sheet dialog displayed when users scan a quick restore with the system camera and then
* follow the prompt into the Signal camera to scan the qr code a second time from within Signal.
*/
class QuickRestoreInfoDialog : ComposeBottomSheetDialogFragment() {
companion object {
fun show(fragmentManager: FragmentManager) {
QuickRestoreInfoDialog().show(fragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
}
}
override val peekHeightPercentage: Float = 1f
@Composable
override fun SheetContent() {
InfoSheet(this::dismissAllowingStateLoss)
}
}
@Composable
private fun InfoSheet(onClick: () -> Unit) {
return Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
) {
BottomSheets.Handle()
Image(
imageVector = ImageVector.vectorResource(R.drawable.quick_restore),
contentDescription = null,
modifier = Modifier.padding(top = 14.dp, bottom = 24.dp)
)
Text(
text = stringResource(R.string.QuickRestoreInfoDialog__scan_qr_code),
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(bottom = 8.dp)
)
Text(
text = stringResource(R.string.QuickRestoreInfoDialog__use_this_device_to_scan_qr_code),
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 28.dp)
)
Buttons.LargeTonal(
onClick = onClick,
modifier = Modifier.defaultMinSize(minWidth = 220.dp)
) {
Text(stringResource(id = R.string.QuickRestoreInfoDialog__okay))
}
}
}
@DayNightPreviews
@Composable
fun InfoSheetPreview() {
Previews.BottomSheetPreview {
InfoSheet(onClick = {})
}
}

View File

@@ -54,6 +54,7 @@ import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import org.whispersystems.signalservice.api.push.UsernameLinkComponents;
import java.io.IOException;
import java.net.URI;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
@@ -343,6 +344,26 @@ public class CommunicationActions {
startVideoCall(new ActivityCallContext(activity), linkParseResult.getRootKey(), linkParseResult.getEpoch(), onUserAlreadyInAnotherCall);
}
/**
* If the url is a quick restore link it will handle it.
* Otherwise returns false, indicating it was not a quick restore link.
*/
public static boolean handlePotentialQuickRestoreUrl(@NonNull FragmentActivity activity, @NonNull String potentialQuickRestoreUrl, @NonNull Runnable onContinue) {
URI uri = URI.create(potentialQuickRestoreUrl);
if ("sgnl".equalsIgnoreCase(uri.getScheme()) && "rereg".equalsIgnoreCase(uri.getHost())) {
new MaterialAlertDialogBuilder(activity)
.setTitle(R.string.CommunicationActions__transfer_dialog_title)
.setMessage(R.string.CommunicationActions__transfer_dialog_message)
.setPositiveButton(R.string.DeviceProvisioningActivity_continue, (d, w) -> onContinue.run())
.setNegativeButton(R.string.CommunicationActions__dont_transfer, null)
.show();
return true;
} else {
return false;
}
}
/**
* Attempts to start a video call for the given call link via root key. This will insert a call link into
* the user's database if one does not already exist.

View File

@@ -0,0 +1,115 @@
<!--
~ Copyright 2025 Signal Messenger, LLC
~ SPDX-License-Identifier: AGPL-3.0-only
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="192dp"
android:height="192dp"
android:viewportWidth="192"
android:viewportHeight="192">
<path
android:pathData="M74.75,87C74.75,86.31 75.31,85.75 76,85.75H77.67C78.36,85.75 78.92,86.31 78.92,87V88.67C78.92,89.36 78.36,89.92 77.67,89.92H76C75.31,89.92 74.75,89.36 74.75,88.67V87Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M74.53,80.13H79.14C79.79,80.13 80.37,80.12 80.84,80.16C81.35,80.21 81.87,80.3 82.38,80.56C83.13,80.94 83.73,81.54 84.11,82.29C84.37,82.79 84.46,83.32 84.5,83.82C84.54,84.3 84.54,84.88 84.54,85.53V90.14C84.54,90.79 84.54,91.37 84.5,91.84C84.46,92.35 84.37,92.87 84.11,93.38C83.73,94.13 83.13,94.73 82.38,95.11C81.87,95.37 81.35,95.46 80.84,95.5C80.37,95.54 79.79,95.54 79.14,95.54H74.53C73.88,95.54 73.3,95.54 72.82,95.5C72.32,95.46 71.79,95.37 71.29,95.11C70.54,94.73 69.94,94.13 69.56,93.38C69.3,92.87 69.21,92.35 69.16,91.84C69.12,91.37 69.13,90.79 69.13,90.14V85.53C69.13,84.88 69.12,84.3 69.16,83.82C69.21,83.32 69.3,82.79 69.56,82.29C69.94,81.54 70.54,80.94 71.29,80.56C71.79,80.3 72.32,80.21 72.82,80.16C73.3,80.12 73.88,80.13 74.53,80.13ZM73.06,83.07C72.73,83.1 72.64,83.14 72.61,83.16C72.41,83.26 72.26,83.41 72.16,83.61C72.14,83.64 72.1,83.73 72.07,84.06C72.04,84.4 72.04,84.86 72.04,85.58V90.08C72.04,90.81 72.04,91.26 72.07,91.61C72.1,91.93 72.14,92.03 72.16,92.06C72.26,92.25 72.41,92.41 72.61,92.51C72.64,92.53 72.73,92.57 73.06,92.6C73.4,92.62 73.86,92.63 74.58,92.63H79.08C79.81,92.63 80.26,92.62 80.61,92.6C80.93,92.57 81.03,92.53 81.06,92.51C81.25,92.41 81.41,92.25 81.51,92.06C81.53,92.03 81.57,91.93 81.6,91.61C81.62,91.26 81.63,90.81 81.63,90.08V85.58C81.63,84.86 81.62,84.4 81.6,84.06C81.57,83.73 81.53,83.64 81.51,83.61C81.41,83.41 81.25,83.26 81.06,83.16C81.03,83.14 80.93,83.1 80.61,83.07C80.26,83.04 79.81,83.04 79.08,83.04H74.58C73.86,83.04 73.4,83.04 73.06,83.07Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M76,104.08C75.31,104.08 74.75,104.64 74.75,105.33V107C74.75,107.69 75.31,108.25 76,108.25H77.67C78.36,108.25 78.92,107.69 78.92,107V105.33C78.92,104.64 78.36,104.08 77.67,104.08H76Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M74.53,98.46H79.14C79.79,98.46 80.37,98.46 80.84,98.5C81.35,98.54 81.87,98.63 82.38,98.89C83.13,99.27 83.73,99.87 84.11,100.62C84.37,101.13 84.46,101.65 84.5,102.16C84.54,102.63 84.54,103.21 84.54,103.86V108.47C84.54,109.13 84.54,109.7 84.5,110.18C84.46,110.68 84.37,111.21 84.11,111.71C83.73,112.46 83.13,113.06 82.38,113.44C81.87,113.7 81.35,113.79 80.84,113.84C80.37,113.88 79.79,113.88 79.14,113.88H74.53C73.88,113.88 73.3,113.88 72.82,113.84C72.32,113.79 71.79,113.7 71.29,113.44C70.54,113.06 69.94,112.46 69.56,111.71C69.3,111.21 69.21,110.68 69.16,110.18C69.12,109.7 69.13,109.13 69.13,108.47V103.86C69.13,103.21 69.12,102.63 69.16,102.16C69.21,101.65 69.3,101.13 69.56,100.62C69.94,99.87 70.54,99.27 71.29,98.89C71.79,98.63 72.32,98.54 72.82,98.5C73.3,98.46 73.88,98.46 74.53,98.46ZM73.06,101.4C72.73,101.43 72.64,101.47 72.61,101.49C72.41,101.59 72.26,101.75 72.16,101.94C72.14,101.97 72.1,102.07 72.07,102.39C72.04,102.74 72.04,103.19 72.04,103.92V108.42C72.04,109.14 72.04,109.6 72.07,109.94C72.1,110.27 72.14,110.36 72.16,110.39C72.26,110.59 72.41,110.75 72.61,110.85C72.64,110.86 72.73,110.9 73.06,110.93C73.4,110.96 73.86,110.96 74.58,110.96H79.08C79.81,110.96 80.26,110.96 80.61,110.93C80.93,110.9 81.03,110.86 81.06,110.85C81.25,110.75 81.41,110.59 81.51,110.39C81.53,110.36 81.57,110.27 81.6,109.94C81.62,109.6 81.63,109.14 81.63,108.42V103.92C81.63,103.19 81.62,102.74 81.6,102.39C81.57,102.07 81.53,101.97 81.51,101.94C81.41,101.75 81.25,101.59 81.06,101.49C81.03,101.47 80.93,101.43 80.61,101.4C80.26,101.38 79.81,101.38 79.08,101.38H74.58C73.86,101.38 73.4,101.38 73.06,101.4Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M94.33,85.75C93.64,85.75 93.08,86.31 93.08,87V88.67C93.08,89.36 93.64,89.92 94.33,89.92H96C96.69,89.92 97.25,89.36 97.25,88.67V87C97.25,86.31 96.69,85.75 96,85.75H94.33Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M92.86,80.13C92.21,80.13 91.63,80.12 91.16,80.16C90.65,80.21 90.13,80.3 89.62,80.56C88.87,80.94 88.27,81.54 87.89,82.29C87.63,82.79 87.54,83.32 87.5,83.82C87.46,84.3 87.46,84.88 87.46,85.53V90.14C87.46,90.79 87.46,91.37 87.5,91.84C87.54,92.35 87.63,92.87 87.89,93.38C88.27,94.13 88.87,94.73 89.62,95.11C90.13,95.37 90.65,95.46 91.16,95.5C91.63,95.54 92.21,95.54 92.86,95.54H97.47C98.12,95.54 98.7,95.54 99.18,95.5C99.68,95.46 100.21,95.37 100.71,95.11C101.46,94.73 102.06,94.13 102.44,93.38C102.7,92.87 102.79,92.35 102.84,91.84C102.88,91.37 102.88,90.79 102.88,90.14V85.53C102.88,84.88 102.88,84.3 102.84,83.82C102.79,83.32 102.7,82.79 102.44,82.29C102.06,81.54 101.46,80.94 100.71,80.56C100.21,80.3 99.68,80.21 99.18,80.16C98.7,80.12 98.12,80.13 97.47,80.13H92.86ZM90.94,83.16C90.97,83.14 91.07,83.1 91.39,83.07C91.74,83.04 92.19,83.04 92.92,83.04H97.42C98.14,83.04 98.6,83.04 98.94,83.07C99.27,83.1 99.36,83.14 99.39,83.16C99.59,83.26 99.74,83.41 99.84,83.61C99.86,83.64 99.9,83.73 99.93,84.06C99.96,84.4 99.96,84.86 99.96,85.58V90.08C99.96,90.81 99.96,91.26 99.93,91.61C99.9,91.93 99.86,92.03 99.84,92.06C99.74,92.25 99.59,92.41 99.39,92.51C99.36,92.53 99.27,92.57 98.94,92.6C98.6,92.62 98.14,92.63 97.42,92.63H92.92C92.19,92.63 91.74,92.62 91.39,92.6C91.07,92.57 90.97,92.53 90.94,92.51C90.75,92.41 90.59,92.25 90.49,92.06C90.47,92.03 90.43,91.93 90.4,91.61C90.38,91.26 90.38,90.81 90.38,90.08V85.58C90.38,84.86 90.38,84.4 90.4,84.06C90.43,83.73 90.47,83.64 90.49,83.61C90.59,83.41 90.75,83.26 90.94,83.16Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M89.75,99.5C89.06,99.5 88.5,100.06 88.5,100.75V102.42C88.5,103.11 89.06,103.67 89.75,103.67H91.42C92.11,103.67 92.67,103.11 92.67,102.42V100.75C92.67,100.06 92.11,99.5 91.42,99.5H89.75Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M93.08,105.33C93.08,104.64 93.64,104.08 94.33,104.08H96C96.69,104.08 97.25,104.64 97.25,105.33V107C97.25,107.69 96.69,108.25 96,108.25H94.33C93.64,108.25 93.08,107.69 93.08,107V105.33Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M97.67,109.92C97.67,109.23 98.23,108.67 98.92,108.67H100.58C101.27,108.67 101.83,109.23 101.83,109.92V111.58C101.83,112.27 101.27,112.83 100.58,112.83H98.92C98.23,112.83 97.67,112.27 97.67,111.58V109.92Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M98.92,99.5C98.23,99.5 97.67,100.06 97.67,100.75V102.42C97.67,103.11 98.23,103.67 98.92,103.67H100.58C101.27,103.67 101.83,103.11 101.83,102.42V100.75C101.83,100.06 101.27,99.5 100.58,99.5H98.92Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M88.5,109.92C88.5,109.23 89.06,108.67 89.75,108.67H91.42C92.11,108.67 92.67,109.23 92.67,109.92V111.58C92.67,112.27 92.11,112.83 91.42,112.83H89.75C89.06,112.83 88.5,112.27 88.5,111.58V109.92Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M71,22L121,22A12,12 0,0 1,133 34L133,158A12,12 0,0 1,121 170L71,170A12,12 0,0 1,59 158L59,34A12,12 0,0 1,71 22z"
android:fillColor="#E3E8FE"/>
<path
android:pathData="M71,22L121,22A12,12 0,0 1,133 34L133,158A12,12 0,0 1,121 170L71,170A12,12 0,0 1,59 158L59,34A12,12 0,0 1,71 22z"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#3B45FD"/>
<path
android:pathData="M82,69H72C69.79,69 68,70.79 68,73V82"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#3B45FD"
android:strokeLineCap="round"/>
<path
android:pathData="M110,69H120C122.21,69 124,70.79 124,73V82"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#3B45FD"
android:strokeLineCap="round"/>
<path
android:pathData="M82,125H72C69.79,125 68,123.21 68,121V112"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#3B45FD"
android:strokeLineCap="round"/>
<path
android:pathData="M110,125H120C122.21,125 124,123.21 124,121V112"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#3B45FD"
android:strokeLineCap="round"/>
<path
android:pathData="M83.06,85.5C83.06,84.71 83.71,84.06 84.5,84.06H86.42C87.21,84.06 87.85,84.71 87.85,85.5V87.42C87.85,88.21 87.21,88.85 86.42,88.85H84.5C83.71,88.85 83.06,88.21 83.06,87.42V85.5Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M82.81,77.59H88.11C88.86,77.59 89.52,77.59 90.07,77.64C90.65,77.69 91.25,77.79 91.84,78.09C92.69,78.53 93.39,79.22 93.83,80.08C94.12,80.66 94.23,81.26 94.28,81.85C94.32,82.39 94.32,83.06 94.32,83.81V89.11C94.32,89.86 94.32,90.52 94.28,91.07C94.23,91.65 94.12,92.25 93.83,92.84C93.39,93.69 92.69,94.39 91.84,94.83C91.25,95.12 90.65,95.23 90.07,95.28C89.52,95.32 88.86,95.32 88.11,95.32H82.81C82.06,95.32 81.39,95.32 80.85,95.28C80.26,95.23 79.66,95.12 79.08,94.83C78.22,94.39 77.53,93.69 77.09,92.84C76.79,92.25 76.69,91.65 76.64,91.07C76.59,90.52 76.59,89.86 76.59,89.11V83.81C76.59,83.06 76.59,82.39 76.64,81.85C76.69,81.26 76.79,80.66 77.09,80.08C77.53,79.22 78.22,78.53 79.08,78.09C79.66,77.79 80.26,77.69 80.85,77.64C81.39,77.59 82.06,77.59 82.81,77.59ZM81.12,80.98C80.74,81.01 80.63,81.06 80.6,81.08C80.38,81.19 80.19,81.38 80.08,81.6C80.06,81.63 80.01,81.74 79.98,82.12C79.95,82.51 79.95,83.04 79.95,83.87V89.05C79.95,89.88 79.95,90.4 79.98,90.8C80.01,91.17 80.06,91.28 80.08,91.31C80.19,91.54 80.38,91.72 80.6,91.84C80.63,91.85 80.74,91.9 81.12,91.94C81.51,91.97 82.04,91.97 82.87,91.97H88.05C88.88,91.97 89.4,91.97 89.8,91.94C90.17,91.9 90.28,91.85 90.31,91.84C90.54,91.72 90.72,91.54 90.84,91.31C90.85,91.28 90.9,91.17 90.94,90.8C90.97,90.4 90.97,89.88 90.97,89.05V83.87C90.97,83.04 90.97,82.51 90.94,82.12C90.9,81.74 90.85,81.63 90.84,81.6C90.72,81.38 90.54,81.19 90.31,81.08C90.28,81.06 90.17,81.01 89.8,80.98C89.4,80.95 88.88,80.95 88.05,80.95H82.87C82.04,80.95 81.51,80.95 81.12,80.98Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M84.5,105.15C83.71,105.15 83.06,105.79 83.06,106.58V108.5C83.06,109.29 83.71,109.94 84.5,109.94H86.42C87.21,109.94 87.85,109.29 87.85,108.5V106.58C87.85,105.79 87.21,105.15 86.42,105.15H84.5Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M82.81,98.68H88.11C88.86,98.68 89.52,98.68 90.07,98.72C90.65,98.77 91.25,98.88 91.84,99.17C92.69,99.61 93.39,100.31 93.83,101.16C94.12,101.75 94.23,102.35 94.28,102.93C94.32,103.48 94.32,104.14 94.32,104.89V110.19C94.32,110.94 94.32,111.61 94.28,112.15C94.23,112.74 94.12,113.34 93.83,113.92C93.39,114.78 92.69,115.47 91.84,115.91C91.25,116.21 90.65,116.31 90.07,116.36C89.52,116.41 88.86,116.41 88.11,116.41H82.81C82.06,116.41 81.39,116.41 80.85,116.36C80.26,116.31 79.66,116.21 79.08,115.91C78.22,115.47 77.53,114.78 77.09,113.92C76.79,113.34 76.69,112.74 76.64,112.15C76.59,111.61 76.59,110.94 76.59,110.19V104.89C76.59,104.14 76.59,103.48 76.64,102.93C76.69,102.35 76.79,101.75 77.09,101.16C77.53,100.31 78.22,99.61 79.08,99.17C79.66,98.88 80.26,98.77 80.85,98.72C81.39,98.68 82.06,98.68 82.81,98.68ZM81.12,102.07C80.74,102.1 80.63,102.15 80.6,102.16C80.38,102.28 80.19,102.46 80.08,102.68C80.06,102.72 80.01,102.83 79.98,103.2C79.95,103.6 79.95,104.12 79.95,104.95V110.13C79.95,110.96 79.95,111.49 79.98,111.88C80.01,112.26 80.06,112.37 80.08,112.4C80.19,112.62 80.38,112.81 80.6,112.92C80.63,112.94 80.74,112.99 81.12,113.02C81.51,113.05 82.04,113.05 82.87,113.05H88.05C88.88,113.05 89.4,113.05 89.8,113.02C90.17,112.99 90.28,112.94 90.31,112.92C90.54,112.81 90.72,112.62 90.84,112.4C90.85,112.37 90.9,112.26 90.94,111.88C90.97,111.49 90.97,110.96 90.97,110.13V104.95C90.97,104.12 90.97,103.6 90.94,103.2C90.9,102.83 90.85,102.72 90.84,102.68C90.72,102.46 90.54,102.28 90.31,102.16C90.28,102.15 90.17,102.1 89.8,102.07C89.4,102.03 88.88,102.03 88.05,102.03H82.87C82.04,102.03 81.51,102.03 81.12,102.07Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M105.58,84.06C104.79,84.06 104.15,84.71 104.15,85.5V87.42C104.15,88.21 104.79,88.85 105.58,88.85H107.5C108.29,88.85 108.94,88.21 108.94,87.42V85.5C108.94,84.71 108.29,84.06 107.5,84.06H105.58Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M103.89,77.59C103.14,77.59 102.48,77.59 101.93,77.64C101.35,77.69 100.75,77.79 100.16,78.09C99.31,78.53 98.61,79.22 98.17,80.08C97.88,80.66 97.77,81.26 97.72,81.85C97.68,82.39 97.68,83.06 97.68,83.81V89.11C97.68,89.86 97.68,90.52 97.72,91.07C97.77,91.65 97.88,92.25 98.17,92.84C98.61,93.69 99.31,94.39 100.16,94.83C100.75,95.12 101.35,95.23 101.93,95.28C102.48,95.32 103.14,95.32 103.89,95.32H109.19C109.94,95.32 110.61,95.32 111.15,95.28C111.74,95.23 112.34,95.12 112.92,94.83C113.78,94.39 114.47,93.69 114.91,92.84C115.21,92.25 115.31,91.65 115.36,91.07C115.41,90.52 115.41,89.86 115.41,89.11V83.81C115.41,83.06 115.41,82.39 115.36,81.85C115.31,81.26 115.21,80.66 114.91,80.08C114.47,79.22 113.78,78.53 112.92,78.09C112.34,77.79 111.74,77.69 111.15,77.64C110.61,77.59 109.94,77.59 109.19,77.59H103.89ZM101.68,81.08C101.72,81.06 101.83,81.01 102.2,80.98C102.6,80.95 103.12,80.95 103.95,80.95H109.13C109.96,80.95 110.49,80.95 110.88,80.98C111.26,81.01 111.37,81.06 111.4,81.08C111.62,81.19 111.81,81.38 111.92,81.6C111.94,81.63 111.99,81.74 112.02,82.12C112.05,82.51 112.05,83.04 112.05,83.87V89.05C112.05,89.88 112.05,90.4 112.02,90.8C111.99,91.17 111.94,91.28 111.92,91.31C111.81,91.54 111.62,91.72 111.4,91.84C111.37,91.85 111.26,91.9 110.88,91.94C110.49,91.97 109.96,91.97 109.13,91.97H103.95C103.12,91.97 102.6,91.97 102.2,91.94C101.83,91.9 101.72,91.85 101.68,91.84C101.46,91.72 101.28,91.54 101.16,91.31C101.15,91.28 101.1,91.17 101.07,90.8C101.03,90.4 101.03,89.88 101.03,89.05V83.87C101.03,83.04 101.03,82.51 101.07,82.12C101.1,81.74 101.15,81.63 101.16,81.6C101.28,81.38 101.46,81.19 101.68,81.08Z"
android:fillColor="#3B45FD"
android:fillType="evenOdd"/>
<path
android:pathData="M100.31,99.88C99.52,99.88 98.88,100.52 98.88,101.31V103.23C98.88,104.02 99.52,104.67 100.31,104.67H102.23C103.02,104.67 103.67,104.02 103.67,103.23V101.31C103.67,100.52 103.02,99.88 102.23,99.88H100.31Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M104.15,106.58C104.15,105.79 104.79,105.15 105.58,105.15H107.5C108.29,105.15 108.94,105.79 108.94,106.58V108.5C108.94,109.29 108.29,109.94 107.5,109.94H105.58C104.79,109.94 104.15,109.29 104.15,108.5V106.58Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M109.42,111.85C109.42,111.06 110.06,110.42 110.85,110.42H112.77C113.57,110.42 114.21,111.06 114.21,111.85V113.77C114.21,114.57 113.57,115.21 112.77,115.21H110.85C110.06,115.21 109.42,114.57 109.42,113.77V111.85Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M110.85,99.88C110.06,99.88 109.42,100.52 109.42,101.31V103.23C109.42,104.02 110.06,104.67 110.85,104.67H112.77C113.57,104.67 114.21,104.02 114.21,103.23V101.31C114.21,100.52 113.57,99.88 112.77,99.88H110.85Z"
android:fillColor="#3B45FD"/>
<path
android:pathData="M98.88,111.85C98.88,111.06 99.52,110.42 100.31,110.42H102.23C103.02,110.42 103.67,111.06 103.67,111.85V113.77C103.67,114.57 103.02,115.21 102.23,115.21H100.31C99.52,115.21 98.88,114.57 98.88,113.77V111.85Z"
android:fillColor="#3B45FD"/>
</vector>

View File

@@ -0,0 +1,115 @@
<!--
~ Copyright 2025 Signal Messenger, LLC
~ SPDX-License-Identifier: AGPL-3.0-only
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="192dp"
android:height="192dp"
android:viewportWidth="192"
android:viewportHeight="192">
<path
android:pathData="M78.75,87C78.75,86.31 79.31,85.75 80,85.75H81.67C82.36,85.75 82.92,86.31 82.92,87V88.67C82.92,89.36 82.36,89.92 81.67,89.92H80C79.31,89.92 78.75,89.36 78.75,88.67V87Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M78.53,80.13H83.14C83.79,80.13 84.37,80.12 84.84,80.16C85.35,80.21 85.87,80.3 86.38,80.56C87.13,80.94 87.73,81.54 88.11,82.29C88.37,82.79 88.46,83.32 88.5,83.82C88.54,84.3 88.54,84.88 88.54,85.53V90.14C88.54,90.79 88.54,91.37 88.5,91.84C88.46,92.35 88.37,92.87 88.11,93.38C87.73,94.13 87.13,94.73 86.38,95.11C85.87,95.37 85.35,95.46 84.84,95.5C84.37,95.54 83.79,95.54 83.14,95.54H78.53C77.88,95.54 77.3,95.54 76.82,95.5C76.32,95.46 75.79,95.37 75.29,95.11C74.54,94.73 73.94,94.13 73.56,93.38C73.3,92.87 73.21,92.35 73.16,91.84C73.12,91.37 73.13,90.79 73.13,90.14V85.53C73.13,84.88 73.12,84.3 73.16,83.82C73.21,83.32 73.3,82.79 73.56,82.29C73.94,81.54 74.54,80.94 75.29,80.56C75.79,80.3 76.32,80.21 76.82,80.16C77.3,80.12 77.88,80.13 78.53,80.13ZM77.06,83.07C76.73,83.1 76.64,83.14 76.61,83.16C76.41,83.26 76.26,83.41 76.16,83.61C76.14,83.64 76.1,83.73 76.07,84.06C76.04,84.4 76.04,84.86 76.04,85.58V90.08C76.04,90.81 76.04,91.26 76.07,91.61C76.1,91.93 76.14,92.03 76.16,92.06C76.26,92.25 76.41,92.41 76.61,92.51C76.64,92.53 76.73,92.57 77.06,92.6C77.4,92.62 77.86,92.63 78.58,92.63H83.08C83.81,92.63 84.26,92.62 84.61,92.6C84.93,92.57 85.03,92.53 85.06,92.51C85.25,92.41 85.41,92.25 85.51,92.06C85.53,92.03 85.57,91.93 85.6,91.61C85.62,91.26 85.63,90.81 85.63,90.08V85.58C85.63,84.86 85.62,84.4 85.6,84.06C85.57,83.73 85.53,83.64 85.51,83.61C85.41,83.41 85.25,83.26 85.06,83.16C85.03,83.14 84.93,83.1 84.61,83.07C84.26,83.04 83.81,83.04 83.08,83.04H78.58C77.86,83.04 77.4,83.04 77.06,83.07Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M80,104.08C79.31,104.08 78.75,104.64 78.75,105.33V107C78.75,107.69 79.31,108.25 80,108.25H81.67C82.36,108.25 82.92,107.69 82.92,107V105.33C82.92,104.64 82.36,104.08 81.67,104.08H80Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M78.53,98.46H83.14C83.79,98.46 84.37,98.46 84.84,98.5C85.35,98.54 85.87,98.63 86.38,98.89C87.13,99.27 87.73,99.87 88.11,100.62C88.37,101.13 88.46,101.65 88.5,102.16C88.54,102.63 88.54,103.21 88.54,103.86V108.47C88.54,109.13 88.54,109.7 88.5,110.18C88.46,110.68 88.37,111.21 88.11,111.71C87.73,112.46 87.13,113.06 86.38,113.44C85.87,113.7 85.35,113.79 84.84,113.84C84.37,113.88 83.79,113.88 83.14,113.88H78.53C77.88,113.88 77.3,113.88 76.82,113.84C76.32,113.79 75.79,113.7 75.29,113.44C74.54,113.06 73.94,112.46 73.56,111.71C73.3,111.21 73.21,110.68 73.16,110.18C73.12,109.7 73.13,109.13 73.13,108.47V103.86C73.13,103.21 73.12,102.63 73.16,102.16C73.21,101.65 73.3,101.13 73.56,100.62C73.94,99.87 74.54,99.27 75.29,98.89C75.79,98.63 76.32,98.54 76.82,98.5C77.3,98.46 77.88,98.46 78.53,98.46ZM77.06,101.4C76.73,101.43 76.64,101.47 76.61,101.49C76.41,101.59 76.26,101.75 76.16,101.94C76.14,101.97 76.1,102.07 76.07,102.39C76.04,102.74 76.04,103.19 76.04,103.92V108.42C76.04,109.14 76.04,109.6 76.07,109.94C76.1,110.27 76.14,110.36 76.16,110.39C76.26,110.59 76.41,110.75 76.61,110.85C76.64,110.86 76.73,110.9 77.06,110.93C77.4,110.96 77.86,110.96 78.58,110.96H83.08C83.81,110.96 84.26,110.96 84.61,110.93C84.93,110.9 85.03,110.86 85.06,110.85C85.25,110.75 85.41,110.59 85.51,110.39C85.53,110.36 85.57,110.27 85.6,109.94C85.62,109.6 85.63,109.14 85.63,108.42V103.92C85.63,103.19 85.62,102.74 85.6,102.39C85.57,102.07 85.53,101.97 85.51,101.94C85.41,101.75 85.25,101.59 85.06,101.49C85.03,101.47 84.93,101.43 84.61,101.4C84.26,101.38 83.81,101.38 83.08,101.38H78.58C77.86,101.38 77.4,101.38 77.06,101.4Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M98.33,85.75C97.64,85.75 97.08,86.31 97.08,87V88.67C97.08,89.36 97.64,89.92 98.33,89.92H100C100.69,89.92 101.25,89.36 101.25,88.67V87C101.25,86.31 100.69,85.75 100,85.75H98.33Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M96.86,80.13C96.21,80.13 95.63,80.12 95.16,80.16C94.65,80.21 94.13,80.3 93.62,80.56C92.87,80.94 92.27,81.54 91.89,82.29C91.63,82.79 91.54,83.32 91.5,83.82C91.46,84.3 91.46,84.88 91.46,85.53V90.14C91.46,90.79 91.46,91.37 91.5,91.84C91.54,92.35 91.63,92.87 91.89,93.38C92.27,94.13 92.87,94.73 93.62,95.11C94.13,95.37 94.65,95.46 95.16,95.5C95.63,95.54 96.21,95.54 96.86,95.54H101.47C102.13,95.54 102.7,95.54 103.18,95.5C103.68,95.46 104.21,95.37 104.71,95.11C105.46,94.73 106.06,94.13 106.44,93.38C106.7,92.87 106.79,92.35 106.84,91.84C106.88,91.37 106.88,90.79 106.88,90.14V85.53C106.88,84.88 106.88,84.3 106.84,83.82C106.79,83.32 106.7,82.79 106.44,82.29C106.06,81.54 105.46,80.94 104.71,80.56C104.21,80.3 103.68,80.21 103.18,80.16C102.7,80.12 102.13,80.13 101.47,80.13H96.86ZM94.94,83.16C94.97,83.14 95.07,83.1 95.39,83.07C95.74,83.04 96.19,83.04 96.92,83.04H101.42C102.14,83.04 102.6,83.04 102.94,83.07C103.27,83.1 103.36,83.14 103.39,83.16C103.59,83.26 103.75,83.41 103.85,83.61C103.86,83.64 103.9,83.73 103.93,84.06C103.96,84.4 103.96,84.86 103.96,85.58V90.08C103.96,90.81 103.96,91.26 103.93,91.61C103.9,91.93 103.86,92.03 103.85,92.06C103.75,92.25 103.59,92.41 103.39,92.51C103.36,92.53 103.27,92.57 102.94,92.6C102.6,92.62 102.14,92.63 101.42,92.63H96.92C96.19,92.63 95.74,92.62 95.39,92.6C95.07,92.57 94.97,92.53 94.94,92.51C94.75,92.41 94.59,92.25 94.49,92.06C94.47,92.03 94.43,91.93 94.4,91.61C94.38,91.26 94.38,90.81 94.38,90.08V85.58C94.38,84.86 94.38,84.4 94.4,84.06C94.43,83.73 94.47,83.64 94.49,83.61C94.59,83.41 94.75,83.26 94.94,83.16Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M93.75,99.5C93.06,99.5 92.5,100.06 92.5,100.75V102.42C92.5,103.11 93.06,103.67 93.75,103.67H95.42C96.11,103.67 96.67,103.11 96.67,102.42V100.75C96.67,100.06 96.11,99.5 95.42,99.5H93.75Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M97.08,105.33C97.08,104.64 97.64,104.08 98.33,104.08H100C100.69,104.08 101.25,104.64 101.25,105.33V107C101.25,107.69 100.69,108.25 100,108.25H98.33C97.64,108.25 97.08,107.69 97.08,107V105.33Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M101.67,109.92C101.67,109.23 102.23,108.67 102.92,108.67H104.58C105.27,108.67 105.83,109.23 105.83,109.92V111.58C105.83,112.27 105.27,112.83 104.58,112.83H102.92C102.23,112.83 101.67,112.27 101.67,111.58V109.92Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M102.92,99.5C102.23,99.5 101.67,100.06 101.67,100.75V102.42C101.67,103.11 102.23,103.67 102.92,103.67H104.58C105.27,103.67 105.83,103.11 105.83,102.42V100.75C105.83,100.06 105.27,99.5 104.58,99.5H102.92Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M92.5,109.92C92.5,109.23 93.06,108.67 93.75,108.67H95.42C96.11,108.67 96.67,109.23 96.67,109.92V111.58C96.67,112.27 96.11,112.83 95.42,112.83H93.75C93.06,112.83 92.5,112.27 92.5,111.58V109.92Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M68,22L124,22A12,12 0,0 1,136 34L136,158A12,12 0,0 1,124 170L68,170A12,12 0,0 1,56 158L56,34A12,12 0,0 1,68 22z"
android:fillColor="#E3E8FE"/>
<path
android:pathData="M68,22L124,22A12,12 0,0 1,136 34L136,158A12,12 0,0 1,124 170L68,170A12,12 0,0 1,56 158L56,34A12,12 0,0 1,68 22z"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#020BAC"/>
<path
android:pathData="M82.5,85C82.5,84.17 83.17,83.5 84,83.5H86C86.83,83.5 87.5,84.17 87.5,85V87C87.5,87.83 86.83,88.5 86,88.5H84C83.17,88.5 82.5,87.83 82.5,87V85Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M82.23,76.75H87.77C88.55,76.75 89.24,76.75 89.81,76.8C90.42,76.85 91.05,76.96 91.66,77.27C92.55,77.72 93.28,78.45 93.73,79.34C94.04,79.95 94.15,80.58 94.2,81.19C94.25,81.76 94.25,82.45 94.25,83.23V88.77C94.25,89.55 94.25,90.24 94.2,90.81C94.15,91.42 94.04,92.05 93.73,92.66C93.28,93.55 92.55,94.28 91.66,94.73C91.05,95.04 90.42,95.15 89.81,95.2C89.24,95.25 88.55,95.25 87.77,95.25H82.23C81.45,95.25 80.76,95.25 80.19,95.2C79.58,95.15 78.95,95.04 78.34,94.73C77.45,94.28 76.72,93.55 76.27,92.66C75.96,92.05 75.85,91.42 75.8,90.81C75.75,90.24 75.75,89.55 75.75,88.77V83.23C75.75,82.45 75.75,81.76 75.8,81.19C75.85,80.58 75.96,79.95 76.27,79.34C76.72,78.45 77.45,77.72 78.34,77.27C78.95,76.96 79.58,76.85 80.19,76.8C80.76,76.75 81.45,76.75 82.23,76.75ZM80.47,80.29C80.08,80.32 79.97,80.37 79.93,80.39C79.7,80.51 79.51,80.7 79.39,80.93C79.37,80.97 79.32,81.08 79.29,81.47C79.25,81.88 79.25,82.43 79.25,83.3V88.7C79.25,89.57 79.25,90.12 79.29,90.53C79.32,90.92 79.37,91.03 79.39,91.07C79.51,91.3 79.7,91.49 79.93,91.61C79.97,91.63 80.08,91.68 80.47,91.71C80.88,91.75 81.43,91.75 82.3,91.75H87.7C88.57,91.75 89.12,91.75 89.53,91.71C89.92,91.68 90.03,91.63 90.07,91.61C90.3,91.49 90.49,91.3 90.61,91.07C90.63,91.03 90.68,90.92 90.71,90.53C90.75,90.12 90.75,89.57 90.75,88.7V83.3C90.75,82.43 90.75,81.88 90.71,81.47C90.68,81.08 90.63,80.97 90.61,80.93C90.49,80.7 90.3,80.51 90.07,80.39C90.03,80.37 89.92,80.32 89.53,80.29C89.12,80.25 88.57,80.25 87.7,80.25H82.3C81.43,80.25 80.88,80.25 80.47,80.29Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M84,105.5C83.17,105.5 82.5,106.17 82.5,107V109C82.5,109.83 83.17,110.5 84,110.5H86C86.83,110.5 87.5,109.83 87.5,109V107C87.5,106.17 86.83,105.5 86,105.5H84Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M82.23,98.75H87.77C88.55,98.75 89.24,98.75 89.81,98.8C90.42,98.85 91.05,98.96 91.66,99.27C92.55,99.72 93.28,100.45 93.73,101.34C94.04,101.95 94.15,102.58 94.2,103.19C94.25,103.76 94.25,104.45 94.25,105.24V110.76C94.25,111.55 94.25,112.24 94.2,112.81C94.15,113.42 94.04,114.05 93.73,114.66C93.28,115.55 92.55,116.28 91.66,116.73C91.05,117.04 90.42,117.15 89.81,117.2C89.24,117.25 88.55,117.25 87.77,117.25H82.23C81.45,117.25 80.76,117.25 80.19,117.2C79.58,117.15 78.95,117.04 78.34,116.73C77.45,116.28 76.72,115.55 76.27,114.66C75.96,114.05 75.85,113.42 75.8,112.81C75.75,112.24 75.75,111.55 75.75,110.76V105.24C75.75,104.45 75.75,103.76 75.8,103.19C75.85,102.58 75.96,101.95 76.27,101.34C76.72,100.45 77.45,99.72 78.34,99.27C78.95,98.96 79.58,98.85 80.19,98.8C80.76,98.75 81.45,98.75 82.23,98.75ZM80.47,102.29C80.08,102.32 79.97,102.37 79.93,102.39C79.7,102.51 79.51,102.7 79.39,102.93C79.37,102.97 79.32,103.08 79.29,103.47C79.25,103.89 79.25,104.43 79.25,105.3V110.7C79.25,111.57 79.25,112.11 79.29,112.53C79.32,112.92 79.37,113.03 79.39,113.07C79.51,113.3 79.7,113.49 79.93,113.61C79.97,113.63 80.08,113.68 80.47,113.71C80.88,113.75 81.43,113.75 82.3,113.75H87.7C88.57,113.75 89.12,113.75 89.53,113.71C89.92,113.68 90.03,113.63 90.07,113.61C90.3,113.49 90.49,113.3 90.61,113.07C90.63,113.03 90.68,112.92 90.71,112.53C90.75,112.11 90.75,111.57 90.75,110.7V105.3C90.75,104.43 90.75,103.89 90.71,103.47C90.68,103.08 90.63,102.97 90.61,102.93C90.49,102.7 90.3,102.51 90.07,102.39C90.03,102.37 89.92,102.32 89.53,102.29C89.12,102.25 88.57,102.25 87.7,102.25H82.3C81.43,102.25 80.88,102.25 80.47,102.29Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M106,83.5C105.17,83.5 104.5,84.17 104.5,85V87C104.5,87.83 105.17,88.5 106,88.5H108C108.83,88.5 109.5,87.83 109.5,87V85C109.5,84.17 108.83,83.5 108,83.5H106Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M104.24,76.75C103.45,76.75 102.76,76.75 102.19,76.8C101.58,76.85 100.95,76.96 100.34,77.27C99.45,77.72 98.72,78.45 98.27,79.34C97.96,79.95 97.85,80.58 97.8,81.19C97.75,81.76 97.75,82.45 97.75,83.23V88.77C97.75,89.55 97.75,90.24 97.8,90.81C97.85,91.42 97.96,92.05 98.27,92.66C98.72,93.55 99.45,94.28 100.34,94.73C100.95,95.04 101.58,95.15 102.19,95.2C102.76,95.25 103.45,95.25 104.24,95.25H109.76C110.55,95.25 111.24,95.25 111.81,95.2C112.42,95.15 113.05,95.04 113.66,94.73C114.55,94.28 115.28,93.55 115.73,92.66C116.04,92.05 116.15,91.42 116.2,90.81C116.25,90.24 116.25,89.55 116.25,88.77V83.23C116.25,82.45 116.25,81.76 116.2,81.19C116.15,80.58 116.04,79.95 115.73,79.34C115.28,78.45 114.55,77.72 113.66,77.27C113.05,76.96 112.42,76.85 111.81,76.8C111.24,76.75 110.55,76.75 109.76,76.75H104.24ZM101.93,80.39C101.97,80.37 102.08,80.32 102.47,80.29C102.89,80.25 103.43,80.25 104.3,80.25H109.7C110.57,80.25 111.11,80.25 111.53,80.29C111.92,80.32 112.03,80.37 112.07,80.39C112.3,80.51 112.49,80.7 112.61,80.93C112.63,80.97 112.68,81.08 112.71,81.47C112.75,81.88 112.75,82.43 112.75,83.3V88.7C112.75,89.57 112.75,90.12 112.71,90.53C112.68,90.92 112.63,91.03 112.61,91.07C112.49,91.3 112.3,91.49 112.07,91.61C112.03,91.63 111.92,91.68 111.53,91.71C111.11,91.75 110.57,91.75 109.7,91.75H104.3C103.43,91.75 102.89,91.75 102.47,91.71C102.08,91.68 101.97,91.63 101.93,91.61C101.7,91.49 101.51,91.3 101.39,91.07C101.37,91.03 101.32,90.92 101.29,90.53C101.25,90.12 101.25,89.57 101.25,88.7V83.3C101.25,82.43 101.25,81.88 101.29,81.47C101.32,81.08 101.37,80.97 101.39,80.93C101.51,80.7 101.7,80.51 101.93,80.39Z"
android:fillColor="#020BAC"
android:fillType="evenOdd"/>
<path
android:pathData="M100.5,100C99.67,100 99,100.67 99,101.5V103.5C99,104.33 99.67,105 100.5,105H102.5C103.33,105 104,104.33 104,103.5V101.5C104,100.67 103.33,100 102.5,100H100.5Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M104.5,107C104.5,106.17 105.17,105.5 106,105.5H108C108.83,105.5 109.5,106.17 109.5,107V109C109.5,109.83 108.83,110.5 108,110.5H106C105.17,110.5 104.5,109.83 104.5,109V107Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M110,112.5C110,111.67 110.67,111 111.5,111H113.5C114.33,111 115,111.67 115,112.5V114.5C115,115.33 114.33,116 113.5,116H111.5C110.67,116 110,115.33 110,114.5V112.5Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M111.5,100C110.67,100 110,100.67 110,101.5V103.5C110,104.33 110.67,105 111.5,105H113.5C114.33,105 115,104.33 115,103.5V101.5C115,100.67 114.33,100 113.5,100H111.5Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M99,112.5C99,111.67 99.67,111 100.5,111H102.5C103.33,111 104,111.67 104,112.5V114.5C104,115.33 103.33,116 102.5,116H100.5C99.67,116 99,115.33 99,114.5V112.5Z"
android:fillColor="#020BAC"/>
<path
android:pathData="M80,67H70C67.79,67 66,68.79 66,71V80"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#020BAC"
android:strokeLineCap="round"/>
<path
android:pathData="M112,67H122C124.21,67 126,68.79 126,71V80"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#020BAC"
android:strokeLineCap="round"/>
<path
android:pathData="M80,127H70C67.79,127 66,125.21 66,123V114"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#020BAC"
android:strokeLineCap="round"/>
<path
android:pathData="M112,127H122C124.21,127 126,125.21 126,123V114"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#020BAC"
android:strokeLineCap="round"/>
</vector>

View File

@@ -367,6 +367,11 @@
<string name="CommunicationActions_this_is_not_a_valid_call_link">This is not a valid call link. Make sure the entire link is intact and correct before attempting to join.</string>
<!-- Displayed in a snackbar when the user is already in a call -->
<string name="CommunicationActions__you_are_already_in_a_call">You are already in a call</string>
<!-- Title on dialog when quick restore qr code is scanned in system camera -->
<string name="CommunicationActions__transfer_dialog_title">Transfer account to new device?</string>
<!-- Message on dialog when quick restore qr code is scanned in system camera -->
<string name="CommunicationActions__transfer_dialog_message">To transfer this account to a new device, tap \"Continue\" and scan the QR code again with the Signal camera. Make sure you only scan QR codes that come directly from Signal.</string>
<string name="CommunicationActions__dont_transfer">Don\'t transfer</string>
<!-- ConfirmIdentityDialog -->
@@ -8924,6 +8929,13 @@
<!-- Snackbar text to add a question before creating a poll -->
<string name="CreatePollFragment__add_question">Add a question</string>
<!-- Bottom sheet title telling users to scan a qr code -->
<string name="QuickRestoreInfoDialog__scan_qr_code">Scan QR code</string>
<!-- Bottom sheet description telling users how to scan a qr code -->
<string name="QuickRestoreInfoDialog__use_this_device_to_scan_qr_code">Use this device to scan the QR code on the device you want to transfer to</string>
<!-- Confirmation button to dismiss bottom sheet dialog -->
<string name="QuickRestoreInfoDialog__okay">Okay</string>
<!-- CallQualityIssue -->
<!-- Label for general audio issue category -->
<string name="CallQualityIssue__audio_issue">Audio issue</string>