diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt index f2d973f2c7e..926fee9be6a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/vault/repository/util/VaultSdkCipherExtensions.kt @@ -106,6 +106,7 @@ fun Cipher.toEncryptedNetworkCipherResponse( shouldViewPassword = viewPassword, key = key, encryptedFor = encryptedFor, + archivedDate = archivedDate?.let { ZonedDateTime.ofInstant(it, ZoneOffset.UTC) }, ) /** @@ -389,6 +390,7 @@ fun SyncResponseJson.Cipher.toEncryptedSdkCipher(): Cipher = creationDate = creationDate.toInstant(), deletedDate = deletedDate?.toInstant(), revisionDate = revisionDate.toInstant(), + archivedDate = archivedDate?.toInstant(), ) /** @@ -704,4 +706,5 @@ fun Cipher.toFailureCipherListView(): CipherListView = deletedDate = deletedDate, revisionDate = revisionDate, copyableFields = emptyList(), + archivedDate = archivedDate, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensions.kt index 1ed673270e1..21f52204213 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensions.kt @@ -44,6 +44,7 @@ fun VaultAddEditState.ViewState.Content.toCipherView(): CipherView = creationDate = common.originalCipher?.creationDate ?: Instant.now(), deletedDate = common.originalCipher?.deletedDate, revisionDate = common.originalCipher?.revisionDate ?: Instant.now(), + archivedDate = common.originalCipher?.archivedDate, // Type specific section type = type.toCipherType(), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt index 1b05b817911..63d42b1064b 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt @@ -425,6 +425,7 @@ private const val CIPHER_JSON = """ "folderId": "mockFolderId-1", "organizationId": "mockOrganizationId-1", "deletedDate": "2023-10-27T12:00:00.000Z", + "archivedDate": "2023-10-27T12:00:00.000Z", "identity": { "passportNumber": "mockPassportNumber-1", "lastName": "mockLastName-1", diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt index d5487eddf40..3234823e489 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherListViewUtil.kt @@ -54,6 +54,7 @@ fun createMockCipherListView( .takeIf { type is CipherListViewType.Login } .orEmpty(), isDeleted: Boolean = false, + isArchived: Boolean = false, ): CipherListView = CipherListView( id = id, organizationId = organizationId, @@ -66,6 +67,7 @@ fun createMockCipherListView( revisionDate = revisionDate, creationDate = creationDate, deletedDate = if (isDeleted) Instant.parse(DEFAULT_TIMESTAMP) else null, + archivedDate = if (isArchived) Instant.parse(DEFAULT_TIMESTAMP) else null, attachments = attachments, organizationUseTotp = organizationUseTotp, edit = edit, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt index 10117a586d4..f32e44a1862 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/CipherViewUtil.kt @@ -61,6 +61,7 @@ fun createMockCipherView( ), card: CardView? = createMockCardView(number = number).takeIf { cipherType == CipherType.CARD }, attachments: List = listOf(createMockAttachmentView(number = number)), + isArchived: Boolean = false, ): CipherView = CipherView( id = "mockId-$number", @@ -73,12 +74,17 @@ fun createMockCipherView( type = cipherType, login = login.takeIf { cipherType == CipherType.LOGIN }, creationDate = clock.instant(), + revisionDate = clock.instant(), deletedDate = if (isDeleted) { clock.instant() } else { null }, - revisionDate = clock.instant(), + archivedDate = if (isArchived) { + clock.instant() + } else { + null + }, attachments = attachments, card = card, fields = listOf(createMockFieldView(number = number)), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt index bcd0f8e4611..4bf4d2a8e45 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/sdk/model/VaultSdkCipherUtil.kt @@ -47,6 +47,7 @@ fun createMockSdkCipher(number: Int, clock: Clock = FIXED_CLOCK): Cipher = creationDate = clock.instant(), deletedDate = clock.instant(), revisionDate = clock.instant(), + archivedDate = clock.instant(), attachments = listOf(createMockSdkAttachment(number = number)), card = createMockSdkCard(number = number), fields = listOf(createMockSdkField(number = number)), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt index 5e248b4f18f..d16ddc83852 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensionsTest.kt @@ -640,6 +640,7 @@ private val DEFAULT_BASE_CIPHER_VIEW: CipherView = CipherView( creationDate = FIXED_CLOCK.instant(), deletedDate = null, revisionDate = FIXED_CLOCK.instant(), + archivedDate = null, sshKey = null, ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt index a077925634c..58bcf18eef8 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt @@ -159,6 +159,7 @@ fun createCipherView(type: CipherType, isEmpty: Boolean): CipherView = creationDate = Instant.ofEpochSecond(1_000L), deletedDate = null, revisionDate = Instant.ofEpochSecond(1_000L), + archivedDate = null, sshKey = createSshKeyView(isEmpty), ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensionsTest.kt index bd6caa18be2..80716b2980e 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultAddItemStateExtensionsTest.kt @@ -114,6 +114,7 @@ class VaultAddItemStateExtensionsTest { creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = null, ), result, @@ -299,6 +300,7 @@ class VaultAddItemStateExtensionsTest { creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = null, ), result, @@ -432,6 +434,7 @@ class VaultAddItemStateExtensionsTest { creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = null, ), result, @@ -619,6 +622,7 @@ class VaultAddItemStateExtensionsTest { creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = null, ), result, @@ -762,6 +766,7 @@ class VaultAddItemStateExtensionsTest { creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = SshKeyView( publicKey = "mockPublicKey-1", privateKey = "mockPrivateKey-1", @@ -981,6 +986,7 @@ private val DEFAULT_BASE_CIPHER_VIEW: CipherView = CipherView( creationDate = Instant.MIN, deletedDate = null, revisionDate = Instant.MIN, + archivedDate = null, sshKey = null, ) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7d4f075f723..1f7bd799387 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ androidxRoom = "2.8.0" androidxSecurityCrypto = "1.1.0" androidxSplash = "1.1.0-rc01" androidxWork = "2.10.4" -bitwardenSdk = "1.0.0-3005-5a722fd2" +bitwardenSdk = "1.0.0-3101-0eba924a" crashlytics = "3.0.6" detekt = "1.23.8" firebaseBom = "34.2.0" diff --git a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt index 15227543aca..e1a1db68830 100644 --- a/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt +++ b/network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt @@ -449,6 +449,7 @@ data class SyncResponseJson( * @property card The card of the cipher. * @property key The key of the cipher (nullable). * @property encryptedFor ID of the user who the cipher is encrypted by. + * @property archivedDate The archived date of the cipher (nullable). */ @Serializable data class Cipher( @@ -532,6 +533,10 @@ data class SyncResponseJson( @SerialName("encryptedFor") val encryptedFor: String?, + + @SerialName("archivedDate") + @Contextual + val archivedDate: ZonedDateTime?, ) { /** * Represents an attachment in the vault response. diff --git a/network/src/test/kotlin/com/bitwarden/network/service/CiphersServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/CiphersServiceTest.kt index 3abe6f2adaf..10f0e1e7bb8 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/CiphersServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/CiphersServiceTest.kt @@ -503,7 +503,8 @@ private const val CREATE_ATTACHMENT_SUCCESS_JSON = """ "privateKey": "mockPrivateKey-1", "keyFingerprint": "mockKeyFingerprint-1" }, - "encryptedFor": "mockEncryptedFor-1" + "encryptedFor": "mockEncryptedFor-1", + "archivedDate": "2023-10-27T12:00:00.00Z" } } """ @@ -631,7 +632,8 @@ private const val CREATE_RESTORE_UPDATE_CIPHER_SUCCESS_JSON = """ "privateKey": "mockPrivateKey-1", "keyFingerprint": "mockKeyFingerprint-1" }, - "encryptedFor": "mockEncryptedFor-1" + "encryptedFor": "mockEncryptedFor-1", + "archivedDate": "2023-10-27T12:00:00.00Z" } """ diff --git a/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt b/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt index fdeded4129a..4d6d0515ab7 100644 --- a/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt +++ b/network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt @@ -335,7 +335,8 @@ private const val SYNC_SUCCESS_JSON = """ "privateKey": "mockPrivateKey-1", "keyFingerprint": "mockKeyFingerprint-1" }, - "encryptedFor": "mockEncryptedFor-1" + "encryptedFor": "mockEncryptedFor-1", + "archivedDate": "2023-10-27T12:00:00.00Z" } ], "domains": { diff --git a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt index a4b22addb2b..83b024770dd 100644 --- a/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt +++ b/network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseCipherUtil.kt @@ -23,6 +23,7 @@ fun createMockCipher( creationDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, revisionDate: ZonedDateTime = MOCK_ZONED_DATE_TIME, deletedDate: ZonedDateTime? = MOCK_ZONED_DATE_TIME, + archivedDate: ZonedDateTime? = MOCK_ZONED_DATE_TIME, attachments: List? = listOf( createMockAttachment(number = number), ), @@ -61,6 +62,7 @@ fun createMockCipher( creationDate = creationDate, revisionDate = revisionDate, deletedDate = deletedDate, + archivedDate = archivedDate, attachments = attachments, fields = fields, isFavorite = isFavorite,