Merge branch 'develop' into feature/target-sdk-29
# Conflicts: # vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt
This commit is contained in:
commit
190fbb95ec
|
@ -6,6 +6,7 @@ Features ✨:
|
|||
- Cross-Signing | Verify new session from existing session (#1134)
|
||||
- Cross-Signing | Bootstraping cross signing with 4S from mobile (#985)
|
||||
|
||||
|
||||
Improvements 🙌:
|
||||
- Verification DM / Handle concurrent .start after .ready (#794)
|
||||
- Reimplementation of multiple attachment picker
|
||||
|
@ -15,6 +16,10 @@ Improvements 🙌:
|
|||
- Cross-Signing | Complete security new session design update (#1135)
|
||||
- Cross-Signing | Setup key backup as part of SSSS bootstrapping (#1201)
|
||||
- Cross-Signing | Gossip key backup recovery key (#1200)
|
||||
- Show room encryption status as a bubble tile (#1078)
|
||||
- Cross-Signing | Restore history after recover from passphrase (#1214)
|
||||
- Cross-Sign | QR code scan confirmation screens design update (#1187)
|
||||
- Emoji Verification | It's not the same butterfly! (#1220)
|
||||
|
||||
Bugfix 🐛:
|
||||
- Missing avatar/displayname after verification request message (#841)
|
||||
|
@ -22,6 +27,7 @@ Bugfix 🐛:
|
|||
- RiotX can't restore cross signing keys saved by web in SSSS (#1174)
|
||||
- Cross- Signing | After signin in new session, verification paper trail in DM is off (#1191)
|
||||
- Failed to encrypt message in room (message stays in red), [thanks to pwr22] (#925)
|
||||
- Cross-Signing | web <-> riotX After QR code scan, gossiping fails (#1210)
|
||||
|
||||
Translations 🗣:
|
||||
-
|
||||
|
|
|
@ -282,7 +282,7 @@ class KeyShareTests : InstrumentedTest {
|
|||
val keysBackupService = aliceSession2.cryptoService().keysBackupService()
|
||||
mTestHelper.retryPeriodicallyWithLatch(latch) {
|
||||
Log.d("#TEST", "Recovery :${ keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey}")
|
||||
keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey != creationInfo.recoveryKey
|
||||
keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey == creationInfo.recoveryKey
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,10 @@
|
|||
|
||||
package im.vector.matrix.android.api.session.crypto.verification
|
||||
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.annotation.StringRes
|
||||
|
||||
data class EmojiRepresentation(val emoji: String,
|
||||
@StringRes val nameResId: Int)
|
||||
@StringRes val nameResId: Int,
|
||||
@DrawableRes val drawableRes: Int? = null
|
||||
)
|
||||
|
|
|
@ -43,6 +43,7 @@ sealed class VerificationTxState {
|
|||
|
||||
// Will be used to ask the user if the other user has correctly scanned
|
||||
object QrScannedByOther : VerificationQrTxState()
|
||||
object WaitingOtherReciprocateConfirm : VerificationQrTxState()
|
||||
|
||||
// Terminal states
|
||||
abstract class TerminalTxState : VerificationTxState()
|
||||
|
|
|
@ -22,6 +22,9 @@ import dagger.Lazy
|
|||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.session.crypto.CryptoService
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.CrossSigningService
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.verification.CancelCode
|
||||
import im.vector.matrix.android.api.session.crypto.verification.PendingVerificationRequest
|
||||
import im.vector.matrix.android.api.session.crypto.verification.QrCodeVerificationTransaction
|
||||
|
@ -60,6 +63,7 @@ import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
|
|||
import im.vector.matrix.android.internal.crypto.model.event.EncryptedEventContent
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationAccept
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationCancel
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationDone
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationKey
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationMac
|
||||
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationReady
|
||||
|
@ -109,6 +113,10 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
// map [sender : [transaction]]
|
||||
private val txMap = HashMap<String, HashMap<String, DefaultVerificationTransaction>>()
|
||||
|
||||
// we need to keep track of finished transaction
|
||||
// It will be used for gossiping (to send request after request is completed and 'done' by other)
|
||||
private val pastTransactions = HashMap<String, HashMap<String, DefaultVerificationTransaction>>()
|
||||
|
||||
/**
|
||||
* Map [sender: [PendingVerificationRequest]]
|
||||
* For now we keep all requests (even terminated ones) during the lifetime of the app.
|
||||
|
@ -137,6 +145,9 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
EventType.KEY_VERIFICATION_READY -> {
|
||||
onReadyReceived(event)
|
||||
}
|
||||
EventType.KEY_VERIFICATION_DONE -> {
|
||||
onDoneReceived(event)
|
||||
}
|
||||
MessageType.MSGTYPE_VERIFICATION_REQUEST -> {
|
||||
onRequestReceived(event)
|
||||
}
|
||||
|
@ -635,9 +646,7 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
))
|
||||
}
|
||||
|
||||
if (existingTransaction is SASDefaultVerificationTransaction) {
|
||||
existingTransaction.state = VerificationTxState.Cancelled(safeValueOf(cancelReq.code), false)
|
||||
}
|
||||
existingTransaction?.state = VerificationTxState.Cancelled(safeValueOf(cancelReq.code), false)
|
||||
}
|
||||
|
||||
private fun onRoomAcceptReceived(event: Event) {
|
||||
|
@ -778,6 +787,58 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun onDoneReceived(event: Event) {
|
||||
Timber.v("## onDoneReceived")
|
||||
val doneReq = event.getClearContent().toModel<KeyVerificationDone>()?.asValidObject()
|
||||
if (doneReq == null || event.senderId == null) {
|
||||
// ignore
|
||||
Timber.e("## SAS Received invalid done request")
|
||||
return
|
||||
}
|
||||
|
||||
handleDoneReceived(event.senderId, doneReq)
|
||||
|
||||
if (event.senderId == userId) {
|
||||
// We only send gossiping request when the other sent us a done
|
||||
// We can ask without checking too much thinks (like trust), because we will check validity of secret on reception
|
||||
getExistingTransaction(userId, doneReq.transactionId)
|
||||
?: getOldTransaction(userId, doneReq.transactionId)
|
||||
?.let { vt ->
|
||||
val otherDeviceId = vt.otherDeviceId
|
||||
if (!crossSigningService.canCrossSign()) {
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(SELF_SIGNING_KEY_SSSS_NAME, mapOf(userId to listOf(otherDeviceId
|
||||
?: "*")))
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(USER_SIGNING_KEY_SSSS_NAME, mapOf(userId to listOf(otherDeviceId
|
||||
?: "*")))
|
||||
}
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(KEYBACKUP_SECRET_SSSS_NAME, mapOf(userId to listOf(otherDeviceId
|
||||
?: "*")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleDoneReceived(senderId: String, doneReq: ValidVerificationDone) {
|
||||
Timber.v("## SAS Done receieved $doneReq")
|
||||
val existing = getExistingTransaction(senderId, doneReq.transactionId)
|
||||
if (existing == null) {
|
||||
Timber.e("## SAS Received invalid Done request")
|
||||
return
|
||||
}
|
||||
if (existing is DefaultQrCodeVerificationTransaction) {
|
||||
existing.onDoneReceived()
|
||||
} else {
|
||||
// SAS do not care for now?
|
||||
}
|
||||
|
||||
// Now transactions are udated, let's also update Requests
|
||||
val existingRequest = getExistingVerificationRequest(senderId)?.find { it.transactionId == doneReq.transactionId }
|
||||
if (existingRequest == null) {
|
||||
Timber.e("## SAS Received Done for unknown request txId:${doneReq.transactionId}")
|
||||
return
|
||||
}
|
||||
updatePendingRequest(existingRequest.copy(isSuccessful = true))
|
||||
}
|
||||
|
||||
private fun onRoomDoneReceived(event: Event) {
|
||||
val doneReq = event.getClearContent().toModel<MessageVerificationDoneContent>()
|
||||
?.copy(
|
||||
|
@ -957,14 +1018,14 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private fun handleDoneReceived(senderId: String, doneInfo: ValidVerificationDone) {
|
||||
val existingRequest = getExistingVerificationRequest(senderId)?.find { it.transactionId == doneInfo.transactionId }
|
||||
if (existingRequest == null) {
|
||||
Timber.e("## SAS Received Done for unknown request txId:${doneInfo.transactionId}")
|
||||
return
|
||||
}
|
||||
updatePendingRequest(existingRequest.copy(isSuccessful = true))
|
||||
}
|
||||
// private fun handleDoneReceived(senderId: String, doneInfo: ValidVerificationDone) {
|
||||
// val existingRequest = getExistingVerificationRequest(senderId)?.find { it.transactionId == doneInfo.transactionId }
|
||||
// if (existingRequest == null) {
|
||||
// Timber.e("## SAS Received Done for unknown request txId:${doneInfo.transactionId}")
|
||||
// return
|
||||
// }
|
||||
// updatePendingRequest(existingRequest.copy(isSuccessful = true))
|
||||
// }
|
||||
|
||||
// TODO All this methods should be delegated to a TransactionStore
|
||||
override fun getExistingTransaction(otherUserId: String, tid: String): VerificationTransaction? {
|
||||
|
@ -1003,7 +1064,11 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
|
||||
private fun removeTransaction(otherUser: String, tid: String) {
|
||||
synchronized(txMap) {
|
||||
txMap[otherUser]?.remove(tid)?.removeListener(this)
|
||||
txMap[otherUser]?.remove(tid)?.also {
|
||||
it.removeListener(this)
|
||||
}
|
||||
}?.let {
|
||||
rememberOldTransaction(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1016,6 +1081,20 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun rememberOldTransaction(tx: DefaultVerificationTransaction) {
|
||||
synchronized(pastTransactions) {
|
||||
pastTransactions.getOrPut(tx.otherUserId) { HashMap() }[tx.transactionId] = tx
|
||||
}
|
||||
}
|
||||
|
||||
private fun getOldTransaction(userId: String, tid: String?): DefaultVerificationTransaction? {
|
||||
return tid?.let {
|
||||
synchronized(pastTransactions) {
|
||||
pastTransactions[userId]?.get(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun beginKeyVerification(method: VerificationMethod, otherUserId: String, otherDeviceId: String, transactionId: String?): String? {
|
||||
val txID = transactionId?.takeIf { it.isNotEmpty() } ?: createUniqueIDForTransaction(otherUserId, otherDeviceId)
|
||||
// should check if already one (and cancel it)
|
||||
|
|
|
@ -17,9 +17,6 @@ package im.vector.matrix.android.internal.crypto.verification
|
|||
|
||||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.CrossSigningService
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.verification.VerificationTransaction
|
||||
import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState
|
||||
import im.vector.matrix.android.internal.crypto.IncomingGossipingRequestManager
|
||||
|
@ -60,7 +57,7 @@ internal abstract class DefaultVerificationTransaction(
|
|||
|
||||
protected fun trust(canTrustOtherUserMasterKey: Boolean,
|
||||
toVerifyDeviceIds: List<String>,
|
||||
eventuallyMarkMyMasterKeyAsTrusted: Boolean) {
|
||||
eventuallyMarkMyMasterKeyAsTrusted: Boolean, autoDone : Boolean = true) {
|
||||
Timber.d("## Verification: trust ($otherUserId,$otherDeviceId) , verifiedDevices:$toVerifyDeviceIds")
|
||||
Timber.d("## Verification: trust Mark myMSK trusted $eventuallyMarkMyMasterKeyAsTrusted")
|
||||
|
||||
|
@ -100,15 +97,10 @@ internal abstract class DefaultVerificationTransaction(
|
|||
})
|
||||
}
|
||||
|
||||
transport.done(transactionId) {
|
||||
if (otherUserId == userId && !crossSigningService.canCrossSign()) {
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(SELF_SIGNING_KEY_SSSS_NAME, mapOf(userId to listOf(otherDeviceId ?: "*")))
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(USER_SIGNING_KEY_SSSS_NAME, mapOf(userId to listOf(otherDeviceId ?: "*")))
|
||||
outgoingGossipingRequestManager.sendSecretShareRequest(KEYBACKUP_SECRET_SSSS_NAME, mapOf(userId to listOf(otherDeviceId ?: "*")))
|
||||
}
|
||||
if (autoDone) {
|
||||
state = VerificationTxState.Verified
|
||||
transport.done(transactionId) {}
|
||||
}
|
||||
|
||||
state = VerificationTxState.Verified
|
||||
}
|
||||
|
||||
private fun setDeviceVerified(userId: String, deviceId: String) {
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
*/
|
||||
package im.vector.matrix.android.internal.crypto.verification
|
||||
|
||||
import android.os.Build
|
||||
import im.vector.matrix.android.api.extensions.orFalse
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.CrossSigningService
|
||||
import im.vector.matrix.android.api.session.crypto.verification.CancelCode
|
||||
|
@ -74,13 +73,9 @@ internal abstract class SASDefaultVerificationTransaction(
|
|||
// ordered by preferred order
|
||||
val KNOWN_MACS = listOf(SAS_MAC_SHA256, SAS_MAC_SHA256_LONGKDF)
|
||||
|
||||
// older devices have limited support of emoji, so reply with decimal
|
||||
val KNOWN_SHORT_CODES =
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
listOf(SasMode.EMOJI, SasMode.DECIMAL)
|
||||
} else {
|
||||
listOf(SasMode.DECIMAL)
|
||||
}
|
||||
// older devices have limited support of emoji but SDK offers images for the 64 verification emojis
|
||||
// so always send that we support EMOJI
|
||||
val KNOWN_SHORT_CODES = listOf(SasMode.EMOJI, SasMode.DECIMAL)
|
||||
}
|
||||
|
||||
override var state: VerificationTxState = VerificationTxState.None
|
||||
|
|
|
@ -20,69 +20,69 @@ import im.vector.matrix.android.api.session.crypto.verification.EmojiRepresentat
|
|||
|
||||
internal fun getEmojiForCode(code: Int): EmojiRepresentation {
|
||||
return when (code % 64) {
|
||||
0 -> EmojiRepresentation("🐶", R.string.verification_emoji_dog)
|
||||
1 -> EmojiRepresentation("🐱", R.string.verification_emoji_cat)
|
||||
2 -> EmojiRepresentation("🦁", R.string.verification_emoji_lion)
|
||||
3 -> EmojiRepresentation("🐎", R.string.verification_emoji_horse)
|
||||
4 -> EmojiRepresentation("🦄", R.string.verification_emoji_unicorn)
|
||||
5 -> EmojiRepresentation("🐷", R.string.verification_emoji_pig)
|
||||
6 -> EmojiRepresentation("🐘", R.string.verification_emoji_elephant)
|
||||
7 -> EmojiRepresentation("🐰", R.string.verification_emoji_rabbit)
|
||||
8 -> EmojiRepresentation("🐼", R.string.verification_emoji_panda)
|
||||
9 -> EmojiRepresentation("🐓", R.string.verification_emoji_rooster)
|
||||
10 -> EmojiRepresentation("🐧", R.string.verification_emoji_penguin)
|
||||
11 -> EmojiRepresentation("🐢", R.string.verification_emoji_turtle)
|
||||
12 -> EmojiRepresentation("🐟", R.string.verification_emoji_fish)
|
||||
13 -> EmojiRepresentation("🐙", R.string.verification_emoji_octopus)
|
||||
14 -> EmojiRepresentation("🦋", R.string.verification_emoji_butterfly)
|
||||
15 -> EmojiRepresentation("🌷", R.string.verification_emoji_flower)
|
||||
16 -> EmojiRepresentation("🌳", R.string.verification_emoji_tree)
|
||||
17 -> EmojiRepresentation("🌵", R.string.verification_emoji_cactus)
|
||||
18 -> EmojiRepresentation("🍄", R.string.verification_emoji_mushroom)
|
||||
19 -> EmojiRepresentation("🌏", R.string.verification_emoji_globe)
|
||||
20 -> EmojiRepresentation("🌙", R.string.verification_emoji_moon)
|
||||
21 -> EmojiRepresentation("☁️", R.string.verification_emoji_cloud)
|
||||
22 -> EmojiRepresentation("🔥", R.string.verification_emoji_fire)
|
||||
23 -> EmojiRepresentation("🍌", R.string.verification_emoji_banana)
|
||||
24 -> EmojiRepresentation("🍎", R.string.verification_emoji_apple)
|
||||
25 -> EmojiRepresentation("🍓", R.string.verification_emoji_strawberry)
|
||||
26 -> EmojiRepresentation("🌽", R.string.verification_emoji_corn)
|
||||
27 -> EmojiRepresentation("🍕", R.string.verification_emoji_pizza)
|
||||
28 -> EmojiRepresentation("🎂", R.string.verification_emoji_cake)
|
||||
29 -> EmojiRepresentation("❤️", R.string.verification_emoji_heart)
|
||||
30 -> EmojiRepresentation("😀", R.string.verification_emoji_smiley)
|
||||
31 -> EmojiRepresentation("🤖", R.string.verification_emoji_robot)
|
||||
32 -> EmojiRepresentation("🎩", R.string.verification_emoji_hat)
|
||||
33 -> EmojiRepresentation("👓", R.string.verification_emoji_glasses)
|
||||
34 -> EmojiRepresentation("🔧", R.string.verification_emoji_wrench)
|
||||
35 -> EmojiRepresentation("🎅", R.string.verification_emoji_santa)
|
||||
36 -> EmojiRepresentation("👍", R.string.verification_emoji_thumbsup)
|
||||
37 -> EmojiRepresentation("☂️", R.string.verification_emoji_umbrella)
|
||||
38 -> EmojiRepresentation("⌛", R.string.verification_emoji_hourglass)
|
||||
39 -> EmojiRepresentation("⏰", R.string.verification_emoji_clock)
|
||||
40 -> EmojiRepresentation("🎁", R.string.verification_emoji_gift)
|
||||
41 -> EmojiRepresentation("💡", R.string.verification_emoji_lightbulb)
|
||||
42 -> EmojiRepresentation("📕", R.string.verification_emoji_book)
|
||||
43 -> EmojiRepresentation("✏️", R.string.verification_emoji_pencil)
|
||||
44 -> EmojiRepresentation("📎", R.string.verification_emoji_paperclip)
|
||||
45 -> EmojiRepresentation("✂️", R.string.verification_emoji_scissors)
|
||||
46 -> EmojiRepresentation("🔒", R.string.verification_emoji_lock)
|
||||
47 -> EmojiRepresentation("🔑", R.string.verification_emoji_key)
|
||||
48 -> EmojiRepresentation("🔨", R.string.verification_emoji_hammer)
|
||||
49 -> EmojiRepresentation("☎️", R.string.verification_emoji_telephone)
|
||||
50 -> EmojiRepresentation("🏁", R.string.verification_emoji_flag)
|
||||
51 -> EmojiRepresentation("🚂", R.string.verification_emoji_train)
|
||||
52 -> EmojiRepresentation("🚲", R.string.verification_emoji_bicycle)
|
||||
53 -> EmojiRepresentation("✈️", R.string.verification_emoji_airplane)
|
||||
54 -> EmojiRepresentation("🚀", R.string.verification_emoji_rocket)
|
||||
55 -> EmojiRepresentation("🏆", R.string.verification_emoji_trophy)
|
||||
56 -> EmojiRepresentation("⚽", R.string.verification_emoji_ball)
|
||||
57 -> EmojiRepresentation("🎸", R.string.verification_emoji_guitar)
|
||||
58 -> EmojiRepresentation("🎺", R.string.verification_emoji_trumpet)
|
||||
59 -> EmojiRepresentation("🔔", R.string.verification_emoji_bell)
|
||||
60 -> EmojiRepresentation("⚓", R.string.verification_emoji_anchor)
|
||||
61 -> EmojiRepresentation("🎧", R.string.verification_emoji_headphone)
|
||||
62 -> EmojiRepresentation("📁", R.string.verification_emoji_folder)
|
||||
/* 63 */ else -> EmojiRepresentation("📌", R.string.verification_emoji_pin)
|
||||
0 -> EmojiRepresentation("🐶", R.string.verification_emoji_dog, R.drawable.ic_verification_dog)
|
||||
1 -> EmojiRepresentation("🐱", R.string.verification_emoji_cat, R.drawable.ic_verification_cat)
|
||||
2 -> EmojiRepresentation("🦁", R.string.verification_emoji_lion, R.drawable.ic_verification_lion)
|
||||
3 -> EmojiRepresentation("🐎", R.string.verification_emoji_horse, R.drawable.ic_verification_horse)
|
||||
4 -> EmojiRepresentation("🦄", R.string.verification_emoji_unicorn, R.drawable.ic_verification_unicorn)
|
||||
5 -> EmojiRepresentation("🐷", R.string.verification_emoji_pig, R.drawable.ic_verification_pig)
|
||||
6 -> EmojiRepresentation("🐘", R.string.verification_emoji_elephant, R.drawable.ic_verification_elephant)
|
||||
7 -> EmojiRepresentation("🐰", R.string.verification_emoji_rabbit, R.drawable.ic_verification_rabbit)
|
||||
8 -> EmojiRepresentation("🐼", R.string.verification_emoji_panda, R.drawable.ic_verification_panda)
|
||||
9 -> EmojiRepresentation("🐓", R.string.verification_emoji_rooster, R.drawable.ic_verification_rooster)
|
||||
10 -> EmojiRepresentation("🐧", R.string.verification_emoji_penguin, R.drawable.ic_verification_penguin)
|
||||
11 -> EmojiRepresentation("🐢", R.string.verification_emoji_turtle, R.drawable.ic_verification_turtle)
|
||||
12 -> EmojiRepresentation("🐟", R.string.verification_emoji_fish, R.drawable.ic_verification_fish)
|
||||
13 -> EmojiRepresentation("🐙", R.string.verification_emoji_octopus, R.drawable.ic_verification_octopus)
|
||||
14 -> EmojiRepresentation("🦋", R.string.verification_emoji_butterfly, R.drawable.ic_verification_butterfly)
|
||||
15 -> EmojiRepresentation("🌷", R.string.verification_emoji_flower, R.drawable.ic_verification_flower)
|
||||
16 -> EmojiRepresentation("🌳", R.string.verification_emoji_tree, R.drawable.ic_verification_tree)
|
||||
17 -> EmojiRepresentation("🌵", R.string.verification_emoji_cactus, R.drawable.ic_verification_cactus)
|
||||
18 -> EmojiRepresentation("🍄", R.string.verification_emoji_mushroom, R.drawable.ic_verification_mushroom)
|
||||
19 -> EmojiRepresentation("🌏", R.string.verification_emoji_globe, R.drawable.ic_verification_globe)
|
||||
20 -> EmojiRepresentation("🌙", R.string.verification_emoji_moon, R.drawable.ic_verification_moon)
|
||||
21 -> EmojiRepresentation("☁️", R.string.verification_emoji_cloud, R.drawable.ic_verification_cloud)
|
||||
22 -> EmojiRepresentation("🔥", R.string.verification_emoji_fire, R.drawable.ic_verification_fire)
|
||||
23 -> EmojiRepresentation("🍌", R.string.verification_emoji_banana, R.drawable.ic_verification_banana)
|
||||
24 -> EmojiRepresentation("🍎", R.string.verification_emoji_apple, R.drawable.ic_verification_apple)
|
||||
25 -> EmojiRepresentation("🍓", R.string.verification_emoji_strawberry, R.drawable.ic_verification_strawberry)
|
||||
26 -> EmojiRepresentation("🌽", R.string.verification_emoji_corn, R.drawable.ic_verification_corn)
|
||||
27 -> EmojiRepresentation("🍕", R.string.verification_emoji_pizza, R.drawable.ic_verification_pizza)
|
||||
28 -> EmojiRepresentation("🎂", R.string.verification_emoji_cake, R.drawable.ic_verification_cake)
|
||||
29 -> EmojiRepresentation("❤️", R.string.verification_emoji_heart, R.drawable.ic_verification_heart)
|
||||
30 -> EmojiRepresentation("🙂", R.string.verification_emoji_smiley, R.drawable.ic_verification_smiley)
|
||||
31 -> EmojiRepresentation("🤖", R.string.verification_emoji_robot, R.drawable.ic_verification_robot)
|
||||
32 -> EmojiRepresentation("🎩", R.string.verification_emoji_hat, R.drawable.ic_verification_hat)
|
||||
33 -> EmojiRepresentation("👓", R.string.verification_emoji_glasses, R.drawable.ic_verification_glasses)
|
||||
34 -> EmojiRepresentation("🔧", R.string.verification_emoji_wrench, R.drawable.ic_verification_wrench)
|
||||
35 -> EmojiRepresentation("🎅", R.string.verification_emoji_santa, R.drawable.ic_verification_santa)
|
||||
36 -> EmojiRepresentation("👍", R.string.verification_emoji_thumbsup, R.drawable.ic_verification_thumbs_up)
|
||||
37 -> EmojiRepresentation("☂️", R.string.verification_emoji_umbrella, R.drawable.ic_verification_umbrella)
|
||||
38 -> EmojiRepresentation("⌛", R.string.verification_emoji_hourglass, R.drawable.ic_verification_hourglass)
|
||||
39 -> EmojiRepresentation("⏰", R.string.verification_emoji_clock, R.drawable.ic_verification_clock)
|
||||
40 -> EmojiRepresentation("🎁", R.string.verification_emoji_gift, R.drawable.ic_verification_gift)
|
||||
41 -> EmojiRepresentation("💡", R.string.verification_emoji_lightbulb, R.drawable.ic_verification_light_bulb)
|
||||
42 -> EmojiRepresentation("📕", R.string.verification_emoji_book, R.drawable.ic_verification_book)
|
||||
43 -> EmojiRepresentation("✏️", R.string.verification_emoji_pencil, R.drawable.ic_verification_pencil)
|
||||
44 -> EmojiRepresentation("📎", R.string.verification_emoji_paperclip, R.drawable.ic_verification_paperclip)
|
||||
45 -> EmojiRepresentation("✂️", R.string.verification_emoji_scissors, R.drawable.ic_verification_scissors)
|
||||
46 -> EmojiRepresentation("🔒", R.string.verification_emoji_lock, R.drawable.ic_verification_lock)
|
||||
47 -> EmojiRepresentation("🔑", R.string.verification_emoji_key, R.drawable.ic_verification_key)
|
||||
48 -> EmojiRepresentation("🔨", R.string.verification_emoji_hammer, R.drawable.ic_verification_hammer)
|
||||
49 -> EmojiRepresentation("☎️", R.string.verification_emoji_telephone, R.drawable.ic_verification_phone)
|
||||
50 -> EmojiRepresentation("🏁", R.string.verification_emoji_flag, R.drawable.ic_verification_flag)
|
||||
51 -> EmojiRepresentation("🚂", R.string.verification_emoji_train, R.drawable.ic_verification_train)
|
||||
52 -> EmojiRepresentation("🚲", R.string.verification_emoji_bicycle, R.drawable.ic_verification_bicycle)
|
||||
53 -> EmojiRepresentation("✈️", R.string.verification_emoji_airplane, R.drawable.ic_verification_airplane)
|
||||
54 -> EmojiRepresentation("🚀", R.string.verification_emoji_rocket, R.drawable.ic_verification_rocket)
|
||||
55 -> EmojiRepresentation("🏆", R.string.verification_emoji_trophy, R.drawable.ic_verification_trophy)
|
||||
56 -> EmojiRepresentation("⚽", R.string.verification_emoji_ball, R.drawable.ic_verification_ball)
|
||||
57 -> EmojiRepresentation("🎸", R.string.verification_emoji_guitar, R.drawable.ic_verification_guitar)
|
||||
58 -> EmojiRepresentation("🎺", R.string.verification_emoji_trumpet, R.drawable.ic_verification_trumpet)
|
||||
59 -> EmojiRepresentation("🔔", R.string.verification_emoji_bell, R.drawable.ic_verification_bell)
|
||||
60 -> EmojiRepresentation("⚓", R.string.verification_emoji_anchor, R.drawable.ic_verification_anchor)
|
||||
61 -> EmojiRepresentation("🎧", R.string.verification_emoji_headphone, R.drawable.ic_verification_headphone)
|
||||
62 -> EmojiRepresentation("📁", R.string.verification_emoji_folder, R.drawable.ic_verification_folder)
|
||||
/* 63 */ else -> EmojiRepresentation("📌", R.string.verification_emoji_pin, R.drawable.ic_verification_pin)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,14 +15,12 @@
|
|||
*/
|
||||
package im.vector.matrix.android.internal.crypto.verification
|
||||
|
||||
internal interface VerificationInfoDone : VerificationInfo<ValidVerificationInfoDone> {
|
||||
import im.vector.matrix.android.api.session.room.model.message.ValidVerificationDone
|
||||
|
||||
override fun asValidObject(): ValidVerificationInfoDone? {
|
||||
if (transactionId.isNullOrEmpty()) {
|
||||
return null
|
||||
}
|
||||
return ValidVerificationInfoDone
|
||||
internal interface VerificationInfoDone : VerificationInfo<ValidVerificationDone> {
|
||||
|
||||
override fun asValidObject(): ValidVerificationDone? {
|
||||
val validTransactionId = transactionId?.takeIf { it.isNotEmpty() } ?: return null
|
||||
return ValidVerificationDone(validTransactionId)
|
||||
}
|
||||
}
|
||||
|
||||
internal object ValidVerificationInfoDone
|
||||
|
|
|
@ -187,9 +187,12 @@ internal class DefaultQrCodeVerificationTransaction(
|
|||
// qrCodeData.sharedSecret will be used to send the start request
|
||||
start(otherQrCodeData.sharedSecret)
|
||||
|
||||
trust(canTrustOtherUserMasterKey,
|
||||
toVerifyDeviceIds.distinct(),
|
||||
eventuallyMarkMyMasterKeyAsTrusted = true)
|
||||
trust(
|
||||
canTrustOtherUserMasterKey = canTrustOtherUserMasterKey,
|
||||
toVerifyDeviceIds = toVerifyDeviceIds.distinct(),
|
||||
eventuallyMarkMyMasterKeyAsTrusted = true,
|
||||
autoDone = false
|
||||
)
|
||||
}
|
||||
|
||||
private fun start(remoteSecret: String, onDone: (() -> Unit)? = null) {
|
||||
|
@ -199,6 +202,7 @@ internal class DefaultQrCodeVerificationTransaction(
|
|||
throw IllegalStateException("Interactive Key verification already started")
|
||||
}
|
||||
|
||||
state = VerificationTxState.Started
|
||||
val startMessage = transport.createStartForQrCode(
|
||||
deviceId,
|
||||
transactionId,
|
||||
|
@ -208,7 +212,7 @@ internal class DefaultQrCodeVerificationTransaction(
|
|||
transport.sendToOther(
|
||||
EventType.KEY_VERIFICATION_START,
|
||||
startMessage,
|
||||
VerificationTxState.Started,
|
||||
VerificationTxState.WaitingOtherReciprocateConfirm,
|
||||
CancelCode.User,
|
||||
onDone
|
||||
)
|
||||
|
@ -244,6 +248,15 @@ internal class DefaultQrCodeVerificationTransaction(
|
|||
}
|
||||
}
|
||||
|
||||
fun onDoneReceived() {
|
||||
if (state != VerificationTxState.WaitingOtherReciprocateConfirm) {
|
||||
cancel(CancelCode.UnexpectedMessage)
|
||||
return
|
||||
}
|
||||
state = VerificationTxState.Verified
|
||||
transport.done(transactionId) {}
|
||||
}
|
||||
|
||||
override fun otherUserScannedMyQrCode() {
|
||||
when (qrCodeData) {
|
||||
is QrCodeData.VerifyingAnotherUser -> {
|
||||
|
@ -265,6 +278,6 @@ internal class DefaultQrCodeVerificationTransaction(
|
|||
override fun otherUserDidNotScannedMyQrCode() {
|
||||
// What can I do then?
|
||||
// At least remove the transaction...
|
||||
state = VerificationTxState.Cancelled(CancelCode.MismatchedKeys, true)
|
||||
cancel(CancelCode.MismatchedKeys)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M30,23.828c-0.391,0.392 -1.023,0.392 -1.414,0l-1.414,-1.414c-0.392,-0.391 -0.392,-1.024 0,-1.414L30,18.172c0.391,-0.391 1.023,-0.391 1.414,0l1.414,1.414c0.392,0.391 0.392,1.024 0,1.414L30,23.828zM15,8.828c-0.391,0.392 -1.023,0.392 -1.414,0l-1.414,-1.414c-0.392,-0.391 -0.392,-1.023 0,-1.414L15,3.172c0.391,-0.391 1.023,-0.391 1.414,0l1.414,1.414c0.392,0.391 0.392,1.023 0,1.414L15,8.828z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M2,22c2,0 11,1 11,1s1,9 1,11 -2,2 -3,1 -4,-6 -4,-6 -5,-3 -6,-4 -1,-3 1,-3zM4,6.039C7,6 29,7 29,7s0.924,22 0.962,25c0.038,3 -2.763,4.002 -3.862,0.001S21,15 21,15 7.045,10.583 3.995,9.898C0,9 0.999,6.077 4,6.039z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:pathData="M27,3c2,-2 7,-3 8,-2s0,6 -2,8 -19,18 -19,18 -6.5,4.5 -8,3 3,-8 3,-8S25,5 27,3z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M14,22s0.5,0.5 -4,5 -5,4 -5,4 -0.5,-0.5 4,-5 5,-4 5,-4zM29,4c1.657,0 3,1.343 3,3h0.805c0.114,-0.315 0.195,-0.645 0.195,-1 0,-1.657 -1.343,-3 -3,-3 -0.355,0 -0.685,0.081 -1,0.195V4z"
|
||||
android:fillColor="#66757F"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M30.5,18.572L26,25h2.575c-1.13,3.988 -4.445,7.05 -8.575,7.81V17h3c1.104,0 2,-0.896 2,-2s-0.896,-2 -2,-2h-3v-1.349h-4V13h-3c-1.104,0 -2,0.896 -2,2s0.896,2 2,2h3v15.81c-4.13,-0.76 -7.445,-3.821 -8.575,-7.81H10l-4.5,-6.428L1,25h3.33C5.705,31.289 11.299,36 18,36s12.295,-4.711 13.67,-11H35l-4.5,-6.428z"
|
||||
android:fillColor="#269"/>
|
||||
<path
|
||||
android:pathData="M18,0c-3.314,0 -6,2.686 -6,6s2.686,6 6,6 6,-2.686 6,-6 -2.686,-6 -6,-6zM18,9c-1.657,0 -3,-1.343 -3,-3s1.343,-3 3,-3 3,1.343 3,3 -1.343,3 -3,3z"
|
||||
android:fillColor="#269"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M24,7c-3,0 -3,1 -6,1s-3,-1 -6,-1c-4,0 -9,2 -9,9 0,11 6,20 10,20 3,0 3,-1 5,-1s2,1 5,1c4,0 10,-9 10,-20 0,-7.001 -5,-9 -9,-9z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M19,7s3,-4 8,-4c4,0 6,2 6,2s-4,3 -7,3 -7,-1 -7,-1z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M18,10c-0.552,0 -1,-0.448 -1,-1 0,-3.441 1.2,-6.615 3.293,-8.707 0.391,-0.391 1.023,-0.391 1.414,0s0.391,1.024 0,1.414C19.986,3.427 19,6.085 19,9c0,0.552 -0.448,1 -1,1z"
|
||||
android:fillColor="#662113"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
|
||||
android:fillColor="#F5F8FA"/>
|
||||
<path
|
||||
android:pathData="M18,11c-0.552,0 -1,-0.448 -1,-1L17,3c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v7c0,0.552 -0.448,1 -1,1zM11.417,15.5c-0.1,0 -0.202,-0.015 -0.302,-0.047l-8.041,-2.542c-0.527,-0.167 -0.819,-0.728 -0.652,-1.255 0.166,-0.527 0.73,-0.818 1.255,-0.652l8.042,2.542c0.527,0.167 0.819,0.729 0.652,1.255 -0.136,0.426 -0.53,0.699 -0.954,0.699zM25.042,15.209c-0.434,0 -0.833,-0.285 -0.96,-0.722 -0.154,-0.531 0.151,-1.085 0.682,-1.239l6.75,-1.958c0.531,-0.153 1.085,0.153 1.238,0.682 0.154,0.531 -0.151,1.085 -0.682,1.239l-6.75,1.958c-0.092,0.027 -0.186,0.04 -0.278,0.04zM27.043,30.167c-0.306,0 -0.606,-0.14 -0.803,-0.403l-5.459,-7.333c-0.33,-0.442 -0.238,-1.069 0.205,-1.399 0.442,-0.331 1.069,-0.238 1.399,0.205l5.459,7.333c0.33,0.442 0.238,1.069 -0.205,1.399 -0.179,0.134 -0.389,0.198 -0.596,0.198zM8.749,30.084c-0.197,0 -0.395,-0.058 -0.57,-0.179 -0.454,-0.316 -0.565,-0.938 -0.25,-1.392l5.125,-7.375c0.315,-0.454 0.938,-0.566 1.392,-0.251 0.454,0.315 0.565,0.939 0.25,1.392l-5.125,7.375c-0.194,0.281 -0.506,0.43 -0.822,0.43zM3.5,27.062c-0.44,0 -0.844,-0.293 -0.965,-0.738L0.347,18.262c-0.145,-0.533 0.17,-1.082 0.704,-1.227 0.535,-0.141 1.083,0.171 1.227,0.704l2.188,8.062c0.145,0.533 -0.17,1.082 -0.704,1.226 -0.088,0.025 -0.176,0.035 -0.262,0.035zM22,34h-9c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h9c0.553,0 1,0.447 1,1s-0.447,1 -1,1zM32.126,27.125c-0.079,0 -0.16,-0.009 -0.24,-0.029 -0.536,-0.132 -0.864,-0.674 -0.731,-1.21l2.125,-8.625c0.133,-0.536 0.679,-0.862 1.21,-0.732 0.536,0.132 0.864,0.674 0.731,1.211l-2.125,8.625c-0.113,0.455 -0.521,0.76 -0.97,0.76zM30.312,7.688c-0.17,0 -0.342,-0.043 -0.5,-0.134L22.25,3.179c-0.478,-0.277 -0.642,-0.888 -0.364,-1.367 0.275,-0.478 0.886,-0.643 1.366,-0.365l7.562,4.375c0.478,0.277 0.642,0.888 0.364,1.367 -0.185,0.32 -0.521,0.499 -0.866,0.499zM5.501,7.688c-0.312,0 -0.618,-0.145 -0.813,-0.417 -0.322,-0.45 -0.22,-1.074 0.229,-1.396l6.188,-4.438c0.449,-0.322 1.074,-0.219 1.396,0.229 0.322,0.449 0.219,1.074 -0.229,1.396L6.083,7.5c-0.177,0.126 -0.38,0.188 -0.582,0.188z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M25.493,13.516l-7.208,-5.083c-0.348,-0.245 -0.814,-0.243 -1.161,0.006l-7.167,5.167c-0.343,0.248 -0.494,0.684 -0.375,1.091l2.5,8.583c0.124,0.426 0.515,0.72 0.96,0.72L22,24c0.43,0 0.81,-0.274 0.948,-0.681l2.917,-8.667c0.141,-0.419 -0.011,-0.881 -0.372,-1.136zM1.292,19.542c0.058,0 0.117,-0.005 0.175,-0.016 0.294,-0.052 0.55,-0.233 0.697,-0.494l3.375,-6c0.051,-0.091 0.087,-0.188 0.108,-0.291L6.98,6.2c0.06,-0.294 -0.016,-0.6 -0.206,-0.832C6.584,5.135 6.3,5 6,5h-0.428C2.145,8.277 0,12.884 0,18c0,0.266 0.028,0.525 0.04,0.788l0.602,0.514c0.182,0.156 0.413,0.24 0.65,0.24zM10.617,2.995c0.106,0.219 0.313,0.373 0.553,0.412l6.375,1.042c0.04,0.006 0.081,0.01 0.121,0.01 0.04,0 0.081,-0.003 0.122,-0.01l6.084,-1c0.2,-0.033 0.38,-0.146 0.495,-0.314 0.116,-0.168 0.158,-0.375 0.118,-0.575l-0.292,-1.443C22.26,0.407 20.18,0 18,0c-2.425,0 -4.734,0.486 -6.845,1.356l-0.521,0.95c-0.117,0.213 -0.123,0.47 -0.017,0.689zM31.134,5.719l-1.504,-0.095c-0.228,-0.013 -0.455,0.076 -0.609,0.249 -0.152,0.173 -0.218,0.402 -0.175,0.63l1.167,6.198c0.017,0.086 0.048,0.148 0.093,0.224 1.492,2.504 3.152,5.301 3.381,5.782 0.024,0.084 0.062,0.079 0.114,0.151 0.14,0.195 0.372,0.142 0.612,0.142h0.007c0.198,0 0.323,0.094 1.768,-0.753 0.001,-0.083 0.012,-0.164 0.012,-0.247 0,-4.753 -1.856,-9.064 -4.866,-12.281zM14.541,33.376c0.011,-0.199 -0.058,-0.395 -0.191,-0.544l-4.5,-5c-0.06,-0.066 -0.131,-0.122 -0.211,-0.163 -5.885,-3.069 -5.994,-3.105 -6.066,-3.13 -0.078,-0.025 -0.161,-0.039 -0.242,-0.039 -0.537,0 -0.695,0.065 -1.185,2.024 2.236,4.149 6.053,7.316 10.644,8.703l1.5,-1.333c0.149,-0.132 0.239,-0.319 0.251,-0.518zM32.374,24.809c-0.189,-0.08 -0.405,-0.078 -0.592,0.005l-6.083,2.667c-0.106,0.046 -0.2,0.116 -0.274,0.205l-4.25,5.083c-0.129,0.154 -0.19,0.352 -0.172,0.552 0.02,0.2 0.117,0.384 0.272,0.51 0.683,0.559 1.261,1.03 1.767,1.44 4.437,-1.294 8.154,-4.248 10.454,-8.146l-0.712,-1.889c-0.072,-0.193 -0.221,-0.347 -0.41,-0.427z"
|
||||
android:fillColor="#31373D"/>
|
||||
</vector>
|
|
@ -0,0 +1,36 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M28,2c2.684,-1.342 5,4 3,13 -1.106,4.977 -5,9 -9,12s-11,-1 -7,-5 8,-7 10,-13c1.304,-3.912 1,-6 3,-7z"
|
||||
android:fillColor="#FFE8B6"/>
|
||||
<path
|
||||
android:pathData="M31,8c0,3 -1,9 -4,13s-7,5 -4,1 5,-7 6,-11 2,-7 2,-3z"
|
||||
android:fillColor="#FFD983"/>
|
||||
<path
|
||||
android:pathData="M22,20c-0.296,0.592 1.167,-3.833 -3,-6 -1.984,-1.032 -10,1 -4,1 3,0 4,2 2,4 -0.291,0.292 -0.489,0.603 -0.622,0.912 -0.417,0.346 -0.873,0.709 -1.378,1.088 -2.263,1.697 -5.84,4.227 -10,7 -3,2 -4,3 -4,4 0,3 9,3 14,1s10,-7 10,-7l4,-4c-3,-4 -7,-2 -7,-2z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M22,20s1.792,-4.729 -3,-7c-4.042,-1.916 -8,-1 -11,1s-2,4 -3,5 1,2 3,0 8.316,-4.895 11,-4c3,1 2,2.999 3,5z"
|
||||
android:fillColor="#FFE8B6"/>
|
||||
<path
|
||||
android:pathData="M26,35h-4c-2,0 -3,1 -4,1s-2,-2 0,-2 4,0 5,-1 5,2 3,2z"
|
||||
android:fillColor="#A6D388"/>
|
||||
<path
|
||||
android:pathData="M18,35m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M32.208,28S28,35 26,35h-4c-2,0 0,-1 1,-2s5,0 5,-6c0,-3 4.208,1 4.208,1z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M26,19c3,0 8,3 7,9s-5,7 -7,7h-2c-2,0 -1,-1 0,-2s4,0 4,-6c0,-3 -4,-7 -6,-7 0,0 2,-1 4,-1z"
|
||||
android:fillColor="#FFE8B6"/>
|
||||
<path
|
||||
android:pathData="M17,21c3,0 5,1 3,3 -1.581,1.581 -6,5 -10,6s-8,1 -5,-1 9.764,-8 12,-8z"
|
||||
android:fillColor="#FFD983"/>
|
||||
<path
|
||||
android:pathData="M2,31c1,0 1,0 1,0.667C3,32.333 3,33 2,33s-1,-1.333 -1,-1.333S1,31 2,31z"
|
||||
android:fillColor="#C1694F"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M28,13c0,11 5,10 5,15 0,0 0,2 -2,2H5c-2,0 -2,-2 -2,-2 0,-5 5,-4 5,-15C8,7.478 12.477,3 18,3s10,4.478 10,10z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M18,3m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M18,36c2.209,0 4,-1.791 4,-4h-8c0,2.209 1.791,4 4,4z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
</vector>
|
|
@ -0,0 +1,27 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M7,24c1.957,0 3.633,1.135 4.455,2.772l3.477,-1.739C13.488,22.058 10.446,20 6.916,20c-1.301,0 -2.534,0.285 -3.649,0.787l1.668,3.67C5.566,24.17 6.262,24 7,24zM29,24c1.467,0 2.772,0.643 3.688,1.648l2.897,-2.635C33.952,21.169 31.573,20 28.916,20c-3.576,0 -6.652,2.111 -8.073,5.15l3.648,1.722C25.293,25.18 27.003,24 29,24z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M7,22c-3.866,0 -7,3.134 -7,7s3.134,7 7,7 7,-3.134 7,-7 -3.133,-7 -7,-7zM7,34c-2.761,0 -5,-2.238 -5,-5s2.239,-5 5,-5 5,2.238 5,5 -2.238,5 -5,5zM29,22c-3.865,0 -7,3.134 -7,7s3.135,7 7,7c3.867,0 7,-3.134 7,-7s-3.133,-7 -7,-7zM29,34c-2.761,0 -5,-2.238 -5,-5s2.239,-5 5,-5c2.762,0 5,2.238 5,5s-2.238,5 -5,5z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M29.984,28.922c-0.005,-0.067 -0.021,-0.132 -0.04,-0.198 -0.019,-0.065 -0.04,-0.126 -0.071,-0.186 -0.013,-0.024 -0.015,-0.052 -0.029,-0.075l-7,-11c-0.297,-0.466 -0.914,-0.604 -1.381,-0.307 -0.299,0.19 -0.444,0.513 -0.445,0.843H12c-0.552,0 -1,0.447 -1,1 0,0.553 0.448,1 1,1h10c0.027,0 0.05,-0.014 0.077,-0.016L27.178,28H18c-0.552,0 -1,0.447 -1,1s0.448,1 1,1h11.001c0.116,0 0.23,-0.028 0.343,-0.069 0.034,-0.013 0.064,-0.027 0.097,-0.043 0.031,-0.017 0.066,-0.024 0.097,-0.044 0.03,-0.02 0.048,-0.051 0.075,-0.072 0.055,-0.044 0.103,-0.089 0.147,-0.143 0.041,-0.049 0.074,-0.099 0.104,-0.154 0.03,-0.056 0.055,-0.11 0.075,-0.172 0.021,-0.066 0.033,-0.132 0.04,-0.201 0.004,-0.036 0.021,-0.066 0.021,-0.102 0,-0.027 -0.014,-0.051 -0.016,-0.078z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M21.581,16l-2.899,8.117 -5.929,-6.775c-0.364,-0.415 -0.996,-0.459 -1.411,-0.094 -0.415,0.364 -0.457,0.995 -0.094,1.411l6.664,7.615 -0.854,2.39c-0.185,0.519 0.086,1.092 0.606,1.277 0.111,0.04 0.224,0.059 0.336,0.059 0.411,0 0.796,-0.255 0.942,-0.664L23.705,16h-2.124z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M7,30c-0.15,0 -0.303,-0.034 -0.446,-0.105 -0.494,-0.247 -0.694,-0.848 -0.447,-1.342l3.062,-6.106C9.186,22.419 11,19.651 11,17c0,-3.242 -2.293,-4.043 -2.316,-4.051 -0.524,-0.175 -0.807,-0.741 -0.632,-1.265 0.174,-0.524 0.739,-0.81 1.265,-0.632C9.467,11.102 13,12.333 13,17c0,3.068 -1.836,6.042 -2.131,6.497l-2.974,5.949C7.72,29.798 7.367,30 7,30z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M14.612,13.663c-0.054,0 -0.11,-0.004 -0.165,-0.014l-6,-1c-0.544,-0.091 -0.913,-0.606 -0.822,-1.151 0.091,-0.544 0.601,-0.913 1.151,-0.822l6,1c0.544,0.091 0.913,0.606 0.822,1.151 -0.082,0.489 -0.506,0.836 -0.986,0.836zM26.383,17c-0.03,0 -0.059,-0.002 -0.089,-0.006l-5.672,-0.708c-0.372,-0.046 -0.644,-0.374 -0.62,-0.748 0.023,-0.374 0.333,-0.665 0.707,-0.665 0.041,0 4.067,-0.018 5.989,-1.299 0.25,-0.167 0.582,-0.157 0.824,0.026 0.239,0.185 0.337,0.501 0.241,0.788l-0.709,2.127c-0.096,0.293 -0.369,0.485 -0.671,0.485z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M20,29c0,1.104 -0.895,2 -2,2 -1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2c1.105,0 2,0.896 2,2z"
|
||||
android:fillColor="#66757F"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35,26c0,2.209 -1.791,4 -4,4H5c-2.209,0 -4,-1.791 -4,-4V6.313C1,4.104 6.791,0 9,0h20.625C32.719,0 35,2.312 35,5.375V26z"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M33,30c0,2.209 -1.791,4 -4,4H7c-2.209,0 -4,-1.791 -4,-4V6c0,-4.119 -0.021,-4 5,-4h21c2.209,0 4,1.791 4,4v24z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M31,31c0,1.657 -1.343,3 -3,3H4c-1.657,0 -3,-1.343 -3,-3V7c0,-1.657 1.343,-3 3,-3h24c1.657,0 3,1.343 3,3v24z"
|
||||
android:fillColor="#E1E8ED"/>
|
||||
<path
|
||||
android:pathData="M31,32c0,2.209 -1.791,4 -4,4H6c-2.209,0 -4,-1.791 -4,-4V10c0,-2.209 1.791,-4 4,-4h21c2.209,0 4,1.791 4,4v22z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M29,32c0,2.209 -1.791,4 -4,4H6c-2.209,0 -4,-1.791 -4,-4V12c0,-2.209 1.791,-4 4,-4h19.335C27.544,8 29,9.456 29,11.665V32z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M6,6C4.312,6 4.269,4.078 5,3.25 5.832,2.309 7.125,2 9.438,2H11V0H8.281C4.312,0 1,2.5 1,5.375V32c0,2.209 1.791,4 4,4h2V6H6z"
|
||||
android:fillColor="#A0041E"/>
|
||||
</vector>
|
|
@ -0,0 +1,39 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M20.004,20.243c-0.426,0 -0.858,0.01 -1.294,0.031 -0.436,1.268 -0.468,2.747 0,5.097 0.328,1.646 2.659,6.299 4.584,7.933 0.683,0.58 1.638,0.884 2.69,0.884 2.144,0 4.691,-1.265 6.157,-4.034 3.001,-5.671 -3.474,-9.911 -12.137,-9.911z"
|
||||
android:fillColor="#1C6399"/>
|
||||
<path
|
||||
android:pathData="M33.666,1.973c-0.204,0 -0.425,0.021 -0.663,0.066 -3.182,0.601 -9.302,5.126 -14.287,11.771 0,0 -0.789,5.16 -0.789,6.194 0,0.336 1.264,0.5 3.058,0.5 3.717,0 9.709,-0.705 11.424,-2.041 1.898,-1.479 3.65,-9.804 3.488,-14.079 -0.046,-1.175 -0.662,-2.411 -2.231,-2.411z"
|
||||
android:fillColor="#1C6399"/>
|
||||
<path
|
||||
android:pathData="M27.098,13.936l6.629,-0.436s-1.055,3.619 -3.102,4.656 -7.719,1.5 -7.719,1.5 2.33,-4.261 3.286,-5.29c0.237,-0.256 0.559,-0.408 0.906,-0.43zM27.618,11.984l7.526,-8.151s0.002,5.365 -1.206,8.635c0,0 -5.383,0.379 -5.914,0.391 -0.703,0.016 -0.969,-0.265 -0.406,-0.875zM21.55,19.656l5.5,-8.547c0.188,-0.22 0.253,-0.52 0.171,-0.798l-0.968,-3.233 -6.722,6.609 -0.844,6.031 2.863,-0.062zM27.862,8.88c0.172,0.406 0.516,0.5 0.938,0.125s6.074,-6.094 6,-6.218c0,0 -2.832,-1.194 -7.8,3.463 0,0 0.69,2.224 0.862,2.63zM18.937,20.979l5.373,5.228c0.203,0.178 0.255,0.473 0.125,0.709L22.06,31.25s-4.187,-5.479 -3.123,-10.271zM26.219,27.28l5.549,0.741s-1.058,3.845 -3.394,4.854c-3.906,1.688 -5.312,-0.625 -5.312,-0.625l2.352,-4.562c0.151,-0.298 0.477,-0.463 0.805,-0.408zM20.269,20.854l5.375,4.958c0.077,0.066 0.169,0.11 0.269,0.129l6.119,0.903s-1.219,-3.031 -4.429,-4.531c-3.71,-1.733 -7.334,-1.459 -7.334,-1.459z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:pathData="M20.004,20.243c-0.426,0 -0.858,0.01 -1.294,0.031 -0.436,1.268 -0.468,2.747 0,5.097 0.328,1.646 2.659,6.299 4.584,7.933 0.683,0.58 1.638,0.884 2.69,0.884 2.144,0 4.691,-1.265 6.157,-4.034 3.001,-5.671 -3.474,-9.911 -12.137,-9.911zM30.541,29.569c-1.316,2.486 -3.05,3.473 -4.558,3.473 -0.767,0 -1.704,-0.313 -2.15,-0.691 -1.695,-1.439 -3.437,-4.58 -4.25,-7.224 -0.465,-1.513 -0.354,-4.022 -0.354,-4.022l0.667,-0.021c5.168,0 9.249,2.058 10.726,4.512 0.714,1.186 0.687,2.523 -0.081,3.973z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M33.666,3.223c0.231,0 0.935,0 0.981,1.208 0.102,2.681 -0.594,6.061 -1.397,8.882 -0.541,1.901 -1.586,3.292 -2.094,3.687 -0.56,0.436 -1.863,1.238 -3.719,1.563 -2.03,0.355 -4.207,0.833 -6.456,0.833 -0.827,0 -1.433,0.019 -1.794,-0.021 0.131,-1.218 0.489,-3.551 0.717,-5.064 3.768,-4.94 9.711,-10.361 13.331,-11.044 0.155,-0.029 0.3,-0.044 0.431,-0.044m0,-1.25c-0.204,0 -0.425,0.021 -0.663,0.066 -3.182,0.601 -9.302,5.126 -14.287,11.771 0,0 -0.789,5.16 -0.789,6.194 0,0.336 1.264,0.5 3.058,0.5 3.717,0 9.709,-0.705 11.424,-2.041 1.898,-1.479 3.65,-9.804 3.488,-14.079 -0.046,-1.175 -0.662,-2.411 -2.231,-2.411z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M3.902,30.154c1.466,2.769 4.012,4.034 6.157,4.034 1.052,0 2.007,-0.304 2.69,-0.884 1.925,-1.633 4.256,-6.286 4.584,-7.933 0.468,-2.35 0.436,-3.828 0,-5.097 -0.436,-0.021 -0.868,-0.031 -1.294,-0.031 -8.665,0 -15.139,4.24 -12.137,9.911z"
|
||||
android:fillColor="#1C6399"/>
|
||||
<path
|
||||
android:pathData="M2.376,1.973C0.807,1.973 0.19,3.209 0.146,4.383c-0.162,4.275 1.59,12.601 3.488,14.079 1.715,1.336 7.706,2.041 11.424,2.041 1.794,0 3.058,-0.164 3.058,-0.5 0,-1.033 -0.789,-6.194 -0.789,-6.194C12.341,7.165 6.22,2.64 3.039,2.039c-0.238,-0.045 -0.459,-0.066 -0.663,-0.066z"
|
||||
android:fillColor="#1C6399"/>
|
||||
<path
|
||||
android:pathData="M8.943,13.936L2.315,13.5s1.055,3.619 3.102,4.656 7.719,1.5 7.719,1.5 -2.33,-4.261 -3.286,-5.29c-0.237,-0.256 -0.559,-0.408 -0.907,-0.43zM8.424,11.984L0.898,3.833s-0.002,5.365 1.206,8.635c0,0 5.383,0.379 5.914,0.391 0.703,0.016 0.969,-0.265 0.406,-0.875zM14.492,19.656l-5.5,-8.547c-0.188,-0.22 -0.253,-0.52 -0.171,-0.798l0.968,-3.233 6.722,6.609 0.844,6.031 -2.863,-0.062zM8.179,8.88c-0.172,0.406 -0.516,0.5 -0.938,0.125s-6.074,-6.094 -6,-6.218c0,0 2.832,-1.194 7.8,3.463 0.001,0 -0.69,2.224 -0.862,2.63zM17.105,20.979l-5.373,5.228c-0.203,0.178 -0.255,0.473 -0.125,0.709l2.375,4.333c-0.001,0.001 4.187,-5.478 3.123,-10.27zM9.822,27.28l-5.549,0.741s1.058,3.845 3.394,4.854c3.906,1.688 5.312,-0.625 5.312,-0.625l-2.352,-4.562c-0.15,-0.298 -0.476,-0.463 -0.805,-0.408zM15.773,20.854l-5.375,4.958c-0.077,0.066 -0.169,0.11 -0.269,0.129l-6.119,0.903s1.219,-3.031 4.429,-4.531c3.709,-1.733 7.334,-1.459 7.334,-1.459z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:pathData="M3.902,30.154c1.466,2.769 4.012,4.034 6.157,4.034 1.052,0 2.007,-0.304 2.69,-0.884 1.925,-1.633 4.256,-6.286 4.584,-7.933 0.468,-2.35 0.436,-3.828 0,-5.097 -0.436,-0.021 -0.868,-0.031 -1.294,-0.031 -8.665,0 -15.139,4.24 -12.137,9.911zM5.42,25.595c1.477,-2.454 5.558,-4.512 10.726,-4.512l0.667,0.021s0.111,2.51 -0.354,4.022c-0.813,2.644 -2.555,5.785 -4.25,7.224 -0.446,0.379 -1.383,0.691 -2.15,0.691 -1.508,0 -3.242,-0.986 -4.558,-3.473 -0.768,-1.449 -0.795,-2.786 -0.081,-3.973z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M2.376,3.223c0.131,0 0.276,0.015 0.431,0.044 3.619,0.683 9.563,6.104 13.331,11.044 0.228,1.513 0.586,3.846 0.717,5.064 -0.361,0.04 -0.967,0.021 -1.794,0.021 -2.249,0 -4.426,-0.478 -6.456,-0.833 -1.856,-0.325 -3.159,-1.127 -3.719,-1.563 -0.508,-0.396 -1.553,-1.786 -2.094,-3.687 -0.803,-2.821 -1.499,-6.201 -1.397,-8.882 0.046,-1.208 0.749,-1.208 0.981,-1.208m0,-1.25C0.807,1.973 0.19,3.209 0.146,4.383c-0.162,4.275 1.59,12.601 3.488,14.079 1.715,1.336 7.706,2.041 11.424,2.041 1.794,0 3.058,-0.164 3.058,-0.5 0,-1.033 -0.789,-6.194 -0.789,-6.194C12.341,7.165 6.22,2.64 3.039,2.039c-0.238,-0.045 -0.459,-0.066 -0.663,-0.066z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M21.887,4.762c-0.25,-0.138 -0.563,-0.047 -0.701,0.203l-2.74,4.98c-0.018,0.033 -0.022,0.068 -0.032,0.102 -0.127,-0.007 -0.244,-0.018 -0.393,-0.018 -0.148,0 -0.266,0.01 -0.392,0.018 -0.01,-0.034 -0.014,-0.069 -0.032,-0.102l-2.74,-4.98c-0.138,-0.25 -0.452,-0.341 -0.702,-0.203 -0.25,0.137 -0.341,0.451 -0.203,0.701l2.655,4.826c-1.179,0.784 1.15,3.438 0.381,9.204 -1.033,7.75 1.033,9.817 1.033,9.817s2.067,-2.067 1.033,-9.817c-0.769,-5.766 1.56,-8.42 0.381,-9.204l2.656,-4.826c0.137,-0.25 0.046,-0.564 -0.204,-0.701z"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,51 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M30,4c-2.209,0 -4,1.791 -4,4v9.125c0,1.086 -0.887,1.96 -2,2.448V6c0,-3.313 -2.687,-6 -6,-6s-6,2.687 -6,6v17.629c-1.122,-0.475 -2,-1.371 -2,-2.504V16c0,-2.209 -1.791,-4 -4,-4s-4,1.791 -4,4v7c0,2.209 1.75,3.875 3.375,4.812 1.244,0.718 4.731,1.6 6.625,1.651V33c0,3.313 12,3.313 12,0v-7.549c1.981,-0.119 5.291,-0.953 6.479,-1.639C32.104,22.875 34,21.209 34,19V8c0,-2.209 -1.791,-4 -4,-4z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M12,6m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M23,3m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M21,9m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M14,16m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M20,20m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M13,26m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M5,27m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M9,20m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M2,18m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M34,8m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M28,11m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M32,16m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M29,24m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M22,30m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#3E721D"/>
|
||||
</vector>
|
|
@ -0,0 +1,42 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M0,26a18,10 0,1 0,36 0a18,10 0,1 0,-36 0z"
|
||||
android:fillColor="#8899A6"/>
|
||||
<path
|
||||
android:pathData="M0,24.25a18,10 0,1 0,36 0a18,10 0,1 0,-36 0z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M32.675,23.685c0,4.26 -6.57,7.712 -14.675,7.712S3.325,27.945 3.325,23.685c0,-4.258 6.57,-7.711 14.675,-7.711 8.104,0 14.675,3.453 14.675,7.711z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M32.233,22.543c0,9.854 -28.466,9.854 -28.466,0v-8.759h28.466v8.759z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M17.984,18.166c-8.984,0 -14.218,-4.132 -14.218,-4.132s-0.016,0.924 -0.016,1.685c0,0 0.032,4.898 2.572,4.898 2.459,0 2.28,2.348 3.834,2.591 1.541,0.241 1.712,-0.938 3.625,-0.938s2.25,2.106 4.203,2.106c2.289,0 2.477,-2.106 4.389,-2.106s2.132,1.224 3.386,0.885c1.507,-0.408 0.814,-2.537 3.887,-2.537 2.54,0 2.603,-4.648 2.603,-4.648 0,-0.76 -0.017,-1.935 -0.017,-1.935s-5.263,4.131 -14.248,4.131z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M32.675,12.737c0,4.259 -6.57,7.712 -14.675,7.712S3.325,16.996 3.325,12.737 9.895,5.025 18,5.025c8.104,0 14.675,3.453 14.675,7.712z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M25.664,13.784c-0.605,0 -1.095,-0.49 -1.095,-1.095V5.025c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.605 -0.49,1.095 -1.095,1.095z"
|
||||
android:fillColor="#FFF8E8"/>
|
||||
<path
|
||||
android:pathData="M25.664,6.667c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.32,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
|
||||
android:fillColor="#FAAA35"/>
|
||||
<path
|
||||
android:pathData="M18,17.068c-0.605,0 -1.095,-0.49 -1.095,-1.095V8.31c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.604 -0.49,1.094 -1.095,1.094z"
|
||||
android:fillColor="#FFF8E8"/>
|
||||
<path
|
||||
android:pathData="M18,9.952c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.321,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
|
||||
android:fillColor="#FAAA35"/>
|
||||
<path
|
||||
android:pathData="M10.336,13.784c-0.605,0 -1.095,-0.49 -1.095,-1.095V5.025c0,-0.605 0.49,-1.095 1.095,-1.095s1.095,0.49 1.095,1.095v7.664c0,0.605 -0.49,1.095 -1.095,1.095z"
|
||||
android:fillColor="#FFF8E8"/>
|
||||
<path
|
||||
android:pathData="M10.336,6.667c-1.162,0 -2.076,-0.532 -2.445,-1.423 -0.321,-0.773 -0.479,-2.45 2.058,-4.986 0.214,-0.214 0.56,-0.214 0.774,0 2.537,2.537 2.378,4.213 2.058,4.986 -0.369,0.891 -1.283,1.423 -2.445,1.423z"
|
||||
android:fillColor="#FAAA35"/>
|
||||
</vector>
|
|
@ -0,0 +1,36 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M32.348,13.999s3.445,-8.812 1.651,-11.998c-0.604,-1.073 -8,1.998 -10.723,5.442 0,0 -2.586,-0.86 -5.276,-0.86s-5.276,0.86 -5.276,0.86C10.001,3.999 2.605,0.928 2.001,2.001 0.207,5.187 3.652,13.999 3.652,13.999c-0.897,1.722 -1.233,4.345 -1.555,7.16 -0.354,3.086 0.35,5.546 0.658,6.089 0.35,0.617 2.123,2.605 4.484,4.306 3.587,2.583 8.967,3.445 10.761,3.445s7.174,-0.861 10.761,-3.445c2.361,-1.701 4.134,-3.689 4.484,-4.306 0.308,-0.543 1.012,-3.003 0.659,-6.089 -0.324,-2.814 -0.659,-5.438 -1.556,-7.16z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M2.359,2.971c0.2,-0.599 5.348,2.173 6.518,5.404 0,0 -3.808,2.624 -4.528,4.624 0,0 -2.99,-7.028 -1.99,-10.028z"
|
||||
android:fillColor="#F18F26"/>
|
||||
<path
|
||||
android:pathData="M5.98,7.261c0,-1.414 5.457,2.733 4.457,3.733s-1.255,0.72 -2.255,1.72S5.98,8.261 5.98,7.261z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M33.641,2.971c-0.2,-0.599 -5.348,2.173 -6.518,5.404 0,0 3.808,2.624 4.528,4.624 0,0 2.99,-7.028 1.99,-10.028z"
|
||||
android:fillColor="#F18F26"/>
|
||||
<path
|
||||
android:pathData="M30.02,7.261c0,-1.414 -5.457,2.733 -4.457,3.733s1.255,0.72 2.255,1.72 2.202,-4.453 2.202,-5.453z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M14.001,20.001c0,1.105 -0.896,1.999 -2,1.999s-2,-0.894 -2,-1.999c0,-1.104 0.896,-1.999 2,-1.999s2,0.896 2,1.999zM25.999,20.001c0,1.105 -0.896,1.999 -2,1.999 -1.105,0 -2,-0.894 -2,-1.999 0,-1.104 0.895,-1.999 2,-1.999s2,0.896 2,1.999z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M2.201,30.458c-0.148,0 -0.294,-0.065 -0.393,-0.19 -0.171,-0.217 -0.134,-0.531 0.083,-0.702 0.162,-0.127 4.02,-3.12 10.648,-2.605 0.275,0.021 0.481,0.261 0.46,0.536 -0.021,0.275 -0.257,0.501 -0.537,0.46 -6.233,-0.474 -9.915,2.366 -9.951,2.395 -0.093,0.07 -0.202,0.106 -0.31,0.106zM11.069,25.795c-0.049,0 -0.1,-0.007 -0.149,-0.022 -4.79,-1.497 -8.737,-0.347 -8.777,-0.336 -0.265,0.081 -0.543,-0.07 -0.623,-0.335 -0.079,-0.265 0.071,-0.543 0.335,-0.622 0.173,-0.052 4.286,-1.247 9.362,0.338 0.264,0.083 0.411,0.363 0.328,0.627 -0.066,0.213 -0.263,0.35 -0.476,0.35zM33.799,30.458c0.148,0 0.294,-0.065 0.393,-0.19 0.171,-0.217 0.134,-0.531 -0.083,-0.702 -0.162,-0.127 -4.02,-3.12 -10.648,-2.605 -0.275,0.021 -0.481,0.261 -0.46,0.536 0.022,0.275 0.257,0.501 0.537,0.46 6.233,-0.474 9.915,2.366 9.951,2.395 0.093,0.07 0.202,0.106 0.31,0.106zM24.931,25.795c0.049,0 0.1,-0.007 0.149,-0.022 4.79,-1.497 8.737,-0.347 8.777,-0.336 0.265,0.081 0.543,-0.07 0.623,-0.335 0.079,-0.265 -0.071,-0.543 -0.335,-0.622 -0.173,-0.052 -4.286,-1.247 -9.362,0.338 -0.264,0.083 -0.411,0.363 -0.328,0.627 0.066,0.213 0.263,0.35 0.476,0.35z"
|
||||
android:fillColor="#FEE7B8"/>
|
||||
<path
|
||||
android:pathData="M24.736,30.898c-0.097,-0.258 -0.384,-0.392 -0.643,-0.294 -0.552,0.206 -1.076,0.311 -1.559,0.311 -1.152,0 -1.561,-0.306 -2.033,-0.659 -0.451,-0.338 -0.956,-0.715 -1.99,-0.803v-2.339c0,-0.276 -0.224,-0.5 -0.5,-0.5s-0.5,0.224 -0.5,0.5v2.373c-0.81,0.115 -1.346,0.439 -1.816,0.743 -0.568,0.367 -1.059,0.685 -2.083,0.685 -0.482,0 -1.006,-0.104 -1.558,-0.311 -0.258,-0.095 -0.547,0.035 -0.643,0.294 -0.097,0.259 0.035,0.547 0.293,0.644 0.664,0.247 1.306,0.373 1.907,0.373 1.319,0 2.014,-0.449 2.627,-0.845 0.524,-0.339 0.98,-0.631 1.848,-0.635 0.992,0.008 1.358,0.278 1.815,0.621 0.538,0.403 1.147,0.859 2.633,0.859 0.601,0 1.244,-0.126 1.908,-0.373 0.259,-0.097 0.391,-0.385 0.294,-0.644z"
|
||||
android:fillColor="#67757F"/>
|
||||
<path
|
||||
android:pathData="M19.4,24.807h-2.8c-0.64,0 -1.163,0.523 -1.163,1.163 0,0.639 0.523,1.163 1.163,1.163h0.237v0.345c0,0.639 0.523,1.163 1.163,1.163s1.163,-0.523 1.163,-1.163v-0.345h0.237c0.639,0 1.163,-0.523 1.163,-1.163s-0.524,-1.163 -1.163,-1.163z"
|
||||
android:fillColor="#E75A70"/>
|
||||
<path
|
||||
android:pathData="M18.022,17.154c-0.276,0 -0.5,-0.224 -0.5,-0.5L17.522,8.37c0,-0.276 0.224,-0.5 0.5,-0.5s0.5,0.224 0.5,0.5v8.284c0,0.277 -0.223,0.5 -0.5,0.5zM21,15.572c-0.276,0 -0.5,-0.224 -0.5,-0.5 0,-2.882 1.232,-5.21 1.285,-5.308 0.13,-0.244 0.435,-0.334 0.677,-0.204 0.243,0.13 0.334,0.433 0.204,0.677 -0.012,0.021 -1.166,2.213 -1.166,4.835 0,0.276 -0.224,0.5 -0.5,0.5zM15,15.572c-0.276,0 -0.5,-0.224 -0.5,-0.5 0,-2.623 -1.155,-4.814 -1.167,-4.835 -0.13,-0.244 -0.038,-0.546 0.205,-0.677 0.242,-0.131 0.545,-0.039 0.676,0.204 0.053,0.098 1.285,2.426 1.285,5.308 0.001,0.276 -0.223,0.5 -0.499,0.5z"
|
||||
android:fillColor="#F18F26"/>
|
||||
</vector>
|
|
@ -0,0 +1,27 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M20,6.042c0,1.112 -0.903,2.014 -2,2.014s-2,-0.902 -2,-2.014V2.014C16,0.901 16.903,0 18,0s2,0.901 2,2.014v4.028z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M9.18,36c-0.224,0 -0.452,-0.052 -0.666,-0.159 -0.736,-0.374 -1.035,-1.28 -0.667,-2.027l8.94,-18.127c0.252,-0.512 0.768,-0.835 1.333,-0.835s1.081,0.323 1.333,0.835l8.941,18.127c0.368,0.747 0.07,1.653 -0.666,2.027 -0.736,0.372 -1.631,0.07 -1.999,-0.676L18.121,19.74l-7.607,15.425c-0.262,0.529 -0.788,0.835 -1.334,0.835z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M18.121,20.392c-0.263,0 -0.516,-0.106 -0.702,-0.295L3.512,5.998c-0.388,-0.394 -0.388,-1.031 0,-1.424s1.017,-0.393 1.404,0L18.121,17.96 31.324,4.573c0.389,-0.393 1.017,-0.393 1.405,0 0.388,0.394 0.388,1.031 0,1.424l-13.905,14.1c-0.187,0.188 -0.439,0.295 -0.703,0.295z"
|
||||
android:fillColor="#58595B"/>
|
||||
<path
|
||||
android:pathData="M34.015,19.385c0,8.898 -7.115,16.111 -15.894,16.111 -8.777,0 -15.893,-7.213 -15.893,-16.111 0,-8.9 7.116,-16.113 15.893,-16.113 8.778,-0.001 15.894,7.213 15.894,16.113z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M30.041,19.385c0,6.674 -5.335,12.084 -11.92,12.084 -6.583,0 -11.919,-5.41 -11.919,-12.084C6.202,12.71 11.538,7.3 18.121,7.3c6.585,-0.001 11.92,5.41 11.92,12.085z"
|
||||
android:fillColor="#E6E7E8"/>
|
||||
<path
|
||||
android:pathData="M30.04,1.257c-1.646,0 -3.135,0.676 -4.214,1.77l8.429,8.544C35.333,10.478 36,8.968 36,7.299c0,-3.336 -2.669,-6.042 -5.96,-6.042zM5.96,1.257c1.645,0 3.135,0.676 4.214,1.77l-8.429,8.544C0.667,10.478 0,8.968 0,7.299c0,-3.336 2.668,-6.042 5.96,-6.042z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M23,20h-5c-0.552,0 -1,-0.447 -1,-1v-9c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v8h4c0.553,0 1,0.448 1,1 0,0.553 -0.447,1 -1,1z"
|
||||
android:fillColor="#414042"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M27,8c-0.701,0 -1.377,0.106 -2.015,0.298 0.005,-0.1 0.015,-0.197 0.015,-0.298 0,-3.313 -2.687,-6 -6,-6 -2.769,0 -5.093,1.878 -5.785,4.427C12.529,6.154 11.783,6 11,6c-3.314,0 -6,2.686 -6,6 0,3.312 2.686,6 6,6 2.769,0 5.093,-1.878 5.785,-4.428 0.686,0.273 1.432,0.428 2.215,0.428 0.375,0 0.74,-0.039 1.096,-0.104 -0.058,0.36 -0.096,0.727 -0.096,1.104 0,3.865 3.135,7 7,7s7,-3.135 7,-7c0,-3.866 -3.135,-7 -7,-7z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M31,22c-0.467,0 -0.91,0.085 -1.339,0.204 0.216,-0.526 0.339,-1.1 0.339,-1.704 0,-2.485 -2.015,-4.5 -4.5,-4.5 -1.019,0 -1.947,0.351 -2.701,0.921C22.093,14.096 19.544,12 16.5,12c-2.838,0 -5.245,1.822 -6.131,4.357C9.621,16.125 8.825,16 8,16c-4.418,0 -8,3.582 -8,8 0,4.419 3.582,8 8,8h23c2.762,0 5,-2.238 5,-5s-2.238,-5 -5,-5z"
|
||||
android:fillColor="#E1E8ED"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M15.373,1.022C13.71,2.686 8.718,9.34 11.214,15.164c2.495,5.823 5.909,2.239 7.486,-2.495 0.832,-2.496 0.832,-5.824 -0.831,-10.815 -0.832,-2.496 -2.496,-0.832 -2.496,-0.832zM34.677,20.326c-1.663,1.663 -8.319,6.655 -14.142,4.159 -5.824,-2.496 -2.241,-5.909 2.495,-7.486 2.497,-0.832 5.823,-0.833 10.814,0.832 2.496,0.831 0.833,2.495 0.833,2.495z"
|
||||
android:fillColor="#5C913B"/>
|
||||
<path
|
||||
android:pathData="M32.314,6.317s-0.145,-1.727 -0.781,-2.253c-0.435,-0.546 -2.018,-0.546 -2.018,-0.546 -1.664,0 -20.798,2.496 -24.125,19.133 -0.595,2.973 4.627,8.241 7.638,7.638C29.667,26.963 32.313,7.98 32.314,6.317z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M24.769,8.816l-1.617,-1.617c-0.446,-0.446 -1.172,-0.446 -1.618,0 -0.446,0.447 -0.446,1.171 0,1.617l1.618,1.618c0.445,0.446 1.171,0.446 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.618zM15.064,10.435c0.446,0.446 1.171,0.446 1.617,0 0.447,-0.447 0.447,-1.171 0,-1.618l-0.77,-0.77c-0.654,0.398 -1.302,0.829 -1.938,1.297l1.091,1.091zM17.49,8.008c0.447,0.447 1.17,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-0.025,-0.025c-0.711,0.325 -1.431,0.688 -2.149,1.086l0.557,0.556zM12.637,12.861c0.447,0.446 1.171,0.446 1.619,0 0.446,-0.447 0.446,-1.171 0,-1.618l-1.198,-1.196c-0.586,0.474 -1.156,0.985 -1.707,1.528l1.286,1.286zM23.96,4.773c-0.447,0.447 -0.447,1.17 0,1.617l1.617,1.617c0.447,0.447 1.171,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-1.617,-1.617c-0.447,-0.446 -1.17,-0.446 -1.617,0zM26.368,3.977c0.006,0.007 0.008,0.016 0.015,0.023L28,5.617c0.447,0.447 1.171,0.447 1.617,0 0.446,-0.446 0.446,-1.17 0,-1.617l-0.462,-0.462c-0.54,0.044 -1.516,0.172 -2.787,0.439zM22.343,12.861c0.446,-0.447 0.446,-1.171 0,-1.618l-1.618,-1.617c-0.446,-0.447 -1.171,-0.447 -1.617,0 -0.447,0.446 -0.447,1.17 0,1.617l1.617,1.618c0.446,0.446 1.171,0.446 1.618,0zM19.915,15.287c0.447,-0.447 0.447,-1.171 0,-1.618l-1.617,-1.617c-0.446,-0.447 -1.17,-0.447 -1.617,0 -0.446,0.447 -0.446,1.171 0,1.617l1.617,1.618c0.447,0.446 1.172,0.446 1.617,0zM15.064,20.139c0.447,-0.447 0.446,-1.17 0,-1.618l-1.618,-1.617c-0.446,-0.446 -1.169,-0.447 -1.617,0 -0.446,0.447 -0.446,1.171 0,1.617l1.617,1.618c0.447,0.446 1.171,0.446 1.618,0zM14.256,14.478c-0.447,0.446 -0.447,1.171 0,1.618l1.617,1.617c0.447,0.446 1.17,0.446 1.618,0 0.447,-0.447 0.447,-1.171 0,-1.617l-1.618,-1.618c-0.447,-0.447 -1.171,-0.447 -1.617,0z"
|
||||
android:fillColor="#F7B82D"/>
|
||||
<path
|
||||
android:pathData="M27.866,23.574c-7.125,-2.374 -15.097,0.652 -19.418,3.576 2.925,-4.321 5.95,-12.294 3.576,-19.418 -0.934,-2.8 -5.602,-5.601 -8.402,-2.801 -0.934,0.934 -1.867,1.868 0,1.868s4.667,2.8 3.735,5.601c-0.835,2.505 -6.889,8.742 -4.153,15.375 -0.27,0.115 -0.523,0.279 -0.744,0.499l-0.715,0.714c-0.919,0.919 -0.919,2.409 0,3.329l0.716,0.716c0.919,0.92 2.409,0.92 3.328,0l0.715,-0.716c0.123,-0.123 0.227,-0.258 0.316,-0.398 6.999,3.84 13.747,-2.799 16.379,-3.677 2.8,-0.933 5.6,1.868 5.6,3.734 0,1.867 0.934,0.934 1.867,0 2.801,-2.8 -0.001,-7.47 -2.8,-8.402z"
|
||||
android:fillColor="#77B255"/>
|
||||
</vector>
|
|
@ -0,0 +1,45 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M15,27v6s0,3 3,3 3,-3 3,-3v-6h-6z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M15,33l0.001,0.037c1.041,-0.035 2.016,-0.274 2.632,-1.286 0.171,-0.281 0.563,-0.281 0.735,0 0.616,1.011 1.591,1.251 2.632,1.286V27h-6v6z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M31.954,21.619c0,6.276 -5,6.276 -5,6.276h-18s-5,0 -5,-6.276c0,-6.724 5,-18.619 14,-18.619s14,12.895 14,18.619z"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M18,20c-7,0 -10,3.527 -10,6.395 0,3.037 2.462,5.5 5.5,5.5 1.605,0 3.042,-0.664 4.049,-2.767 0.185,-0.386 0.716,-0.386 0.901,0 1.007,2.103 2.445,2.767 4.049,2.767 3.038,0 5.5,-2.463 5.5,-5.5C28,23.527 25,20 18,20z"
|
||||
android:fillColor="#F4C7B5"/>
|
||||
<path
|
||||
android:pathData="M15,22.895c-1,1 2,4 3,4s4,-3 3,-4 -5,-1 -6,0zM13,19c-1.1,0 -2,-0.9 -2,-2v-2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2v2c0,1.1 -0.9,2 -2,2zM23,19c-1.1,0 -2,-0.9 -2,-2v-2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2v2c0,1.1 -0.9,2 -2,2z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M15,3.608C13.941,2.199 11.681,0.881 2.828,4.2 -1.316,5.754 0.708,17.804 3.935,18.585c1.106,0 4.426,0 4.426,-8.852 0,-0.22 -0.002,-0.423 -0.005,-0.625C10.35,6.298 12.5,4.857 15,3.608zM33.172,4.2C24.319,0.881 22.059,2.199 21,3.608c2.5,1.25 4.65,2.691 6.644,5.501 -0.003,0.201 -0.005,0.404 -0.005,0.625 0,8.852 3.319,8.852 4.426,8.852 3.227,-0.782 5.251,-12.832 1.107,-14.386z"
|
||||
android:fillColor="#662113"/>
|
||||
<path
|
||||
android:pathData="M23.5,25.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M11.5,25.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M25.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M10.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M23,28m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M13,28m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M9.883,7.232c-0.259,-0.673 -0.634,-1.397 -1.176,-1.939 -0.391,-0.391 -1.023,-0.391 -1.414,0s-0.391,1.023 0,1.414c0.57,0.57 1.066,1.934 1.068,2.346 0.145,-0.404 0.839,-1.15 1.522,-1.821zM26.1,7.232c0.259,-0.672 0.634,-1.397 1.176,-1.939 0.391,-0.391 1.023,-0.391 1.414,0s0.391,1.023 0,1.414c-0.57,0.57 -1.066,1.934 -1.068,2.346 -0.145,-0.404 -0.839,-1.15 -1.522,-1.821z"
|
||||
android:fillColor="#380F09"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M34.453,15.573c-0.864,-7.3 -5.729,-10.447 -13.93,-10.447 -0.391,0 -0.763,0.017 -1.139,0.031 -0.013,-0.01 -0.022,-0.021 -0.035,-0.031C14.655,1.605 4.091,2.779 1.745,6.3c-3.255,4.883 -1.174,22.3 0,24.646 1.173,2.35 4.694,3.521 5.868,2.35 1.174,-1.176 0,-1.176 -1.173,-3.521 -0.85,-1.701 -0.466,-5.859 0.255,-8.471 0.028,0.168 0.068,0.322 0.1,0.486 0.39,2.871 1.993,7.412 1.993,9.744 0,3.564 2.102,4.107 4.694,4.107 2.593,0 4.695,-0.543 4.695,-4.107 0,-0.24 -0.008,-0.463 -0.012,-0.695 0.757,0.064 1.535,0.107 2.359,0.107 0.497,0 0.977,-0.016 1.448,-0.039 -0.004,0.209 -0.013,0.41 -0.013,0.627 0,3.564 2.103,4.107 4.694,4.107 2.593,0 4.695,-0.543 4.695,-4.107 0,-1.801 1.192,-4.625 2.039,-6.982 0.159,-0.354 0.291,-0.732 0.42,-1.117 0.118,1.307 0.193,2.706 0.193,4.206 0,0.553 0.447,1 1,1s1,-0.447 1,-1c0,-5.153 -0.771,-9.248 -1.547,-12.068z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M19.35,5.126S23,10.641 20,15.641c-3,5 -7.838,5 -11,5 -2,0 -1,2 0,2 1.414,0 8.395,1.211 12,-6 3,-6 -1.65,-11.515 -1.65,-11.515z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M6.5,14.141m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35,19c0,-2.062 -0.367,-4.039 -1.04,-5.868 -0.46,5.389 -3.333,8.157 -6.335,6.868 -2.812,-1.208 -0.917,-5.917 -0.777,-8.164 0.236,-3.809 -0.012,-8.169 -6.931,-11.794 2.875,5.5 0.333,8.917 -2.333,9.125 -2.958,0.231 -5.667,-2.542 -4.667,-7.042 -3.238,2.386 -3.332,6.402 -2.333,9 1.042,2.708 -0.042,4.958 -2.583,5.208 -2.84,0.28 -4.418,-3.041 -2.963,-8.333C2.52,10.965 1,14.805 1,19c0,9.389 7.611,17 17,17s17,-7.611 17,-17z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M28.394,23.999c0.148,3.084 -2.561,4.293 -4.019,3.709 -2.106,-0.843 -1.541,-2.291 -2.083,-5.291s-2.625,-5.083 -5.708,-6c2.25,6.333 -1.247,8.667 -3.08,9.084 -1.872,0.426 -3.753,-0.001 -3.968,-4.007C7.352,23.668 6,26.676 6,30c0,0.368 0.023,0.73 0.055,1.09C9.125,34.124 13.342,36 18,36s8.875,-1.876 11.945,-4.91c0.032,-0.36 0.055,-0.722 0.055,-1.09 0,-2.187 -0.584,-4.236 -1.606,-6.001z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M32.153,24c0,-1 1.523,-6.212 3.047,-7.735 1.522,-1.523 0,-3.166 -1.523,-3.166 -3.405,0 -9.139,6.901 -9.139,10.901 0,5 5.733,10.424 9.139,10.424 1.523,0 3.046,-1.404 1.523,-2.928C33.677,29.974 32.153,26 32.153,24z"
|
||||
android:fillColor="#3B88C3"/>
|
||||
<path
|
||||
android:pathData="M9.021,14.384c0,-3.046 1.497,-6.093 3.02,-6.093 4.569,0 13.322,4.823 14.845,12.439 1.524,7.616 -17.865,-6.346 -17.865,-6.346zM13.875,32.662c1.523,1.523 4.57,3.047 7.617,3.047 3.046,0 -3.111,-4.189 -1.523,-6.092 2.18,-2.617 -6.094,3.045 -6.094,3.045z"
|
||||
android:fillColor="#3B88C3"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M2.071,28.727c0.761,-2.285 0.19,-3.935 -1.143,-5.584 -1.333,-1.651 3.872,-1.904 5.585,0.381s5.713,6.281 2.158,6.22c-3.553,-0.065 -6.6,-1.017 -6.6,-1.017z"/>
|
||||
<path
|
||||
android:pathData="M0.168,23.488c0.959,0.874 7.223,4.309 7.165,5.137 -0.058,0.828 -2.279,-0.088 -3.105,-0.279 -1.485,-0.342 -1.905,-0.598 -2.317,-0.526 -0.84,0.321 -0.554,1.201 -0.242,1.704 1.498,2.61 7.286,4.662 12.16,4.662 8.412,0 16.802,-7.615 16.802,-10.662 0,-3.046 -9.345,-10.663 -17.757,-10.663C4.483,12.86 0.18,18.922 0.168,23.488z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M7,17c1.104,0 2,0.894 2,2 0,1.105 -0.896,2 -2,2 -1.105,0 -2,-0.896 -2,-2 0,-1.106 0.895,-2 2,-2z"/>
|
||||
<path
|
||||
android:pathData="M15.08,29.98c-0.156,0 -0.314,-0.036 -0.462,-0.113 -0.49,-0.256 -0.679,-0.86 -0.423,-1.35 1.585,-3.034 2.218,-5.768 0.154,-9.243 -0.282,-0.475 -0.126,-1.088 0.349,-1.371 0.475,-0.283 1.088,-0.124 1.371,0.349 2.693,4.535 1.46,8.202 -0.102,11.191 -0.178,0.342 -0.527,0.537 -0.887,0.537z"
|
||||
android:fillColor="#269"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M5,36c-1.104,0 -2,-0.896 -2,-2V3c0,-1.104 0.896,-2 2,-2s2,0.896 2,2v31c0,1.104 -0.896,2 -2,2z"
|
||||
android:fillColor="#8899A6"/>
|
||||
<path
|
||||
android:pathData="M5,1c-1.105,0 -2,0.895 -2,2v31c0,0.276 0.224,0.5 0.5,0.5s0.5,-0.224 0.5,-0.5V4.414C4,3.633 4.633,3 5.414,3H7c0,-1.105 -0.895,-2 -2,-2z"
|
||||
android:fillColor="#AAB8C2"/>
|
||||
<path
|
||||
android:pathData="M5,36c-1.104,0 -2,-0.896 -2,-2V3c0,-1.104 0.896,-2 2,-2s2,0.896 2,2v31c0,1.104 -0.896,2 -2,2z"
|
||||
android:fillColor="#8899A6"/>
|
||||
<path
|
||||
android:pathData="M5,1c-1.105,0 -2,0.895 -2,2v31c0,0.276 0.224,0.5 0.5,0.5s0.5,-0.224 0.5,-0.5V4.414C4,3.633 4.633,3 5.414,3H7c0,-1.105 -0.895,-2 -2,-2z"
|
||||
android:fillColor="#AAB8C2"/>
|
||||
<path
|
||||
android:pathData="M32.396,3.082C30.732,2.363 28.959,2.006 27,1.974l-1.375,0.38L21,3l-1,-0.128c-0.237,0.051 -0.476,0.099 -0.711,0.15 -2.169,0.469 -4.23,0.894 -6.289,0.982L12,5 6,4v19h6l1,2h0.077c2.244,-0.096 4.472,-0.556 6.633,-1.022l0.29,-0.061 0.646,-0.645 5.438,-0.708 0.916,0.41c1.68,0.032 3.193,0.335 4.604,0.944 0.309,0.133 0.665,0.103 0.945,-0.082 0.282,-0.186 0.451,-0.499 0.451,-0.836V4c0,-0.399 -0.237,-0.76 -0.604,-0.918z"
|
||||
android:fillColor="#31373D"/>
|
||||
<path
|
||||
android:pathData="M13,4.004c-0.239,0.01 -0.478,0.035 -0.717,0.035 -1.797,0 -3.396,-0.313 -4.887,-0.957 -0.308,-0.135 -0.665,-0.103 -0.945,0.083C6.169,3.349 6,3.664 6,4v6s3.292,1 7,1L13,4.004zM20,10s-3.75,1 -7,1v7c3,0 7,-1 7,-1v-7zM27,9L27,1.974c-0.096,-0.002 -0.186,-0.013 -0.283,-0.013 -2.267,0 -4.521,0.442 -6.717,0.911L20,10s2.167,-1 7,-1zM6.604,23.918c1.5,0.648 3.09,0.993 4.82,1.082L13,25v-7c-4.167,0 -7,-1 -7,-1v6c0,0.399 0.237,0.76 0.604,0.918zM20,17v6.916c2.313,-0.499 4.511,-0.955 6.717,-0.955 0.097,0 0.187,0.011 0.283,0.013L27,16c-4.5,0 -7,1 -7,1zM27,16c2.676,0 4.82,0.56 6,0.954L33,9.908C31.853,9.527 29.769,9 27,9v7z"
|
||||
android:fillColor="#E1E8ED"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M34.751,22c-3.382,0 -11.9,3.549 -15.751,7.158V17c0,-0.553 -0.447,-1 -1,-1 -0.552,0 -1,0.447 -1,1v12.341C13.247,25.669 4.491,22 1.052,22 0.123,22 11.913,35.992 17,34.599V35c0,0.553 0.448,1 1,1 0.553,0 1,-0.447 1,-1v-0.356C24.188,35.638 35.668,22 34.751,22z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M25,13.417C25,19.768 23.293,23 18,23s-7,-3.232 -7,-9.583S16,0 18,0s7,7.066 7,13.417z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M22.795,2c-0.48,0 -4.106,14.271 -4.803,19.279C17.246,16.271 13.481,2 13,2c-1,0 -6,9 -6,13s5.707,8 11,8 10.795,-4 10.795,-8 -5,-13 -6,-13z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M0,29c0,2.209 1.791,4 4,4h24c2.209,0 4,-1.791 4,-4V12c0,-2.209 -1.791,-4 -4,-4h-9c-3.562,0 -3,-5 -8.438,-5H4C1.791,3 0,4.791 0,7v22z"
|
||||
android:fillColor="#269"/>
|
||||
<path
|
||||
android:pathData="M30,10h-6.562C18,10 18.562,15 15,15H6c-2.209,0 -4,1.791 -4,4v10c0,0.553 -0.448,1 -1,1s-1,-0.447 -1,-1c0,2.209 1.791,4 4,4h26c2.209,0 4,-1.791 4,-4V14c0,-2.209 -1.791,-4 -4,-4z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M33,31c0,2.2 -1.8,4 -4,4H7c-2.2,0 -4,-1.8 -4,-4V14c0,-2.2 1.8,-4 4,-4h22c2.2,0 4,1.8 4,4v17z"
|
||||
android:fillColor="#FDD888"/>
|
||||
<path
|
||||
android:pathData="M36,11c0,2.2 -1.8,4 -4,4H4c-2.2,0 -4,-1.8 -4,-4s1.8,-4 4,-4h28c2.2,0 4,1.8 4,4z"
|
||||
android:fillColor="#FDD888"/>
|
||||
<path
|
||||
android:pathData="M3,15h30v2H3z"
|
||||
android:fillColor="#FCAB40"/>
|
||||
<path
|
||||
android:pathData="M19,3h-2c-1.657,0 -3,1.343 -3,3v29h8V6c0,-1.656 -1.343,-3 -3,-3z"
|
||||
android:fillColor="#DA2F47"/>
|
||||
<path
|
||||
android:pathData="M16,7c1.1,0 1.263,-0.516 0.361,-1.147L9.639,1.147c-0.902,-0.631 -2.085,-0.366 -2.631,0.589L4.992,5.264C4.446,6.219 4.9,7 6,7h10zM20,7c-1.1,0 -1.263,-0.516 -0.361,-1.147l6.723,-4.706c0.901,-0.631 2.085,-0.366 2.631,0.589l2.016,3.527C31.554,6.219 31.1,7 30,7L20,7z"
|
||||
android:fillColor="#DA2F47"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35.686,11.931c-0.507,-0.522 -6.83,-1.094 -13.263,-0.369 -1.283,0.144 -1.363,0.51 -4.425,0.63 -3.061,-0.119 -3.141,-0.485 -4.425,-0.63C7.14,10.837 0.817,11.41 0.31,11.931c-0.252,0.261 -0.252,2.077 0,2.338 0.254,0.261 1.035,0.606 1.403,1.827 0.237,0.787 0.495,5.864 2.281,7.377 1.768,1.498 7.462,1.217 9.326,0.262 2.536,-1.298 2.892,-5.785 3.292,-7.639 0.203,-0.939 1.162,-1.016 1.385,-1.016s1.182,0.077 1.385,1.016c0.401,1.853 0.757,6.34 3.292,7.639 1.865,0.955 7.558,1.236 9.326,-0.262 1.786,-1.513 2.044,-6.59 2.281,-7.377 0.368,-1.22 1.149,-1.566 1.403,-1.827 0.254,-0.26 0.254,-2.077 0.002,-2.338z"
|
||||
android:fillColor="#31373D"/>
|
||||
<path
|
||||
android:pathData="M14.644,15.699c-0.098,1.255 -0.521,4.966 -1.757,6.083 -1.376,1.243 -6.25,1.568 -7.79,0.044 -0.808,-0.799 -1.567,-4.018 -1.503,-6.816 0.038,-1.679 2.274,-2.02 5.462,-2.02 3.148,0 5.763,0.468 5.588,2.709zM21.351,15.699c0.098,1.255 0.521,4.966 1.757,6.083 1.376,1.243 6.25,1.568 7.79,0.044 0.808,-0.799 1.567,-4.018 1.503,-6.816 -0.038,-1.679 -2.274,-2.02 -5.462,-2.02 -3.147,0 -5.763,0.468 -5.588,2.709z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
|
||||
android:fillColor="#88C9F9"/>
|
||||
<path
|
||||
android:pathData="M2.812,25.375c-0.062,-1 -0.062,-1.187 -0.062,-2.375s0.562,-1 1.125,-1.562 0.438,-0.625 1.375,-1.241 0.438,-1.321 0.375,-1.696 -0.625,-0.063 -1.563,0.061 -0.624,-0.312 -1.187,-0.562 -0.812,-0.625 -1.188,-1.75 -0.438,-1.438 -0.312,-2.375 0.563,-0.063 0.625,0.937 0.938,0.625 0.938,1.25 1.25,1.312 1.562,1.5 1.188,-0.938 1.5,-1.25 0.688,-0.75 0.812,-1 1.688,-0.438 2,-0.438 1.062,0.938 1.062,1.375 0.375,1.625 0.688,2.312 1,0.812 1.625,1.312 0.938,0.062 0.938,0.062 -0.25,-1.062 -0.25,-1.938 0.75,-1.625 0.75,-1.625 1.188,0.875 1.25,1.125 1,1.125 1.062,1.562 0.562,1 1.483,1.125 0.267,-1.062 0.579,-1.875 0.75,-0.938 1.312,-1.062 1,-0.625 1.375,-1.125 1.062,-1.188 1,-1.75 -0.25,-0.938 -0.5,-1.625 0.75,-0.938 1.188,-1.75 0,0 1,-0.25 0.562,-0.25 0.75,-0.625 0.312,-0.75 0.125,-1.438 -0.875,0 -1.562,0S22.938,7.75 23,7s0.938,-0.562 1.562,-0.625 0.812,0.812 1,1 2.125,-1.25 2.625,-1.938 -0.437,-0.499 -0.187,-0.789 -1.5,-0.349 -2.188,-0.46 -2.437,-0.188 -3.124,-0.612 -3.312,-0.104 -4,0.237 -1.125,-0.029 -1.438,-0.5 -1.625,-0.235 -2,-0.5 -0.75,0.437 -1.25,0.625 -0.688,0.25 -1.312,-0.125 0.187,-0.813 -0.688,-1.125c-0.586,-0.209 -1.288,-0.087 -2.38,-0.111C3.902,5.092 0,11.087 0,18c0,3.42 0.971,6.605 2.627,9.327 0.308,-0.518 0.231,-1.217 0.185,-1.952zM17.312,24.188c0.438,0.062 1.688,0 0.688,-0.812s-1.562,-0.188 -1.438,-1.125 -0.625,-0.938 -0.625,-0.938c0,0.688 -0.5,1.438 0,2.125s0.938,0.687 1.375,0.75z"
|
||||
android:fillColor="#5C913B"/>
|
||||
<path
|
||||
android:pathData="M23.688,13.75c-1,-0.812 -0.25,-0.562 -0.125,-1.5s-0.625,-0.938 -0.625,-0.938c0,0.688 -0.5,1.438 0,2.125s-1,1.25 -0.562,1.312 2.312,-0.187 1.312,-0.999zM19.808,23.5c0.62,0.688 0.38,0 1.192,-0.312s-0.688,-1 -1.188,-1.375 -0.997,-0.389 -1.434,0.438c-0.496,0.937 0.81,0.561 1.43,1.249zM27.125,24.75c-0.312,-0.375 -1,-0.562 -1.75,-0.545 -0.75,0.018 -0.688,-0.83 -1.438,-0.768s-1.286,-0.504 -1.625,-0.679c-0.737,-0.38 -0.25,0.491 0,1.446s1.188,0.232 2.062,0.732 0.938,-0.188 1.75,0.062 1.125,0.812 1.904,0.75 -0.59,-0.623 -0.903,-0.998zM25.5,27.5c-0.312,-0.625 -1.226,-1.188 -1.601,-1.505s-0.962,-0.424 -1.462,-0.24 -0.812,0 -1.062,-0.495 -0.688,-0.322 -1.062,-0.26 -1.875,0.688 -2.75,1.125 -1.273,0.817 -1.847,1.375c-0.898,0.874 -0.403,0.312 0,0.875 0.403,0.562 -0.442,2.312 -0.504,3.312s1.602,-0.312 2.227,-0.438 0.441,-0.5 0.941,-0.875 0.825,-0.463 1.374,0.037c0.549,0.5 1.268,0.963 1.268,1.525s1.979,1.5 2.729,1.125 1.188,-1.125 1.875,-1.75 0.438,-1.812 0.625,-2.562 -0.439,-0.624 -0.751,-1.249z"
|
||||
android:fillColor="#5C913B"/>
|
||||
</vector>
|
|
@ -0,0 +1,51 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M21.828,20.559C19.707,21.266 19,17.731 19,17.731s0.965,-0.968 0.235,-1.829c1.138,-1.137 0.473,-1.707 0.473,-1.707 -1.954,-1.953 -5.119,-1.953 -7.071,0 -0.246,0.246 -0.414,0.467 -0.553,0.678 -0.061,0.086 -0.115,0.174 -0.17,0.262l-0.014,0.027c-0.285,0.475 -0.491,0.982 -0.605,1.509 -0.156,0.319 -0.379,0.659 -0.779,1.06 -1.414,1.414 -4.949,-0.707 -7.778,2.121 -0.029,0.029 -0.045,0.069 -0.069,0.104 -0.094,0.084 -0.193,0.158 -0.284,0.25 -3.319,3.319 -3.003,9.018 0.708,12.728 3.524,3.525 8.84,3.979 12.209,1.17 0.058,-0.031 0.117,-0.061 0.165,-0.109 0.071,-0.072 0.126,-0.14 0.193,-0.21 0.053,-0.049 0.109,-0.093 0.161,-0.143 1.693,-1.694 2.342,-3.73 2.086,-5.811 -0.068,-0.99 -0.165,-1.766 0.39,-2.321 0.707,-0.707 2.828,0 4.242,-1.414 2.117,-2.122 0.631,-3.983 -0.711,-3.537z"
|
||||
android:fillColor="#BB1A34"/>
|
||||
<path
|
||||
android:pathData="M14.987,18.91L30.326,3.572l2.121,2.122 -15.339,15.339z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M10.001,29.134c1.782,1.277 1.959,3.473 1.859,4.751 -0.042,0.528 0.519,0.898 0.979,0.637 2.563,-1.456 4.602,-3.789 4.038,-7.853 -0.111,-0.735 0.111,-2.117 2.272,-2.406 2.161,-0.29 2.941,-1.099 3.208,-1.485 0.153,-0.221 0.29,-0.832 -0.312,-0.854 -0.601,-0.022 -2.094,0.446 -3.431,-1.136 -1.337,-1.582 -1.559,-2.228 -1.604,-2.473 -0.045,-0.245 -1.409,-3.694 -2.525,-1.864 -0.927,1.521 -1.958,4.509 -5.287,5.287 -1.355,0.316 -3.069,1.005 -3.564,1.96 -0.832,1.604 0.46,2.725 1.574,3.483 1.115,0.757 2.793,1.953 2.793,1.953z"
|
||||
android:fillColor="#F5F8FA"/>
|
||||
<path
|
||||
android:pathData="M13.072,19.412l1.414,-1.415 3.536,3.535 -1.414,1.414zM8.597,23.886l1.415,-1.414 3.535,3.535 -1.414,1.414z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M7.396,27.189L29.198,5.427l0.53,0.531L7.927,27.72zM8.265,28.057L30.067,6.296l0.53,0.531L8.796,28.59z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M9.815,28.325c0.389,0.389 0.389,1.025 0,1.414s-1.025,0.389 -1.414,0l-2.122,-2.121c-0.389,-0.389 -0.389,-1.025 0,-1.414h0.001c0.389,-0.389 1.025,-0.389 1.414,0l2.121,2.121z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M13.028,29.556m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M14.445,31.881c0,0.379 -0.307,0.686 -0.686,0.686 -0.379,0 -0.686,-0.307 -0.686,-0.686 0,-0.379 0.307,-0.686 0.686,-0.686 0.379,0 0.686,0.307 0.686,0.686z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M35.088,4.54c0.415,0.415 0.415,1.095 -0.001,1.51l-4.362,3.02c-0.416,0.415 -1.095,0.415 -1.51,0L26.95,6.804c-0.415,-0.415 -0.415,-1.095 0.001,-1.51l3.02,-4.361c0.416,-0.415 1.095,-0.415 1.51,0l3.607,3.607z"
|
||||
android:fillColor="#BB1A34"/>
|
||||
<path
|
||||
android:pathData="M32.123,9.402m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M33.381,8.557m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M34.64,7.712m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M26.712,3.811m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M27.555,2.571m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M28.398,1.332m-0.625,0a0.625,0.625 0,1 1,1.25 0a0.625,0.625 0,1 1,-1.25 0"
|
||||
android:fillColor="#66757F"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M29.879,33.879C31.045,35.045 32.9,35.1 34,34s1.045,-2.955 -0.121,-4.121L12.121,8.121C10.955,6.955 9.1,6.9 8,8s-1.045,2.955 0.121,4.121l21.758,21.758z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M22,3s-6,-3 -11,2l-7,7s-1,-1 -2,0l-1,1s-1,1 0,2l4,4s1,1 2,0l1,-1s1,-1 0,-2l-0.078,-0.078c0.77,-0.743 1.923,-1.5 3.078,-0.922l4,-4s-1,-3 1,-5 3,-2 5,-2 1,-1 1,-1z"
|
||||
android:fillColor="#66757F"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M30.198,27.385L32,3.816c0,-0.135 -0.008,-0.263 -0.021,-0.373 0.003,-0.033 0.021,-0.075 0.021,-0.11C32,1.529 25.731,0.066 18,0.066c-7.732,0 -14,1.462 -14,3.267 0,0.035 0.017,0.068 0.022,0.102 -0.014,0.11 -0.022,0.23 -0.022,0.365l1.802,23.585C2.298,28.295 0,29.576 0,31c0,2.762 8.611,5 18,5s18,-2.238 18,-5c0,-1.424 -2.298,-2.705 -5.802,-3.615z"
|
||||
android:fillColor="#31373D"/>
|
||||
<path
|
||||
android:pathData="M17.536,6.595c-4.89,0 -8.602,-0.896 -10.852,-1.646 -0.524,-0.175 -0.808,-0.741 -0.633,-1.265 0.175,-0.524 0.739,-0.808 1.265,-0.633 2.889,0.963 10.762,2.891 21.421,-0.016 0.529,-0.142 1.082,0.168 1.227,0.702 0.146,0.533 -0.169,1.083 -0.702,1.228 -4.406,1.202 -8.347,1.63 -11.726,1.63z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M30.198,27.385l0.446,-5.829c-7.705,2.157 -17.585,2.207 -25.316,-0.377l0.393,5.142c0.069,0.304 0.113,0.65 0.113,1.076 0,1.75 1.289,2.828 2.771,3.396 4.458,1.708 13.958,1.646 18.807,0.149 1.467,-0.453 2.776,-1.733 2.776,-3.191 0,-0.119 0.015,-0.241 0.024,-0.361l-0.014,-0.005z"
|
||||
android:fillColor="#744EAA"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,0C9.716,0 3,6.716 3,15v9h3v-9C6,8 11.269,2.812 18,2.812 24.73,2.812 30,8 30,15v10l3,-1v-9c0,-8.284 -6.716,-15 -15,-15z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M6,27c0,1.104 -0.896,2 -2,2L2,29c-1.104,0 -2,-0.896 -2,-2v-9c0,-1.104 0.896,-2 2,-2h2c1.104,0 2,0.896 2,2v9zM36,27c0,1.104 -0.896,2 -2,2h-2c-1.104,0 -2,-0.896 -2,-2v-9c0,-1.104 0.896,-2 2,-2h2c1.104,0 2,0.896 2,2v9z"
|
||||
android:fillColor="#31373D"/>
|
||||
<path
|
||||
android:pathData="M19.182,10.016l-6.364,1.313c-0.45,0.093 -0.818,0.544 -0.818,1.004v16.185c-0.638,-0.227 -1.341,-0.36 -2.087,-0.36 -2.785,0 -5.042,1.755 -5.042,3.922 0,2.165 2.258,3.827 5.042,3.827C12.649,35.905 14.922,34 15,32L15,16.39l4.204,-0.872c0.449,-0.093 0.796,-0.545 0.796,-1.004v-3.832c0,-0.458 -0.368,-0.759 -0.818,-0.666zM27.182,13.167l-4.297,0.865c-0.45,0.093 -0.885,0.544 -0.885,1.003L22,26.44c0,-0.152 -0.878,-0.24 -1.4,-0.24 -2.024,0 -3.633,1.276 -3.633,2.852 0,1.574 1.658,2.851 3.683,2.851s3.677,-1.277 3.677,-2.851l-0.014,-11.286 2.869,-0.598c0.45,-0.093 0.818,-0.544 0.818,-1.003v-2.33c0,-0.459 -0.368,-0.76 -0.818,-0.668z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35.885,11.833c0,-5.45 -4.418,-9.868 -9.867,-9.868 -3.308,0 -6.227,1.633 -8.018,4.129 -1.791,-2.496 -4.71,-4.129 -8.017,-4.129 -5.45,0 -9.868,4.417 -9.868,9.868 0,0.772 0.098,1.52 0.266,2.241C1.751,22.587 11.216,31.568 18,34.034c6.783,-2.466 16.249,-11.447 17.617,-19.959 0.17,-0.721 0.268,-1.469 0.268,-2.242z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
</vector>
|
|
@ -0,0 +1,33 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M28.721,12.849s3.809,1.643 5.532,0.449c1.723,-1.193 2.11,-2.773 1.159,-4.736 -0.951,-1.961 -3.623,-2.732 -3.712,-5.292 0,0 -0.298,4.141 1.513,5.505 2.562,1.933 -0.446,4.21 -3.522,3.828 -3.078,-0.382 -0.97,0.246 -0.97,0.246z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M23.875,19.375s-0.628,2.542 0.187,5.03c0.145,0.341 0.049,0.556 -0.208,0.678 -0.256,0.122 -4.294,1.542 -4.729,1.771 -0.396,0.208 -1.142,1.78 -1.208,2.854 0.844,0.218 1.625,0.104 1.625,0.104s0.025,-1.915 0.208,-2.042c0.183,-0.127 5.686,-1.048 6.062,-1.771s1.611,-3.888 0.812,-5.292c-0.225,-0.395 -0.637,-1.15 -0.637,-1.15l-2.112,-0.182z"
|
||||
android:fillColor="#8A4B38"/>
|
||||
<path
|
||||
android:pathData="M17.917,29.708s-0.616,1.993 0.008,2.138c0.605,0.141 1.694,-0.388 1.755,-0.646 0.081,-0.343 0.216,-1.179 0.098,-1.366 -0.118,-0.186 -1.861,-0.126 -1.861,-0.126z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M11.812,21.875l-0.75,-2.562s-2.766,2.105 -3.938,3.594c-0.344,0.437 -1.847,3.198 -1.722,4.413 0.05,0.488 0.474,2.583 0.474,2.583l1.651,-0.465s-1.312,-1.896 -1.021,-2.562c1.428,-3.263 5.306,-5.001 5.306,-5.001z"
|
||||
android:fillColor="#8A4B38"/>
|
||||
<path
|
||||
android:pathData="M7.679,29.424c-0.172,-0.139 -1.803,0.479 -1.803,0.479s0.057,2.085 0.695,2.022c0.618,-0.061 1.48,-0.912 1.455,-1.175 -0.034,-0.351 -0.175,-1.187 -0.347,-1.326z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M27.188,11.188c-3.437,0.156 -7.207,0.438 -9.5,0.438 -3.655,0 -5.219,-1.428 -6.562,-2.625C8.838,6.964 8.167,4.779 6,5.501c0,0 -0.632,-0.411 -1.247,-0.778l-0.261,-0.152c-0.256,-0.148 -0.492,-0.276 -0.656,-0.347 -0.164,-0.072 -0.258,-0.087 -0.228,-0.01 0.019,0.051 0.093,0.143 0.236,0.286 0.472,0.472 0.675,0.95 0.728,1.395 -2.01,1.202 -2.093,2.276 -2.871,3.552 -0.492,0.807 -1.36,2.054 -1.56,2.515 -0.412,0.948 1.024,2.052 1.706,1.407 0.893,-0.845 0.961,-1.122 2.032,-1.744 0.983,-0.016 1.975,-0.416 2.308,-1.02 0,0 0.938,2.083 1.938,3.583s2.5,3.125 2.5,3.125c-0.131,1.227 0.12,2.176 0.549,2.922 -0.385,0.757 -0.924,1.807 -1.417,2.745 -0.656,1.245 -1.473,3.224 -1.208,3.618 0.534,0.798 2.719,2.926 4.137,3.311 1.03,0.28 2.14,0.437 2.14,0.437l-0.193,-1.574s-1.343,0.213 -1.875,-0.083c-1.427,-0.795 -2.666,-2.248 -2.708,-2.542 -0.07,-0.487 3.841,-2.868 5.14,-3.645 2.266,0.097 6.022,-0.369 8.626,-1.702 0.958,1.86 2.978,2.513 2.978,2.513s0.667,2.208 1.375,4.125c-1.017,0.533 -4.468,3.254 -4.975,3.854 -0.456,0.54 -0.856,2.49 -0.856,2.49 0.82,0.375 1.57,0.187 1.57,0.187s0.039,-1.562 0.385,-2.073c0.346,-0.511 4.701,-2.559 5.958,-3.458 0.492,-0.352 0.404,-0.903 0.262,-1.552 -0.321,-1.471 -0.97,-4.781 -0.971,-4.782 5.146,-2.979 6.458,-11.316 -2.354,-10.916z"
|
||||
android:fillColor="#C1694F"/>
|
||||
<path
|
||||
android:pathData="M22.336,33.782s-0.616,1.993 0.008,2.138c0.605,0.141 1.694,-0.388 1.755,-0.646 0.081,-0.343 0.216,-1.179 0.098,-1.366 -0.118,-0.187 -1.861,-0.126 -1.861,-0.126zM14.66,28.486c-0.167,0.146 0.164,1.859 0.164,1.859s2.064,0.299 2.111,-0.34c0.045,-0.62 -0.647,-1.614 -0.91,-1.634 -0.351,-0.027 -1.198,-0.031 -1.365,0.115z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M4.25,8.047m-0.349,0a0.349,0.349 0,1 1,0.698 0a0.349,0.349 0,1 1,-0.698 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M12.655,9.07c1.773,1.446 3.147,0.322 3.147,0.322 -1.295,-0.271 -2.056,-0.867 -2.708,-1.562 0.835,-0.131 1.287,-0.666 1.287,-0.666 -1.061,-0.013 -1.824,-0.3 -2.485,-0.699 -0.565,-0.614 -1.233,-1.202 -2.254,-1.631 -0.294,-0.125 -0.606,-0.21 -0.922,-0.276 -0.086,-0.025 -0.178,-0.063 -0.258,-0.073 -0.906,-0.114 -1.845,0.051 -2.737,0.603 -0.322,0.2 -0.214,0.639 0.117,0.623 1.741,-0.085 2.866,0.582 3.47,1.633 2.169,3.772 5.344,3.875 5.344,3.875s-1.29,-0.688 -2.001,-2.149z"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M21,18c0,-2.001 3.246,-3.369 5,-6 2,-3 2,-10 2,-10H8s0,7 2,10c1.754,2.631 5,3.999 5,6s-3.246,3.369 -5,6c-2,3 -2,10 -2,10h20s0,-7 -2,-10c-1.754,-2.631 -5,-3.999 -5,-6z"
|
||||
android:fillColor="#FFE8B6"/>
|
||||
<path
|
||||
android:pathData="M20.999,24c-0.999,0 -2.057,-1 -2.057,-2C19,20.287 19,19.154 19,18c0,-3.22 3.034,-4.561 4.9,-7H12.1c1.865,2.439 4.9,3.78 4.9,7 0,1.155 0,2.289 0.058,4 0,1 -1.058,2 -2.058,2 -2,0 -3.595,1.784 -4,3 -1,3 -1,7 -1,7h16s0,-4 -1,-7c-0.405,-1.216 -2.001,-3 -4.001,-3z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M30,34c0,1.104 -0.896,2 -2,2L8,36c-1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2h20c1.104,0 2,0.896 2,2zM30,2c0,1.104 -0.896,2 -2,2L8,4c-1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2h20c1.104,0 2,0.896 2,2z"
|
||||
android:fillColor="#3B88C3"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M32.614,3.414C28.31,-0.89 21.332,-0.89 17.027,3.414c-3.391,3.392 -4.098,8.439 -2.144,12.535l-3.916,3.915c-0.64,0.641 -0.841,1.543 -0.625,2.359l-1.973,1.972c-0.479,-0.48 -1.252,-0.48 -1.731,0l-1.731,1.732c-0.479,0.479 -0.479,1.253 0,1.732l-0.867,0.864c-0.479,-0.478 -1.253,-0.478 -1.731,0l-0.866,0.867c-0.479,0.479 -0.479,1.253 0,1.732 0.015,0.016 0.036,0.02 0.051,0.033 -0.794,1.189 -0.668,2.812 0.382,3.863 1.195,1.195 3.134,1.195 4.329,0L20.08,21.144c4.097,1.955 9.144,1.247 12.535,-2.146 4.302,-4.302 4.302,-11.28 -0.001,-15.584zM30.883,8.609c-0.957,0.956 -2.509,0.956 -3.464,0 -0.956,-0.956 -0.956,-2.507 0,-3.464 0.955,-0.956 2.507,-0.956 3.464,0 0.956,0.957 0.956,2.508 0,3.464z"
|
||||
android:fillColor="#C1694F"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M29,11.06c0,6.439 -5,7.439 -5,13.44 0,3.098 -3.123,3.359 -5.5,3.359 -2.053,0 -6.586,-0.779 -6.586,-3.361C11.914,18.5 7,17.5 7,11.06 7,5.029 12.285,0.14 18.083,0.14 23.883,0.14 29,5.029 29,11.06z"
|
||||
android:fillColor="#FFD983"/>
|
||||
<path
|
||||
android:pathData="M22.167,32.5c0,0.828 -2.234,2.5 -4.167,2.5 -1.933,0 -4.167,-1.672 -4.167,-2.5 0,-0.828 2.233,-0.5 4.167,-0.5 1.933,0 4.167,-0.328 4.167,0.5z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M22.707,10.293c-0.391,-0.391 -1.023,-0.391 -1.414,0L18,13.586l-3.293,-3.293c-0.391,-0.391 -1.023,-0.391 -1.414,0s-0.391,1.023 0,1.414L17,15.414V26c0,0.553 0.448,1 1,1s1,-0.447 1,-1V15.414l3.707,-3.707c0.391,-0.391 0.391,-1.023 0,-1.414z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M24,31c0,1.104 -0.896,2 -2,2h-8c-1.104,0 -2,-0.896 -2,-2v-6h12v6z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M11.999,32c-0.48,0 -0.904,-0.347 -0.985,-0.836 -0.091,-0.544 0.277,-1.06 0.822,-1.15l12,-2c0.544,-0.098 1.06,0.277 1.15,0.822 0.091,0.544 -0.277,1.06 -0.822,1.15l-12,2c-0.055,0.01 -0.111,0.014 -0.165,0.014zM11.999,28c-0.48,0 -0.904,-0.347 -0.985,-0.836 -0.091,-0.544 0.277,-1.06 0.822,-1.15l12,-2c0.544,-0.097 1.06,0.277 1.15,0.822 0.091,0.544 -0.277,1.06 -0.822,1.15l-12,2c-0.055,0.01 -0.111,0.014 -0.165,0.014z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
</vector>
|
|
@ -0,0 +1,54 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M32.325,10.958s2.315,0.024 3.511,1.177c-0.336,-4.971 -2.104,-8.249 -5.944,-10.13 -3.141,-1.119 -6.066,1.453 -6.066,1.453s0.862,-1.99 2.19,-2.746C23.789,0.236 21.146,0 18,0c-3.136,0 -5.785,0.227 -8.006,0.701 1.341,0.745 2.215,2.758 2.215,2.758S9.194,0.803 6,2.053C2.221,3.949 0.481,7.223 0.158,12.174c1.183,-1.19 3.55,-1.215 3.55,-1.215S-0.105,13.267 0.282,16.614c0.387,2.947 1.394,5.967 2.879,8.722C3.039,22.15 5.917,20 5.917,20s-2.492,5.96 -0.581,8.738c1.935,2.542 4.313,4.641 6.976,5.916 -0.955,-1.645 -0.136,-3.044 -0.103,-2.945 0.042,0.125 0.459,3.112 2.137,3.743 1.178,0.356 2.4,0.548 3.654,0.548 1.292,0 2.55,-0.207 3.761,-0.583 1.614,-0.691 2.024,-3.585 2.064,-3.708 0.032,-0.098 0.843,1.287 -0.09,2.921 2.706,-1.309 5.118,-3.463 7.064,-6.073 1.699,-2.846 -0.683,-8.557 -0.683,-8.557s2.85,2.13 2.757,5.288c1.556,-2.906 2.585,-6.104 2.911,-9.2 -0.035,-3.061 -3.459,-5.13 -3.459,-5.13z"
|
||||
android:fillColor="#662113"/>
|
||||
<path
|
||||
android:pathData="M13.859,9.495c0.596,2.392 0.16,4.422 -2.231,5.017 -2.392,0.596 -6.363,0.087 -6.958,-2.304 -0.596,-2.392 0.469,-5.39 1.81,-5.724 1.341,-0.334 6.784,0.62 7.379,3.011zM22.963,27.927c0,2.74 -2.222,4.963 -4.963,4.963s-4.963,-2.223 -4.963,-4.963c0,-2.741 2.223,-4.964 4.963,-4.964 2.741,0 4.963,2.222 4.963,4.964z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M21.309,27.927c0,1.827 -1.481,3.309 -3.309,3.309s-3.309,-1.481 -3.309,-3.309c0,-1.827 1.481,-3.31 3.309,-3.31s3.309,1.483 3.309,3.31z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M11.052,8.997c0.871,1.393 0.447,3.229 -0.946,4.1 -1.394,0.871 -2.608,0.797 -3.479,-0.596 -0.871,-1.394 -0.186,-4.131 0.324,-4.45 0.51,-0.319 3.23,-0.448 4.101,0.946z"
|
||||
android:fillColor="#E6AAAA"/>
|
||||
<path
|
||||
android:pathData="M22.141,9.495c-0.596,2.392 -0.159,4.422 2.232,5.017 2.392,0.596 6.363,0.087 6.959,-2.304 0.596,-2.392 -0.47,-5.39 -1.811,-5.724 -1.342,-0.334 -6.786,0.62 -7.38,3.011z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M24.948,8.997c-0.871,1.393 -0.447,3.229 0.945,4.1 1.394,0.871 2.608,0.797 3.479,-0.596 0.871,-1.394 0.185,-4.131 -0.324,-4.45 -0.51,-0.319 -3.229,-0.448 -4.1,0.946z"
|
||||
android:fillColor="#E6AAAA"/>
|
||||
<path
|
||||
android:pathData="M18,7.125h-0.002C5.167,7.126 7.125,12.083 8.5,18.667 9.875,25.25 10.384,27 10.384,27h15.228s0.51,-1.75 1.885,-8.333C28.872,12.083 30.829,7.126 18,7.125z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M12,16s0,-1.5 1.5,-1.5S15,16 15,16v1.5s0,1.5 -1.5,1.5 -1.5,-1.5 -1.5,-1.5L12,16zM21,16s0,-1.5 1.5,-1.5S24,16 24,16v1.5s0,1.5 -1.5,1.5 -1.5,-1.5 -1.5,-1.5L21,16z"
|
||||
android:fillColor="#272B2B"/>
|
||||
<path
|
||||
android:pathData="M20.168,21.521c-1.598,0 -1.385,0.848 -2.168,2.113 -0.783,-1.266 -0.571,-2.113 -2.168,-2.113 -6.865,0 -6.837,0.375 -6.865,2.828 -0.058,4.986 2.802,6.132 5.257,6.06 1.597,-0.048 2.994,-0.88 3.777,-2.131 0.783,1.251 2.179,2.083 3.776,2.131 2.455,0.072 5.315,-1.073 5.257,-6.06 -0.029,-2.453 -0.001,-2.828 -6.866,-2.828z"
|
||||
android:fillColor="#FFE8B6"/>
|
||||
<path
|
||||
android:pathData="M14.582,21.411c-1.14,0.233 2.279,4.431 3.418,4.431s4.559,-4.198 3.419,-4.431c-1.14,-0.232 -5.698,-0.232 -6.837,0z"
|
||||
android:fillColor="#272B2B"/>
|
||||
<path
|
||||
android:pathData="M11.5,24.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M10.5,26.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M12.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M24.5,24.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M25.5,26.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M23.5,27.5m-0.5,0a0.5,0.5 0,1 1,1 0a0.5,0.5 0,1 1,-1 0"
|
||||
android:fillColor="#D99E82"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,3C12.477,3 8,7.477 8,13v10h4V13c0,-3.313 2.686,-6 6,-6s6,2.687 6,6v10h4V13c0,-5.523 -4.477,-10 -10,-10z"
|
||||
android:fillColor="#AAB8C2"/>
|
||||
<path
|
||||
android:pathData="M31,32c0,2.209 -1.791,4 -4,4H9c-2.209,0 -4,-1.791 -4,-4V20c0,-2.209 1.791,-4 4,-4h18c2.209,0 4,1.791 4,4v12z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M30.312,0.776C32,19 20,32 0.776,30.312c8.199,7.717 21.091,7.588 29.107,-0.429C37.9,21.867 38.03,8.975 30.312,0.776z"
|
||||
android:fillColor="#FFD983"/>
|
||||
<path
|
||||
android:pathData="M30.705,15.915c-0.453,0.454 -0.453,1.189 0,1.644 0.454,0.453 1.189,0.453 1.643,0 0.454,-0.455 0.455,-1.19 0,-1.644 -0.453,-0.454 -1.189,-0.454 -1.643,0zM14.683,30.295c-0.682,0.681 -0.682,1.783 0,2.465 0.68,0.682 1.784,0.682 2.464,0 0.681,-0.682 0.681,-1.784 0,-2.465 -0.68,-0.682 -1.784,-0.682 -2.464,0zM28.651,28.148c-1.135,1.135 -2.974,1.135 -4.108,0 -1.135,-1.135 -1.135,-2.975 0,-4.107 1.135,-1.136 2.974,-1.136 4.108,0 1.135,1.133 1.135,2.973 0,4.107z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M27,33c0,2.209 -1.791,3 -4,3H13c-2.209,0 -4,-0.791 -4,-3s3,-7 3,-13 12,-6 12,0 3,10.791 3,13z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M34.666,11.189l-0.001,-0.002c-0.96,-2.357 -2.404,-4.453 -4.208,-6.182h-0.003C27.222,1.904 22.839,0 18,0 13.638,0 9.639,1.541 6.524,4.115c-2.19,1.809 -3.941,4.13 -5.076,6.785C0.518,13.075 0,15.473 0,18c0,2.209 1.791,4 4,4h28c2.209,0 4,-1.791 4,-4 0,-2.417 -0.48,-4.713 -1.334,-6.811z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M7.708,16.583c3.475,0 6.292,-2.817 6.292,-6.292S11.184,4 7.708,4c-0.405,0 -0.8,0.042 -1.184,0.115 -2.19,1.809 -3.941,4.13 -5.076,6.785 0.306,3.189 2.991,5.683 6.26,5.683z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M7.708,4.25c3.331,0 6.041,2.71 6.041,6.042s-2.71,6.042 -6.041,6.042c-3.107,0 -5.678,-2.314 -6.006,-5.394 1.097,-2.541 2.8,-4.817 4.931,-6.59 0.364,-0.067 0.726,-0.1 1.075,-0.1m0,-0.25c-0.405,0 -0.8,0.042 -1.184,0.115 -2.19,1.809 -3.941,4.13 -5.076,6.785 0.306,3.189 2.992,5.683 6.261,5.683 3.475,0 6.291,-2.817 6.291,-6.292S11.184,4 7.708,4zM26,9.5c0,2.485 2.015,4.5 4.5,4.5 1.887,0 3.497,-1.164 4.166,-2.811l-0.001,-0.002c-0.96,-2.357 -2.404,-4.453 -4.208,-6.182C27.992,5.028 26,7.029 26,9.5z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M21.5,16m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M20,5m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M10,12c3,5 0,10.692 -3,9.692s-4,2 -1,3 9.465,-0.465 13,-4c1,-1 2,-1 2,-1L10,12z"
|
||||
android:fillColor="#553788"/>
|
||||
<path
|
||||
android:pathData="M26,12c-3,5 0,10.692 3,9.692s4,2 1,3 -9.465,-0.465 -13,-4c-1,-1 -2,-1 -2,-1L26,12z"
|
||||
android:fillColor="#553788"/>
|
||||
<path
|
||||
android:pathData="M30.188,16c-3,5 0,10.692 3,9.692s4,2 1,3 -9.465,-0.465 -13,-4c-1,-1 -2,-1 -2,-1l11,-7.692zM5.812,16c3,5 0,10.692 -3,9.692s-4,2 -1,3 9.465,-0.465 13,-4c1,-1 2,-1 2,-1L5.812,16z"
|
||||
android:fillColor="#744EAA"/>
|
||||
<path
|
||||
android:pathData="M33.188,31.375c-2.729,0.91 -6.425,-5.626 -4.812,-10.578C30.022,17.554 31,13.94 31,11c0,-7.18 -5.82,-11 -13,-11S5,3.82 5,11c0,2.94 0.978,6.554 2.624,9.797 1.613,4.952 -2.083,11.488 -4.812,10.578 -3,-1 -4,3 -1,4s8.31,-0.627 12,-4c2.189,-2 4.189,-2 4.189,-2s2,0 4.188,2c3.69,3.373 9,5 12,4s1.999,-5 -1.001,-4z"
|
||||
android:fillColor="#9266CC"/>
|
||||
<path
|
||||
android:pathData="M14,21m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M22,21m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,42 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M7,6m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
|
||||
android:fillColor="#272B2B"/>
|
||||
<path
|
||||
android:pathData="M29,6m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
|
||||
android:fillColor="#272B2B"/>
|
||||
<path
|
||||
android:pathData="M7,6m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M29,6m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M35,22c0,7 -6.375,12 -17,12S1,29 1,22C1,22 2.308,0 18,0s17,22 17,22z"
|
||||
android:fillColor="#EEE"/>
|
||||
<path
|
||||
android:pathData="M18,30m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M18,30m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M20.709,12.654C25.163,9.878 32,17 26.952,22.67 23.463,26.591 20,25 20,25s-2.636,-10.26 0.709,-12.346zM15.267,12.665C10.813,9.888 3.976,17.01 9.023,22.681c3.49,3.92 6.953,2.329 6.953,2.329s2.636,-10.26 -0.709,-12.345z"
|
||||
android:fillColor="#272B2B"/>
|
||||
<path
|
||||
android:pathData="M11,17s0,-2 2,-2 2,2 2,2v2s0,2 -2,2 -2,-2 -2,-2v-2z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M18,20S7,23.687 7,27s2.687,6 6,6c2.088,0 3.925,-1.067 5,-2.685C19.074,31.933 20.912,33 23,33c3.313,0 6,-2.687 6,-6s-11,-7 -11,-7z"
|
||||
android:fillColor="#FFF"/>
|
||||
<path
|
||||
android:pathData="M21,17s0,-2 2,-2 2,2 2,2v2s0,2 -2,2 -2,-2 -2,-2v-2z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M13.125,25c-1.624,1 3.25,4 4.875,4s6.499,-3 4.874,-4 -8.124,-1 -9.749,0z"
|
||||
android:fillColor="#272B2B"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35.354,25.254c0.217,-2.391 -0.513,-4.558 -2.057,-6.102L17.033,2.89c-0.391,-0.391 -1.024,-0.391 -1.414,0 -0.391,0.391 -0.391,1.024 0,1.414l16.264,16.263c1.116,1.117 1.642,2.717 1.479,4.506 -0.159,1.748 -0.957,3.456 -2.188,4.686 -1.23,1.23 -2.938,2.027 -4.685,2.187 -1.781,0.161 -3.39,-0.362 -4.506,-1.479L3.598,12.082c-0.98,-0.98 -1.059,-2.204 -0.953,-3.058 0.15,-1.196 0.755,-2.401 1.66,-3.307 1.7,-1.7 4.616,-2.453 6.364,-0.707l14.85,14.849c1.119,1.12 0.026,2.803 -0.708,3.536 -0.733,0.735 -2.417,1.826 -3.535,0.707L9.962,12.789c-0.391,-0.391 -1.024,-0.39 -1.414,0 -0.391,0.391 -0.391,1.023 0,1.414l11.313,11.314c1.859,1.858 4.608,1.05 6.363,-0.707 1.758,-1.757 2.565,-4.507 0.708,-6.364L12.083,3.597c-2.62,-2.62 -6.812,-1.673 -9.192,0.706C1.677,5.517 0.864,7.147 0.661,8.775c-0.229,1.833 0.312,3.509 1.523,4.721l18.384,18.385c1.365,1.365 3.218,2.094 5.281,2.094 0.27,0 0.544,-0.013 0.82,-0.037 2.206,-0.201 4.362,-1.209 5.918,-2.765 1.558,-1.556 2.565,-3.713 2.767,-5.919z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M35.222,33.598c-0.647,-2.101 -1.705,-6.059 -2.325,-7.566 -0.501,-1.216 -0.969,-2.438 -1.544,-3.014 -0.575,-0.575 -1.553,-0.53 -2.143,0.058 0,0 -2.469,1.675 -3.354,2.783 -1.108,0.882 -2.785,3.357 -2.785,3.357 -0.59,0.59 -0.635,1.567 -0.06,2.143 0.576,0.575 1.798,1.043 3.015,1.544 1.506,0.62 5.465,1.676 7.566,2.325 0.359,0.11 1.74,-1.271 1.63,-1.63z"
|
||||
android:fillColor="#D99E82"/>
|
||||
<path
|
||||
android:pathData="M13.643,5.308c1.151,1.151 1.151,3.016 0,4.167l-4.167,4.168c-1.151,1.15 -3.018,1.15 -4.167,0L1.141,9.475c-1.15,-1.151 -1.15,-3.016 0,-4.167l4.167,-4.167c1.15,-1.151 3.016,-1.151 4.167,0l4.168,4.167z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M31.353,23.018l-4.17,4.17 -4.163,4.165L7.392,15.726l8.335,-8.334 15.626,15.626z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M32.078,34.763s2.709,1.489 3.441,0.757c0.732,-0.732 -0.765,-3.435 -0.765,-3.435s-2.566,0.048 -2.676,2.678z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M2.183,10.517l8.335,-8.335 5.208,5.209 -8.334,8.335z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M3.225,11.558l8.334,-8.334 1.042,1.042L4.267,12.6zM5.308,13.644l8.335,-8.335 1.042,1.042 -8.335,8.334z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M28.068,31.355c-2.229,0 -8.468,0.785 -10.068,1.832 -1.601,-1.047 -7.84,-1.832 -10.069,-1.832 -2.564,0 -1.161,1.039 -1.161,2.322C6.77,34.96 5.367,36 7.931,36c2.229,0 8.468,-0.785 10.069,-1.832C19.601,35.215 25.84,36 28.068,36c2.565,0 1.161,-1.04 1.161,-2.322 0,-1.283 1.405,-2.323 -1.161,-2.323z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M31.73,15.866c-1.25,-2.499 -3.152,-4.995 -4.942,-6.723C24.337,3.711 20.759,0 18,0s-6.337,3.71 -8.788,9.143c-1.791,1.729 -3.693,4.224 -4.943,6.724 -2.438,4.876 -3.116,11.426 -2.078,11.944 0.873,0.437 2.324,-1.552 4.208,-5.082C6.667,33.604 13.446,33.678 18,33.678c4.553,0 11.333,-0.073 11.601,-10.947 1.884,3.528 3.335,5.517 4.207,5.08 1.038,-0.519 0.361,-7.069 -2.078,-11.945z"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M21.675,6.943c-0.85,0.607 -2.172,1.186 -3.675,1.186s-2.825,-0.578 -3.675,-1.185c-3.302,2.137 -5.615,7.06 -5.615,12.798 0,7.695 4.159,13.936 9.29,13.936 5.132,0 9.291,-6.24 9.291,-13.936 0,-5.738 -2.313,-10.662 -5.616,-12.799z"
|
||||
android:fillColor="#F5F8FA"/>
|
||||
<path
|
||||
android:pathData="M28.452,6h-5.808C18.797,6 18,5.22 18,4.257c0,-0.962 -0.364,-1.742 3.483,-1.742C27.291,2.516 29.613,6 28.452,6z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M16.839,3.483c0,0.642 -0.52,1.162 -1.161,1.162 -0.642,0 -1.161,-0.521 -1.161,-1.162 0,-0.641 0.52,-1.161 1.161,-1.161s1.161,0.52 1.161,1.161z"
|
||||
android:fillColor="#F5F8FA"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M36,11.5C36,8.462 33,4 18,4S0,8.462 0,11.5c0,0.045 0.019,0.076 0.022,0.119 -0.012,0.196 -0.022,0.402 -0.022,0.631C0,14.873 2.239,16 5,16s5,-1.127 5,-3.75c0,-0.218 -0.021,-0.412 -0.051,-0.597C12.374,11.302 15.102,11 18,11s5.626,0.302 8.051,0.653c-0.03,0.185 -0.051,0.379 -0.051,0.597 0,2.623 2.238,3.75 5,3.75s5,-1.127 5,-3.75c0,-0.225 -0.009,-0.429 -0.024,-0.621 0.004,-0.046 0.024,-0.08 0.024,-0.129z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M34.934,23c-0.482,-1.031 -2.31,-4.19 -3.968,-7.007C29.408,13.346 27,11 25,11V9c0,-1.104 -0.896,-2 -2,-2s-2,0.896 -2,2v2h-6V9c0,-1.104 -0.896,-2 -2,-2s-2,0.896 -2,2v2c-2,0 -4.41,2.351 -5.97,5 -1.657,2.815 -3.483,5.97 -3.964,7C0.488,24.239 0,25 0,27s1.791,5 4,5h28c2.209,0 4,-3 4,-5s-0.448,-2.676 -1.066,-4z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M20.046,14.818c0,0.452 -0.916,0.818 -2.046,0.818s-2.045,-0.366 -2.045,-0.818c0,-0.452 0.915,-0.818 2.045,-0.818s2.046,0.366 2.046,0.818zM15.136,14.818c0,0.452 -0.915,0.818 -2.045,0.818s-2.045,-0.366 -2.045,-0.818c0,-0.452 0.916,-0.818 2.045,-0.818s2.045,0.366 2.045,0.818zM24.954,14.818c0,0.452 -0.915,0.818 -2.045,0.818s-2.046,-0.366 -2.046,-0.818c0,-0.452 0.916,-0.818 2.046,-0.818s2.045,0.366 2.045,0.818zM20.454,17.682c0,0.679 -1.099,1.228 -2.454,1.228s-2.455,-0.549 -2.455,-1.228c0,-0.677 1.099,-1.227 2.455,-1.227s2.454,0.549 2.454,1.227zM26.182,17.682c0,0.679 -1.1,1.228 -2.454,1.228 -1.355,0 -2.455,-0.549 -2.455,-1.228 0,-0.677 1.1,-1.227 2.455,-1.227 1.354,0 2.454,0.549 2.454,1.227zM14.727,17.682c0,0.679 -1.099,1.228 -2.454,1.228 -1.355,0 -2.455,-0.549 -2.455,-1.228 0,-0.677 1.099,-1.227 2.455,-1.227 1.355,0 2.454,0.549 2.454,1.227zM21.272,21.363C21.272,22.269 19.807,23 18,23c-1.807,0 -3.273,-0.731 -3.273,-1.637 0,-0.903 1.466,-1.636 3.273,-1.636 1.807,0.001 3.272,0.733 3.272,1.636zM28.637,21.363c0,0.905 -1.467,1.637 -3.273,1.637 -1.807,0 -3.273,-0.731 -3.273,-1.637 0,-0.903 1.466,-1.636 3.273,-1.636 1.806,0.001 3.273,0.733 3.273,1.636zM13.909,21.363c0,0.905 -1.466,1.637 -3.273,1.637 -1.807,0 -3.272,-0.731 -3.272,-1.637 0,-0.903 1.465,-1.636 3.272,-1.636 1.807,0.001 3.273,0.733 3.273,1.636z"
|
||||
android:fillColor="#FFF"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M34.193,13.329c0.387,-0.371 0.733,-0.795 1.019,-1.28 1.686,-2.854 0.27,-10.292 -0.592,-10.8 -0.695,-0.411 -5.529,1.05 -8.246,3.132C23.876,2.884 21.031,2 18,2c-3.021,0 -5.856,0.879 -8.349,2.367C6.93,2.293 2.119,0.839 1.424,1.249c-0.861,0.508 -2.276,7.947 -0.592,10.8 0.278,0.471 0.615,0.884 0.989,1.249C0.666,15.85 0,18.64 0,21.479 0,31.468 8.011,34 18,34s18,-2.532 18,-12.521c0,-2.828 -0.66,-5.606 -1.807,-8.15z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M7.398,5.965c-2.166,-1.267 -4.402,-2.08 -4.8,-1.845 -0.57,0.337 -1.083,4.998 -0.352,8.265 1.273,-2.483 3.04,-4.682 5.152,-6.42zM33.753,12.384c0.733,-3.267 0.219,-7.928 -0.351,-8.265 -0.398,-0.235 -2.635,0.578 -4.801,1.845 2.114,1.739 3.88,3.938 5.152,6.42zM28,23.125c0,4.487 -3.097,9.375 -10,9.375 -6.904,0 -10,-4.888 -10,-9.375S11.096,17.5 18,17.5c6.903,0 10,1.138 10,5.625z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M15,24.6c0,1.857 -0.34,2.4 -1.5,2.4s-1.5,-0.543 -1.5,-2.4c0,-1.856 0.34,-2.399 1.5,-2.399s1.5,0.542 1.5,2.399zM24,24.6c0,1.857 -0.34,2.4 -1.5,2.4s-1.5,-0.543 -1.5,-2.4c0,-1.856 0.34,-2.399 1.5,-2.399s1.5,0.542 1.5,2.399z"
|
||||
android:fillColor="#662113"/>
|
||||
<path
|
||||
android:pathData="M7,17m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M29,17m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M23.651,23.297L12.702,12.348l9.386,-7.821 9.385,9.385z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M34.6,13.912c-1.727,1.729 -4.528,1.729 -6.255,0l-6.257,-6.256c-1.729,-1.727 -1.729,-4.53 0,-6.258 1.726,-1.727 4.528,-1.727 6.257,0L34.6,7.656c1.728,1.727 1.728,4.529 0,6.256z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M14,17.823S-0.593,35.029 0.188,35.813C0.97,36.596 18.177,22 18.177,22L14,17.823z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M25.215,27.991c-1.726,1.729 -4.528,1.729 -6.258,0L8.009,17.041c-1.727,-1.728 -1.727,-4.528 0,-6.256 1.728,-1.729 4.53,-1.729 6.258,0l10.948,10.949c1.728,1.729 1.728,4.528 0,6.257z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,4c7.257,0 13,4 14.699,2 0.197,-0.323 0.301,-0.657 0.301,-1 0,-2 -6.716,-5 -15,-5C9.716,0 3,3 3,5c0,0.343 0.104,0.677 0.301,1C5,8 10.743,4 18,4z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M18,3C11.787,3 7.384,4.81 5.727,5.618c-0.477,0.233 -0.539,0.84 -0.415,1.278S16,34 16,34s0.896,2 2,2 2,-2 2,-2L30.704,6.779s0.213,-0.842 -0.569,-1.229C28.392,4.689 24.047,3 18,3z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M18,31c0,-2.208 -1.791,-4 -4,-4 -0.254,0 -0.5,0.029 -0.741,0.075L16,34s0.071,0.14 0.19,0.342C17.279,33.627 18,32.399 18,31zM17,20c0,-2.209 -1.792,-4 -4,-4 -1.426,0 -2.67,0.752 -3.378,1.876l2.362,5.978c0.327,0.086 0.663,0.146 1.016,0.146 2.208,0 4,-1.792 4,-4z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M16,8m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M25,9c-2.208,0 -4,1.791 -4,4s1.792,4 4,4c0.682,0 1.315,-0.187 1.877,-0.488l1.89,-4.806C28.227,10.135 26.752,9 25,9zM19,25c0,1.868 1.288,3.425 3.019,3.864l2.893,-7.357C24.342,21.194 23.697,21 23,21c-2.208,0 -4,1.792 -4,4zM10,12c0,-2.209 -1.791,-4 -4,-4 -0.087,0 -0.169,0.02 -0.255,0.026 0.55,1.412 1.575,4.016 2.775,7.057C9.416,14.349 10,13.248 10,12z"
|
||||
android:fillColor="#BE1931"/>
|
||||
</vector>
|
|
@ -0,0 +1,27 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M33.799,0.005c-0.467,-0.178 -7.998,3.971 -9.969,9.131 -1.166,3.052 -1.686,6.058 -1.652,8.112C20.709,16.459 19.257,16 18,16s-2.709,0.458 -4.178,1.249c0.033,-2.055 -0.486,-5.061 -1.652,-8.112C10.2,3.977 2.668,-0.173 2.201,0.005c-0.455,0.174 4.268,16.044 7.025,20.838C6.805,23.405 5,26.661 5,29.828c0,3.234 1.635,5.14 4,5.94 2.531,0.857 5,-0.94 9,-0.94s6.469,1.798 9,0.94c2.365,-0.801 4,-2.706 4,-5.94 0,-3.166 -1.805,-6.423 -4.225,-8.984C29.53,16.049 34.255,0.179 33.799,0.005z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M12.692,17.922c-0.178,-1.54 -0.68,-3.55 -1.457,-5.584 -1.534,-4.016 -5.686,-7.245 -6.049,-7.107 -0.319,0.122 2.627,10.14 4.783,14.863 0.866,-0.824 1.786,-1.563 2.723,-2.172zM26.03,20.094c2.156,-4.723 5.102,-14.741 4.784,-14.862 -0.363,-0.139 -4.516,3.091 -6.05,7.107 -0.777,2.034 -1.279,4.043 -1.457,5.583 0.937,0.609 1.857,1.348 2.723,2.172z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
<path
|
||||
android:pathData="M25,30c0,2.762 -3.06,5 -6.834,5 -3.773,0 -6.833,-2.238 -6.833,-5s3.06,-5 6.833,-5C21.94,25 25,27.238 25,30z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M21,30.578c0,2.762 -0.238,3 -3,3 -2.761,0 -3,-0.238 -3,-3 0,-1 6,-1 6,0z"
|
||||
android:fillColor="#FFF"/>
|
||||
<path
|
||||
android:pathData="M12.5,24.328m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M23.5,24.328m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M21,25.828c0,1.657 -2,3 -3,3s-3,-1.343 -3,-3 6,-1.657 6,0z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
</vector>
|
|
@ -0,0 +1,48 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M31,14.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M0,14.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M34,19c0,0.553 -0.447,1 -1,1h-3c-0.553,0 -1,-0.447 -1,-1v-9c0,-0.552 0.447,-1 1,-1h3c0.553,0 1,0.448 1,1v9zM7,19c0,0.553 -0.448,1 -1,1H3c-0.552,0 -1,-0.447 -1,-1v-9c0,-0.552 0.448,-1 1,-1h3c0.552,0 1,0.448 1,1v9z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M28,5c0,2.761 -4.478,4 -10,4C12.477,9 8,7.761 8,5s4.477,-5 10,-5c5.522,0 10,2.239 10,5z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M25,4.083C25,5.694 21.865,7 18,7c-3.866,0 -7,-1.306 -7,-2.917 0,-1.611 3.134,-2.917 7,-2.917 3.865,0 7,1.306 7,2.917z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M30,5.5C30,6.881 28.881,7 27.5,7h-19C7.119,7 6,6.881 6,5.5S7.119,3 8.5,3h19C28.881,3 30,4.119 30,5.5z"
|
||||
android:fillColor="#269"/>
|
||||
<path
|
||||
android:pathData="M30,6H6c-1.104,0 -2,0.896 -2,2v26h28V8c0,-1.104 -0.896,-2 -2,-2z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:pathData="M35,33v-1c0,-1.104 -0.896,-2 -2,-2H22.071l-3.364,3.364c-0.391,0.391 -1.023,0.391 -1.414,0L13.929,30H3c-1.104,0 -2,0.896 -2,2v1c0,1.104 -0.104,2 1,2h32c1.104,0 1,-0.896 1,-2z"
|
||||
android:fillColor="#3B88C3"/>
|
||||
<path
|
||||
android:pathData="M24.5,14.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#FFF"/>
|
||||
<path
|
||||
android:pathData="M24.5,14.5m-2.721,0a2.721,2.721 0,1 1,5.442 0a2.721,2.721 0,1 1,-5.442 0"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M11.5,14.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#FFF"/>
|
||||
<path
|
||||
android:pathData="M29,25.5c0,1.381 -1.119,2.5 -2.5,2.5h-17C8.119,28 7,26.881 7,25.5S8.119,23 9.5,23h17c1.381,0 2.5,1.119 2.5,2.5z"
|
||||
android:fillColor="#F5F8FA"/>
|
||||
<path
|
||||
android:pathData="M17,23h2v5h-2zM12,23h2v5h-2zM22,23h2v5h-2zM7,25.5c0,1.21 0.859,2.218 2,2.45v-4.9c-1.141,0.232 -2,1.24 -2,2.45zM27,23.05v4.899c1.141,-0.232 2,-1.24 2,-2.45s-0.859,-2.217 -2,-2.449z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M11.5,14.5m-2.721,0a2.721,2.721 0,1 1,5.442 0a2.721,2.721 0,1 1,-5.442 0"
|
||||
android:fillColor="#DD2E44"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M1,17l8,-7 16,1 1,16 -7,8s0.001,-5.999 -6,-12 -12,-6 -12,-6z"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M0.973,35s-0.036,-7.979 2.985,-11S15,21.187 15,21.187 14.999,29 11.999,32c-3,3 -11.026,3 -11.026,3z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M8.999,27m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M35.999,0s-10,0 -22,10c-6,5 -6,14 -4,16s11,2 16,-4c10,-12 10,-22 10,-22z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M26.999,5c-1.623,0 -3.013,0.971 -3.641,2.36 0.502,-0.227 1.055,-0.36 1.641,-0.36 2.209,0 4,1.791 4,4 0,0.586 -0.133,1.139 -0.359,1.64 1.389,-0.627 2.359,-2.017 2.359,-3.64 0,-2.209 -1.791,-4 -4,-4z"/>
|
||||
<path
|
||||
android:pathData="M8,28s0,-4 1,-5 13.001,-10.999 14,-10 -9.001,13 -10.001,14S8,28 8,28z"
|
||||
android:fillColor="#A0041E"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M24.88,33.097c-0.098,-0.18 -0.25,-0.302 -0.418,-0.391C22.865,31 24,28.999 24,28.999c0,-0.553 1,-2 0,-2l-1,1c-1,1 -1,4 -1,4h-2c-0.553,0 -1,0.447 -1,1 0,0.553 0.447,1 1,1h1.107l-0.222,0.12c-0.486,0.263 -0.667,0.869 -0.404,1.355s0.869,0.667 1.356,0.404l2.639,-1.427c0.486,-0.262 0.667,-0.868 0.404,-1.354zM17.88,33.097c-0.097,-0.18 -0.25,-0.302 -0.417,-0.391C15.866,31 17,28.999 17,28.999c0,-0.553 1,-2 0,-2l-1,1c-1,1 -1,4 -1,4h-2c-0.553,0 -1,0.447 -1,1 0,0.553 0.447,1 1,1h1.108l-0.222,0.12c-0.486,0.263 -0.667,0.869 -0.404,1.355s0.869,0.667 1.356,0.404l2.639,-1.427c0.485,-0.262 0.666,-0.868 0.403,-1.354zM7.516,10c0,1.104 -1.119,2 -2.5,2s-3.5,-1 -3.5,-2 2.119,-2 3.5,-2c1.38,0 2.5,0.896 2.5,2z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M13.516,2c-2,-1 -3,1 -3,1s0,-3 -3,-3 -3,3 -3,3 -3,-0.938 -3,2c0,1.482 1.101,2.411 2.484,2.387V12c0,1 0.263,3 -0.737,4s-2.484,4 0.516,4 3,-4 3,-7c1,1 4,1 4,-4 0,-0.867 -0.213,-1.512 -0.55,-2h1.287c4,0 4,-4 2,-5z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M32.516,9c4,10 0,22 -13,22 -7.732,0 -13,-6 -14,-11 -1.177,-5.883 -1,-8 -1,-12 0,-2.738 2.118,-4.824 5,-4 7,2 5,10 12,10 10,0 8.23,-11.923 11,-5z"
|
||||
android:fillColor="#E1E8ED"/>
|
||||
<path
|
||||
android:pathData="M7.516,8m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#292F33"/>
|
||||
</vector>
|
|
@ -0,0 +1,42 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M5,21c0,2.209 -1.119,4 -2.5,4S0,23.209 0,21s1.119,-4 2.5,-4S5,18.791 5,21z"
|
||||
android:fillColor="#FFDC5D"/>
|
||||
<path
|
||||
android:pathData="M3,18.562C3,10.037 8.373,3.125 15,3.125s12,6.912 12,15.438C27,27.088 21.627,34 15,34S3,27.088 3,18.562z"
|
||||
android:fillColor="#FFDC5D"/>
|
||||
<path
|
||||
android:pathData="M20,0c-0.249,0 -0.478,0.007 -0.713,0.012C19.19,0.01 19.097,0 19,0 9,0 2,4.582 2,9s6.373,4 13,4c4.442,0 7.648,0 9.966,-0.086L25,13l6,15h2s0.343,-3.055 1,-7c1,-6 0.533,-21 -14,-21z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M30,21c0,2.209 -1.119,4 -2.5,4S25,23.209 25,21s1.119,-4 2.5,-4 2.5,1.791 2.5,4z"
|
||||
android:fillColor="#FFDC5D"/>
|
||||
<path
|
||||
android:pathData="M10,21c-0.552,0 -1,-0.447 -1,-1v-2c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v2c0,0.553 -0.448,1 -1,1zM20,21c-0.553,0 -1,-0.447 -1,-1v-2c0,-0.552 0.447,-1 1,-1s1,0.448 1,1v2c0,0.553 -0.447,1 -1,1z"
|
||||
android:fillColor="#662113"/>
|
||||
<path
|
||||
android:pathData="M16,26h-2c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h2c0.552,0 1,0.447 1,1s-0.448,1 -1,1z"
|
||||
android:fillColor="#B7755E"/>
|
||||
<path
|
||||
android:pathData="M27,25c0,-2 -2.293,-0.707 -3,0 -1,1 -3,3 -5,2 -2.828,-1.414 -4,-1 -4,-1s-1.171,-0.414 -4,1c-2,1 -4,-1 -5,-2 -0.707,-0.707 -3,-2 -3,0s1,2 1,2c-1,2 1,3 1,3 0,3 3,3 3,3 0,3 4,2 4,2 1,1 3,1 3,1s2,0 3,-1c0,0 4,1 4,-2 0,0 3,0 3,-3 0,0 2,-1 1,-3 0,0 1,0 1,-2z"
|
||||
android:fillColor="#E6E7E8"/>
|
||||
<path
|
||||
android:pathData="M15,28c7,0 4,2 0,2s-7,-2 0,-2z"
|
||||
android:fillColor="#FFDC5D"/>
|
||||
<path
|
||||
android:pathData="M1,14a2,4 0,1 0,4 0a2,4 0,1 0,-4 0z"
|
||||
android:fillColor="#D1D3D4"/>
|
||||
<path
|
||||
android:pathData="M24,14a2,4 0,1 0,4 0a2,4 0,1 0,-4 0z"
|
||||
android:fillColor="#D1D3D4"/>
|
||||
<path
|
||||
android:pathData="M32,29m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#F1F2F2"/>
|
||||
<path
|
||||
android:pathData="M29,12c0,1.104 -0.896,2 -2,2H2c-1.104,0 -2,-0.896 -2,-2v-1c0,-1.104 0.896,-2 2,-2h25c1.104,0 2,0.896 2,2v1z"
|
||||
android:fillColor="#F1F2F2"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M16.806,10.675c-0.92,-2.047 -2.003,-4.066 -3.026,-6.26 -0.028,-0.068 -0.051,-0.138 -0.082,-0.206 -0.064,-0.142 -0.137,-0.277 -0.208,-0.413l-0.052,-0.111 -0.002,0.003C11.798,0.698 8.343,-0.674 5.46,0.621 2.414,1.988 1.164,5.813 2.67,9.163c1.505,3.351 5.194,4.957 8.24,3.589 0.106,-0.047 0.205,-0.105 0.306,-0.159 1.935,0.438 1.994,1.877 1.994,1.877s4.618,-1.521 3.596,-3.795zM4.876,8.173c-0.958,-2.133 -0.252,-4.527 1.575,-5.347 1.826,-0.822 4.084,0.242 5.042,2.374 0.958,2.132 0.253,4.526 -1.573,5.346 -1.828,0.821 -4.087,-0.241 -5.044,-2.373z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M26.978,34.868c1.163,-0.657 2.187,-2.474 1.529,-3.638L16.754,10.559c-1.103,0.496 -2.938,2.313 -3.544,3.912l13.768,20.397z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
<path
|
||||
android:pathData="M30.54,0.62c-2.882,-1.295 -6.338,0.077 -7.976,3.067l-0.003,-0.003 -0.053,0.112c-0.071,0.135 -0.145,0.27 -0.208,0.412 -0.03,0.068 -0.053,0.137 -0.081,0.206 -1.023,2.194 -2.107,4.213 -3.026,6.26 -1.021,2.274 3.597,3.796 3.597,3.796s0.059,-1.439 1.993,-1.877c0.102,0.054 0.2,0.111 0.307,0.159 3.045,1.368 6.733,-0.238 8.24,-3.589 1.505,-3.35 0.255,-7.175 -2.79,-8.543zM31.124,8.173c-0.959,2.132 -3.216,3.194 -5.044,2.373 -1.826,-0.82 -2.531,-3.214 -1.572,-5.346 0.956,-2.132 3.214,-3.195 5.041,-2.374 1.827,0.82 2.532,3.214 1.575,5.347z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M9.022,34.868c-1.163,-0.657 -2.187,-2.474 -1.529,-3.638l11.753,-20.671c1.103,0.496 2.938,2.313 3.544,3.912L9.022,34.868z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M19.562,17.396c0,0.863 -0.701,1.562 -1.562,1.562 -0.863,0 -1.562,-0.699 -1.562,-1.562 0,-0.863 0.699,-1.562 1.562,-1.562 0.862,0 1.562,0.699 1.562,1.562z"
|
||||
android:fillColor="#99AAB5"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M10.515,23.621C10.56,23.8 11.683,28 18,28c6.318,0 7.44,-4.2 7.485,-4.379 0.055,-0.217 -0.043,-0.442 -0.237,-0.554 -0.195,-0.111 -0.439,-0.078 -0.6,0.077C24.629,23.163 22.694,25 18,25s-6.63,-1.837 -6.648,-1.855C11.256,23.05 11.128,23 11,23c-0.084,0 -0.169,0.021 -0.246,0.064 -0.196,0.112 -0.294,0.339 -0.239,0.557z"
|
||||
android:fillColor="#664500"/>
|
||||
<path
|
||||
android:pathData="M9.5,13.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
|
||||
android:fillColor="#664500"/>
|
||||
<path
|
||||
android:pathData="M21.5,13.5a2.5,3.5 0,1 0,5 0a2.5,3.5 0,1 0,-5 0z"
|
||||
android:fillColor="#664500"/>
|
||||
</vector>
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M22.614,34.845c3.462,-1.154 6.117,-3.034 6.12,-9.373C28.736,21.461 33,17 32.999,12.921 32.998,9 28.384,2.537 17.899,3.635 7.122,4.764 3,8 2.999,15.073c0,4.927 5.304,8.381 8.127,13.518C13,32 18.551,38.187 22.614,34.845z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M26.252,3.572c-1.278,-1.044 -3.28,-1.55 -5.35,-1.677 0.273,-0.037 0.542,-0.076 0.82,-0.094 0.973,-0.063 3.614,-1.232 1.4,-1.087 -0.969,0.063 -1.901,0.259 -2.837,0.423 0.237,-0.154 0.479,-0.306 0.74,-0.442C21,0 17,0 14.981,1.688 14.469,1.576 14,1 11,1c-2,0 -4.685,0.926 -3,1 0.917,0.041 2,0 1.858,0.365C9.203,2.425 6,3 6,4c0,0.353 2.76,-0.173 3,0 -1.722,0.644 -3,2 -3,3 0,0.423 2.211,-0.825 3,-1 -1,1 -1.4,1.701 -1.342,2.427 0.038,0.475 2.388,-0.09 2.632,-0.169 0.822,-0.27 3.71,-1.258 4.6,-2.724 0.117,0.285 2.963,1.341 4.11,1.466 0.529,0.058 2.62,0.274 2.141,-0.711C21,6 20,5 19.695,4.025c0.446,-0.019 8.305,0.975 6.557,-0.453z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M9.339,17.306c-0.136,-1.46 -2.54,-3.252 -2.331,-1 0.136,1.46 2.54,3.252 2.331,1zM16.797,17.859c-0.069,-0.622 -0.282,-1.191 -0.687,-1.671 -0.466,-0.55 -1.075,-0.362 -1.234,0.316 -0.187,0.799 0.082,1.752 0.606,2.372l0.041,0.048c-0.213,-0.525 -0.427,-1.05 -0.642,-1.574l0.006,0.047c0.071,0.64 0.397,1.73 1.136,1.906 0.754,0.182 0.826,-0.988 0.774,-1.444zM22.549,13.018c0.476,-0.955 0.17,-3.962 -0.831,-1.954 -0.476,0.954 -0.171,3.962 0.831,1.954zM29.76,11.561c-0.03,-0.357 -0.073,-0.78 -0.391,-1.01 -1.189,-0.858 -2.381,2.359 -1.385,3.08 0.02,0.012 0.036,0.025 0.055,0.039l-0.331,-0.919c0,0.018 0.001,0.035 0.003,0.052 0.049,0.564 0.376,1.377 1.084,0.948 0.667,-0.406 1.028,-1.444 0.965,-2.19zM28.415,20.128c1.016,-1.569 -0.545,-3.451 -1.78,-1.542 -1.016,1.568 0.546,3.45 1.78,1.542zM22.667,23.022c0.173,-1.938 -2.309,-2.752 -2.51,-0.496 -0.173,1.938 2.309,2.752 2.51,0.496zM12.771,21.81l-0.049,0.004 1.362,0.715c-0.006,-0.004 -0.011,-0.011 -0.018,-0.017 -0.306,-0.28 -1.353,-1.083 -1.788,-0.592 -0.44,0.497 0.498,1.421 0.804,1.703 0.342,0.314 0.928,0.763 1.429,0.73 1.437,-0.093 -0.783,-2.605 -1.74,-2.543zM25.998,27.717c0.969,-1.066 0.725,-4.05 -0.798,-2.376 -0.969,1.066 -0.724,4.05 0.798,2.376zM12.599,13.753c0.093,-0.005 0.187,-0.012 0.28,-0.019 0.703,-0.046 1.004,-1.454 1.042,-1.952 0.044,-0.571 -0.043,-1.456 -0.785,-1.407l-0.281,0.019c-0.702,0.047 -1.004,1.454 -1.042,1.952 -0.044,0.571 0.044,1.457 0.786,1.407zM20.445,29.01c0.395,0.764 0.252,1.623 -0.32,1.919s-1.357,-0.081 -1.753,-0.844c-0.395,-0.764 -0.252,-1.623 0.32,-1.919 0.573,-0.296 1.357,0.081 1.753,0.844z"
|
||||
android:fillColor="#F4ABBA"/>
|
||||
</vector>
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M34.956,17.916c0,-0.503 -0.12,-0.975 -0.321,-1.404 -1.341,-4.326 -7.619,-4.01 -16.549,-4.221 -1.493,-0.035 -0.639,-1.798 -0.115,-5.668 0.341,-2.517 -1.282,-6.382 -4.01,-6.382 -4.498,0 -0.171,3.548 -4.148,12.322 -2.125,4.688 -6.875,2.062 -6.875,6.771v10.719c0,1.833 0.18,3.595 2.758,3.885C8.195,34.219 7.633,36 11.238,36h18.044c1.838,0 3.333,-1.496 3.333,-3.334 0,-0.762 -0.267,-1.456 -0.698,-2.018 1.02,-0.571 1.72,-1.649 1.72,-2.899 0,-0.76 -0.266,-1.454 -0.696,-2.015 1.023,-0.57 1.725,-1.649 1.725,-2.901 0,-0.909 -0.368,-1.733 -0.961,-2.336 0.757,-0.611 1.251,-1.535 1.251,-2.581z"
|
||||
android:fillColor="#FFDB5E"/>
|
||||
<path
|
||||
android:pathData="M23.02,21.249h8.604c1.17,0 2.268,-0.626 2.866,-1.633 0.246,-0.415 0.109,-0.952 -0.307,-1.199 -0.415,-0.247 -0.952,-0.108 -1.199,0.307 -0.283,0.479 -0.806,0.775 -1.361,0.775h-8.81c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.71,-1.583 1.583,-1.583H28.7c0.483,0 0.875,-0.392 0.875,-0.875s-0.392,-0.875 -0.875,-0.875h-5.888c-1.838,0 -3.333,1.495 -3.333,3.333 0,1.025 0.475,1.932 1.205,2.544 -0.615,0.605 -0.998,1.445 -0.998,2.373 0,1.028 0.478,1.938 1.212,2.549 -0.611,0.604 -0.99,1.441 -0.99,2.367 0,1.12 0.559,2.108 1.409,2.713 -0.524,0.589 -0.852,1.356 -0.852,2.204 0,1.838 1.495,3.333 3.333,3.333h5.484c1.17,0 2.269,-0.625 2.867,-1.632 0.247,-0.415 0.11,-0.952 -0.305,-1.199 -0.416,-0.245 -0.953,-0.11 -1.199,0.305 -0.285,0.479 -0.808,0.776 -1.363,0.776h-5.484c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.71,-1.583 1.583,-1.583h6.506c1.17,0 2.27,-0.626 2.867,-1.633 0.247,-0.416 0.11,-0.953 -0.305,-1.199 -0.419,-0.251 -0.954,-0.11 -1.199,0.305 -0.289,0.487 -0.799,0.777 -1.363,0.777h-7.063c-0.873,0 -1.583,-0.711 -1.583,-1.584s0.71,-1.583 1.583,-1.583h8.091c1.17,0 2.269,-0.625 2.867,-1.632 0.247,-0.415 0.11,-0.952 -0.305,-1.199 -0.417,-0.246 -0.953,-0.11 -1.199,0.305 -0.289,0.486 -0.799,0.776 -1.363,0.776H23.02c-0.873,0 -1.583,-0.71 -1.583,-1.583s0.709,-1.584 1.583,-1.584z"
|
||||
android:fillColor="#EE9547"/>
|
||||
</vector>
|
|
@ -0,0 +1,72 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M0,34h36v2H0z"
|
||||
android:fillColor="#939598"/>
|
||||
<path
|
||||
android:pathData="M6,27h29v5H6z"
|
||||
android:fillColor="#231F20"/>
|
||||
<path
|
||||
android:pathData="M6.999,32m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
|
||||
android:fillColor="#58595B"/>
|
||||
<path
|
||||
android:pathData="M12.999,32m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0"
|
||||
android:fillColor="#58595B"/>
|
||||
<path
|
||||
android:pathData="M6.999,32m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M12.999,32m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M5,33H1c-1,0 -1.5,-0.5 0,-2l4,-4c1,-1 2,-2.001 2,0v4c0,2 -0.001,2 -2,2z"
|
||||
android:fillColor="#DD2E44"/>
|
||||
<path
|
||||
android:pathData="M8,20c0,3.313 -1.343,6 -3,6s-3,-2.687 -3,-6c0,-3.314 1.343,-6 3,-6s3,2.686 3,6z"
|
||||
android:fillColor="#231F20"/>
|
||||
<path
|
||||
android:pathData="M11,15H7L5,7h8z"
|
||||
android:fillColor="#6D6E71"/>
|
||||
<path
|
||||
android:pathData="M26,25c0,1.104 -0.896,2 -2,2H6c-1.104,0 -2,-0.896 -2,-2V15c0,-1.104 0.896,-2 2,-2h18c1.104,0 2,0.896 2,2v10z"
|
||||
android:fillColor="#414042"/>
|
||||
<path
|
||||
android:pathData="M13,26c0,0.553 -0.448,1 -1,1s-1,-0.447 -1,-1L11,13c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v13zM19,26c0,0.553 -0.447,1 -1,1 -0.553,0 -1,-0.447 -1,-1L17,13c0,-0.552 0.447,-1 1,-1 0.553,0 1,0.448 1,1v13z"
|
||||
android:fillColor="#C1694F"/>
|
||||
<path
|
||||
android:pathData="M36,26c0,0.553 -0.447,1 -1,1H7c-0.552,0 -1,-0.447 -1,-1 0,-0.553 0.448,-1 1,-1h28c0.553,0 1,0.447 1,1z"
|
||||
android:fillColor="#808285"/>
|
||||
<path
|
||||
android:pathData="M29.999,31m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#58595B"/>
|
||||
<path
|
||||
android:pathData="M21.999,31m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
|
||||
android:fillColor="#58595B"/>
|
||||
<path
|
||||
android:pathData="M29.999,31m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M21.999,31m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M12,3H6c-0.552,0 -1,0.448 -1,1v3h8V4c0,-0.552 -0.448,-1 -1,-1z"
|
||||
android:fillColor="#414042"/>
|
||||
<path
|
||||
android:pathData="M23,7h12v18H23z"
|
||||
android:fillColor="#BE1931"/>
|
||||
<path
|
||||
android:pathData="M36,6c0,0.552 -0.447,1 -1,1H23c-0.553,0 -1,-0.448 -1,-1s0.447,-1 1,-1h12c0.553,0 1,0.448 1,1z"
|
||||
android:fillColor="#A0041E"/>
|
||||
<path
|
||||
android:pathData="M25,18h8v5h-8z"
|
||||
android:fillColor="#EA596E"/>
|
||||
<path
|
||||
android:pathData="M30,32h-8c-0.127,0 -0.253,-0.024 -0.371,-0.071L16.807,30H10c-0.552,0 -1,-0.447 -1,-1s0.448,-1 1,-1h7c0.128,0 0.253,0.024 0.372,0.071L22.192,30H30c0.553,0 1,0.447 1,1s-0.447,1 -1,1z"
|
||||
android:fillColor="#F4900C"/>
|
||||
<path
|
||||
android:pathData="M33,10c0,-0.552 -0.447,-1 -1,-1h-6c-0.553,0 -1,0.448 -1,1v5c0,0.552 0.447,1 1,1h6c0.553,0 1,-0.448 1,-1v-5z"
|
||||
android:fillColor="#55ACEE"/>
|
||||
</vector>
|
|
@ -0,0 +1,54 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M22,33c0,2.209 -1.791,3 -4,3s-4,-0.791 -4,-3l1,-9c0,-2.209 0.791,-2 3,-2s3,-0.209 3,2l1,9z"
|
||||
android:fillColor="#662113"/>
|
||||
<path
|
||||
android:pathData="M34,17c0,8.837 -7.163,12 -16,12 -8.836,0 -16,-3.163 -16,-12C2,8.164 11,0 18,0s16,8.164 16,17z"
|
||||
android:fillColor="#5C913B"/>
|
||||
<path
|
||||
android:pathData="M4,21a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M28,21a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M8,25a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M12,22a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M8,16a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M5,12a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M27,12a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M12,10a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M20,10a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M24,16a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M16,17a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M20,22a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M16,26a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M24,25a2,1 0,1 0,4 0a2,1 0,1 0,-4 0z"
|
||||
android:fillColor="#3E721D"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M5.123,5h6C12.227,5 13,4.896 13,6L13,4c0,-1.104 -0.773,-2 -1.877,-2h-8c-2,0 -3.583,2.125 -3,5 0,0 1.791,9.375 1.917,9.958C2.373,18.5 4.164,20 6.081,20h6.958c1.105,0 -0.039,-1.896 -0.039,-3v-2c0,1.104 -0.773,2 -1.877,2h-4c-1.104,0 -1.833,-1.042 -2,-2S3.539,7.667 3.539,7.667C3.206,5.75 4.018,5 5.123,5zM30.935,5h-6C23.831,5 22,4.896 22,6L22,4c0,-1.104 1.831,-2 2.935,-2h8c2,0 3.584,2.125 3,5 0,0 -1.633,9.419 -1.771,10 -0.354,1.5 -2.042,3 -4,3h-7.146C21.914,20 22,18.104 22,17v-2c0,1.104 1.831,2 2.935,2h4c1.104,0 1.834,-1.042 2,-2s1.584,-7.333 1.584,-7.333C32.851,5.75 32.04,5 30.935,5zM20.832,22c0,-6.958 -2.709,0 -2.709,0s-3,-6.958 -3,0 -3.291,10 -3.291,10h12.292c-0.001,0 -3.292,-3.042 -3.292,-10z"
|
||||
android:fillColor="#FFAC33"/>
|
||||
<path
|
||||
android:pathData="M29.123,6.577c0,6.775 -6.77,18.192 -11,18.192 -4.231,0 -11,-11.417 -11,-18.192 0,-5.195 1,-6.319 3,-6.319 1.374,0 6.025,-0.027 8,-0.027l7,-0.001c2.917,-0.001 4,0.684 4,6.347z"
|
||||
android:fillColor="#FFCC4D"/>
|
||||
<path
|
||||
android:pathData="M27,33c0,1.104 0.227,2 -0.877,2h-16C9.018,35 9,34.104 9,33v-1c0,-1.104 1.164,-2 2.206,-2h13.917c1.042,0 1.877,0.896 1.877,2v1z"
|
||||
android:fillColor="#C1694F"/>
|
||||
<path
|
||||
android:pathData="M29,34.625c0,0.76 0.165,1.375 -1.252,1.375H8.498C7.206,36 7,35.385 7,34.625v-0.25C7,33.615 7.738,33 8.498,33h19.25c0.759,0 1.252,0.615 1.252,1.375v0.25z"
|
||||
android:fillColor="#C1694F"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M5.622,33.051l-2.674,-2.673L23.337,9.987c3.344,-3.343 1.337,-8.021 2.007,-8.689 0.666,-0.67 1.335,-0.002 1.335,-0.002l8.023,8.023c0.668,0.668 0,1.336 0,1.336 -0.669,0.67 -5.778,-0.908 -8.692,2.006L5.622,33.051z"
|
||||
android:fillColor="#FCAB40"/>
|
||||
<path
|
||||
android:pathData="M5.457,33.891c0.925,-0.925 0.925,-2.424 0,-3.35 -0.924,-0.924 -2.424,-0.924 -3.349,0l0.087,0.087c-0.371,-0.334 -0.938,-0.331 -1.296,0.027 -0.369,0.368 -0.369,0.968 0,1.336L4.008,35.1c0.37,0.369 0.968,0.369 1.337,0 0.355,-0.356 0.36,-0.919 0.032,-1.29l0.08,0.081z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
<path
|
||||
android:pathData="M13.31,33.709c-1.516,0 -2.939,-0.59 -4.011,-1.661 -1.071,-1.07 -1.661,-2.495 -1.661,-4.011 0,-1.515 0.59,-2.939 1.661,-4.011L19.995,13.33c1.071,-1.071 2.496,-1.661 4.012,-1.661 1.515,0 2.94,0.59 4.011,1.661 2.211,2.212 2.211,5.811 0,8.022L17.322,32.047c-1.072,1.071 -2.496,1.662 -4.012,1.662zM24.007,15.45c-0.506,0 -0.98,0.197 -1.338,0.554L11.974,26.7c-0.357,0.357 -0.554,0.832 -0.554,1.337 0,0.506 0.197,0.979 0.553,1.336 0.358,0.357 0.832,0.555 1.337,0.555s0.98,-0.197 1.337,-0.555l10.696,-10.695c0.737,-0.737 0.736,-1.937 -0.001,-2.674 -0.356,-0.357 -0.83,-0.554 -1.335,-0.554z"
|
||||
android:fillColor="#FCAB40"/>
|
||||
<path
|
||||
android:pathData="M25.344,24.026c0.736,0.738 1.936,0.738 2.674,0 0.738,-0.739 0.738,-1.937 0,-2.674l-8.022,-8.023c-0.739,-0.738 -1.935,-0.738 -2.673,0 -0.739,0.739 -0.739,1.937 0,2.675l8.021,8.022zM21.332,28.037c0.738,0.738 1.937,0.738 2.674,0 0.738,-0.739 0.738,-1.936 0.002,-2.674l-8.023,-8.023c-0.739,-0.738 -1.936,-0.738 -2.675,0 -0.738,0.738 -0.738,1.936 0,2.675l8.022,8.022zM17.322,32.048c0.738,0.738 1.934,0.738 2.673,0 0.738,-0.738 0.738,-1.937 0,-2.674l-8.021,-8.022c-0.739,-0.738 -1.936,-0.738 -2.675,0 -0.738,0.737 -0.738,1.935 0,2.674l8.023,8.022z"
|
||||
android:fillColor="#FCAB40"/>
|
||||
<path
|
||||
android:pathData="M14.648,13.329c0.369,0.369 0.968,0.369 1.337,0l1.337,-1.336c0.369,-0.369 0.369,-0.968 0,-1.338 -0.37,-0.369 -0.968,-0.369 -1.337,0l-1.337,1.338c-0.37,0.369 -0.37,0.967 0,1.336zM10.637,17.341c0.37,0.371 0.967,0.37 1.337,0l1.336,-1.337c0.37,-0.37 0.371,-0.967 0,-1.337 -0.369,-0.37 -0.967,-0.37 -1.337,0l-1.337,1.337c-0.369,0.37 -0.369,0.968 0.001,1.337zM6.625,21.353c0.37,0.37 0.967,0.37 1.337,0l1.337,-1.338c0.37,-0.369 0.37,-0.967 0,-1.337 -0.369,-0.369 -0.967,-0.369 -1.336,0l-1.337,1.338c-0.37,0.369 -0.37,0.967 -0.001,1.337z"
|
||||
android:fillColor="#CCD6DD"/>
|
||||
</vector>
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M9.842,19.922c0,9.842 6.575,9.673 5.158,10.078 -7,2 -8.803,-7.618 -9.464,-7.618 -2.378,0 -5.536,-0.423 -5.536,-2.46C0,17.883 2.46,15 6.151,15c2.379,0 3.691,2.883 3.691,4.922zM36,28.638c0,1.104 -3.518,-0.741 -5,0 -2,1 -2,-0.896 -2,-2s1.343,-1 3,-1 4,1.895 4,3z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M16.715,33.143c0,2.761 -1.279,2.857 -2.857,2.857S11,35.903 11,33.143c0,-0.489 0.085,-1.029 0.234,-1.587 0.69,-2.59 2.754,-5.556 4.052,-5.556 1.578,0 1.429,4.382 1.429,7.143zM25.286,33.143c0,2.761 1.278,2.857 2.856,2.857C29.721,36 31,35.903 31,33.143c0,-0.489 -0.085,-1.029 -0.234,-1.587 -0.691,-2.59 -2.754,-5.556 -4.052,-5.556 -1.578,0 -1.428,4.382 -1.428,7.143z"
|
||||
android:fillColor="#77B255"/>
|
||||
<path
|
||||
android:pathData="M32,27c0,4 -5.149,4 -11.5,4S9,31 9,27c0,-6.627 5.149,-12 11.5,-12S32,20.373 32,27z"
|
||||
android:fillColor="#3E721D"/>
|
||||
<path
|
||||
android:pathData="M5,18m-1,0a1,1 0,1 1,2 0a1,1 0,1 1,-2 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M23.667,25.1c0,3.591 -1.418,3.9 -3.167,3.9s-3.167,-0.31 -3.167,-3.9S18.75,17 20.5,17s3.167,4.51 3.167,8.1zM30,24c0.871,3.482 -0.784,4 -2.533,4 -1.749,0 -2.533,0.69 -2.533,-2.9s-1.116,-6.5 0.633,-6.5C27.315,18.6 29,20 30,24zM16.067,25.1c0,3.591 -0.785,2.9 -2.534,2.9s-3.404,-0.518 -2.533,-4c1,-4 3.251,-5.4 5,-5.4 1.75,0 0.067,2.91 0.067,6.5z"
|
||||
android:fillColor="#5C913B"/>
|
||||
</vector>
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M9,28.5c0,-0.828 0.672,-1.5 1.5,-1.5s1.5,0.672 1.5,1.5v0.5s0,3 3,3 3,-3 3,-3V3.5c0,-0.829 0.671,-1.5 1.5,-1.5s1.5,0.671 1.5,1.5V29s0,6 -6,6 -6,-6 -6,-6v-0.5z"
|
||||
android:fillColor="#66757F"/>
|
||||
<path
|
||||
android:pathData="M19.5,4C28.612,4 36,9.82 36,17c0,0 0,2 -1,2s-3,-2 -3,-2H7s-2,2 -3,2 -1,-2 -1,-2C3,9.82 10.387,4 19.5,4z"
|
||||
android:fillColor="#744EAA"/>
|
||||
<path
|
||||
android:pathData="M19.5,4C26.403,4 32,9.82 32,17c0,0 0,2 -2,2s-5,-2 -5,-2H14s-3,2 -5,2 -2,-2 -2,-2C7,9.82 12.596,4 19.5,4z"
|
||||
android:fillColor="#9266CC"/>
|
||||
<path
|
||||
android:pathData="M19.5,4C23.09,4 25,9.82 25,17c0,0 -3,2 -5,2h-1c-2,0 -5,-2 -5,-2 0,-7.18 1.91,-13 5.5,-13z"
|
||||
android:fillColor="#744EAA"/>
|
||||
</vector>
|
|
@ -0,0 +1,30 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M36,19.854C33.518,9.923 25.006,1.909 16.031,6.832c0,0 -4.522,-1.496 -5.174,-1.948 -0.635,-0.44 -1.635,-0.904 -0.912,0.436 0.423,0.782 0.875,1.672 2.403,3.317C8,12.958 9.279,18.262 7.743,21.75c-1.304,2.962 -2.577,4.733 -1.31,6.976 1.317,2.33 4.729,3.462 7.018,1.06 1.244,-1.307 0.471,-1.937 3.132,-4.202 2.723,-0.543 4.394,-1.791 4.394,-4.375 0,0 0.795,-0.382 1.826,6.009 0.456,2.818 -0.157,5.632 -0.039,8.783H36V19.854z"
|
||||
android:fillColor="#C1CDD5"/>
|
||||
<path
|
||||
android:pathData="M31.906,6.062c0.531,1.312 0.848,3.71 0.595,5.318 -0.15,-3.923 -3.188,-6.581 -4.376,-7.193 -2.202,-1.137 -4.372,-0.979 -6.799,-0.772 0.111,0.168 0.403,0.814 0.32,1.547 -0.479,-0.875 -1.604,-1.42 -2.333,-1.271 -1.36,0.277 -2.561,0.677 -3.475,1.156 -0.504,0.102 -1.249,0.413 -2.372,1.101 -1.911,1.171 -4.175,4.338 -6.737,3.511 1.042,2.5 3.631,1.845 3.631,1.845 1.207,-1.95 4.067,-3.779 6.168,-4.452 7.619,-1.745 12.614,3.439 15.431,9.398 0.768,1.625 2.611,7.132 4.041,10.292V10.956c-0.749,-1.038 -1.281,-3.018 -4.094,-4.894z"
|
||||
android:fillColor="#60379A"/>
|
||||
<path
|
||||
android:pathData="M13.789,3.662c0.573,0.788 3.236,0.794 4.596,3.82 1.359,3.026 -1.943,2.63 -3.14,1.23 -1.334,-1.561 -1.931,-2.863 -2.165,-3.992 -0.124,-0.596 -0.451,-2.649 0.709,-1.058z"
|
||||
android:fillColor="#C1CDD5"/>
|
||||
<path
|
||||
android:pathData="M14.209,4.962c0.956,0.573 2.164,1.515 2.517,2.596 0.351,1.081 -0.707,0.891 -1.349,-0.042 -0.641,-0.934 -0.94,-1.975 -1.285,-2.263 -0.346,-0.289 0.117,-0.291 0.117,-0.291z"
|
||||
android:fillColor="#758795"/>
|
||||
<path
|
||||
android:pathData="M15.255,14.565m-0.946,0a0.946,0.946 0,1 1,1.892 0a0.946,0.946 0,1 1,-1.892 0"
|
||||
android:fillColor="#292F33"/>
|
||||
<path
|
||||
android:pathData="M8.63,26.877c0.119,0.658 -0.181,1.263 -0.67,1.351 -0.49,0.089 -0.984,-0.372 -1.104,-1.03 -0.119,-0.659 0.182,-1.265 0.671,-1.354 0.49,-0.088 0.984,0.373 1.103,1.033z"
|
||||
android:fillColor="#53626C"/>
|
||||
<path
|
||||
android:pathData="M13.844,8.124l0.003,-0.002 -0.005,-0.007 -0.016,-0.014c-0.008,-0.007 -0.011,-0.019 -0.019,-0.025 -0.009,-0.007 -0.021,-0.011 -0.031,-0.018C12.621,7.078 0.933,-0.495 0.219,0.219 -0.51,0.948 10.443,9.742 11.149,10.28l0.011,0.006 0.541,0.439c0.008,0.007 0.01,0.018 0.018,0.024 0.013,0.01 0.028,0.015 0.042,0.024l0.047,0.038 -0.009,-0.016c0.565,0.361 1.427,0.114 1.979,-0.592 0.559,-0.715 0.577,-1.625 0.066,-2.079z"
|
||||
android:fillColor="#EE7C0E"/>
|
||||
<path
|
||||
android:pathData="M4.677,2.25l0.009,-0.025c-0.301,-0.174 -0.594,-0.341 -0.878,-0.5 -0.016,0.038 -0.022,0.069 -0.041,0.11 -0.112,0.243 -0.256,0.484 -0.429,0.716 -0.166,0.224 -0.349,0.424 -0.541,0.595 -0.02,0.018 -0.036,0.026 -0.056,0.043 0.238,0.22 0.489,0.446 0.745,0.676 0.234,-0.21 0.456,-0.449 0.654,-0.717 0.214,-0.287 0.395,-0.589 0.537,-0.898zM6.952,5.195c0.306,-0.41 0.521,-0.822 0.66,-1.212 -0.292,-0.181 -0.584,-0.36 -0.876,-0.538 -0.076,0.298 -0.247,0.699 -0.586,1.152 -0.31,0.417 -0.613,0.681 -0.864,0.845 0.259,0.223 0.52,0.445 0.779,0.665 0.314,-0.244 0.619,-0.552 0.887,-0.912zM9.87,7.32c0.365,-0.49 0.609,-0.983 0.734,-1.437l-0.906,-0.586c-0.023,0.296 -0.172,0.81 -0.631,1.425 -0.412,0.554 -0.821,0.847 -1.1,0.978l0.814,0.671c0.381,-0.256 0.761,-0.611 1.089,-1.051z"
|
||||
android:fillColor="#C43512"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="36dp"
|
||||
android:height="36dp"
|
||||
android:viewportWidth="36"
|
||||
android:viewportHeight="36">
|
||||
<path
|
||||
android:pathData="M27.989,19.977c-0.622,0 -1.225,0.078 -1.806,0.213L15.811,9.818c0.134,-0.581 0.212,-1.184 0.212,-1.806C16.023,3.587 12.436,0 8.012,0 7.11,0 5.91,0.916 6.909,1.915l2.997,2.997s0.999,1.998 -0.999,3.995 -3.996,0.998 -3.996,0.998L1.915,6.909C0.916,5.91 0,7.105 0,8.012c0,4.425 3.587,8.012 8.012,8.012 0.622,0 1.225,-0.078 1.806,-0.212l10.371,10.371c-0.135,0.581 -0.213,1.184 -0.213,1.806 0,4.425 3.588,8.011 8.012,8.011 0.901,0 2.101,-0.916 1.102,-1.915l-2.997,-2.997s-0.999,-1.998 0.999,-3.995 3.995,-0.999 3.995,-0.999l2.997,2.997c1,0.999 1.916,-0.196 1.916,-1.102 0,-4.425 -3.587,-8.012 -8.011,-8.012z"
|
||||
android:fillColor="#8899A6"/>
|
||||
</vector>
|
|
@ -18,11 +18,14 @@ package im.vector.riotx.features.debug.sas
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.airbnb.epoxy.EpoxyAttribute
|
||||
import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.matrix.android.api.session.crypto.verification.EmojiRepresentation
|
||||
import im.vector.riotx.core.epoxy.VectorEpoxyHolder
|
||||
import im.vector.riotx.core.epoxy.VectorEpoxyModel
|
||||
import me.gujun.android.span.image
|
||||
import me.gujun.android.span.span
|
||||
|
||||
@EpoxyModelClass(layout = im.vector.riotx.R.layout.item_sas_emoji)
|
||||
abstract class SasEmojiItem : VectorEpoxyModel<SasEmojiItem.Holder>() {
|
||||
|
@ -36,7 +39,12 @@ abstract class SasEmojiItem : VectorEpoxyModel<SasEmojiItem.Holder>() {
|
|||
override fun bind(holder: Holder) {
|
||||
super.bind(holder)
|
||||
holder.indexView.text = "$index:"
|
||||
holder.emojiView.text = emojiRepresentation.emoji
|
||||
holder.emojiView.text = span {
|
||||
+emojiRepresentation.emoji
|
||||
emojiRepresentation.drawableRes?.let {
|
||||
image(ContextCompat.getDrawable(holder.view.context, it)!!)
|
||||
}
|
||||
}
|
||||
holder.textView.setText(emojiRepresentation.nameResId)
|
||||
holder.idView.text = holder.idView.resources.getResourceEntryName(emojiRepresentation.nameResId)
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -566,5 +567,13 @@ Apache License
|
|||
of your accepting any such warranty or additional liability.
|
||||
</pre>
|
||||
|
||||
<pre>
|
||||
CC-BY 4.0
|
||||
<li>
|
||||
<b>Twitter/twemoji Graphics</b>
|
||||
<br/>
|
||||
</li>
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -37,6 +37,7 @@ import im.vector.riotx.features.crypto.verification.cancel.VerificationNotMeFrag
|
|||
import im.vector.riotx.features.crypto.verification.choose.VerificationChooseMethodFragment
|
||||
import im.vector.riotx.features.crypto.verification.conclusion.VerificationConclusionFragment
|
||||
import im.vector.riotx.features.crypto.verification.emoji.VerificationEmojiCodeFragment
|
||||
import im.vector.riotx.features.crypto.verification.qrconfirmation.VerificationQRWaitingFragment
|
||||
import im.vector.riotx.features.crypto.verification.qrconfirmation.VerificationQrScannedByOtherFragment
|
||||
import im.vector.riotx.features.crypto.verification.request.VerificationRequestFragment
|
||||
import im.vector.riotx.features.grouplist.GroupListFragment
|
||||
|
@ -339,6 +340,11 @@ interface FragmentModule {
|
|||
@FragmentKey(VerificationQrScannedByOtherFragment::class)
|
||||
fun bindVerificationQrScannedByOtherFragment(fragment: VerificationQrScannedByOtherFragment): Fragment
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FragmentKey(VerificationQRWaitingFragment::class)
|
||||
fun bindVerificationQRWaitingFragment(fragment: VerificationQRWaitingFragment): Fragment
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FragmentKey(VerificationConclusionFragment::class)
|
||||
|
|
|
@ -192,6 +192,6 @@ fun Context.toast(resId: Int) {
|
|||
}
|
||||
|
||||
// Not in KTX anymore
|
||||
fun Context.toast(message: String?) {
|
||||
Toast.makeText(this, message ?: getString(R.string.generic_exception_error), Toast.LENGTH_SHORT).show()
|
||||
fun Context.toast(message: String) {
|
||||
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package im.vector.riotx.features.crypto.quads
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.airbnb.mvrx.MvRx
|
||||
import com.airbnb.mvrx.MvRxState
|
||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||
|
@ -34,9 +35,9 @@ import im.vector.riotx.core.platform.VectorViewModel
|
|||
import im.vector.riotx.core.platform.WaitingViewData
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import java.io.ByteArrayOutputStream
|
||||
|
||||
data class SharedSecureStorageViewState(
|
||||
|
@ -77,7 +78,7 @@ class SharedSecureStorageViewModel @AssistedInject constructor(
|
|||
|
||||
private fun handleSubmitPassphrase(action: SharedSecureStorageAction.SubmitPassphrase) {
|
||||
val decryptedSecretMap = HashMap<String, String>()
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
runCatching {
|
||||
_viewEvents.post(SharedSecureStorageViewEvent.ShowModalLoading)
|
||||
val passphrase = action.passphrase
|
||||
|
@ -116,14 +117,18 @@ class SharedSecureStorageViewModel @AssistedInject constructor(
|
|||
|
||||
withContext(Dispatchers.IO) {
|
||||
args.requestedSecrets.forEach {
|
||||
val res = awaitCallback<String> { callback ->
|
||||
session.sharedSecretStorageService.getSecret(
|
||||
name = it,
|
||||
keyId = keyInfo.id,
|
||||
secretKey = keySpec,
|
||||
callback = callback)
|
||||
if (session.getAccountDataEvent(it) != null) {
|
||||
val res = awaitCallback<String> { callback ->
|
||||
session.sharedSecretStorageService.getSecret(
|
||||
name = it,
|
||||
keyId = keyInfo.id,
|
||||
secretKey = keySpec,
|
||||
callback = callback)
|
||||
}
|
||||
decryptedSecretMap[it] = res
|
||||
} else {
|
||||
Timber.w("## Cannot find secret $it in SSSS, skip")
|
||||
}
|
||||
decryptedSecretMap[it] = res
|
||||
}
|
||||
}
|
||||
}.fold({
|
||||
|
|
|
@ -32,6 +32,7 @@ import com.airbnb.mvrx.MvRx
|
|||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
||||
|
@ -49,6 +50,7 @@ import im.vector.riotx.features.crypto.verification.cancel.VerificationNotMeFrag
|
|||
import im.vector.riotx.features.crypto.verification.choose.VerificationChooseMethodFragment
|
||||
import im.vector.riotx.features.crypto.verification.conclusion.VerificationConclusionFragment
|
||||
import im.vector.riotx.features.crypto.verification.emoji.VerificationEmojiCodeFragment
|
||||
import im.vector.riotx.features.crypto.verification.qrconfirmation.VerificationQRWaitingFragment
|
||||
import im.vector.riotx.features.crypto.verification.qrconfirmation.VerificationQrScannedByOtherFragment
|
||||
import im.vector.riotx.features.crypto.verification.request.VerificationRequestFragment
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
|
@ -108,7 +110,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() {
|
|||
startActivityForResult(SharedSecureStorageActivity.newIntent(
|
||||
requireContext(),
|
||||
null, // use default key
|
||||
listOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME),
|
||||
listOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME),
|
||||
SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS
|
||||
), SECRET_REQUEST_CODE)
|
||||
}
|
||||
|
@ -243,6 +245,13 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() {
|
|||
showFragment(VerificationQrScannedByOtherFragment::class, Bundle())
|
||||
return@withState
|
||||
}
|
||||
is VerificationTxState.Started,
|
||||
is VerificationTxState.WaitingOtherReciprocateConfirm -> {
|
||||
showFragment(VerificationQRWaitingFragment::class, Bundle().apply {
|
||||
putParcelable(MvRx.KEY_ARG, VerificationQRWaitingFragment.Args(state.isMe, state.otherUserMxItem?.getBestName() ?: ""))
|
||||
})
|
||||
return@withState
|
||||
}
|
||||
is VerificationTxState.Verified -> {
|
||||
showFragment(VerificationConclusionFragment::class, Bundle().apply {
|
||||
putParcelable(MvRx.KEY_ARG, VerificationConclusionFragment.Args(true, null, state.isMe))
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
package im.vector.riotx.features.crypto.verification
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.airbnb.mvrx.Async
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.FragmentViewModelContext
|
||||
|
@ -28,6 +29,7 @@ import com.squareup.inject.assisted.Assisted
|
|||
import com.squareup.inject.assisted.AssistedInject
|
||||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
||||
import im.vector.matrix.android.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
||||
|
@ -46,10 +48,15 @@ import im.vector.matrix.android.api.util.MatrixItem
|
|||
import im.vector.matrix.android.api.util.toMatrixItem
|
||||
import im.vector.matrix.android.internal.crypto.crosssigning.fromBase64
|
||||
import im.vector.matrix.android.internal.crypto.crosssigning.isVerified
|
||||
import im.vector.matrix.android.internal.crypto.keysbackup.model.rest.KeysVersionResult
|
||||
import im.vector.matrix.android.internal.crypto.keysbackup.util.computeRecoveryKey
|
||||
import im.vector.matrix.android.internal.crypto.model.ImportRoomKeysResult
|
||||
import im.vector.matrix.android.internal.util.awaitCallback
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.extensions.exhaustive
|
||||
import im.vector.riotx.core.platform.VectorViewModel
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
|
||||
data class VerificationBottomSheetViewState(
|
||||
|
@ -337,40 +344,83 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
|
|||
_viewEvents.post(VerificationBottomSheetViewEvents.AccessSecretStore)
|
||||
}
|
||||
is VerificationAction.GotResultFromSsss -> {
|
||||
try {
|
||||
action.cypherData.fromBase64().inputStream().use { ins ->
|
||||
val res = session.loadSecureSecret<Map<String, String>>(ins, action.alias)
|
||||
val trustResult = session.cryptoService().crossSigningService().checkTrustFromPrivateKeys(
|
||||
res?.get(MASTER_KEY_SSSS_NAME),
|
||||
res?.get(USER_SIGNING_KEY_SSSS_NAME),
|
||||
res?.get(SELF_SIGNING_KEY_SSSS_NAME)
|
||||
)
|
||||
if (trustResult.isVerified()) {
|
||||
// Sign this device and upload the signature
|
||||
session.sessionParams.credentials.deviceId?.let { deviceId ->
|
||||
session.cryptoService()
|
||||
.crossSigningService().trustDevice(deviceId, object : MatrixCallback<Unit> {
|
||||
override fun onFailure(failure: Throwable) {
|
||||
Timber.w(failure, "Failed to sign my device after recovery")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
setState {
|
||||
copy(verifiedFromPrivateKeys = true)
|
||||
}
|
||||
} else {
|
||||
// POP UP something
|
||||
_viewEvents.post(VerificationBottomSheetViewEvents.ModalError("Failed to import keys"))
|
||||
}
|
||||
}
|
||||
} catch (failure: Throwable) {
|
||||
_viewEvents.post(VerificationBottomSheetViewEvents.ModalError(failure.localizedMessage ?: stringProvider.getString(R.string.unexpected_error)))
|
||||
}
|
||||
handleSecretBackFromSSSS(action)
|
||||
}
|
||||
}.exhaustive
|
||||
}
|
||||
|
||||
private fun handleSecretBackFromSSSS(action: VerificationAction.GotResultFromSsss) {
|
||||
try {
|
||||
action.cypherData.fromBase64().inputStream().use { ins ->
|
||||
val res = session.loadSecureSecret<Map<String, String>>(ins, action.alias)
|
||||
val trustResult = session.cryptoService().crossSigningService().checkTrustFromPrivateKeys(
|
||||
res?.get(MASTER_KEY_SSSS_NAME),
|
||||
res?.get(USER_SIGNING_KEY_SSSS_NAME),
|
||||
res?.get(SELF_SIGNING_KEY_SSSS_NAME)
|
||||
)
|
||||
if (trustResult.isVerified()) {
|
||||
// Sign this device and upload the signature
|
||||
session.sessionParams.credentials.deviceId?.let { deviceId ->
|
||||
session.cryptoService()
|
||||
.crossSigningService().trustDevice(deviceId, object : MatrixCallback<Unit> {
|
||||
override fun onFailure(failure: Throwable) {
|
||||
Timber.w(failure, "Failed to sign my device after recovery")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
setState {
|
||||
copy(verifiedFromPrivateKeys = true)
|
||||
}
|
||||
|
||||
// try to get keybackup key
|
||||
} else {
|
||||
// POP UP something
|
||||
_viewEvents.post(VerificationBottomSheetViewEvents.ModalError(stringProvider.getString(R.string.error_failed_to_import_keys)))
|
||||
}
|
||||
|
||||
// try the keybackup
|
||||
tentativeRestoreBackup(res)
|
||||
Unit
|
||||
}
|
||||
} catch (failure: Throwable) {
|
||||
_viewEvents.post(
|
||||
VerificationBottomSheetViewEvents.ModalError(failure.localizedMessage ?: stringProvider.getString(R.string.unexpected_error)))
|
||||
}
|
||||
}
|
||||
|
||||
private fun tentativeRestoreBackup(res: Map<String, String>?) {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
val secret = res?.get(KEYBACKUP_SECRET_SSSS_NAME) ?: return@launch Unit.also {
|
||||
Timber.v("## Keybackup secret not restored from SSSS")
|
||||
}
|
||||
|
||||
val version = awaitCallback<KeysVersionResult?> {
|
||||
session.cryptoService().keysBackupService().getCurrentVersion(it)
|
||||
} ?: return@launch
|
||||
|
||||
awaitCallback<ImportRoomKeysResult> {
|
||||
session.cryptoService().keysBackupService().restoreKeysWithRecoveryKey(
|
||||
version,
|
||||
computeRecoveryKey(secret.fromBase64()),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
it
|
||||
)
|
||||
}
|
||||
|
||||
awaitCallback<Unit> {
|
||||
session.cryptoService().keysBackupService().trustKeysBackupVersion(version, true, it)
|
||||
}
|
||||
} catch (failure: Throwable) {
|
||||
// Just ignore for now
|
||||
Timber.v("## Failed to restore backup after SSSS recovery")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun transactionCreated(tx: VerificationTransaction) {
|
||||
transactionUpdated(tx)
|
||||
}
|
||||
|
|
|
@ -16,14 +16,21 @@
|
|||
*/
|
||||
package im.vector.riotx.features.crypto.verification.epoxy
|
||||
|
||||
import android.content.Context
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import com.airbnb.epoxy.EpoxyAttribute
|
||||
import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.matrix.android.api.session.crypto.verification.EmojiRepresentation
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.epoxy.VectorEpoxyHolder
|
||||
import im.vector.riotx.core.epoxy.VectorEpoxyModel
|
||||
import me.gujun.android.span.Span
|
||||
import me.gujun.android.span.image
|
||||
import me.gujun.android.span.span
|
||||
|
||||
/**
|
||||
* A emoji list for bottom sheet.
|
||||
|
@ -40,26 +47,36 @@ abstract class BottomSheetVerificationEmojisItem : VectorEpoxyModel<BottomSheetV
|
|||
@EpoxyAttribute lateinit var emojiRepresentation6: EmojiRepresentation
|
||||
|
||||
override fun bind(holder: Holder) {
|
||||
holder.emoji0View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation0.emoji
|
||||
holder.emoji0View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation0.nameResId)
|
||||
bindEmojiView(holder.emoji0View, emojiRepresentation0)
|
||||
bindEmojiView(holder.emoji1View, emojiRepresentation1)
|
||||
bindEmojiView(holder.emoji2View, emojiRepresentation2)
|
||||
bindEmojiView(holder.emoji3View, emojiRepresentation3)
|
||||
bindEmojiView(holder.emoji4View, emojiRepresentation4)
|
||||
bindEmojiView(holder.emoji5View, emojiRepresentation5)
|
||||
bindEmojiView(holder.emoji6View, emojiRepresentation6)
|
||||
}
|
||||
|
||||
holder.emoji1View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation1.emoji
|
||||
holder.emoji1View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation1.nameResId)
|
||||
private fun spanForRepresentation(context: Context, rep: EmojiRepresentation): Span {
|
||||
return span {
|
||||
if (rep.drawableRes != null) {
|
||||
ContextCompat.getDrawable(context, rep.drawableRes!!)?.let { image(it) }
|
||||
} else {
|
||||
+rep.emoji
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
holder.emoji2View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation2.emoji
|
||||
holder.emoji2View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation2.nameResId)
|
||||
|
||||
holder.emoji3View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation3.emoji
|
||||
holder.emoji3View.findViewById<TextView>(R.id.item_emoji_name_tv)?.setText(emojiRepresentation3.nameResId)
|
||||
|
||||
holder.emoji4View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation4.emoji
|
||||
holder.emoji4View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation4.nameResId)
|
||||
|
||||
holder.emoji5View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation5.emoji
|
||||
holder.emoji5View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation5.nameResId)
|
||||
|
||||
holder.emoji6View.findViewById<TextView>(R.id.item_emoji_tv).text = emojiRepresentation6.emoji
|
||||
holder.emoji6View.findViewById<TextView>(R.id.item_emoji_name_tv).setText(emojiRepresentation6.nameResId)
|
||||
private fun bindEmojiView(view: ViewGroup, rep: EmojiRepresentation) {
|
||||
rep.drawableRes?.let {
|
||||
view.findViewById<TextView>(R.id.item_emoji_tv).isVisible = false
|
||||
view.findViewById<ImageView>(R.id.item_emoji_image).isVisible = true
|
||||
view.findViewById<ImageView>(R.id.item_emoji_image).setImageDrawable(ContextCompat.getDrawable(view.context, it))
|
||||
} ?: kotlin.run {
|
||||
view.findViewById<TextView>(R.id.item_emoji_tv).isVisible = true
|
||||
view.findViewById<ImageView>(R.id.item_emoji_image).isVisible = false
|
||||
view.findViewById<TextView>(R.id.item_emoji_tv).text = rep.emoji
|
||||
}
|
||||
view.findViewById<TextView>(R.id.item_emoji_name_tv).setText(rep.nameResId)
|
||||
}
|
||||
|
||||
class Holder : VectorEpoxyHolder() {
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.crypto.verification.qrconfirmation
|
||||
|
||||
import com.airbnb.epoxy.EpoxyController
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.resources.ColorProvider
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationBigImageItem
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationNoticeItem
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationWaitingItem
|
||||
import javax.inject.Inject
|
||||
|
||||
class VerificationQRWaitingController @Inject constructor(
|
||||
private val stringProvider: StringProvider,
|
||||
private val colorProvider: ColorProvider
|
||||
) : EpoxyController() {
|
||||
|
||||
private var args: VerificationQRWaitingFragment.Args? = null
|
||||
|
||||
fun update(args: VerificationQRWaitingFragment.Args) {
|
||||
this.args = args
|
||||
requestModelBuild()
|
||||
}
|
||||
|
||||
override fun buildModels() {
|
||||
val params = args ?: return
|
||||
|
||||
bottomSheetVerificationNoticeItem {
|
||||
id("notice")
|
||||
apply {
|
||||
notice(stringProvider.getString(R.string.qr_code_scanned_verif_waiting_notice))
|
||||
}
|
||||
}
|
||||
|
||||
bottomSheetVerificationBigImageItem {
|
||||
id("image")
|
||||
imageRes(R.drawable.ic_shield_trusted)
|
||||
}
|
||||
|
||||
bottomSheetVerificationWaitingItem {
|
||||
id("waiting")
|
||||
title(stringProvider.getString(R.string.qr_code_scanned_verif_waiting, params.otherUserName))
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.crypto.verification.qrconfirmation
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.view.View
|
||||
import com.airbnb.mvrx.MvRx
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.extensions.cleanup
|
||||
import im.vector.riotx.core.extensions.configureWith
|
||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
import kotlinx.android.synthetic.main.bottom_sheet_verification_child_fragment.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class VerificationQRWaitingFragment @Inject constructor(
|
||||
val controller: VerificationQRWaitingController
|
||||
) : VectorBaseFragment() {
|
||||
|
||||
@Parcelize
|
||||
data class Args(
|
||||
val isMe: Boolean,
|
||||
val otherUserName: String
|
||||
) : Parcelable
|
||||
|
||||
override fun getLayoutResId() = R.layout.bottom_sheet_verification_child_fragment
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
setupRecyclerView()
|
||||
(arguments?.getParcelable(MvRx.KEY_ARG) as? Args)?.let {
|
||||
controller.update(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
bottomSheetVerificationRecyclerView.cleanup()
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
private fun setupRecyclerView() {
|
||||
bottomSheetVerificationRecyclerView.configureWith(controller, hasFixedSize = false, disableItemAnimation = true)
|
||||
}
|
||||
}
|
|
@ -21,7 +21,9 @@ import im.vector.riotx.R
|
|||
import im.vector.riotx.core.epoxy.dividerItem
|
||||
import im.vector.riotx.core.resources.ColorProvider
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import im.vector.riotx.features.crypto.verification.VerificationBottomSheetViewState
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationActionItem
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationBigImageItem
|
||||
import im.vector.riotx.features.crypto.verification.epoxy.bottomSheetVerificationNoticeItem
|
||||
import javax.inject.Inject
|
||||
|
||||
|
@ -32,33 +34,37 @@ class VerificationQrScannedByOtherController @Inject constructor(
|
|||
|
||||
var listener: Listener? = null
|
||||
|
||||
init {
|
||||
private var viewState: VerificationBottomSheetViewState? = null
|
||||
|
||||
fun update(viewState: VerificationBottomSheetViewState) {
|
||||
this.viewState = viewState
|
||||
requestModelBuild()
|
||||
}
|
||||
|
||||
override fun buildModels() {
|
||||
val state = viewState ?: return
|
||||
|
||||
bottomSheetVerificationNoticeItem {
|
||||
id("notice")
|
||||
notice(stringProvider.getString(R.string.qr_code_scanned_by_other_notice))
|
||||
apply {
|
||||
if (state.isMe) {
|
||||
notice(stringProvider.getString(R.string.qr_code_scanned_self_verif_notice))
|
||||
} else {
|
||||
val name = state.otherUserMxItem?.getBestName() ?: ""
|
||||
notice(stringProvider.getString(R.string.qr_code_scanned_by_other_notice, name))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bottomSheetVerificationBigImageItem {
|
||||
id("image")
|
||||
imageRes(R.drawable.ic_shield_trusted)
|
||||
}
|
||||
|
||||
dividerItem {
|
||||
id("sep0")
|
||||
}
|
||||
|
||||
bottomSheetVerificationActionItem {
|
||||
id("confirm")
|
||||
title(stringProvider.getString(R.string.qr_code_scanned_by_other_yes))
|
||||
titleColor(colorProvider.getColor(R.color.riotx_accent))
|
||||
iconRes(R.drawable.ic_check_on)
|
||||
iconColor(colorProvider.getColor(R.color.riotx_accent))
|
||||
listener { listener?.onUserConfirmsQrCodeScanned() }
|
||||
}
|
||||
|
||||
dividerItem {
|
||||
id("sep1")
|
||||
}
|
||||
|
||||
bottomSheetVerificationActionItem {
|
||||
id("deny")
|
||||
title(stringProvider.getString(R.string.qr_code_scanned_by_other_no))
|
||||
|
@ -67,6 +73,19 @@ class VerificationQrScannedByOtherController @Inject constructor(
|
|||
iconColor(colorProvider.getColor(R.color.vector_error_color))
|
||||
listener { listener?.onUserDeniesQrCodeScanned() }
|
||||
}
|
||||
|
||||
dividerItem {
|
||||
id("sep1")
|
||||
}
|
||||
|
||||
bottomSheetVerificationActionItem {
|
||||
id("confirm")
|
||||
title(stringProvider.getString(R.string.qr_code_scanned_by_other_yes))
|
||||
titleColor(colorProvider.getColor(R.color.riotx_accent))
|
||||
iconRes(R.drawable.ic_check_on)
|
||||
iconColor(colorProvider.getColor(R.color.riotx_accent))
|
||||
listener { listener?.onUserConfirmsQrCodeScanned() }
|
||||
}
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
|
|
|
@ -18,6 +18,7 @@ package im.vector.riotx.features.crypto.verification.qrconfirmation
|
|||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.airbnb.mvrx.parentFragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.extensions.cleanup
|
||||
import im.vector.riotx.core.extensions.configureWith
|
||||
|
@ -37,10 +38,13 @@ class VerificationQrScannedByOtherFragment @Inject constructor(
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
setupRecyclerView()
|
||||
}
|
||||
|
||||
override fun invalidate() = withState(sharedViewModel) { state ->
|
||||
controller.update(state)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
bottomSheetVerificationRecyclerView.cleanup()
|
||||
controller.listener = null
|
||||
|
|
|
@ -47,9 +47,9 @@ import im.vector.riotx.features.home.room.detail.timeline.helper.TimelineEventVi
|
|||
import im.vector.riotx.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.nextOrNull
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.BaseEventItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.BasedMergedItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.DaySeparatorItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.DaySeparatorItem_
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedHeaderItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MessageInformationData
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.ReadReceiptData
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.TimelineReadMarkerItem_
|
||||
|
@ -373,7 +373,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec
|
|||
val localId: Long,
|
||||
val eventId: String?,
|
||||
val eventModel: EpoxyModel<*>? = null,
|
||||
val mergedHeaderModel: MergedHeaderItem? = null,
|
||||
val mergedHeaderModel: BasedMergedItem<*>? = null,
|
||||
val formattedDayModel: DaySeparatorItem? = null
|
||||
) {
|
||||
fun shouldTriggerBuild(): Boolean {
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.home.room.detail.timeline.factory
|
||||
|
||||
import im.vector.matrix.android.api.session.events.model.toModel
|
||||
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||
import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
||||
import im.vector.matrix.android.internal.crypto.model.event.EncryptionEventContent
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.AvatarSizeProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.MessageInformationDataFactory
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.MessageItemAttributesFactory
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.StatusTileTimelineItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.StatusTileTimelineItem_
|
||||
import javax.inject.Inject
|
||||
|
||||
class EncryptionItemFactory @Inject constructor(
|
||||
private val messageItemAttributesFactory: MessageItemAttributesFactory,
|
||||
private val messageColorProvider: MessageColorProvider,
|
||||
private val stringProvider: StringProvider,
|
||||
private val informationDataFactory: MessageInformationDataFactory,
|
||||
private val avatarSizeProvider: AvatarSizeProvider) {
|
||||
|
||||
fun create(event: TimelineEvent,
|
||||
highlight: Boolean,
|
||||
callback: TimelineEventController.Callback?): StatusTileTimelineItem? {
|
||||
val algorithm = event.root.getClearContent().toModel<EncryptionEventContent>()?.algorithm
|
||||
val informationData = informationDataFactory.create(event, null)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, callback)
|
||||
|
||||
val isSafeAlgorithm = algorithm == MXCRYPTO_ALGORITHM_MEGOLM
|
||||
val title: String
|
||||
val description: String
|
||||
val shield: StatusTileTimelineItem.ShieldUIState
|
||||
if (isSafeAlgorithm) {
|
||||
title = stringProvider.getString(R.string.encryption_enabled)
|
||||
description = stringProvider.getString(R.string.encryption_enabled_tile_description)
|
||||
shield = StatusTileTimelineItem.ShieldUIState.BLACK
|
||||
} else {
|
||||
title = stringProvider.getString(R.string.encryption_not_enabled)
|
||||
description = stringProvider.getString(R.string.encryption_unknown_algorithm_tile_description)
|
||||
shield = StatusTileTimelineItem.ShieldUIState.RED
|
||||
}
|
||||
return StatusTileTimelineItem_()
|
||||
.attributes(
|
||||
StatusTileTimelineItem.Attributes(
|
||||
title = title,
|
||||
description = description,
|
||||
shieldUIState = shield,
|
||||
informationData = informationData,
|
||||
avatarRenderer = attributes.avatarRenderer,
|
||||
messageColorProvider = messageColorProvider,
|
||||
emojiTypeFace = attributes.emojiTypeFace,
|
||||
itemClickListener = attributes.itemClickListener,
|
||||
itemLongClickListener = attributes.itemLongClickListener,
|
||||
reactionPillCallback = attributes.reactionPillCallback,
|
||||
readReceiptsCallback = attributes.readReceiptsCallback
|
||||
)
|
||||
)
|
||||
.highlighted(highlight)
|
||||
.leftGuideline(avatarSizeProvider.leftGuideline)
|
||||
}
|
||||
}
|
|
@ -16,16 +16,24 @@
|
|||
|
||||
package im.vector.riotx.features.home.room.detail.timeline.factory
|
||||
|
||||
import im.vector.matrix.android.api.session.events.model.EventType
|
||||
import im.vector.matrix.android.api.session.events.model.toModel
|
||||
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||
import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
|
||||
import im.vector.matrix.android.internal.crypto.model.event.EncryptionEventContent
|
||||
import im.vector.riotx.core.di.ActiveSessionHolder
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.AvatarSizeProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.MergedTimelineEventVisibilityStateChangedListener
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.canBeMerged
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.isRoomConfiguration
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.prevSameTypeEvents
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedHeaderItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedHeaderItem_
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.BasedMergedItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedMembershipEventsItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedMembershipEventsItem_
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedRoomCreationItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.MergedRoomCreationItem_
|
||||
import javax.inject.Inject
|
||||
|
||||
class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: ActiveSessionHolder,
|
||||
|
@ -43,8 +51,12 @@ class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: Act
|
|||
eventIdToHighlight: String?,
|
||||
callback: TimelineEventController.Callback?,
|
||||
requestModelBuild: () -> Unit)
|
||||
: MergedHeaderItem? {
|
||||
return if (!event.canBeMerged() || (nextEvent?.root?.getClearType() == event.root.getClearType() && !addDaySeparator)) {
|
||||
: BasedMergedItem<*>? {
|
||||
return if (nextEvent?.root?.getClearType() == EventType.STATE_ROOM_CREATE && event.isRoomConfiguration()) {
|
||||
// It's the first item before room.create
|
||||
// Collapse all room configuration events
|
||||
buildRoomCreationMergedSummary(currentPosition, items, event, eventIdToHighlight, requestModelBuild, callback)
|
||||
} else if (!event.canBeMerged() || (nextEvent?.root?.getClearType() == event.root.getClearType() && !addDaySeparator)) {
|
||||
null
|
||||
} else {
|
||||
val prevSameTypeEvents = items.prevSameTypeEvents(currentPosition, 2)
|
||||
|
@ -53,14 +65,14 @@ class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: Act
|
|||
} else {
|
||||
var highlighted = false
|
||||
val mergedEvents = (prevSameTypeEvents + listOf(event)).asReversed()
|
||||
val mergedData = ArrayList<MergedHeaderItem.Data>(mergedEvents.size)
|
||||
val mergedData = ArrayList<BasedMergedItem.Data>(mergedEvents.size)
|
||||
mergedEvents.forEach { mergedEvent ->
|
||||
if (!highlighted && mergedEvent.root.eventId == eventIdToHighlight) {
|
||||
highlighted = true
|
||||
}
|
||||
val senderAvatar = mergedEvent.senderAvatar
|
||||
val senderName = mergedEvent.getDisambiguatedDisplayName()
|
||||
val data = MergedHeaderItem.Data(
|
||||
val data = BasedMergedItem.Data(
|
||||
userId = mergedEvent.root.senderId ?: "",
|
||||
avatarUrl = senderAvatar,
|
||||
memberName = senderName,
|
||||
|
@ -82,7 +94,7 @@ class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: Act
|
|||
collapsedEventIds.removeAll(mergedEventIds)
|
||||
}
|
||||
val mergeId = mergedEventIds.joinToString(separator = "_") { it.toString() }
|
||||
val attributes = MergedHeaderItem.Attributes(
|
||||
val attributes = MergedMembershipEventsItem.Attributes(
|
||||
isCollapsed = isCollapsed,
|
||||
mergeData = mergedData,
|
||||
avatarRenderer = avatarRenderer,
|
||||
|
@ -92,7 +104,7 @@ class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: Act
|
|||
},
|
||||
readReceiptsCallback = callback
|
||||
)
|
||||
MergedHeaderItem_()
|
||||
MergedMembershipEventsItem_()
|
||||
.id(mergeId)
|
||||
.leftGuideline(avatarSizeProvider.leftGuideline)
|
||||
.highlighted(isCollapsed && highlighted)
|
||||
|
@ -104,6 +116,81 @@ class MergedHeaderItemFactory @Inject constructor(private val sessionHolder: Act
|
|||
}
|
||||
}
|
||||
|
||||
private fun buildRoomCreationMergedSummary(currentPosition: Int,
|
||||
items: List<TimelineEvent>,
|
||||
event: TimelineEvent,
|
||||
eventIdToHighlight: String?,
|
||||
requestModelBuild: () -> Unit,
|
||||
callback: TimelineEventController.Callback?): MergedRoomCreationItem_? {
|
||||
var prevEvent = if (currentPosition > 0) items[currentPosition - 1] else null
|
||||
var tmpPos = currentPosition - 1
|
||||
val mergedEvents = ArrayList<TimelineEvent>().also { it.add(event) }
|
||||
var hasEncryption = false
|
||||
var encryptionAlgorithm: String? = null
|
||||
while (prevEvent != null && prevEvent.isRoomConfiguration()) {
|
||||
if (prevEvent.root.getClearType() == EventType.STATE_ROOM_ENCRYPTION) {
|
||||
hasEncryption = true
|
||||
encryptionAlgorithm = prevEvent.root.getClearContent()?.toModel<EncryptionEventContent>()?.algorithm
|
||||
}
|
||||
mergedEvents.add(prevEvent)
|
||||
tmpPos--
|
||||
prevEvent = if (tmpPos >= 0) items[tmpPos] else null
|
||||
}
|
||||
return if (mergedEvents.size > 2) {
|
||||
var highlighted = false
|
||||
val mergedData = ArrayList<BasedMergedItem.Data>(mergedEvents.size)
|
||||
mergedEvents.reversed()
|
||||
.forEach { mergedEvent ->
|
||||
if (!highlighted && mergedEvent.root.eventId == eventIdToHighlight) {
|
||||
highlighted = true
|
||||
}
|
||||
val senderAvatar = mergedEvent.senderAvatar
|
||||
val senderName = mergedEvent.getDisambiguatedDisplayName()
|
||||
val data = BasedMergedItem.Data(
|
||||
userId = mergedEvent.root.senderId ?: "",
|
||||
avatarUrl = senderAvatar,
|
||||
memberName = senderName,
|
||||
localId = mergedEvent.localId,
|
||||
eventId = mergedEvent.root.eventId ?: ""
|
||||
)
|
||||
mergedData.add(data)
|
||||
}
|
||||
val mergedEventIds = mergedEvents.map { it.localId }
|
||||
// We try to find if one of the item id were used as mergeItemCollapseStates key
|
||||
// => handle case where paginating from mergeable events and we get more
|
||||
val previousCollapseStateKey = mergedEventIds.intersect(mergeItemCollapseStates.keys).firstOrNull()
|
||||
val initialCollapseState = mergeItemCollapseStates.remove(previousCollapseStateKey)
|
||||
?: true
|
||||
val isCollapsed = mergeItemCollapseStates.getOrPut(event.localId) { initialCollapseState }
|
||||
if (isCollapsed) {
|
||||
collapsedEventIds.addAll(mergedEventIds)
|
||||
} else {
|
||||
collapsedEventIds.removeAll(mergedEventIds)
|
||||
}
|
||||
val mergeId = mergedEventIds.joinToString(separator = "_") { it.toString() }
|
||||
val attributes = MergedRoomCreationItem.Attributes(
|
||||
isCollapsed = isCollapsed,
|
||||
mergeData = mergedData,
|
||||
avatarRenderer = avatarRenderer,
|
||||
onCollapsedStateChanged = {
|
||||
mergeItemCollapseStates[event.localId] = it
|
||||
requestModelBuild()
|
||||
},
|
||||
hasEncryptionEvent = hasEncryption,
|
||||
isEncryptionAlgorithmSecure = encryptionAlgorithm == MXCRYPTO_ALGORITHM_MEGOLM,
|
||||
readReceiptsCallback = callback
|
||||
)
|
||||
MergedRoomCreationItem_()
|
||||
.id(mergeId)
|
||||
.leftGuideline(avatarSizeProvider.leftGuideline)
|
||||
.highlighted(isCollapsed && highlighted)
|
||||
.attributes(attributes)
|
||||
.also {
|
||||
it.setOnVisibilityStateChanged(MergedTimelineEventVisibilityStateChangedListener(callback, mergedEvents))
|
||||
}
|
||||
} else null
|
||||
}
|
||||
|
||||
fun isCollapsed(localId: Long): Boolean {
|
||||
return collapsedEventIds.contains(localId)
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me
|
|||
private val encryptedItemFactory: EncryptedItemFactory,
|
||||
private val noticeItemFactory: NoticeItemFactory,
|
||||
private val defaultItemFactory: DefaultItemFactory,
|
||||
private val encryptionItemFactory: EncryptionItemFactory,
|
||||
private val roomCreateItemFactory: RoomCreateItemFactory,
|
||||
private val verificationConclusionItemFactory: VerificationItemFactory,
|
||||
private val userPreferencesProvider: UserPreferencesProvider) {
|
||||
|
@ -57,8 +58,10 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me
|
|||
EventType.CALL_HANGUP,
|
||||
EventType.CALL_ANSWER,
|
||||
EventType.REACTION,
|
||||
EventType.REDACTION,
|
||||
EventType.STATE_ROOM_ENCRYPTION -> noticeItemFactory.create(event, highlight, callback)
|
||||
EventType.REDACTION -> noticeItemFactory.create(event, highlight, callback)
|
||||
EventType.STATE_ROOM_ENCRYPTION -> {
|
||||
encryptionItemFactory.create(event, highlight, callback)
|
||||
}
|
||||
// State room create
|
||||
EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(event, callback)
|
||||
// Crypto
|
||||
|
|
|
@ -25,15 +25,17 @@ import im.vector.matrix.android.api.session.room.model.message.MessageRelationCo
|
|||
import im.vector.matrix.android.api.session.room.model.message.MessageVerificationCancelContent
|
||||
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||
import im.vector.matrix.android.internal.session.room.VerificationState
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.epoxy.VectorEpoxyModel
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import im.vector.riotx.core.resources.UserPreferencesProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.AvatarSizeProvider
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.MessageInformationDataFactory
|
||||
import im.vector.riotx.features.home.room.detail.timeline.helper.MessageItemAttributesFactory
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.VerificationRequestConclusionItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.VerificationRequestConclusionItem_
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.StatusTileTimelineItem
|
||||
import im.vector.riotx.features.home.room.detail.timeline.item.StatusTileTimelineItem_
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
|
@ -48,6 +50,7 @@ class VerificationItemFactory @Inject constructor(
|
|||
private val avatarSizeProvider: AvatarSizeProvider,
|
||||
private val noticeItemFactory: NoticeItemFactory,
|
||||
private val userPreferencesProvider: UserPreferencesProvider,
|
||||
private val stringProvider: StringProvider,
|
||||
private val session: Session
|
||||
) {
|
||||
|
||||
|
@ -88,12 +91,12 @@ class VerificationItemFactory @Inject constructor(
|
|||
CancelCode.MismatchedKeys,
|
||||
CancelCode.MismatchedSas -> {
|
||||
// We should display these bad conclusions
|
||||
return VerificationRequestConclusionItem_()
|
||||
return StatusTileTimelineItem_()
|
||||
.attributes(
|
||||
VerificationRequestConclusionItem.Attributes(
|
||||
toUserId = informationData.senderId,
|
||||
toUserName = informationData.memberName.toString(),
|
||||
isPositive = false,
|
||||
StatusTileTimelineItem.Attributes(
|
||||
title = stringProvider.getString(R.string.verification_conclusion_warning),
|
||||
description = "${informationData.memberName} (${informationData.senderId})",
|
||||
shieldUIState = StatusTileTimelineItem.ShieldUIState.RED,
|
||||
informationData = informationData,
|
||||
avatarRenderer = attributes.avatarRenderer,
|
||||
messageColorProvider = messageColorProvider,
|
||||
|
@ -121,12 +124,12 @@ class VerificationItemFactory @Inject constructor(
|
|||
// We only display the done sent by the other user, the done send by me is ignored
|
||||
return ignoredConclusion(event, highlight, callback)
|
||||
}
|
||||
return VerificationRequestConclusionItem_()
|
||||
return StatusTileTimelineItem_()
|
||||
.attributes(
|
||||
VerificationRequestConclusionItem.Attributes(
|
||||
toUserId = informationData.senderId,
|
||||
toUserName = informationData.memberName.toString(),
|
||||
isPositive = true,
|
||||
StatusTileTimelineItem.Attributes(
|
||||
title = stringProvider.getString(R.string.sas_verified),
|
||||
description = "${informationData.memberName} (${informationData.senderId})",
|
||||
shieldUIState = StatusTileTimelineItem.ShieldUIState.GREEN,
|
||||
informationData = informationData,
|
||||
avatarRenderer = attributes.avatarRenderer,
|
||||
messageColorProvider = messageColorProvider,
|
||||
|
|
|
@ -50,6 +50,18 @@ fun TimelineEvent.canBeMerged(): Boolean {
|
|||
return root.getClearType() == EventType.STATE_ROOM_MEMBER
|
||||
}
|
||||
|
||||
fun TimelineEvent.isRoomConfiguration(): Boolean {
|
||||
return when (root.getClearType()) {
|
||||
EventType.STATE_ROOM_GUEST_ACCESS,
|
||||
EventType.STATE_ROOM_HISTORY_VISIBILITY,
|
||||
EventType.STATE_ROOM_JOIN_RULES,
|
||||
EventType.STATE_ROOM_MEMBER,
|
||||
EventType.STATE_ROOM_NAME,
|
||||
EventType.STATE_ROOM_ENCRYPTION -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
fun List<TimelineEvent>.nextSameTypeEvents(index: Int, minSize: Int): List<TimelineEvent> {
|
||||
if (index >= size - 1) {
|
||||
return emptyList()
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.home.room.detail.timeline.item
|
||||
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.core.view.isVisible
|
||||
import im.vector.matrix.android.api.util.MatrixItem
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
|
||||
abstract class BasedMergedItem<H : BasedMergedItem.Holder> : BaseEventItem<H>() {
|
||||
|
||||
abstract val attributes: Attributes
|
||||
|
||||
override fun bind(holder: H) {
|
||||
super.bind(holder)
|
||||
holder.expandView.setOnClickListener {
|
||||
attributes.onCollapsedStateChanged(!attributes.isCollapsed)
|
||||
}
|
||||
if (attributes.isCollapsed) {
|
||||
holder.separatorView.visibility = View.GONE
|
||||
holder.expandView.setText(R.string.merged_events_expand)
|
||||
} else {
|
||||
holder.separatorView.visibility = View.VISIBLE
|
||||
holder.expandView.setText(R.string.merged_events_collapse)
|
||||
}
|
||||
// No read receipt for this item
|
||||
holder.readReceiptsView.isVisible = false
|
||||
}
|
||||
|
||||
protected val distinctMergeData by lazy {
|
||||
attributes.mergeData.distinctBy { it.userId }
|
||||
}
|
||||
|
||||
override fun getEventIds(): List<String> {
|
||||
return if (attributes.isCollapsed) {
|
||||
attributes.mergeData.map { it.eventId }
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
data class Data(
|
||||
val localId: Long,
|
||||
val eventId: String,
|
||||
val userId: String,
|
||||
val memberName: String,
|
||||
val avatarUrl: String?
|
||||
)
|
||||
|
||||
fun Data.toMatrixItem() = MatrixItem.UserItem(userId, memberName, avatarUrl)
|
||||
|
||||
interface Attributes {
|
||||
val isCollapsed: Boolean
|
||||
val mergeData: List<Data>
|
||||
val avatarRenderer: AvatarRenderer
|
||||
val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback?
|
||||
val onCollapsedStateChanged: (Boolean) -> Unit
|
||||
}
|
||||
|
||||
abstract class Holder(@IdRes stubId: Int) : BaseEventItem.BaseHolder(stubId) {
|
||||
val expandView by bind<TextView>(R.id.itemMergedExpandTextView)
|
||||
val separatorView by bind<View>(R.id.itemMergedSeparatorView)
|
||||
}
|
||||
}
|
|
@ -24,28 +24,20 @@ import androidx.core.view.children
|
|||
import androidx.core.view.isVisible
|
||||
import com.airbnb.epoxy.EpoxyAttribute
|
||||
import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.matrix.android.api.util.MatrixItem
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
|
||||
@EpoxyModelClass(layout = R.layout.item_timeline_event_base_noinfo)
|
||||
abstract class MergedHeaderItem : BaseEventItem<MergedHeaderItem.Holder>() {
|
||||
|
||||
@EpoxyAttribute
|
||||
lateinit var attributes: Attributes
|
||||
|
||||
private val distinctMergeData by lazy {
|
||||
attributes.mergeData.distinctBy { it.userId }
|
||||
}
|
||||
abstract class MergedMembershipEventsItem : BasedMergedItem<MergedMembershipEventsItem.Holder>() {
|
||||
|
||||
override fun getViewType() = STUB_ID
|
||||
|
||||
@EpoxyAttribute
|
||||
override lateinit var attributes: Attributes
|
||||
|
||||
override fun bind(holder: Holder) {
|
||||
super.bind(holder)
|
||||
holder.expandView.setOnClickListener {
|
||||
attributes.onCollapsedStateChanged(!attributes.isCollapsed)
|
||||
}
|
||||
if (attributes.isCollapsed) {
|
||||
val summary = holder.expandView.resources.getQuantityString(R.plurals.membership_changes, attributes.mergeData.size, attributes.mergeData.size)
|
||||
holder.summaryView.text = summary
|
||||
|
@ -60,52 +52,28 @@ abstract class MergedHeaderItem : BaseEventItem<MergedHeaderItem.Holder>() {
|
|||
view.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
holder.separatorView.visibility = View.GONE
|
||||
holder.expandView.setText(R.string.merged_events_expand)
|
||||
} else {
|
||||
holder.avatarListView.visibility = View.INVISIBLE
|
||||
holder.summaryView.visibility = View.GONE
|
||||
holder.separatorView.visibility = View.VISIBLE
|
||||
holder.expandView.setText(R.string.merged_events_collapse)
|
||||
}
|
||||
// No read receipt for this item
|
||||
holder.readReceiptsView.isVisible = false
|
||||
}
|
||||
|
||||
override fun getEventIds(): List<String> {
|
||||
return if (attributes.isCollapsed) {
|
||||
attributes.mergeData.map { it.eventId }
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
data class Data(
|
||||
val localId: Long,
|
||||
val eventId: String,
|
||||
val userId: String,
|
||||
val memberName: String,
|
||||
val avatarUrl: String?
|
||||
)
|
||||
|
||||
fun Data.toMatrixItem() = MatrixItem.UserItem(userId, memberName, avatarUrl)
|
||||
|
||||
data class Attributes(
|
||||
val isCollapsed: Boolean,
|
||||
val mergeData: List<Data>,
|
||||
val avatarRenderer: AvatarRenderer,
|
||||
val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
val onCollapsedStateChanged: (Boolean) -> Unit
|
||||
)
|
||||
|
||||
class Holder : BaseHolder(STUB_ID) {
|
||||
val expandView by bind<TextView>(R.id.itemMergedExpandTextView)
|
||||
class Holder : BasedMergedItem.Holder(STUB_ID) {
|
||||
val summaryView by bind<TextView>(R.id.itemMergedSummaryTextView)
|
||||
val separatorView by bind<View>(R.id.itemMergedSeparatorView)
|
||||
val avatarListView by bind<ViewGroup>(R.id.itemMergedAvatarListView)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val STUB_ID = R.id.messageContentMergedHeaderStub
|
||||
}
|
||||
|
||||
data class Attributes(
|
||||
override val isCollapsed: Boolean,
|
||||
override val mergeData: List<Data>,
|
||||
override val avatarRenderer: AvatarRenderer,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
override val onCollapsedStateChanged: (Boolean) -> Unit
|
||||
) : BasedMergedItem.Attributes
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* Copyright (c) 2020 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.home.room.detail.timeline.item
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import com.airbnb.epoxy.EpoxyAttribute
|
||||
import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
|
||||
@EpoxyModelClass(layout = R.layout.item_timeline_event_base_noinfo)
|
||||
abstract class MergedRoomCreationItem : BasedMergedItem<MergedRoomCreationItem.Holder>() {
|
||||
|
||||
@EpoxyAttribute
|
||||
override lateinit var attributes: Attributes
|
||||
|
||||
override fun getViewType() = STUB_ID
|
||||
|
||||
override fun bind(holder: Holder) {
|
||||
super.bind(holder)
|
||||
|
||||
if (attributes.isCollapsed) {
|
||||
val data = distinctMergeData.firstOrNull()
|
||||
|
||||
val summary = holder.expandView.resources.getString(R.string.room_created_summary_item,
|
||||
data?.memberName ?: data?.userId ?: "")
|
||||
holder.summaryView.text = summary
|
||||
holder.summaryView.visibility = View.VISIBLE
|
||||
holder.avatarView.visibility = View.VISIBLE
|
||||
if (data != null) {
|
||||
holder.avatarView.visibility = View.VISIBLE
|
||||
attributes.avatarRenderer.render(data.toMatrixItem(), holder.avatarView)
|
||||
} else {
|
||||
holder.avatarView.visibility = View.GONE
|
||||
}
|
||||
|
||||
if (attributes.hasEncryptionEvent) {
|
||||
holder.encryptionTile.isVisible = true
|
||||
holder.encryptionTile.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
this.marginEnd = leftGuideline
|
||||
}
|
||||
if (attributes.isEncryptionAlgorithmSecure) {
|
||||
holder.e2eTitleTextView.text = holder.expandView.resources.getString(R.string.encryption_enabled)
|
||||
holder.e2eTitleDescriptionView.text = holder.expandView.resources.getString(R.string.encryption_enabled_tile_description)
|
||||
holder.e2eTitleDescriptionView.textAlignment = View.TEXT_ALIGNMENT_CENTER
|
||||
holder.e2eTitleTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
ContextCompat.getDrawable(holder.view.context, R.drawable.ic_shield_black),
|
||||
null, null, null
|
||||
)
|
||||
} else {
|
||||
holder.e2eTitleTextView.text = holder.expandView.resources.getString(R.string.encryption_not_enabled)
|
||||
holder.e2eTitleDescriptionView.text = holder.expandView.resources.getString(R.string.encryption_unknown_algorithm_tile_description)
|
||||
holder.e2eTitleTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
ContextCompat.getDrawable(holder.view.context, R.drawable.ic_shield_warning),
|
||||
null, null, null
|
||||
)
|
||||
}
|
||||
} else {
|
||||
holder.encryptionTile.isVisible = false
|
||||
}
|
||||
} else {
|
||||
holder.avatarView.visibility = View.INVISIBLE
|
||||
holder.summaryView.visibility = View.GONE
|
||||
holder.encryptionTile.isGone = true
|
||||
}
|
||||
// No read receipt for this item
|
||||
holder.readReceiptsView.isVisible = false
|
||||
}
|
||||
|
||||
class Holder : BasedMergedItem.Holder(STUB_ID) {
|
||||
val summaryView by bind<TextView>(R.id.itemNoticeTextView)
|
||||
val avatarView by bind<ImageView>(R.id.itemNoticeAvatarView)
|
||||
val encryptionTile by bind<ViewGroup>(R.id.creationEncryptionTile)
|
||||
|
||||
val e2eTitleTextView by bind<TextView>(R.id.itemVerificationDoneTitleTextView)
|
||||
val e2eTitleDescriptionView by bind<TextView>(R.id.itemVerificationDoneDetailTextView)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val STUB_ID = R.id.messageContentMergedCreationStub
|
||||
}
|
||||
|
||||
data class Attributes(
|
||||
override val isCollapsed: Boolean,
|
||||
override val mergeData: List<Data>,
|
||||
override val avatarRenderer: AvatarRenderer,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
override val onCollapsedStateChanged: (Boolean) -> Unit,
|
||||
val hasEncryptionEvent : Boolean,
|
||||
val isEncryptionAlgorithmSecure: Boolean
|
||||
) : BasedMergedItem.Attributes
|
||||
}
|
|
@ -31,7 +31,7 @@ import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider
|
|||
import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController
|
||||
|
||||
@EpoxyModelClass(layout = R.layout.item_timeline_event_base_state)
|
||||
abstract class VerificationRequestConclusionItem : AbsBaseMessageItem<VerificationRequestConclusionItem.Holder>() {
|
||||
abstract class StatusTileTimelineItem : AbsBaseMessageItem<StatusTileTimelineItem.Holder>() {
|
||||
|
||||
override val baseAttributes: AbsBaseMessageItem.Attributes
|
||||
get() = attributes
|
||||
|
@ -47,11 +47,17 @@ abstract class VerificationRequestConclusionItem : AbsBaseMessageItem<Verificati
|
|||
holder.endGuideline.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
this.marginEnd = leftGuideline
|
||||
}
|
||||
val title = if (attributes.isPositive) R.string.sas_verified else R.string.verification_conclusion_warning
|
||||
holder.titleView.text = holder.view.context.getString(title)
|
||||
holder.descriptionView.text = "${attributes.informationData.memberName} (${attributes.informationData.senderId})"
|
||||
|
||||
val startDrawable = if (attributes.isPositive) R.drawable.ic_shield_trusted else R.drawable.ic_shield_warning
|
||||
holder.titleView.text = attributes.title
|
||||
holder.descriptionView.text = attributes.description
|
||||
holder.descriptionView.textAlignment = View.TEXT_ALIGNMENT_CENTER
|
||||
|
||||
val startDrawable = when (attributes.shieldUIState) {
|
||||
ShieldUIState.GREEN -> R.drawable.ic_shield_trusted
|
||||
ShieldUIState.BLACK -> R.drawable.ic_shield_black
|
||||
ShieldUIState.RED -> R.drawable.ic_shield_warning
|
||||
}
|
||||
|
||||
holder.titleView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
ContextCompat.getDrawable(holder.view.context, startDrawable),
|
||||
null, null, null
|
||||
|
@ -75,9 +81,9 @@ abstract class VerificationRequestConclusionItem : AbsBaseMessageItem<Verificati
|
|||
* This class holds all the common attributes for timeline items.
|
||||
*/
|
||||
data class Attributes(
|
||||
val toUserId: String,
|
||||
val toUserName: String,
|
||||
val isPositive: Boolean,
|
||||
val shieldUIState: ShieldUIState,
|
||||
val title: CharSequence,
|
||||
val description: CharSequence,
|
||||
override val informationData: MessageInformationData,
|
||||
override val avatarRenderer: AvatarRenderer,
|
||||
override val messageColorProvider: MessageColorProvider,
|
||||
|
@ -87,4 +93,10 @@ abstract class VerificationRequestConclusionItem : AbsBaseMessageItem<Verificati
|
|||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
val emojiTypeFace: Typeface? = null
|
||||
) : AbsBaseMessageItem.Attributes
|
||||
|
||||
enum class ShieldUIState {
|
||||
BLACK,
|
||||
RED,
|
||||
GREEN
|
||||
}
|
||||
}
|
|
@ -15,6 +15,19 @@
|
|||
android:layout_gravity="center"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="40dp"
|
||||
tools:visibility="gone"
|
||||
tools:ignore="SpUsage"
|
||||
tools:text="🌵" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/item_emoji_image"
|
||||
android:layout_width="54dp"
|
||||
android:layout_margin="2dp"
|
||||
android:layout_height="54dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_verification_cactus"
|
||||
tools:visibility="visible"
|
||||
android:visibility="gone"
|
||||
tools:ignore="SpUsage"
|
||||
tools:text="🌵" />
|
||||
|
||||
|
|
|
@ -54,6 +54,13 @@
|
|||
tools:layout_marginTop="160dp"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<ViewStub
|
||||
android:id="@+id/messageContentMergedCreationStub"
|
||||
style="@style/TimelineContentStubBaseParams"
|
||||
android:layout="@layout/item_timeline_event_merged_room_creation_stub"
|
||||
tools:layout_marginTop="160dp"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<im.vector.riotx.core.ui.views.ReadReceiptsView
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
<ViewStub
|
||||
android:id="@+id/messageVerificationDoneStub"
|
||||
style="@style/TimelineContentStubBaseParams"
|
||||
android:layout="@layout/item_timeline_event_verification_done_stub"
|
||||
android:layout="@layout/item_timeline_event_status_tile_stub"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/creationEncryptionTile"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="2dp"
|
||||
android:layout_marginEnd="52dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:background="@drawable/rounded_rect_shape_8"
|
||||
android:padding="8dp">
|
||||
|
||||
<include layout="@layout/item_timeline_event_status_tile_stub" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/mergedSumContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/creationEncryptionTile">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/itemNoticeAvatarView"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
tools:srcCompat="@tools:sample/avatars" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/itemNoticeTextView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_gravity="top"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_toStartOf="@id/itemMergedExpandTextView"
|
||||
android:layout_toEndOf="@id/itemNoticeAvatarView"
|
||||
android:textColor="?riotx_text_secondary"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="italic"
|
||||
tools:text="@string/room_created_summary_item" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/itemMergedExpandTextView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginTop="2dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingRight="8dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:text="@string/merged_events_expand"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:textSize="14sp"
|
||||
android:textStyle="italic" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/itemMergedSeparatorView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@+id/mergedSumContainer"
|
||||
android:layout_marginTop="4dp"
|
||||
android:background="?attr/riotx_header_panel_background" />
|
||||
|
||||
</RelativeLayout>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue