mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 04:58:45 +00:00
Add new backups iconography and copy.
This commit is contained in:
committed by
Greyson Parrelli
parent
ce6f0ca483
commit
3381d20bd7
@@ -7,7 +7,9 @@ package org.thoughtcrime.securesms.backup.v2.ui
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
@@ -20,10 +22,15 @@ import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
@@ -39,12 +46,13 @@ import org.signal.core.ui.Buttons
|
||||
import org.signal.core.ui.Previews
|
||||
import org.signal.core.ui.SignalPreview
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.billing.launchManageBackupsSubscription
|
||||
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
|
||||
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.jobs.BackupMessagesJob
|
||||
import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob
|
||||
import org.thoughtcrime.securesms.payments.FiatMoneyUtil
|
||||
|
||||
/**
|
||||
* Notifies the user of an issue with their backup.
|
||||
@@ -67,6 +75,14 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() {
|
||||
|
||||
@Composable
|
||||
override fun SheetContent() {
|
||||
var pricePerMonth by remember { mutableStateOf("-") }
|
||||
val resources = LocalContext.current.resources
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
val price = AppDependencies.billingApi.queryProduct()?.price ?: return@LaunchedEffect
|
||||
pricePerMonth = FiatMoneyUtil.format(resources, price, FiatMoneyUtil.formatOptions().trimZerosAfterDecimal())
|
||||
}
|
||||
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = backupAlert,
|
||||
onPrimaryActionClick = this::performPrimaryAction,
|
||||
@@ -81,10 +97,12 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() {
|
||||
BackupMessagesJob.enqueue()
|
||||
startActivity(AppSettingsActivity.remoteBackups(requireContext()))
|
||||
}
|
||||
BackupAlert.PAYMENT_PROCESSING -> Unit
|
||||
|
||||
BackupAlert.PAYMENT_PROCESSING -> launchManageBackupsSubscription()
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF, BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> {
|
||||
performFullMediaDownload()
|
||||
}
|
||||
|
||||
BackupAlert.DISK_FULL -> Unit
|
||||
}
|
||||
|
||||
@@ -97,13 +115,16 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> {
|
||||
// TODO [message-backups] - Dismiss and notify later
|
||||
}
|
||||
BackupAlert.PAYMENT_PROCESSING -> error("PAYMENT_PROCESSING state does not support a secondary action.")
|
||||
|
||||
BackupAlert.PAYMENT_PROCESSING -> Unit
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> {
|
||||
// TODO [message-backups] - Silence and remind on last day
|
||||
}
|
||||
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> {
|
||||
displayLastChanceDialog()
|
||||
}
|
||||
|
||||
BackupAlert.DISK_FULL -> Unit
|
||||
}
|
||||
|
||||
@@ -130,8 +151,9 @@ class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() {
|
||||
@Composable
|
||||
private fun BackupAlertSheetContent(
|
||||
backupAlert: BackupAlert,
|
||||
onPrimaryActionClick: () -> Unit,
|
||||
onSecondaryActionClick: () -> Unit
|
||||
pricePerMonth: String = "",
|
||||
onPrimaryActionClick: () -> Unit = {},
|
||||
onSecondaryActionClick: () -> Unit = {}
|
||||
) {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
@@ -143,20 +165,43 @@ private fun BackupAlertSheetContent(
|
||||
|
||||
Spacer(modifier = Modifier.size(26.dp))
|
||||
|
||||
val iconColors = rememberBackupsIconColors(backupAlert = backupAlert)
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.symbol_backup_light), // TODO [message-backups] final asset
|
||||
contentDescription = null,
|
||||
tint = iconColors.foreground,
|
||||
modifier = Modifier
|
||||
.size(88.dp)
|
||||
.background(color = iconColors.background, shape = CircleShape)
|
||||
.padding(20.dp)
|
||||
)
|
||||
when (backupAlert) {
|
||||
BackupAlert.PAYMENT_PROCESSING, BackupAlert.MEDIA_BACKUPS_ARE_OFF -> {
|
||||
Box {
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.image_signal_backups),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.size(80.dp)
|
||||
.padding(2.dp)
|
||||
)
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.symbol_error_circle_fill_24),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.align(Alignment.TopEnd)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
val iconColors = rememberBackupsIconColors(backupAlert = backupAlert)
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.symbol_backup_light),
|
||||
contentDescription = null,
|
||||
tint = iconColors.foreground,
|
||||
modifier = Modifier
|
||||
.size(80.dp)
|
||||
.background(color = iconColors.background, shape = CircleShape)
|
||||
.padding(20.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Text(
|
||||
text = stringResource(id = rememberTitleResource(backupAlert = backupAlert)),
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.padding(top = 16.dp, bottom = 6.dp)
|
||||
)
|
||||
|
||||
@@ -164,9 +209,8 @@ private fun BackupAlertSheetContent(
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> CouldNotCompleteBackup(
|
||||
daysSinceLastBackup = 7 // TODO [message-backups]
|
||||
)
|
||||
BackupAlert.PAYMENT_PROCESSING -> PaymentProcessingBody(
|
||||
paymentMethodType = InAppPaymentData.PaymentMethodType.GOOGLE_PAY // TODO [message-backups] -- Get this data from elsewhere... The active subscription object?
|
||||
)
|
||||
|
||||
BackupAlert.PAYMENT_PROCESSING -> PaymentProcessingBody()
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> MediaBackupsAreOffBody(30) // TODO [message-backups] -- Get this value from backend
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> MediaWillBeDeletedTodayBody()
|
||||
BackupAlert.DISK_FULL -> DiskFullBody(
|
||||
@@ -184,7 +228,7 @@ private fun BackupAlertSheetContent(
|
||||
.defaultMinSize(minWidth = 220.dp)
|
||||
.padding(bottom = padBottom)
|
||||
) {
|
||||
Text(text = stringResource(id = rememberPrimaryActionResource(backupAlert = backupAlert)))
|
||||
Text(text = primaryActionString(backupAlert = backupAlert, pricePerMonth = pricePerMonth))
|
||||
}
|
||||
|
||||
if (secondaryActionResource > 0) {
|
||||
@@ -201,15 +245,18 @@ private fun CouldNotCompleteBackup(
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__your_device_hasnt, daysSinceLastBackup),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 60.dp)
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PaymentProcessingBody(paymentMethodType: InAppPaymentData.PaymentMethodType) {
|
||||
private fun PaymentProcessingBody() {
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__were_having_trouble_collecting__google_pay),
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__check_to_make_sure_your_payment_method),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 60.dp)
|
||||
)
|
||||
}
|
||||
@@ -219,14 +266,16 @@ private fun MediaBackupsAreOffBody(
|
||||
daysUntilDeletion: Long
|
||||
) {
|
||||
Text(
|
||||
text = pluralStringResource(id = R.plurals.BackupAlertBottomSheet__your_signal_media_backup_plan, daysUntilDeletion.toInt(), daysUntilDeletion),
|
||||
text = pluralStringResource(id = R.plurals.BackupAlertBottomSheet__your_backup_plan_has_expired, daysUntilDeletion.toInt(), daysUntilDeletion),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 24.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__you_can_begin_paying_for_backups_again),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 36.dp)
|
||||
)
|
||||
}
|
||||
@@ -236,12 +285,14 @@ private fun MediaWillBeDeletedTodayBody() {
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__your_signal_media_backup_plan_has_been),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 24.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__you_can_begin_paying_for_backups_again),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 36.dp)
|
||||
)
|
||||
}
|
||||
@@ -254,12 +305,14 @@ private fun DiskFullBody(
|
||||
Text(
|
||||
text = stringResource(id = R.string.BackupAlertBottomSheet__your_device_does_not_have_enough_free_space, requiredSpace),
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 24.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
text = pluralStringResource(id = R.plurals.BackupAlertBottomSheet__if_you_choose_skip, daysUntilDeletion.toInt(), daysUntilDeletion), // TODO [message-backups] Learn More link
|
||||
textAlign = TextAlign.Center,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(bottom = 36.dp)
|
||||
)
|
||||
}
|
||||
@@ -268,8 +321,9 @@ private fun DiskFullBody(
|
||||
private fun rememberBackupsIconColors(backupAlert: BackupAlert): BackupsIconColors {
|
||||
return remember(backupAlert) {
|
||||
when (backupAlert) {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP, BackupAlert.PAYMENT_PROCESSING, BackupAlert.DISK_FULL -> BackupsIconColors.Warning
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF, BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> BackupsIconColors.Error
|
||||
BackupAlert.PAYMENT_PROCESSING, BackupAlert.MEDIA_BACKUPS_ARE_OFF -> error("Not icon-based options.")
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP, BackupAlert.DISK_FULL -> BackupsIconColors.Warning
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> BackupsIconColors.Error
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -280,8 +334,8 @@ private fun rememberTitleResource(backupAlert: BackupAlert): Int {
|
||||
return remember(backupAlert) {
|
||||
when (backupAlert) {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> R.string.BackupAlertBottomSheet__couldnt_complete_backup
|
||||
BackupAlert.PAYMENT_PROCESSING -> R.string.BackupAlertBottomSheet__cant_process_backup_payment
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.BackupAlertBottomSheet__media_backups_are_off
|
||||
BackupAlert.PAYMENT_PROCESSING -> R.string.BackupAlertBottomSheet__your_backups_subscription_failed_to_renew
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.BackupAlertBottomSheet__your_backups_subscription_expired
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> R.string.BackupAlertBottomSheet__your_media_will_be_deleted_today
|
||||
BackupAlert.DISK_FULL -> R.string.BackupAlertBottomSheet__cant_complete_download
|
||||
}
|
||||
@@ -289,15 +343,16 @@ private fun rememberTitleResource(backupAlert: BackupAlert): Int {
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun rememberPrimaryActionResource(backupAlert: BackupAlert): Int {
|
||||
return remember(backupAlert) {
|
||||
when (backupAlert) {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> android.R.string.ok // TODO [message-backups] -- Finalized copy
|
||||
BackupAlert.PAYMENT_PROCESSING -> android.R.string.ok
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.BackupAlertBottomSheet__download_media_now
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> R.string.BackupAlertBottomSheet__download_media_now
|
||||
BackupAlert.DISK_FULL -> android.R.string.ok
|
||||
}
|
||||
private fun primaryActionString(
|
||||
backupAlert: BackupAlert,
|
||||
pricePerMonth: String
|
||||
): String {
|
||||
return when (backupAlert) {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> stringResource(android.R.string.ok) // TODO [message-backups] -- Finalized copy
|
||||
BackupAlert.PAYMENT_PROCESSING -> stringResource(R.string.BackupAlertBottomSheet__manage_subscription)
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> stringResource(R.string.BackupAlertBottomSheet__subscribe_for_s_month, pricePerMonth)
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> stringResource(R.string.BackupAlertBottomSheet__download_media_now)
|
||||
BackupAlert.DISK_FULL -> stringResource(android.R.string.ok)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,8 +361,8 @@ private fun rememberSecondaryActionResource(backupAlert: BackupAlert): Int {
|
||||
return remember(backupAlert) {
|
||||
when (backupAlert) {
|
||||
BackupAlert.COULD_NOT_COMPLETE_BACKUP -> android.R.string.cancel // TODO [message-backups] -- Finalized copy
|
||||
BackupAlert.PAYMENT_PROCESSING -> -1
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.BackupAlertBottomSheet__download_later
|
||||
BackupAlert.PAYMENT_PROCESSING -> R.string.BackupAlertBottomSheet__not_now
|
||||
BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.BackupAlertBottomSheet__not_now
|
||||
BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> R.string.BackupAlertBottomSheet__dont_download_media
|
||||
BackupAlert.DISK_FULL -> R.string.BackupAlertBottomSheet__skip
|
||||
}
|
||||
@@ -319,9 +374,7 @@ private fun rememberSecondaryActionResource(backupAlert: BackupAlert): Int {
|
||||
private fun BackupAlertSheetContentPreviewGeneric() {
|
||||
Previews.BottomSheetPreview {
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = BackupAlert.COULD_NOT_COMPLETE_BACKUP,
|
||||
onPrimaryActionClick = {},
|
||||
onSecondaryActionClick = {}
|
||||
backupAlert = BackupAlert.COULD_NOT_COMPLETE_BACKUP
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -331,9 +384,7 @@ private fun BackupAlertSheetContentPreviewGeneric() {
|
||||
private fun BackupAlertSheetContentPreviewPayment() {
|
||||
Previews.BottomSheetPreview {
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = BackupAlert.PAYMENT_PROCESSING,
|
||||
onPrimaryActionClick = {},
|
||||
onSecondaryActionClick = {}
|
||||
backupAlert = BackupAlert.PAYMENT_PROCESSING
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -344,8 +395,7 @@ private fun BackupAlertSheetContentPreviewMedia() {
|
||||
Previews.BottomSheetPreview {
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = BackupAlert.MEDIA_BACKUPS_ARE_OFF,
|
||||
onPrimaryActionClick = {},
|
||||
onSecondaryActionClick = {}
|
||||
pricePerMonth = "$2.99"
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -355,9 +405,7 @@ private fun BackupAlertSheetContentPreviewMedia() {
|
||||
private fun BackupAlertSheetContentPreviewDelete() {
|
||||
Previews.BottomSheetPreview {
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = BackupAlert.MEDIA_WILL_BE_DELETED_TODAY,
|
||||
onPrimaryActionClick = {},
|
||||
onSecondaryActionClick = {}
|
||||
backupAlert = BackupAlert.MEDIA_WILL_BE_DELETED_TODAY
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -367,9 +415,7 @@ private fun BackupAlertSheetContentPreviewDelete() {
|
||||
private fun BackupAlertSheetContentPreviewDiskFull() {
|
||||
Previews.BottomSheetPreview {
|
||||
BackupAlertSheetContent(
|
||||
backupAlert = BackupAlert.DISK_FULL,
|
||||
onPrimaryActionClick = {},
|
||||
onSecondaryActionClick = {}
|
||||
backupAlert = BackupAlert.DISK_FULL
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,11 @@ sealed interface BackupsIconColors {
|
||||
@get:Composable
|
||||
val background: Color
|
||||
|
||||
data object None : BackupsIconColors {
|
||||
override val foreground: Color @Composable get() = error("No coloring should be applied.")
|
||||
override val background: Color @Composable get() = error("No coloring should be applied.")
|
||||
}
|
||||
|
||||
data object Normal : BackupsIconColors {
|
||||
override val foreground: Color @Composable get() = MaterialTheme.colorScheme.onSurface
|
||||
override val background: Color @Composable get() = MaterialTheme.colorScheme.primaryContainer
|
||||
|
||||
@@ -6,15 +6,12 @@
|
||||
package org.thoughtcrime.securesms.backup.v2.ui
|
||||
|
||||
import android.content.DialogInterface
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
@@ -87,26 +84,24 @@ private fun CreateBackupBottomSheetContent(
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
.padding(horizontal = dimensionResource(R.dimen.core_ui__gutter))
|
||||
.padding(bottom = 24.dp)
|
||||
) {
|
||||
BottomSheets.Handle()
|
||||
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.symbol_backup_light),
|
||||
tint = BackupsIconColors.Normal.foreground,
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.image_signal_backups),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(top = 18.dp, bottom = 11.dp)
|
||||
.size(88.dp)
|
||||
.background(
|
||||
color = BackupsIconColors.Normal.background,
|
||||
shape = CircleShape
|
||||
)
|
||||
.padding(20.dp)
|
||||
.size(80.dp)
|
||||
.padding(4.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__create_backup),
|
||||
style = MaterialTheme.typography.titleLarge
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__you_are_all_set),
|
||||
style = MaterialTheme.typography.titleLarge,
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
|
||||
Text(
|
||||
@@ -116,33 +111,24 @@ private fun CreateBackupBottomSheetContent(
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier
|
||||
.padding(top = 8.dp, bottom = 64.dp)
|
||||
.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter))
|
||||
)
|
||||
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(bottom = 31.dp)
|
||||
Buttons.LargeTonal(
|
||||
onClick = onBackupNowClick,
|
||||
modifier = Modifier.widthIn(min = 220.dp)
|
||||
) {
|
||||
TextButton(
|
||||
onClick = onBackupLaterClick,
|
||||
modifier = Modifier.padding(start = dimensionResource(id = R.dimen.core_ui__gutter))
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__back_up_later)
|
||||
)
|
||||
}
|
||||
Text(
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__back_up_now)
|
||||
)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
Buttons.LargeTonal(
|
||||
onClick = onBackupNowClick,
|
||||
modifier = Modifier.padding(end = dimensionResource(id = R.dimen.core_ui__gutter))
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__back_up_now)
|
||||
)
|
||||
}
|
||||
TextButton(
|
||||
onClick = onBackupLaterClick,
|
||||
modifier = Modifier.widthIn(min = 220.dp).padding(top = 16.dp)
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.CreateBackupBottomSheet__back_up_later)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
package org.thoughtcrime.securesms.backup.v2.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -15,7 +14,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
@@ -33,7 +31,6 @@ import androidx.compose.ui.unit.dp
|
||||
import org.signal.core.ui.Buttons
|
||||
import org.signal.core.ui.Previews
|
||||
import org.signal.core.ui.Scaffolds
|
||||
import org.signal.core.ui.theme.SignalTheme
|
||||
import org.thoughtcrime.securesms.R
|
||||
|
||||
/**
|
||||
@@ -65,11 +62,11 @@ fun MessageBackupsEducationScreen(
|
||||
) {
|
||||
item {
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.ic_signal_logo_large), // TODO [message-backups] Final image asset
|
||||
painter = painterResource(id = R.drawable.image_signal_backups), // TODO [message-backups] Final image asset
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(top = 48.dp)
|
||||
.size(88.dp)
|
||||
.padding(top = 24.dp)
|
||||
.size(80.dp)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -175,7 +172,6 @@ private fun NotableFeatureRow(
|
||||
modifier = Modifier
|
||||
.padding(end = 8.dp)
|
||||
.size(32.dp)
|
||||
.background(color = SignalTheme.colors.colorSurface2, shape = CircleShape)
|
||||
.padding(6.dp)
|
||||
)
|
||||
|
||||
|
||||
@@ -5,15 +5,13 @@
|
||||
|
||||
package org.thoughtcrime.securesms.backup.v2.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -50,18 +48,12 @@ fun MessageBackupsKeyEducationScreen(
|
||||
.fillMaxSize(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.symbol_key_24),
|
||||
Image(
|
||||
painter = painterResource(R.drawable.image_signal_backups_key),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier
|
||||
.padding(top = 24.dp)
|
||||
.size(80.dp)
|
||||
.background(
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
shape = CircleShape
|
||||
)
|
||||
.padding(16.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.thoughtcrime.securesms.backup.v2.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -13,11 +14,9 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Checkbox
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.Text
|
||||
@@ -80,18 +79,12 @@ fun MessageBackupsKeyRecordScreen(
|
||||
.fillMaxSize(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.symbol_lock_24),
|
||||
Image(
|
||||
painter = painterResource(R.drawable.image_signal_backups_lock),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
modifier = Modifier
|
||||
.padding(top = 24.dp)
|
||||
.size(80.dp)
|
||||
.background(
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
shape = CircleShape
|
||||
)
|
||||
.padding(16.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
|
||||
@@ -93,7 +93,7 @@ fun MessageBackupsTypeSelectionScreen(
|
||||
) {
|
||||
item {
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.ic_signal_logo_large), // TODO [message-backups] Finalized art asset
|
||||
painter = painterResource(id = R.drawable.image_signal_backups_plans),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(88.dp)
|
||||
)
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2024 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.thoughtcrime.securesms.billing
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.dependencies.GooglePlayBillingDependencies
|
||||
|
||||
/**
|
||||
* Launches user to the Google Play backups management screen.
|
||||
*/
|
||||
fun Fragment.launchManageBackupsSubscription() {
|
||||
lifecycleScope.launch(Dispatchers.Main) {
|
||||
val uri = withContext(Dispatchers.Default) {
|
||||
Uri.parse(
|
||||
getString(
|
||||
R.string.backup_subscription_management_url,
|
||||
GooglePlayBillingDependencies.getProductId(),
|
||||
requireContext().applicationInfo.packageName
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
@@ -5,19 +5,19 @@
|
||||
|
||||
package org.thoughtcrime.securesms.components.settings.app.backups.remote
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.biometric.BiometricManager
|
||||
import androidx.biometric.BiometricPrompt
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -47,6 +47,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.pluralStringResource
|
||||
@@ -54,11 +55,8 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import org.signal.core.ui.Buttons
|
||||
import org.signal.core.ui.Dialogs
|
||||
import org.signal.core.ui.Dividers
|
||||
@@ -77,9 +75,9 @@ import org.thoughtcrime.securesms.backup.ArchiveUploadProgress
|
||||
import org.thoughtcrime.securesms.backup.v2.BackupFrequency
|
||||
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
|
||||
import org.thoughtcrime.securesms.billing.launchManageBackupsSubscription
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.MessageBackupsCheckoutLauncher.createBackupsCheckoutLauncher
|
||||
import org.thoughtcrime.securesms.compose.ComposeFragment
|
||||
import org.thoughtcrime.securesms.dependencies.GooglePlayBillingDependencies
|
||||
import org.thoughtcrime.securesms.fonts.SignalSymbols
|
||||
import org.thoughtcrime.securesms.fonts.SignalSymbols.SignalSymbol
|
||||
import org.thoughtcrime.securesms.keyvalue.protos.ArchiveUploadProgressState
|
||||
@@ -143,18 +141,7 @@ class RemoteBackupsSettingsFragment : ComposeFragment() {
|
||||
override fun onBackupTypeActionClick(tier: MessageBackupTier) {
|
||||
when (tier) {
|
||||
MessageBackupTier.FREE -> checkoutLauncher.launch(MessageBackupTier.PAID)
|
||||
MessageBackupTier.PAID -> lifecycleScope.launch(Dispatchers.Main) {
|
||||
val uri = Uri.parse(
|
||||
getString(
|
||||
R.string.backup_subscription_management_url,
|
||||
GooglePlayBillingDependencies.getProductId(),
|
||||
requireContext().applicationInfo.packageName
|
||||
)
|
||||
)
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
startActivity(intent)
|
||||
}
|
||||
MessageBackupTier.PAID -> launchManageBackupsSubscription()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,7 +444,7 @@ private fun BackupTypeRow(
|
||||
.background(color = SignalTheme.colors.colorSurface2, shape = RoundedCornerShape(12.dp))
|
||||
.padding(24.dp)
|
||||
) {
|
||||
Row {
|
||||
Row(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
val title = when (messageBackupsType) {
|
||||
is MessageBackupsType.Paid -> stringResource(R.string.MessageBackupsTypeSelectionScreen__text_plus_all_your_media)
|
||||
@@ -493,7 +480,13 @@ private fun BackupTypeRow(
|
||||
}
|
||||
}
|
||||
|
||||
// Icon
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
Image(
|
||||
painter = painterResource(R.drawable.image_signal_backups),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(64.dp)
|
||||
)
|
||||
}
|
||||
|
||||
val buttonText = when (messageBackupsType) {
|
||||
@@ -504,7 +497,8 @@ private fun BackupTypeRow(
|
||||
Buttons.LargeTonal(
|
||||
onClick = { onBackupTypeActionButtonClicked(messageBackupsType.tier) },
|
||||
colors = ButtonDefaults.filledTonalButtonColors().copy(
|
||||
containerColor = SignalTheme.colors.colorTransparent5
|
||||
containerColor = SignalTheme.colors.colorTransparent5,
|
||||
contentColor = colorResource(R.color.signal_light_colorOnSurface)
|
||||
),
|
||||
modifier = Modifier.padding(top = 12.dp)
|
||||
) {
|
||||
|
||||
@@ -8,20 +8,20 @@ package org.thoughtcrime.securesms.components.settings.app.storage
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.dimensionResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -34,12 +34,12 @@ import org.signal.core.ui.Previews
|
||||
import org.signal.core.ui.SignalPreview
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.BackupsIconColors
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsTypeBlock
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.subscription.testBackupTypes
|
||||
import org.thoughtcrime.securesms.components.settings.app.subscription.MessageBackupsCheckoutLauncher.createBackupsCheckoutLauncher
|
||||
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
|
||||
import org.thoughtcrime.securesms.payments.FiatMoneyUtil
|
||||
|
||||
/**
|
||||
* Sheet describing how users must upgrade to enable optimized storage.
|
||||
@@ -75,7 +75,7 @@ class UpgradeToEnableOptimizedStorageSheet : ComposeBottomSheetDialogFragment()
|
||||
|
||||
@Composable
|
||||
private fun UpgradeToEnableOptimizedStorageSheetContent(
|
||||
messageBackupsType: MessageBackupsType?,
|
||||
messageBackupsType: MessageBackupsType.Paid?,
|
||||
onUpgradeNowClick: () -> Unit = {},
|
||||
onCancelClick: () -> Unit = {}
|
||||
) {
|
||||
@@ -90,18 +90,12 @@ private fun UpgradeToEnableOptimizedStorageSheetContent(
|
||||
) {
|
||||
BottomSheets.Handle()
|
||||
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.symbol_backup_light),
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.image_signal_backups),
|
||||
contentDescription = null,
|
||||
tint = BackupsIconColors.Normal.foreground,
|
||||
modifier = Modifier
|
||||
.padding(top = 8.dp, bottom = 12.dp)
|
||||
.size(88.dp)
|
||||
.background(
|
||||
color = BackupsIconColors.Normal.background,
|
||||
shape = CircleShape
|
||||
)
|
||||
.padding(20.dp)
|
||||
.padding(top = 8.dp, bottom = 24.dp)
|
||||
.size(80.dp)
|
||||
)
|
||||
|
||||
Text(
|
||||
@@ -140,8 +134,13 @@ private fun UpgradeToEnableOptimizedStorageSheetContent(
|
||||
.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter))
|
||||
.padding(bottom = 8.dp)
|
||||
) {
|
||||
val resources = LocalContext.current.resources
|
||||
val formattedPrice = remember(messageBackupsType.pricePerMonth) {
|
||||
FiatMoneyUtil.format(resources, messageBackupsType.pricePerMonth, FiatMoneyUtil.formatOptions().trimZerosAfterDecimal())
|
||||
}
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.UpgradeToEnableOptimizedStorageSheet__upgrade_now)
|
||||
text = stringResource(id = R.string.UpgradeToEnableOptimizedStorageSheet__subscribe_for_s_month, formattedPrice)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -164,7 +163,7 @@ private fun UpgradeToEnableOptimizedStorageSheetContent(
|
||||
private fun UpgradeToEnableOptimizedStorageSheetContentPreview() {
|
||||
Previews.BottomSheetPreview {
|
||||
UpgradeToEnableOptimizedStorageSheetContent(
|
||||
messageBackupsType = testBackupTypes()[1]
|
||||
messageBackupsType = testBackupTypes()[1] as MessageBackupsType.Paid?
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,13 @@ import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
|
||||
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
|
||||
|
||||
class UpgradeToEnableOptimizedStorageViewModel : ViewModel() {
|
||||
private val internalMessageBackupsType = mutableStateOf<MessageBackupsType?>(null)
|
||||
val messageBackupsType: State<MessageBackupsType?> = internalMessageBackupsType
|
||||
private val internalMessageBackupsType = mutableStateOf<MessageBackupsType.Paid?>(null)
|
||||
val messageBackupsType: State<MessageBackupsType.Paid?> = internalMessageBackupsType
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
val backupsType = withContext(Dispatchers.IO) {
|
||||
BackupRepository.getBackupsType(MessageBackupTier.PAID)
|
||||
BackupRepository.getBackupsType(MessageBackupTier.PAID) as? MessageBackupsType.Paid
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
|
||||
33
app/src/main/res/drawable-night/image_signal_backups.xml
Normal file
33
app/src/main/res/drawable-night/image_signal_backups.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FF9CA4EF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M67 60.42c0.92 0.8 1.02 2.2 0.22 3.13-4.69 5.43-11.04 9.51-18.53 11.38-7.48 1.86-15 1.23-21.7-1.37-1.14-0.44-1.7-1.73-1.26-2.87 0.44-1.15 1.73-1.71 2.87-1.27 5.86 2.28 12.45 2.83 19.02 1.2 6.57-1.64 12.13-5.22 16.24-9.97 0.8-0.93 2.2-1.04 3.13-0.23Z"/>
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M40 67.55c-5.15 0-9.98-1.41-14.1-3.88V59.1c0-2.95-2.39-5.33-5.33-5.33-1.38 0-2.64 0.52-3.59 1.38-2.86-4.35-4.53-9.55-4.53-15.15 0-15.21 12.33-27.55 27.55-27.55 15.21 0 27.55 12.34 27.55 27.55 0 15.22-12.34 27.55-27.55 27.55Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:pathData="M36.53 25.76l-0.6 21.43v0.13c0 1.44 1.1 2.6 2.44 2.6h0.16l14.37-0.64c0.98-0.04 1.76-0.91 1.76-1.96 0-1.06-0.78-1.92-1.76-1.97l-12.16-0.54-0.53-19.05c-0.03-1.06-0.85-1.9-1.84-1.9-1 0-1.8 0.84-1.84 1.9Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M63.55 12.78c5.43 4.69 9.51 11.04 11.38 18.53 1.86 7.48 1.23 15-1.37 21.7-0.44 1.14-1.73 1.7-2.87 1.26-1.15-0.44-1.71-1.73-1.27-2.87 2.28-5.86 2.83-12.45 1.2-19.02-1.64-6.57-5.22-12.13-9.97-16.24-0.93-0.8-1.04-2.2-0.23-3.13 0.8-0.93 2.2-1.03 3.13-0.23Z"/>
|
||||
<path
|
||||
android:fillColor="#FF9CA4EF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M54.27 9.31c-0.44 1.15-1.73 1.71-2.87 1.27-5.86-2.28-12.45-2.83-19.02-1.2-6.57 1.64-12.13 5.22-16.24 9.97-0.8 0.93-2.2 1.04-3.13 0.23-0.93-0.8-1.03-2.2-0.23-3.13 4.69-5.43 11.04-9.51 18.53-11.38 7.48-1.86 15-1.23 21.7 1.37 1.14 0.44 1.7 1.73 1.26 2.87Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M20.45 56.96c0.98 0 1.78 0.8 1.78 1.78v8.14c0 0.98-0.8 1.78-1.78 1.78h-8.96c-0.98 0-1.78-0.8-1.78-1.78s0.8-1.77 1.78-1.77h7.18v-6.37c0-0.98 0.8-1.78 1.78-1.78Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M9.31 25.73c1.15 0.44 1.71 1.73 1.27 2.87-2.28 5.86-2.83 12.45-1.2 19.02 1.64 6.57 5.22 12.13 9.97 16.24l1.69 1.45-2.9 3.36-1.69-1.45C11.02 62.53 6.94 56.18 5.07 48.7c-1.86-7.48-1.23-15 1.37-21.7 0.44-1.14 1.73-1.7 2.87-1.26Z"/>
|
||||
</vector>
|
||||
17
app/src/main/res/drawable-night/image_signal_backups_key.xml
Normal file
17
app/src/main/res/drawable-night/image_signal_backups_key.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:pathData="M40 0A40 40 0 1 0 40 80 40 40 0 1 0 40 0z"/>
|
||||
<path
|
||||
android:fillColor="#FF505AF5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M33 49.75c0 1.66-1.34 3-3 3-1.65 0-3-1.34-3-3s1.35-3 3-3c1.66 0 3 1.34 3 3Z"/>
|
||||
<path
|
||||
android:fillColor="#FF505AF5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M51.41 20.25H57c1.52 0 2.75 1.23 2.75 2.75v8c0 1.52-1.23 2.75-2.75 2.75h-4.25V38c0 1.52-1.23 2.75-2.75 2.75h-2.77l-1.8 1.8c0.53 1.47 0.82 3.05 0.82 4.7C46.25 54.85 40.1 61 32.5 61c-6.09 0-11.25-3.96-13.06-9.45-0.45-1.35-0.69-2.8-0.69-4.3 0-1.69 0.3-3.31 0.87-4.81 1.95-5.22 6.98-8.94 12.88-8.94 1.38 0 2.7 0.2 3.96 0.58l13-13.02c0.52-0.52 1.22-0.81 1.95-0.81Zm-14.06 17.9l-1.07-0.43C35.11 37.25 33.84 37 32.5 37c-4.4 0-8.15 2.77-9.6 6.66-0.42 1.12-0.65 2.32-0.65 3.59 0 1.12 0.18 2.2 0.52 3.2 1.34 4.1 5.2 7.05 9.73 7.05 5.66 0 10.25-4.59 10.25-10.25 0-1.56-0.34-3.04-0.97-4.36l-0.52-1.1 3.7-3.73c0.52-0.52 1.22-0.81 1.96-0.81h2.33V33c0-1.52 1.23-2.75 2.75-2.75h4.25v-6.5h-4.52l-14.38 14.4Z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,17 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:pathData="M40 0A40 40 0 1 0 40 80 40 40 0 1 0 40 0z"/>
|
||||
<path
|
||||
android:fillColor="#FF505AF5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M38.25 48.99c-0.9-0.58-1.5-1.59-1.5-2.74 0-1.8 1.46-3.25 3.25-3.25 1.8 0 3.25 1.46 3.25 3.25 0 1.15-0.6 2.16-1.5 2.74v3.51c0 0.97-0.78 1.75-1.75 1.75s-1.75-0.78-1.75-1.75v-3.51Z"/>
|
||||
<path
|
||||
android:fillColor="#FF505AF5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M27.75 29.5c0-6.77 5.48-12.25 12.25-12.25s12.25 5.48 12.25 12.25v5.47l0.27 0.12c1.46 0.75 2.64 1.93 3.39 3.4 0.47 0.92 0.66 1.92 0.75 3.03 0.09 1.07 0.09 2.39 0.09 4v5.95c0 1.62 0 2.94-0.09 4.01-0.09 1.11-0.28 2.1-0.75 3.04-0.75 1.46-1.93 2.64-3.4 3.39-0.92 0.47-1.92 0.66-3.03 0.75-1.07 0.09-2.39 0.09-4 0.09H34.52c-1.62 0-2.94 0-4.01-0.09-1.11-0.09-2.1-0.28-3.04-0.75-1.46-0.75-2.64-1.93-3.39-3.4-0.47-0.92-0.66-1.92-0.75-3.03-0.09-1.07-0.09-2.39-0.09-4v-5.95c0-1.62 0-2.94 0.09-4.01 0.09-1.11 0.28-2.1 0.75-3.04 0.75-1.46 1.93-2.64 3.4-3.39l0.26-0.12V29.5Zm21 0v4.8c-0.93-0.05-2.01-0.05-3.28-0.05H34.53c-1.27 0-2.35 0-3.28 0.04V29.5c0-4.83 3.92-8.75 8.75-8.75s8.75 3.92 8.75 8.75Zm-19.68 8.71c0.35-0.18 0.84-0.31 1.73-0.38 0.91-0.08 2.1-0.08 3.8-0.08h10.8c1.7 0 2.89 0 3.8 0.08 0.9 0.07 1.38 0.2 1.73 0.38 0.8 0.41 1.45 1.06 1.86 1.86 0.18 0.35 0.31 0.84 0.38 1.73 0.08 0.91 0.08 2.1 0.08 3.8v5.8c0 1.7 0 2.89-0.08 3.8-0.07 0.9-0.2 1.38-0.38 1.73-0.41 0.8-1.06 1.45-1.86 1.86-0.35 0.18-0.84 0.31-1.73 0.38-0.91 0.08-2.1 0.08-3.8 0.08H34.6c-1.7 0-2.89 0-3.8-0.08-0.9-0.07-1.38-0.2-1.73-0.38-0.8-0.41-1.45-1.06-1.86-1.86-0.18-0.35-0.31-0.84-0.38-1.73-0.08-0.91-0.08-2.1-0.08-3.8v-5.8c0-1.7 0-2.89 0.08-3.8 0.07-0.9 0.2-1.38 0.38-1.73 0.41-0.8 1.06-1.45 1.86-1.86Z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,73 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:pathData="M20 22.67c0-5.14 0-7.7 1-9.66 0.88-1.73 2.28-3.13 4-4.01 1.97-1 4.53-1 9.67-1h10.66c5.14 0 7.7 0 9.66 1 1.73 0.88 3.13 2.28 4.01 4 1 1.97 1 4.53 1 9.67v34.66c0 5.14 0 7.7-1 9.66-0.88 1.73-2.28 3.13-4 4.01-1.97 1-4.53 1-9.67 1H34.67c-5.14 0-7.7 0-9.66-1-1.73-0.88-3.13-2.28-4.01-4-1-1.97-1-4.53-1-9.67V22.67Z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:type="linear"
|
||||
android:startX="40"
|
||||
android:startY="8"
|
||||
android:endX="40"
|
||||
android:endY="72">
|
||||
<item
|
||||
android:color="#FFD2D8FE"
|
||||
android:offset="0"/>
|
||||
<item
|
||||
android:color="#FFC1C7FE"
|
||||
android:offset="1"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M34.6 6.5h10.8c2.51 0 4.49 0 6.08 0.13 1.62 0.13 2.97 0.4 4.2 1.03 2 1.03 3.63 2.66 4.66 4.66 0.62 1.23 0.9 2.58 1.03 4.2 0.13 1.6 0.13 3.57 0.13 6.08v34.8c0 2.51 0 4.49-0.13 6.08-0.13 1.62-0.4 2.97-1.03 4.2-1.03 2-2.66 3.63-4.66 4.66-1.23 0.62-2.58 0.9-4.2 1.03-1.6 0.13-3.57 0.13-6.08 0.13H34.6c-2.51 0-4.49 0-6.08-0.13-1.62-0.13-2.97-0.4-4.2-1.03-2-1.03-3.63-2.66-4.66-4.66-0.62-1.23-0.9-2.58-1.03-4.2-0.13-1.6-0.13-3.57-0.13-6.08V22.6c0-2.51 0-4.49 0.13-6.08 0.13-1.62 0.4-2.97 1.03-4.2 1.03-2 2.66-3.63 4.66-4.66 1.23-0.62 2.58-0.9 4.2-1.03C30.12 6.5 32.1 6.5 34.6 6.5Zm-5.83 3.12c-1.44 0.12-2.35 0.34-3.08 0.72-1.45 0.73-2.62 1.9-3.35 3.35-0.38 0.73-0.6 1.64-0.72 3.08-0.12 1.45-0.12 3.3-0.12 5.9v34.66c0 2.6 0 4.45 0.12 5.9 0.12 1.44 0.34 2.35 0.72 3.08 0.73 1.45 1.9 2.62 3.35 3.35 0.73 0.38 1.64 0.6 3.08 0.72 1.45 0.12 3.3 0.12 5.9 0.12h10.66c2.6 0 4.45 0 5.9-0.12 1.44-0.12 2.35-0.34 3.08-0.72 1.45-0.73 2.62-1.9 3.35-3.35 0.38-0.73 0.6-1.64 0.72-3.08 0.12-1.45 0.12-3.3 0.12-5.9V22.67c0-2.6 0-4.45-0.12-5.9-0.12-1.44-0.34-2.35-0.72-3.08-0.73-1.45-1.9-2.62-3.35-3.35-0.73-0.38-1.64-0.6-3.08-0.72-1.45-0.12-3.3-0.12-5.9-0.12H34.67c-2.6 0-4.45 0-5.9 0.12Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE3E8FE"
|
||||
android:pathData="M19.37 40.66l-4.11 0.91-4.57 1.37-1.83 3.2-2.29 3.66-0.46 5.49 1.83 4.11-1.37 5.94 6.4-0.91L18 65.34l5.94-0.45c1.37-1.22 4.12-3.75 4.12-4.12 0-0.36 2.13-2.9 3.2-4.11l-0.46-5.49-0.91-4.57-5.95-4.57-4.57-1.37Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M4.17 53c0-7.64 6.19-13.83 13.83-13.83S31.83 45.36 31.83 53 25.64 66.83 18 66.83c-2.4 0-4.65-0.6-6.61-1.68l-5 1.8c-1.45 0.53-2.87-0.89-2.34-2.34l1.8-5C4.78 57.65 4.17 55.4 4.17 53ZM18 41.5c-6.35 0-11.5 5.15-11.5 11.5 0 2.06 0.54 3.98 1.48 5.65 0.26 0.46 0.33 1.02 0.14 1.54L6.6 64.4l4.2-1.5c0.53-0.2 1.1-0.13 1.55 0.13 1.67 0.94 3.6 1.48 5.65 1.48 6.35 0 11.5-5.15 11.5-11.5S24.35 41.5 18 41.5Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M19.37 40.66l-4.11 0.91-4.57 1.37-1.83 3.2-2.29 3.66-0.46 5.49 1.83 4.11-1.37 5.94 6.4-0.91L18 65.34l5.94-0.45c1.37-1.22 4.12-3.75 4.12-4.12 0-0.36 2.13-2.9 3.2-4.11l-0.46-5.49-0.91-4.57-5.95-4.57-4.57-1.37Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M4.17 53c0-7.64 6.19-13.83 13.83-13.83S31.83 45.36 31.83 53 25.64 66.83 18 66.83c-2.4 0-4.65-0.6-6.61-1.68l-5 1.8c-1.45 0.53-2.87-0.89-2.34-2.34l1.8-5C4.78 57.65 4.17 55.4 4.17 53ZM18 41.5c-6.35 0-11.5 5.15-11.5 11.5 0 2.06 0.54 3.98 1.48 5.65 0.26 0.46 0.33 1.02 0.14 1.54L6.6 64.4l4.2-1.5c0.53-0.2 1.1-0.13 1.55 0.13 1.67 0.94 3.6 1.48 5.65 1.48 6.35 0 11.5-5.15 11.5-11.5S24.35 41.5 18 41.5Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE3E8FE"
|
||||
android:pathData="M48.82 17.77c-0.14 4.61-0.43 14.08-0.43 15.12l1.3 2.16 6.04-5.18 4.32 2.59 8.2-6.48 7.35 5.61 0.43-12.09-3.45-3.45L52.7 15.6l-3.89 2.16Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE3E8FE"
|
||||
android:pathData="M55.41 30.2l-6.58 6.14v0.44l2.2 3.07 7.46 0.44 13.6-0.44 3.52-3.07 0.88-4.39-8.34-6.15-7.47 6.15-5.27-2.2Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:pathData="M53.38 23.13c0-1.45 1.17-2.63 2.62-2.63 1.45 0 2.63 1.18 2.63 2.63 0 1.44-1.18 2.62-2.63 2.62s-2.63-1.18-2.63-2.63Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M77.56 24.34v7.32c0 1.42 0 2.57-0.07 3.5-0.08 0.95-0.25 1.8-0.64 2.57-0.63 1.23-1.64 2.24-2.87 2.87-0.78 0.4-1.62 0.56-2.57 0.64-0.93 0.07-2.08 0.07-3.5 0.07H56.09c-1.42 0-2.57 0-3.5-0.07-0.95-0.08-1.8-0.25-2.57-0.64-1.23-0.63-2.24-1.64-2.87-2.87-0.4-0.78-0.56-1.62-0.64-2.57-0.07-0.93-0.07-2.08-0.07-3.5v-7.32c0-1.42 0-2.57 0.07-3.5 0.08-0.95 0.25-1.8 0.64-2.57 0.63-1.23 1.64-2.24 2.87-2.87 0.78-0.4 1.62-0.56 2.57-0.64 0.93-0.07 2.08-0.07 3.5-0.07h11.82c1.42 0 2.57 0 3.5 0.07 0.95 0.08 1.8 0.25 2.57 0.64 1.23 0.63 2.24 1.64 2.87 2.87 0.4 0.78 0.56 1.62 0.64 2.57 0.07 0.93 0.07 2.08 0.07 3.5Zm-2.69-3.28c-0.06-0.8-0.19-1.25-0.36-1.6-0.38-0.74-0.98-1.34-1.72-1.72-0.35-0.17-0.8-0.3-1.6-0.36-0.8-0.07-1.85-0.07-3.34-0.07h-11.7c-1.5 0-2.53 0-3.34 0.07-0.8 0.06-1.25 0.19-1.6 0.36-0.74 0.38-1.34 0.98-1.72 1.72-0.17 0.35-0.3 0.8-0.36 1.6-0.07 0.8-0.07 1.85-0.07 3.34v7.2c0 0.88 0 1.6 0.02 2.22l3.87-3.88c1.68-1.68 4.42-1.68 6.1 0l1.08 1.08 4.82-4.83c1.68-1.68 4.42-1.68 6.1 0l3.89 3.9V24.4c0-1.5 0-2.53-0.07-3.34Zm-23.66 17.2c-0.61-0.31-1.13-0.78-1.5-1.36l5.1-5.1c0.66-0.66 1.72-0.66 2.38 0l2 2c0.52 0.52 1.35 0.52 1.86 0l5.76-5.75c0.66-0.66 1.72-0.66 2.38 0l5.73 5.73c0 0.44-0.02 0.82-0.05 1.16-0.06 0.8-0.19 1.25-0.36 1.6-0.38 0.74-0.98 1.34-1.72 1.72-0.35 0.17-0.8 0.3-1.6 0.36-0.8 0.07-1.85 0.07-3.34 0.07h-11.7c-1.5 0-2.53 0-3.34-0.07-0.8-0.06-1.25-0.19-1.6-0.36Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M48.82 17.77c-0.14 4.61-0.43 14.08-0.43 15.12l1.3 2.16 6.04-5.18 4.32 2.59 8.2-6.48 7.35 5.61 0.43-12.09-3.45-3.45L52.7 15.6l-3.89 2.16Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M55.41 30.2l-6.58 6.14v0.44l2.2 3.07 7.46 0.44 13.6-0.44 3.52-3.07 0.88-4.39-8.34-6.15-7.47 6.15-5.27-2.2Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M53.38 23.13c0-1.45 1.17-2.63 2.62-2.63 1.45 0 2.63 1.18 2.63 2.63 0 1.44-1.18 2.62-2.63 2.62s-2.63-1.18-2.63-2.63Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF666EE5"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M77.56 24.34v7.32c0 1.42 0 2.57-0.07 3.5-0.08 0.95-0.25 1.8-0.64 2.57-0.63 1.23-1.64 2.24-2.87 2.87-0.78 0.4-1.62 0.56-2.57 0.64-0.93 0.07-2.08 0.07-3.5 0.07H56.09c-1.42 0-2.57 0-3.5-0.07-0.95-0.08-1.8-0.25-2.57-0.64-1.23-0.63-2.24-1.64-2.87-2.87-0.4-0.78-0.56-1.62-0.64-2.57-0.07-0.93-0.07-2.08-0.07-3.5v-7.32c0-1.42 0-2.57 0.07-3.5 0.08-0.95 0.25-1.8 0.64-2.57 0.63-1.23 1.64-2.24 2.87-2.87 0.78-0.4 1.62-0.56 2.57-0.64 0.93-0.07 2.08-0.07 3.5-0.07h11.82c1.42 0 2.57 0 3.5 0.07 0.95 0.08 1.8 0.25 2.57 0.64 1.23 0.63 2.24 1.64 2.87 2.87 0.4 0.78 0.56 1.62 0.64 2.57 0.07 0.93 0.07 2.08 0.07 3.5Zm-2.69-3.28c-0.06-0.8-0.19-1.25-0.36-1.6-0.38-0.74-0.98-1.34-1.72-1.72-0.35-0.17-0.8-0.3-1.6-0.36-0.8-0.07-1.85-0.07-3.34-0.07h-11.7c-1.5 0-2.53 0-3.34 0.07-0.8 0.06-1.25 0.19-1.6 0.36-0.74 0.38-1.34 0.98-1.72 1.72-0.17 0.35-0.3 0.8-0.36 1.6-0.07 0.8-0.07 1.85-0.07 3.34v7.2c0 0.88 0 1.6 0.02 2.22l3.87-3.88c1.68-1.68 4.42-1.68 6.1 0l1.08 1.08 4.82-4.83c1.68-1.68 4.42-1.68 6.1 0l3.89 3.9V24.4c0-1.5 0-2.53-0.07-3.34Zm-23.66 17.2c-0.61-0.31-1.13-0.78-1.5-1.36l5.1-5.1c0.66-0.66 1.72-0.66 2.38 0l2 2c0.52 0.52 1.35 0.52 1.86 0l5.76-5.75c0.66-0.66 1.72-0.66 2.38 0l5.73 5.73c0 0.44-0.02 0.82-0.05 1.16-0.06 0.8-0.19 1.25-0.36 1.6-0.38 0.74-0.98 1.34-1.72 1.72-0.35 0.17-0.8 0.3-1.6 0.36-0.8 0.07-1.85 0.07-3.34 0.07h-11.7c-1.5 0-2.53 0-3.34-0.07-0.8-0.06-1.25-0.19-1.6-0.36Z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,36 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="64"
|
||||
android:viewportHeight="64">
|
||||
<group>
|
||||
<path
|
||||
android:fillColor="#FF9CA4EF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M55.55 50.29c0.8 0.7 0.9 1.92 0.2 2.72l-0.01 0.03c-4.07 4.78-9.6 8.37-16.1 10.01-6.5 1.65-13.03 1.1-18.84-1.2-1-0.39-1.5-1.5-1.1-2.5V59.3c0.39-0.99 1.5-1.48 2.5-1.1 5.08 2.01 10.81 2.5 16.51 1.06 5.7-1.44 10.54-4.6 14.1-8.78 0.7-0.81 1.94-0.9 2.74-0.2Z"/>
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M32 56c-4.49 0-8.69-1.23-12.28-3.38v-3.98c0-2.57-2.08-4.65-4.65-4.65-1.2 0-2.3 0.46-3.12 1.2C9.45 41.42 8 36.88 8 32 8 18.75 18.75 8 32 8s24 10.75 24 24-10.75 24-24 24Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M38.65 22.56c0.52-0.82 1.6-1.05 2.42-0.53 0.81 0.52 1.05 1.6 0.53 2.41L31.2 40.7c-0.3 0.48-0.83 0.78-1.4 0.8-0.56 0.03-1.1-0.21-1.45-0.66l-5.85-7.48c-0.6-0.76-0.46-1.86 0.3-2.45 0.76-0.6 1.86-0.46 2.45 0.3l4.33 5.53 9.07-14.17Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M53.04 8.26c4.78 4.07 8.37 9.6 10.01 16.1 1.65 6.5 1.1 13.03-1.2 18.84-0.39 1-1.5 1.5-2.5 1.1H59.3c-0.99-0.39-1.48-1.5-1.1-2.5 2.01-5.08 2.5-10.81 1.06-16.51-1.44-5.7-4.6-10.54-8.78-14.1-0.81-0.7-0.9-1.94-0.2-2.74 0.7-0.8 1.93-0.9 2.73-0.2l0.03 0.01Z"/>
|
||||
<path
|
||||
android:fillColor="#FF9CA4EF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M44.3 4.7c-0.39 0.99-1.5 1.48-2.5 1.1C36.72 3.78 31 3.3 25.3 4.73c-5.7 1.44-10.54 4.6-14.1 8.78-0.7 0.81-1.94 0.9-2.74 0.2-0.8-0.7-0.9-1.93-0.2-2.73l0.01-0.03c4.07-4.78 9.6-8.37 16.1-10.01 6.5-1.65 13.03-1.1 18.84 1.2 1 0.39 1.5 1.5 1.1 2.5V4.7Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M14.44 46.67c0.86 0 1.56 0.7 1.56 1.57v7.18C16 56.3 15.3 57 14.44 57H6.57c-0.86 0-1.56-0.7-1.56-1.57 0-0.86 0.7-1.57 1.56-1.57h6.3v-5.61c0-0.87 0.7-1.57 1.57-1.57Z"/>
|
||||
<path
|
||||
android:fillColor="#FF666EE5"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M4.66 19.13c1 0.4 1.5 1.53 1.12 2.54-2 5.16-2.49 10.98-1.05 16.77 1.43 5.79 4.57 10.7 8.75 14.31l1.48 1.28L12.4 57l-1.48-1.28c-4.77-4.13-8.35-9.74-9.99-16.34-1.63-6.6-1.08-13.23 1.2-19.13 0.39-1 1.52-1.5 2.52-1.12Z"/>
|
||||
</group>
|
||||
</vector>
|
||||
33
app/src/main/res/drawable/image_signal_backups.xml
Normal file
33
app/src/main/res/drawable/image_signal_backups.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FFA0A7FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M67 60.42c0.92 0.8 1.02 2.2 0.22 3.13-4.69 5.43-11.04 9.51-18.53 11.38-7.48 1.86-15 1.23-21.7-1.37-1.14-0.44-1.7-1.73-1.26-2.87 0.44-1.15 1.73-1.71 2.87-1.27 5.86 2.28 12.45 2.83 19.02 1.2 6.57-1.64 12.13-5.22 16.24-9.97 0.8-0.93 2.2-1.04 3.13-0.23Z"/>
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M40 67.55c-5.15 0-9.98-1.41-14.1-3.88V59.1c0-2.95-2.39-5.33-5.33-5.33-1.38 0-2.64 0.52-3.59 1.38-2.86-4.35-4.53-9.55-4.53-15.15 0-15.21 12.33-27.55 27.55-27.55 15.21 0 27.55 12.34 27.55 27.55 0 15.22-12.34 27.55-27.55 27.55Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3C46FE"
|
||||
android:pathData="M36.53 25.76l-0.6 21.43v0.13c0 1.44 1.1 2.6 2.44 2.6h0.16l14.37-0.64c0.98-0.04 1.76-0.91 1.76-1.96 0-1.06-0.78-1.92-1.76-1.97l-12.16-0.54-0.53-19.05c-0.03-1.06-0.85-1.9-1.84-1.9-1 0-1.8 0.84-1.84 1.9Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M63.55 12.78c5.43 4.69 9.51 11.04 11.38 18.53 1.86 7.48 1.23 15-1.37 21.7-0.44 1.14-1.73 1.7-2.87 1.26-1.15-0.44-1.71-1.73-1.27-2.87 2.28-5.86 2.83-12.45 1.2-19.02-1.64-6.57-5.22-12.13-9.97-16.24-0.93-0.8-1.04-2.2-0.23-3.13 0.8-0.93 2.2-1.03 3.13-0.23Z"/>
|
||||
<path
|
||||
android:fillColor="#FFA0A7FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M54.27 9.31c-0.44 1.15-1.73 1.71-2.87 1.27-5.86-2.28-12.45-2.83-19.02-1.2-6.57 1.64-12.13 5.22-16.24 9.97-0.8 0.93-2.2 1.04-3.13 0.23-0.93-0.8-1.03-2.2-0.23-3.13 4.69-5.43 11.04-9.51 18.53-11.38 7.48-1.86 15-1.23 21.7 1.37 1.14 0.44 1.7 1.73 1.26 2.87Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M20.45 56.96c0.98 0 1.78 0.8 1.78 1.78v8.14c0 0.98-0.8 1.78-1.78 1.78h-8.96c-0.98 0-1.78-0.8-1.78-1.78s0.8-1.77 1.78-1.77h7.18v-6.37c0-0.98 0.8-1.78 1.78-1.78Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M9.31 25.73c1.15 0.44 1.71 1.73 1.27 2.87-2.28 5.86-2.83 12.45-1.2 19.02 1.64 6.57 5.22 12.13 9.97 16.24l1.69 1.45-2.9 3.36-1.69-1.45C11.02 62.53 6.94 56.18 5.07 48.7c-1.86-7.48-1.23-15 1.37-21.7 0.44-1.14 1.73-1.7 2.87-1.26Z"/>
|
||||
</vector>
|
||||
17
app/src/main/res/drawable/image_signal_backups_key.xml
Normal file
17
app/src/main/res/drawable/image_signal_backups_key.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FFE0E5FF"
|
||||
android:pathData="M40 0A40 40 0 1 0 40 80 40 40 0 1 0 40 0z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M33 49.75c0 1.66-1.34 3-3 3-1.65 0-3-1.34-3-3s1.35-3 3-3c1.66 0 3 1.34 3 3Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M51.41 20.25H57c1.52 0 2.75 1.23 2.75 2.75v8c0 1.52-1.23 2.75-2.75 2.75h-4.25V38c0 1.52-1.23 2.75-2.75 2.75h-2.77l-1.8 1.8c0.53 1.47 0.82 3.05 0.82 4.7C46.25 54.85 40.1 61 32.5 61c-6.09 0-11.25-3.96-13.06-9.45-0.45-1.35-0.69-2.8-0.69-4.3 0-1.69 0.3-3.31 0.87-4.81 1.95-5.22 6.98-8.94 12.88-8.94 1.38 0 2.7 0.2 3.96 0.58l13-13.02c0.52-0.52 1.22-0.81 1.95-0.81Zm-14.06 17.9l-1.07-0.43C35.11 37.25 33.84 37 32.5 37c-4.4 0-8.15 2.77-9.6 6.66-0.42 1.12-0.65 2.32-0.65 3.59 0 1.12 0.18 2.2 0.52 3.2 1.34 4.1 5.2 7.05 9.73 7.05 5.66 0 10.25-4.59 10.25-10.25 0-1.56-0.34-3.04-0.97-4.36l-0.52-1.1 3.7-3.73c0.52-0.52 1.22-0.81 1.96-0.81h2.33V33c0-1.52 1.23-2.75 2.75-2.75h4.25v-6.5h-4.52l-14.38 14.4Z"/>
|
||||
</vector>
|
||||
17
app/src/main/res/drawable/image_signal_backups_lock.xml
Normal file
17
app/src/main/res/drawable/image_signal_backups_lock.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:fillColor="#FFE0E5FF"
|
||||
android:pathData="M40 0A40 40 0 1 0 40 80 40 40 0 1 0 40 0z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M38.25 48.99c-0.9-0.58-1.5-1.59-1.5-2.74 0-1.8 1.46-3.25 3.25-3.25 1.8 0 3.25 1.46 3.25 3.25 0 1.15-0.6 2.16-1.5 2.74v3.51c0 0.97-0.78 1.75-1.75 1.75s-1.75-0.78-1.75-1.75v-3.51Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M27.75 29.5c0-6.77 5.48-12.25 12.25-12.25s12.25 5.48 12.25 12.25v5.47l0.27 0.12c1.46 0.75 2.64 1.93 3.39 3.4 0.47 0.92 0.66 1.92 0.75 3.03 0.09 1.07 0.09 2.39 0.09 4v5.95c0 1.62 0 2.94-0.09 4.01-0.09 1.11-0.28 2.1-0.75 3.04-0.75 1.46-1.93 2.64-3.4 3.39-0.92 0.47-1.92 0.66-3.03 0.75-1.07 0.09-2.39 0.09-4 0.09H34.52c-1.62 0-2.94 0-4.01-0.09-1.11-0.09-2.1-0.28-3.04-0.75-1.46-0.75-2.64-1.93-3.39-3.4-0.47-0.92-0.66-1.92-0.75-3.03-0.09-1.07-0.09-2.39-0.09-4v-5.95c0-1.62 0-2.94 0.09-4.01 0.09-1.11 0.28-2.1 0.75-3.04 0.75-1.46 1.93-2.64 3.4-3.39l0.26-0.12V29.5Zm21 0v4.8c-0.93-0.05-2.01-0.05-3.28-0.05H34.53c-1.27 0-2.35 0-3.28 0.04V29.5c0-4.83 3.92-8.75 8.75-8.75s8.75 3.92 8.75 8.75Zm-19.68 8.71c0.35-0.18 0.84-0.31 1.73-0.38 0.91-0.08 2.1-0.08 3.8-0.08h10.8c1.7 0 2.89 0 3.8 0.08 0.9 0.07 1.38 0.2 1.73 0.38 0.8 0.41 1.45 1.06 1.86 1.86 0.18 0.35 0.31 0.84 0.38 1.73 0.08 0.91 0.08 2.1 0.08 3.8v5.8c0 1.7 0 2.89-0.08 3.8-0.07 0.9-0.2 1.38-0.38 1.73-0.41 0.8-1.06 1.45-1.86 1.86-0.35 0.18-0.84 0.31-1.73 0.38-0.91 0.08-2.1 0.08-3.8 0.08H34.6c-1.7 0-2.89 0-3.8-0.08-0.9-0.07-1.38-0.2-1.73-0.38-0.8-0.41-1.45-1.06-1.86-1.86-0.18-0.35-0.31-0.84-0.38-1.73-0.08-0.91-0.08-2.1-0.08-3.8v-5.8c0-1.7 0-2.89 0.08-3.8 0.07-0.9 0.2-1.38 0.38-1.73 0.41-0.8 1.06-1.45 1.86-1.86Z"/>
|
||||
</vector>
|
||||
73
app/src/main/res/drawable/image_signal_backups_plans.xml
Normal file
73
app/src/main/res/drawable/image_signal_backups_plans.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="80"
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:pathData="M20 22.67c0-5.14 0-7.7 1-9.66 0.88-1.73 2.28-3.13 4-4.01 1.97-1 4.53-1 9.67-1h10.66c5.14 0 7.7 0 9.66 1 1.73 0.88 3.13 2.28 4.01 4 1 1.97 1 4.53 1 9.67v34.66c0 5.14 0 7.7-1 9.66-0.88 1.73-2.28 3.13-4 4.01-1.97 1-4.53 1-9.67 1H34.67c-5.14 0-7.7 0-9.66-1-1.73-0.88-3.13-2.28-4.01-4-1-1.97-1-4.53-1-9.67V22.67Z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:type="linear"
|
||||
android:startX="42"
|
||||
android:startY="6"
|
||||
android:endX="44.87"
|
||||
android:endY="71.88">
|
||||
<item
|
||||
android:color="#FFD2D8FE"
|
||||
android:offset="0"/>
|
||||
<item
|
||||
android:color="#FFB0BCFC"
|
||||
android:offset="1"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M34.6 6.5h10.8c2.51 0 4.49 0 6.08 0.13 1.62 0.13 2.97 0.4 4.2 1.03 2 1.03 3.63 2.66 4.66 4.66 0.62 1.23 0.9 2.58 1.03 4.2 0.13 1.6 0.13 3.57 0.13 6.08v34.8c0 2.51 0 4.49-0.13 6.08-0.13 1.62-0.4 2.97-1.03 4.2-1.03 2-2.66 3.63-4.66 4.66-1.23 0.62-2.58 0.9-4.2 1.03-1.6 0.13-3.57 0.13-6.08 0.13H34.6c-2.51 0-4.49 0-6.08-0.13-1.62-0.13-2.97-0.4-4.2-1.03-2-1.03-3.63-2.66-4.66-4.66-0.62-1.23-0.9-2.58-1.03-4.2-0.13-1.6-0.13-3.57-0.13-6.08V22.6c0-2.51 0-4.49 0.13-6.08 0.13-1.62 0.4-2.97 1.03-4.2 1.03-2 2.66-3.63 4.66-4.66 1.23-0.62 2.58-0.9 4.2-1.03C30.12 6.5 32.1 6.5 34.6 6.5Zm-5.83 3.12c-1.44 0.12-2.35 0.34-3.08 0.72-1.45 0.73-2.62 1.9-3.35 3.35-0.38 0.73-0.6 1.64-0.72 3.08-0.12 1.45-0.12 3.3-0.12 5.9v34.66c0 2.6 0 4.45 0.12 5.9 0.12 1.44 0.34 2.35 0.72 3.08 0.73 1.45 1.9 2.62 3.35 3.35 0.73 0.38 1.64 0.6 3.08 0.72 1.45 0.12 3.3 0.12 5.9 0.12h10.66c2.6 0 4.45 0 5.9-0.12 1.44-0.12 2.35-0.34 3.08-0.72 1.45-0.73 2.62-1.9 3.35-3.35 0.38-0.73 0.6-1.64 0.72-3.08 0.12-1.45 0.12-3.3 0.12-5.9V22.67c0-2.6 0-4.45-0.12-5.9-0.12-1.44-0.34-2.35-0.72-3.08-0.73-1.45-1.9-2.62-3.35-3.35-0.73-0.38-1.64-0.6-3.08-0.72-1.45-0.12-3.3-0.12-5.9-0.12H34.67c-2.6 0-4.45 0-5.9 0.12Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE0E5FF"
|
||||
android:pathData="M19.37 40.66l-4.11 0.91-4.57 1.37-1.83 3.2-2.29 3.66-0.46 5.49 1.83 4.11-1.37 5.94 6.4-0.91L18 65.34l5.94-0.45c1.37-1.22 4.12-3.75 4.12-4.12 0-0.36 2.13-2.9 3.2-4.11l-0.46-5.49-0.91-4.57-5.95-4.57-4.57-1.37Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M4.17 53c0-7.64 6.19-13.83 13.83-13.83S31.83 45.36 31.83 53 25.64 66.83 18 66.83c-2.4 0-4.65-0.6-6.61-1.68l-5 1.8c-1.45 0.53-2.87-0.89-2.34-2.34l1.8-5C4.78 57.65 4.17 55.4 4.17 53ZM18 41.5c-6.35 0-11.5 5.15-11.5 11.5 0 2.06 0.54 3.98 1.48 5.65 0.26 0.46 0.33 1.02 0.14 1.54L6.6 64.4l4.2-1.5c0.53-0.2 1.1-0.13 1.55 0.13 1.67 0.94 3.6 1.48 5.65 1.48 6.35 0 11.5-5.15 11.5-11.5S24.35 41.5 18 41.5Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M19.37 40.66l-4.11 0.91-4.57 1.37-1.83 3.2-2.29 3.66-0.46 5.49 1.83 4.11-1.37 5.94 6.4-0.91L18 65.34l5.94-0.45c1.37-1.22 4.12-3.75 4.12-4.12 0-0.36 2.13-2.9 3.2-4.11l-0.46-5.49-0.91-4.57-5.95-4.57-4.57-1.37Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M4.17 53c0-7.64 6.19-13.83 13.83-13.83S31.83 45.36 31.83 53 25.64 66.83 18 66.83c-2.4 0-4.65-0.6-6.61-1.68l-5 1.8c-1.45 0.53-2.87-0.89-2.34-2.34l1.8-5C4.78 57.65 4.17 55.4 4.17 53ZM18 41.5c-6.35 0-11.5 5.15-11.5 11.5 0 2.06 0.54 3.98 1.48 5.65 0.26 0.46 0.33 1.02 0.14 1.54L6.6 64.4l4.2-1.5c0.53-0.2 1.1-0.13 1.55 0.13 1.67 0.94 3.6 1.48 5.65 1.48 6.35 0 11.5-5.15 11.5-11.5S24.35 41.5 18 41.5Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE0E5FF"
|
||||
android:pathData="M48.82 17.77c-0.14 4.61-0.43 14.08-0.43 15.12l1.3 2.16 6.04-5.18 4.32 2.59 8.2-6.48 7.35 5.61 0.43-12.09-3.45-3.45L52.7 15.6l-3.89 2.16Z"/>
|
||||
<path
|
||||
android:fillColor="#FFE0E5FF"
|
||||
android:pathData="M55.41 30.2l-6.58 6.14v0.44l2.2 3.07 7.46 0.44 13.6-0.44 3.52-3.07 0.88-4.39-8.34-6.15-7.47 6.15-5.27-2.2Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:pathData="M53.38 23.13c0-1.45 1.17-2.63 2.62-2.63 1.45 0 2.63 1.18 2.63 2.63 0 1.44-1.18 2.62-2.63 2.62s-2.63-1.18-2.63-2.63Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M77.56 24.34v7.32c0 1.42 0 2.57-0.07 3.5-0.08 0.95-0.25 1.8-0.64 2.57-0.63 1.23-1.64 2.24-2.87 2.87-0.78 0.4-1.62 0.56-2.57 0.64-0.93 0.07-2.08 0.07-3.5 0.07H56.09c-1.42 0-2.57 0-3.5-0.07-0.95-0.08-1.8-0.25-2.57-0.64-1.23-0.63-2.24-1.64-2.87-2.87-0.4-0.78-0.56-1.62-0.64-2.57-0.07-0.93-0.07-2.08-0.07-3.5v-7.32c0-1.42 0-2.57 0.07-3.5 0.08-0.95 0.25-1.8 0.64-2.57 0.63-1.23 1.64-2.24 2.87-2.87 0.78-0.4 1.62-0.56 2.57-0.64 0.93-0.07 2.08-0.07 3.5-0.07h11.82c1.42 0 2.57 0 3.5 0.07 0.95 0.08 1.8 0.25 2.57 0.64 1.23 0.63 2.24 1.64 2.87 2.87 0.4 0.78 0.56 1.62 0.64 2.57 0.07 0.93 0.07 2.08 0.07 3.5Zm-2.69-3.28c-0.06-0.8-0.19-1.25-0.36-1.6-0.38-0.74-0.98-1.34-1.72-1.72-0.35-0.17-0.8-0.3-1.6-0.36-0.8-0.07-1.85-0.07-3.34-0.07h-11.7c-1.5 0-2.53 0-3.34 0.07-0.8 0.06-1.25 0.19-1.6 0.36-0.74 0.38-1.34 0.98-1.72 1.72-0.17 0.35-0.3 0.8-0.36 1.6-0.07 0.8-0.07 1.85-0.07 3.34v7.2c0 0.88 0 1.6 0.02 2.22l3.87-3.88c1.68-1.68 4.42-1.68 6.1 0l1.08 1.08 4.82-4.83c1.68-1.68 4.42-1.68 6.1 0l3.89 3.9V24.4c0-1.5 0-2.53-0.07-3.34Zm-23.66 17.2c-0.61-0.31-1.13-0.78-1.5-1.36l5.1-5.1c0.66-0.66 1.72-0.66 2.38 0l2 2c0.52 0.52 1.35 0.52 1.86 0l5.76-5.75c0.66-0.66 1.72-0.66 2.38 0l5.73 5.73c0 0.44-0.02 0.82-0.05 1.16-0.06 0.8-0.19 1.25-0.36 1.6-0.38 0.74-0.98 1.34-1.72 1.72-0.35 0.17-0.8 0.3-1.6 0.36-0.8 0.07-1.85 0.07-3.34 0.07h-11.7c-1.5 0-2.53 0-3.34-0.07-0.8-0.06-1.25-0.19-1.6-0.36Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M48.82 17.77c-0.14 4.61-0.43 14.08-0.43 15.12l1.3 2.16 6.04-5.18 4.32 2.59 8.2-6.48 7.35 5.61 0.43-12.09-3.45-3.45L52.7 15.6l-3.89 2.16Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M55.41 30.2l-6.58 6.14v0.44l2.2 3.07 7.46 0.44 13.6-0.44 3.52-3.07 0.88-4.39-8.34-6.15-7.47 6.15-5.27-2.2Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M53.38 23.13c0-1.45 1.17-2.63 2.62-2.63 1.45 0 2.63 1.18 2.63 2.63 0 1.44-1.18 2.62-2.63 2.62s-2.63-1.18-2.63-2.63Z"/>
|
||||
<path
|
||||
android:strokeColor="#FF3B45FD"
|
||||
android:strokeWidth="0.5"
|
||||
android:pathData="M77.56 24.34v7.32c0 1.42 0 2.57-0.07 3.5-0.08 0.95-0.25 1.8-0.64 2.57-0.63 1.23-1.64 2.24-2.87 2.87-0.78 0.4-1.62 0.56-2.57 0.64-0.93 0.07-2.08 0.07-3.5 0.07H56.09c-1.42 0-2.57 0-3.5-0.07-0.95-0.08-1.8-0.25-2.57-0.64-1.23-0.63-2.24-1.64-2.87-2.87-0.4-0.78-0.56-1.62-0.64-2.57-0.07-0.93-0.07-2.08-0.07-3.5v-7.32c0-1.42 0-2.57 0.07-3.5 0.08-0.95 0.25-1.8 0.64-2.57 0.63-1.23 1.64-2.24 2.87-2.87 0.78-0.4 1.62-0.56 2.57-0.64 0.93-0.07 2.08-0.07 3.5-0.07h11.82c1.42 0 2.57 0 3.5 0.07 0.95 0.08 1.8 0.25 2.57 0.64 1.23 0.63 2.24 1.64 2.87 2.87 0.4 0.78 0.56 1.62 0.64 2.57 0.07 0.93 0.07 2.08 0.07 3.5Zm-2.69-3.28c-0.06-0.8-0.19-1.25-0.36-1.6-0.38-0.74-0.98-1.34-1.72-1.72-0.35-0.17-0.8-0.3-1.6-0.36-0.8-0.07-1.85-0.07-3.34-0.07h-11.7c-1.5 0-2.53 0-3.34 0.07-0.8 0.06-1.25 0.19-1.6 0.36-0.74 0.38-1.34 0.98-1.72 1.72-0.17 0.35-0.3 0.8-0.36 1.6-0.07 0.8-0.07 1.85-0.07 3.34v7.2c0 0.88 0 1.6 0.02 2.22l3.87-3.88c1.68-1.68 4.42-1.68 6.1 0l1.08 1.08 4.82-4.83c1.68-1.68 4.42-1.68 6.1 0l3.89 3.9V24.4c0-1.5 0-2.53-0.07-3.34Zm-23.66 17.2c-0.61-0.31-1.13-0.78-1.5-1.36l5.1-5.1c0.66-0.66 1.72-0.66 2.38 0l2 2c0.52 0.52 1.35 0.52 1.86 0l5.76-5.75c0.66-0.66 1.72-0.66 2.38 0l5.73 5.73c0 0.44-0.02 0.82-0.05 1.16-0.06 0.8-0.19 1.25-0.36 1.6-0.38 0.74-0.98 1.34-1.72 1.72-0.35 0.17-0.8 0.3-1.6 0.36-0.8 0.07-1.85 0.07-3.34 0.07h-11.7c-1.5 0-2.53 0-3.34-0.07-0.8-0.06-1.25-0.19-1.6-0.36Z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,36 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="64"
|
||||
android:viewportHeight="64">
|
||||
<group>
|
||||
<path
|
||||
android:fillColor="#FFA0A7FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M55.55 50.29c0.8 0.7 0.9 1.92 0.2 2.72l-0.01 0.03c-4.07 4.78-9.6 8.37-16.1 10.01-6.5 1.65-13.03 1.1-18.84-1.2-1-0.39-1.5-1.5-1.1-2.5V59.3c0.39-0.99 1.5-1.48 2.5-1.1 5.08 2.01 10.81 2.5 16.51 1.06 5.7-1.44 10.54-4.6 14.1-8.78 0.7-0.81 1.94-0.9 2.74-0.2Z"/>
|
||||
<path
|
||||
android:fillColor="#FFD2D8FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M32 56c-4.49 0-8.69-1.23-12.28-3.38v-3.98c0-2.57-2.08-4.65-4.65-4.65-1.2 0-2.3 0.46-3.12 1.2C9.45 41.42 8 36.88 8 32 8 18.75 18.75 8 32 8s24 10.75 24 24-10.75 24-24 24Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3C46FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M38.65 22.56c0.52-0.82 1.6-1.05 2.42-0.53 0.81 0.52 1.05 1.6 0.53 2.41L31.2 40.7c-0.3 0.48-0.83 0.78-1.4 0.8-0.56 0.03-1.1-0.21-1.45-0.66l-5.85-7.48c-0.6-0.76-0.46-1.86 0.3-2.45 0.76-0.6 1.86-0.46 2.45 0.3l4.33 5.53 9.07-14.17Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M53.04 8.26c4.78 4.07 8.37 9.6 10.01 16.1 1.65 6.5 1.1 13.03-1.2 18.84-0.39 1-1.5 1.5-2.5 1.1H59.3c-0.99-0.39-1.48-1.5-1.1-2.5 2.01-5.08 2.5-10.81 1.06-16.51-1.44-5.7-4.6-10.54-8.78-14.1-0.81-0.7-0.9-1.94-0.2-2.74 0.7-0.8 1.93-0.9 2.73-0.2l0.03 0.01Z"/>
|
||||
<path
|
||||
android:fillColor="#FFA0A7FE"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M44.3 4.7c-0.39 0.99-1.5 1.48-2.5 1.1C36.72 3.78 31 3.3 25.3 4.73c-5.7 1.44-10.54 4.6-14.1 8.78-0.7 0.81-1.94 0.9-2.74 0.2-0.8-0.7-0.9-1.93-0.2-2.73l0.01-0.03c4.07-4.78 9.6-8.37 16.1-10.01 6.5-1.65 13.03-1.1 18.84 1.2 1 0.39 1.5 1.5 1.1 2.5V4.7Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M14.44 46.67c0.86 0 1.56 0.7 1.56 1.57v7.18C16 56.3 15.3 57 14.44 57H6.57c-0.86 0-1.56-0.7-1.56-1.57 0-0.86 0.7-1.57 1.56-1.57h6.3v-5.61c0-0.87 0.7-1.57 1.57-1.57Z"/>
|
||||
<path
|
||||
android:fillColor="#FF3B45FD"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="M4.66 19.13c1 0.4 1.5 1.53 1.12 2.54-2 5.16-2.49 10.98-1.05 16.77 1.43 5.79 4.57 10.7 8.75 14.31l1.48 1.28L12.4 57l-1.48-1.28c-4.77-4.13-8.35-9.74-9.99-16.34-1.63-6.6-1.08-13.23 1.2-19.13 0.39-1 1.52-1.5 2.52-1.12Z"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -817,7 +817,7 @@
|
||||
|
||||
<!-- CreateBackupBottomSheet -->
|
||||
<!-- Bottom sheet title -->
|
||||
<string name="CreateBackupBottomSheet__create_backup">Create backup</string>
|
||||
<string name="CreateBackupBottomSheet__you_are_all_set">You\'re all set. Start your backup now.</string>
|
||||
<!-- Bottom sheet message -->
|
||||
<string name="CreateBackupBottomSheet__depending_on_the_size">Depending on the size of your backup, this could take a long time. You can use your phone as you normally do while the backup takes place.</string>
|
||||
<!-- Action button to dismiss sheet and back up later -->
|
||||
@@ -7239,11 +7239,11 @@
|
||||
|
||||
<!-- BackupAlertBottomSheet -->
|
||||
<!-- Sheet title when media backups have been disabled -->
|
||||
<string name="BackupAlertBottomSheet__media_backups_are_off">Media backups are off</string>
|
||||
<string name="BackupAlertBottomSheet__your_backups_subscription_expired">Your backups subscription expired</string>
|
||||
<!-- Sheet body part 1 when media backups have been disabled. Placeholder is the number of days until deletion. -->
|
||||
<plurals name="BackupAlertBottomSheet__your_signal_media_backup_plan">
|
||||
<item quantity="one">Your Signal media backup plan has been canceled because we couldn\'t process your payment. You have %1$d day to download any media stored in your backup. After %1$d day, the media in your backup will be deleted.</item>
|
||||
<item quantity="other">Your Signal media backup plan has been canceled because we couldn\'t process your payment. You have %1$d days to download any media stored in your backup. After %1$d days, the media in your backup will be deleted.</item>
|
||||
<plurals name="BackupAlertBottomSheet__your_backup_plan_has_expired">
|
||||
<item quantity="one">Your backup plan has expired because it couldn\'t be renewed with your current payment method. After %1$d day, the media in your backup will be deleted.</item>
|
||||
<item quantity="other">Your backup plan has expired because it couldn\'t be renewed with your current payment method. After %1$d days, the media in your backup will be deleted.</item>
|
||||
</plurals>
|
||||
<!-- Sheet body part 2 when media backups have been disabled. -->
|
||||
<string name="BackupAlertBottomSheet__you_can_begin_paying_for_backups_again">You can begin paying for backups again at any time to continue backing up all your media. </string>
|
||||
@@ -7261,9 +7261,9 @@
|
||||
<item quantity="other">If you choose \"Skip\" the media in your backup will be deleted in %1$d days.</item>
|
||||
</plurals>
|
||||
<!-- Sheet title when user payment failed to process -->
|
||||
<string name="BackupAlertBottomSheet__cant_process_backup_payment">Can\'t process backup payment</string>
|
||||
<string name="BackupAlertBottomSheet__your_backups_subscription_failed_to_renew">Your backups subscription failed to renew</string>
|
||||
<!-- Sheet body when user payment failed to process -->
|
||||
<string name="BackupAlertBottomSheet__were_having_trouble_collecting__google_pay">We\'re having trouble collecting your recurring monthly backup payment. Make sure your payment method is up to date. If it isn\'t, update it in Google Pay. Signal will try to process the payment again in a few days.</string>
|
||||
<string name="BackupAlertBottomSheet__check_to_make_sure_your_payment_method">Check to make sure your payment method is up to date. Tap Manage subscription and under Payment methods tap Update.</string>
|
||||
<!-- Sheet title for generic backup error -->
|
||||
<string name="BackupAlertBottomSheet__couldnt_complete_backup">Couldn\'t complete backup</string>
|
||||
<!-- Sheet body for generic backup error. Placeholder is days since last backup. -->
|
||||
@@ -7272,12 +7272,16 @@
|
||||
<string name="BackupAlertBottomSheet__learn_more">Learn more</string>
|
||||
<!-- Secondary action button text when user does not have enough free space to download their backup. -->
|
||||
<string name="BackupAlertBottomSheet__skip">Skip</string>
|
||||
<!-- Primary action button to manage subscription in Google Play -->
|
||||
<string name="BackupAlertBottomSheet__manage_subscription">Manage subscription</string>
|
||||
<!-- Primary action button text prompting user to subscriber. Placeholder is formatted price -->
|
||||
<string name="BackupAlertBottomSheet__subscribe_for_s_month">Subscribe for %1$s/month</string>
|
||||
<!-- Primary action button text prompting user to download their media -->
|
||||
<string name="BackupAlertBottomSheet__download_media_now">Download media now</string>
|
||||
<!-- Secondary action button text to dismiss sheet, noting the user can download later -->
|
||||
<string name="BackupAlertBottomSheet__download_later">Download later</string>
|
||||
<!-- Secondary action button text to dismiss sheet, skipping media download -->
|
||||
<string name="BackupAlertBottomSheet__dont_download_media">Don\'t download media</string>
|
||||
<!-- Secondary generic action button to dismiss sheet without performing an action -->
|
||||
<string name="BackupAlertBottomSheet__not_now">Not now</string>
|
||||
<!-- Dialog title for last chance to download backup -->
|
||||
<string name="BackupAlertBottomSheet__media_will_be_deleted">Media will be deleted</string>
|
||||
<!-- Dialog message for last chance to download backup -->
|
||||
@@ -7358,8 +7362,8 @@
|
||||
<string name="UpgradeToEnableOptimizedStorageSheet__upgrade_to_enable_this_feature">Upgrade to enable this feature</string>
|
||||
<!-- Subtitle of bottom sheet detailing that the user must upgrade to enable storage optimization -->
|
||||
<string name="UpgradeToEnableOptimizedStorageSheet__storage_optimization_can_only_be_used">Storage optimization can only be used with the paid tier of Signal Backups. Upgrade your backup plan to start using this feature.</string>
|
||||
<!-- Primary action to launch upgrade flow -->
|
||||
<string name="UpgradeToEnableOptimizedStorageSheet__upgrade_now">Upgrade now</string>
|
||||
<!-- Primary action to launch upgrade flow. Placeholder is formatted price. -->
|
||||
<string name="UpgradeToEnableOptimizedStorageSheet__subscribe_for_s_month">Subscribe for %1$s/month</string>
|
||||
|
||||
<!-- Educational bottom sheet dialog title shown to notify about delete syncs causing deletes to happen across all devices -->
|
||||
<string name="DeleteSyncEducation_title">Deleting is now synced across all of your devices</string>
|
||||
|
||||
Reference in New Issue
Block a user