diff --git a/app/src/androidTest/assets/backupTests/account_data_00.binproto b/app/src/androidTest/assets/backupTests/account_data_00.binproto index 0c68243ee1..930fef9be2 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_00.binproto and b/app/src/androidTest/assets/backupTests/account_data_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_01.binproto b/app/src/androidTest/assets/backupTests/account_data_01.binproto index d19f890cac..4389792403 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_01.binproto and b/app/src/androidTest/assets/backupTests/account_data_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_02.binproto b/app/src/androidTest/assets/backupTests/account_data_02.binproto index d042705647..abf8888fb9 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_02.binproto and b/app/src/androidTest/assets/backupTests/account_data_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_03.binproto b/app/src/androidTest/assets/backupTests/account_data_03.binproto index 34bd2764d1..b313f13749 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_03.binproto and b/app/src/androidTest/assets/backupTests/account_data_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_04.binproto b/app/src/androidTest/assets/backupTests/account_data_04.binproto index 233f7c2c9d..3cb0dde101 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_04.binproto and b/app/src/androidTest/assets/backupTests/account_data_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_05.binproto b/app/src/androidTest/assets/backupTests/account_data_05.binproto index 0528e2225e..a9ba3887e2 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_05.binproto and b/app/src/androidTest/assets/backupTests/account_data_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_06.binproto b/app/src/androidTest/assets/backupTests/account_data_06.binproto index ac37e1db58..44572df1e8 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_06.binproto and b/app/src/androidTest/assets/backupTests/account_data_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_07.binproto b/app/src/androidTest/assets/backupTests/account_data_07.binproto index b254bbe114..dbf948079c 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_07.binproto and b/app/src/androidTest/assets/backupTests/account_data_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_08.binproto b/app/src/androidTest/assets/backupTests/account_data_08.binproto index 0ac227c510..8781bc8c98 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_08.binproto and b/app/src/androidTest/assets/backupTests/account_data_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_09.binproto b/app/src/androidTest/assets/backupTests/account_data_09.binproto index b970c08663..44f05adaa8 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_09.binproto and b/app/src/androidTest/assets/backupTests/account_data_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_10.binproto b/app/src/androidTest/assets/backupTests/account_data_10.binproto index 9d6053d780..4ee80eae8c 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_10.binproto and b/app/src/androidTest/assets/backupTests/account_data_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_11.binproto b/app/src/androidTest/assets/backupTests/account_data_11.binproto index d37c1f5737..b804ffce36 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_11.binproto and b/app/src/androidTest/assets/backupTests/account_data_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_12.binproto b/app/src/androidTest/assets/backupTests/account_data_12.binproto index 091b0b98d3..bccd830a1c 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_12.binproto and b/app/src/androidTest/assets/backupTests/account_data_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_13.binproto b/app/src/androidTest/assets/backupTests/account_data_13.binproto index 93b6537862..7539406c3d 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_13.binproto and b/app/src/androidTest/assets/backupTests/account_data_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_14.binproto b/app/src/androidTest/assets/backupTests/account_data_14.binproto index eee2e7183c..63b6e087bb 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_14.binproto and b/app/src/androidTest/assets/backupTests/account_data_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_15.binproto b/app/src/androidTest/assets/backupTests/account_data_15.binproto index 9d98db7c2b..a34fddf9b0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_15.binproto and b/app/src/androidTest/assets/backupTests/account_data_15.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_16.binproto b/app/src/androidTest/assets/backupTests/account_data_16.binproto index 8fa5a17e03..fbaefee333 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_16.binproto and b/app/src/androidTest/assets/backupTests/account_data_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_17.binproto b/app/src/androidTest/assets/backupTests/account_data_17.binproto index f1aaf270ee..87a8f3e5ab 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_17.binproto and b/app/src/androidTest/assets/backupTests/account_data_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_18.binproto b/app/src/androidTest/assets/backupTests/account_data_18.binproto index 1a1c0d7ed3..ff58c6f18a 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_18.binproto and b/app/src/androidTest/assets/backupTests/account_data_18.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_19.binproto b/app/src/androidTest/assets/backupTests/account_data_19.binproto index 26daafb125..9b82f0c193 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_19.binproto and b/app/src/androidTest/assets/backupTests/account_data_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_20.binproto b/app/src/androidTest/assets/backupTests/account_data_20.binproto index 38322ba144..a97e7f0bd6 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_20.binproto and b/app/src/androidTest/assets/backupTests/account_data_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_21.binproto b/app/src/androidTest/assets/backupTests/account_data_21.binproto index 78e4768f38..dc43c45deb 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_21.binproto and b/app/src/androidTest/assets/backupTests/account_data_21.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_22.binproto b/app/src/androidTest/assets/backupTests/account_data_22.binproto index f5dcce2c0a..69a932e8fd 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_22.binproto and b/app/src/androidTest/assets/backupTests/account_data_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_23.binproto b/app/src/androidTest/assets/backupTests/account_data_23.binproto index 00fb097546..6689dfdbfd 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_23.binproto and b/app/src/androidTest/assets/backupTests/account_data_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_24.binproto b/app/src/androidTest/assets/backupTests/account_data_24.binproto index 7f12f59e91..6ec32daa62 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_24.binproto and b/app/src/androidTest/assets/backupTests/account_data_24.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_25.binproto b/app/src/androidTest/assets/backupTests/account_data_25.binproto index 5dbde30f69..2d44211306 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_25.binproto and b/app/src/androidTest/assets/backupTests/account_data_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_26.binproto b/app/src/androidTest/assets/backupTests/account_data_26.binproto index 6481cc7ed8..ea4c057c41 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_26.binproto and b/app/src/androidTest/assets/backupTests/account_data_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_27.binproto b/app/src/androidTest/assets/backupTests/account_data_27.binproto index a6bed81faf..ef83c99285 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_27.binproto and b/app/src/androidTest/assets/backupTests/account_data_27.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_00.binproto b/app/src/androidTest/assets/backupTests/chat_00.binproto index 667223fcc3..3dba406f9d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_00.binproto and b/app/src/androidTest/assets/backupTests/chat_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_01.binproto b/app/src/androidTest/assets/backupTests/chat_01.binproto index 1a14b1b8a1..3eda02c9c3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_01.binproto and b/app/src/androidTest/assets/backupTests/chat_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_02.binproto b/app/src/androidTest/assets/backupTests/chat_02.binproto index 8af285988f..f5d6fa0067 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_02.binproto and b/app/src/androidTest/assets/backupTests/chat_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_03.binproto b/app/src/androidTest/assets/backupTests/chat_03.binproto index 8dab00d5df..428c6798f9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_03.binproto and b/app/src/androidTest/assets/backupTests/chat_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_04.binproto b/app/src/androidTest/assets/backupTests/chat_04.binproto index 46b69eb9c3..ef40790d00 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_04.binproto and b/app/src/androidTest/assets/backupTests/chat_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_05.binproto b/app/src/androidTest/assets/backupTests/chat_05.binproto index 4e2aed653b..11304a626f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_05.binproto and b/app/src/androidTest/assets/backupTests/chat_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_06.binproto b/app/src/androidTest/assets/backupTests/chat_06.binproto index b2080358e7..8b954d38e2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_06.binproto and b/app/src/androidTest/assets/backupTests/chat_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_07.binproto b/app/src/androidTest/assets/backupTests/chat_07.binproto index 9d21feabb0..4cfc4df717 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_07.binproto and b/app/src/androidTest/assets/backupTests/chat_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_08.binproto b/app/src/androidTest/assets/backupTests/chat_08.binproto index 56506b5c07..af462927b8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_08.binproto and b/app/src/androidTest/assets/backupTests/chat_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_09.binproto b/app/src/androidTest/assets/backupTests/chat_09.binproto index 688a64ffe6..bcc0409f70 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_09.binproto and b/app/src/androidTest/assets/backupTests/chat_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_10.binproto b/app/src/androidTest/assets/backupTests/chat_10.binproto index f07cdd2d39..cbd4585e83 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_10.binproto and b/app/src/androidTest/assets/backupTests/chat_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_11.binproto b/app/src/androidTest/assets/backupTests/chat_11.binproto index 41920144e0..daea7d3bce 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_11.binproto and b/app/src/androidTest/assets/backupTests/chat_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_12.binproto b/app/src/androidTest/assets/backupTests/chat_12.binproto index be0eb5377e..44ce2fd62b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_12.binproto and b/app/src/androidTest/assets/backupTests/chat_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_13.binproto b/app/src/androidTest/assets/backupTests/chat_13.binproto index aa54329d90..dbd391e708 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_13.binproto and b/app/src/androidTest/assets/backupTests/chat_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_14.binproto b/app/src/androidTest/assets/backupTests/chat_14.binproto index dc1791cf16..772973b3fc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_14.binproto and b/app/src/androidTest/assets/backupTests/chat_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_15.binproto b/app/src/androidTest/assets/backupTests/chat_15.binproto index bc9b6c2110..8807550d4e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_15.binproto and b/app/src/androidTest/assets/backupTests/chat_15.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_16.binproto b/app/src/androidTest/assets/backupTests/chat_16.binproto index 863bdf4a7a..cecb85635f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_16.binproto and b/app/src/androidTest/assets/backupTests/chat_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_17.binproto b/app/src/androidTest/assets/backupTests/chat_17.binproto index c78d042e54..ee8fa2a346 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_17.binproto and b/app/src/androidTest/assets/backupTests/chat_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_18.binproto b/app/src/androidTest/assets/backupTests/chat_18.binproto index 2fec5b82ba..86ba047961 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_18.binproto and b/app/src/androidTest/assets/backupTests/chat_18.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_19.binproto b/app/src/androidTest/assets/backupTests/chat_19.binproto index 9306615b95..cc4d79cb7d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_19.binproto and b/app/src/androidTest/assets/backupTests/chat_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_20.binproto b/app/src/androidTest/assets/backupTests/chat_20.binproto index 119e329eba..62067d8c1e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_20.binproto and b/app/src/androidTest/assets/backupTests/chat_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_21.binproto b/app/src/androidTest/assets/backupTests/chat_21.binproto index 356e200bda..b807fae3c5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_21.binproto and b/app/src/androidTest/assets/backupTests/chat_21.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_22.binproto b/app/src/androidTest/assets/backupTests/chat_22.binproto index a76834ff0b..cef596c97e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_22.binproto and b/app/src/androidTest/assets/backupTests/chat_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_23.binproto b/app/src/androidTest/assets/backupTests/chat_23.binproto index 7f38d41466..f2decffcc5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_23.binproto and b/app/src/androidTest/assets/backupTests/chat_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_24.binproto b/app/src/androidTest/assets/backupTests/chat_24.binproto index cc2d406f9c..af05b5607b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_24.binproto and b/app/src/androidTest/assets/backupTests/chat_24.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_25.binproto b/app/src/androidTest/assets/backupTests/chat_25.binproto index bbe5abeef0..3213db2c53 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_25.binproto and b/app/src/androidTest/assets/backupTests/chat_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_26.binproto b/app/src/androidTest/assets/backupTests/chat_26.binproto index fc10205d92..dbcf7b32a3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_26.binproto and b/app/src/androidTest/assets/backupTests/chat_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto index 50b4a830da..e1f1c7c8b1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto index c2de6f1e62..b5fbaf90d3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto index 9963d7abcb..06ffdd33a9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto index 8ba0b5bdc6..eba7b05744 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto index a38a30a721..7d7dc339a1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto index 0efbadcb4a..b0cb844395 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_07.binproto index fe5af65d30..4c58ebcecc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto index 46fc048088..ce0ec19460 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto index 9087530ca3..556869ee54 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto index 3285774594..41bd4309ba 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto index 039207fb62..b23009c64a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto index 26215a3dfc..7960153e5c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto index 325fb41052..7d43c29852 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_14.binproto index 41cdcff59d..964701ccf1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto index 449b0fb3c6..b9e69bb821 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto index f5b778b54e..7d22539640 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto index b66a6d9a37..30de5bd0d7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto index 395397d186..1217ac968b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto index b510fdd1c2..57863c549d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto index 17fc48a011..8c4fd29715 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto index 98fbe021c4..852ddc0f70 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto index 124131ca25..dd191cfba8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto index 0ce10b630e..8ca4a55972 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto index 09cc5a05c6..77af7f7fc0 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto index 70bfb3d154..dbf9f35246 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto index 7d15dd1abf..8ab0bf08bf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto index 9f835d1948..9b9d2dac9d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto index 7c4671e730..0cbc5ad8ec 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto index 0847531453..7d9cfa1a7f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto index 57e0fd1c15..72ce2d59d5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto index ec62dfe4df..5e61437106 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto index 73c0dac9ca..a962fe37fc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto index b6d2d2eb99..e0a7084e88 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto index 916f2e47f1..9518ee23d4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto index c77c37c1e9..90c2db5ad2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto index a9588985e7..d80251ffa3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto index ef899f2fed..415a43a7dc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto index 0eb36561c5..6cebf5e9a5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto index 852860d96c..b6d294f404 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto index 53138284b7..cf9a8b694e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto index dfb7214143..3773f14a70 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto index 9f250056a1..23c6a8f964 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto index b732d06d83..421a31aea1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto index b922c3669e..2b210a81fb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto index fa7455c47f..172f67ddb1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto index 0a337f35a9..d5dcdc93cf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto index f5e10a3d24..51878197e5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto index 494473b599..b0eba70d3d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto index ff6282e6d8..74e81cbab9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto index 2b641ee8ff..5cb464b13f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto index 3d7f8c7f1e..82d5e43882 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto index 6dd9dd7179..6e7df96b5b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto index e1b32ca177..aa0cfcfe5d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto index d0ded2f960..2aa9b391df 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto index e0a37c8aae..993ad746b4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto index b1a6e54ece..9775c36b7e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto index 70090d3678..c68f336276 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto index a4e7da5cfc..e60ec3b028 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto index c8c79fa786..e673f1123c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto index fbadb40f85..d2d2f91bc6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto index 252e0daebe..817cd32fa0 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto index 99573e0ffd..0c79ec802c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto index f28515adfe..8b0d759560 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto index 967e11b289..a1765c9a55 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto index a8839a55cc..b2f0f0e248 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto index 7fa0b801e7..04fd57b73a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto index bdd75b2773..b2b4a0dde2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto index 062e6a5bbe..5d477fda48 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto index 0c7a5e8218..5d0733805b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto index 2d75c320c0..f58d3d1d74 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto index 038e13d06b..0e6b09b63f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto index 57ebe1ec72..cfab6bd85f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto index c6119933cd..4bfe55a924 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto index 46472cf69f..ec545d3094 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto index f1d2cec198..220bc2ec90 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto index 475a56f7eb..1a8b492bc3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto index 474bf6df3f..fd0286e9b5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto index a3e1e942e9..01ca790064 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto index 57b3f8b64c..c47560b30b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto index 0c343b4ee8..d56316ee10 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto index e67d04f0a3..8ef3ccc0c5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto index 0288b4861e..04d9714a59 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto index a3799f1613..e08bf6ca90 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto index 899e0c42df..e8ac0cf436 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto index 7c3c1dba84..4f99799c64 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto index a6c6e3a2f8..4df88f857c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto index 298026448c..896cefea8e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto index 6ce1b3b0d0..eae3a56330 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto index 8fae2018d2..1db2c3bdff 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto index c571778800..82396c984f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto index 113829dbdd..1f4ac06de0 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto index 47197de1cf..e404cc7c7c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto index a0ffa68637..69e2bb43c5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto index ebb647ff94..a298ca01a7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto index da11a26e55..e0b2532aa5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto index 320ccb4e7e..d1b1a5dafb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto index 25a93c872b..cc86d85481 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto index 26cd4290d9..e8023ef5dc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto index a3cc68a8f4..694c0ca149 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto index 9a58d1433c..68be1e7f51 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto index 0d370f7460..5b99c7cf1c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto index 15c78faf45..123920193a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto index e39e31df2a..4b58ecc3a7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto index 056f953304..42e1d10113 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto index 293e4971d7..67cb595f17 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto index 0e88825fd5..7c5c2df68a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto index dc7b90a190..b2856d6666 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto index db6eb84910..b5266b2f35 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto index bfade12edc..d0041bd8cf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto index 307a257fc0..9c25c3e8d6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto index 9d034a8d20..476d998262 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto index 5224ca32e6..1cd2f41406 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto index 6680a56f1e..99aac1c830 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto index ac4ae4486f..998f9e9a95 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto index fcd9d276c7..5a26cdcf8c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto index 38104b1b14..653c24360f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto index 9798aae9c4..4bc6c59b1b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto index 7b95ff2c74..918e388011 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto index 6d592b2238..c7a2729eeb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto index e3a64bcf49..5f4e8c3f71 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto index 930217836d..006e204e7c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto index 03f8ecc00d..827eafd581 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto index c3225ea23f..b1e61d43af 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto index d9d8d7bac7..efa0e49a17 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto index 77d455c41b..f11189aaea 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto index 45e1b3585a..0cdb5ebc72 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto index 7898b0ba98..abc7f3bb82 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto index 539db5adb4..47beb147d3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto index 9a5713704a..e67682f5b3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto index c911cbd62b..31c8d75c53 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto index a31dde9beb..b96e8a27ae 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto index 41bb72122a..507664766c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto index 0a9db69c71..147cc07d8d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto index 7b2c8a74c8..e9be214aa8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto index cdeed07baf..7cb1c6ecd5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto index 986843d326..d9160805b8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto index 4e45c98625..0e0f36c7a9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto index 7773f351bf..81378115f2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto index 8c9942a57e..16e20e3285 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto index 89623a60d1..6a187b1c08 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto index 9b35a6a8a9..bfe2d481bf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto index 401a5419be..ef08963db4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto index 27d70ccabb..f74d5337d1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto index 6fcc09d111..2617acf09f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto index 870a0880a2..ce4bbbef05 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto index 6aa74d0acb..e89a4b2234 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto index 9690d85e5b..4f5cc9712b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto index 5d81ba1367..05c6c657c2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto index fdc60bef3c..342c6cba78 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto index ba893754ed..b8fa5a5dab 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto index aa6c883f1e..732254af87 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_13.binproto index 3236d3b12b..c0764c40b4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_14.binproto index 7ffb7f603e..cd6c169271 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto index e9777df174..188bbf1633 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto index 17cf40d9e7..18a03fa1b7 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto index 46703a8737..7fb227c761 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto index 66b05efb60..5f602ec265 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto index b2ccd6ea2f..effe33c600 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_05.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_05.binproto index 05c0529d42..1a03a944a5 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_05.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_06.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_06.binproto index 022763952d..0f3f671db0 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_06.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_07.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_07.binproto index d894d5a860..bf94a61835 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_07.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_08.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_08.binproto index 8adf672dda..8a1a86c4d4 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_08.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_09.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_09.binproto index 9d3588eb35..bd7912df09 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_09.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_10.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_10.binproto index bc8a1a6eb4..395596400b 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_10.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_11.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_11.binproto index fa5eec5959..ef18d9da2d 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_11.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_00.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_00.binproto index 844a7e626d..bd64b3af3a 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_00.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto index cc0c9030b7..d471bf0ccf 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto index f839f12d29..8d5931e648 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_03.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_03.binproto index e1fd194540..7d880ca4d0 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_03.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_04.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_04.binproto index 4156429ee0..74fffbb495 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_04.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_05.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_05.binproto index 120ba8eb8a..5ad6e57f27 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_05.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_06.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_06.binproto index 7dca91f341..50b3ca41ea 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_06.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_07.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_07.binproto index 8d306bb572..01350e2de5 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_07.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_08.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_08.binproto index 42c251ab3f..8bdb424e20 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_08.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_09.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_09.binproto index 3899989605..e133bcd165 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_09.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_10.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_10.binproto index 376bf82dcb..167f53fce3 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_10.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_11.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_11.binproto index 7ec4fc9738..55e0f3fce5 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_11.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_00.binproto b/app/src/androidTest/assets/backupTests/recipient_self_00.binproto index 9acba46b21..14447ba8f7 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_00.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_01.binproto b/app/src/androidTest/assets/backupTests/recipient_self_01.binproto index 14447ba8f7..88f1c4a6ef 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_01.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_02.binproto b/app/src/androidTest/assets/backupTests/recipient_self_02.binproto index 88f1c4a6ef..fe6532260a 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_02.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_03.binproto b/app/src/androidTest/assets/backupTests/recipient_self_03.binproto index fe6532260a..85198e0ddd 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_03.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_04.binproto b/app/src/androidTest/assets/backupTests/recipient_self_04.binproto index 85198e0ddd..31dcac4df9 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_04.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_05.binproto b/app/src/androidTest/assets/backupTests/recipient_self_05.binproto index 31dcac4df9..ca9bc68896 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_05.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_06.binproto b/app/src/androidTest/assets/backupTests/recipient_self_06.binproto index ca9bc68896..e14040e34e 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_06.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_07.binproto b/app/src/androidTest/assets/backupTests/recipient_self_07.binproto index e14040e34e..cb902cb54f 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_07.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_08.binproto b/app/src/androidTest/assets/backupTests/recipient_self_08.binproto index cb902cb54f..78205da7af 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_08.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_09.binproto b/app/src/androidTest/assets/backupTests/recipient_self_09.binproto index 78205da7af..a96572954c 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_09.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_10.binproto b/app/src/androidTest/assets/backupTests/recipient_self_10.binproto index a96572954c..f6a2e184fb 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_10.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_self_11.binproto b/app/src/androidTest/assets/backupTests/recipient_self_11.binproto index f6a2e184fb..3afa1f6d97 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_self_11.binproto and b/app/src/androidTest/assets/backupTests/recipient_self_11.binproto differ diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt index b227f3ee16..492de4a058 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt @@ -15,8 +15,12 @@ import java.util.UUID class ArchivedAttachment : Attachment { + companion object { + private const val NO_ARCHIVE_CDN = -404 + } + @JvmField - val archiveCdn: Int + val archiveCdn: Int? @JvmField val archiveMediaName: String @@ -31,6 +35,7 @@ class ArchivedAttachment : Attachment { contentType: String?, size: Long, cdn: Int, + uploadTimestamp: Long?, key: ByteArray, iv: ByteArray?, cdnKey: String?, @@ -71,7 +76,7 @@ class ArchivedAttachment : Attachment { width = width ?: 0, height = height ?: 0, incrementalMacChunkSize = incrementalMacChunkSize ?: 0, - uploadTimestamp = 0, + uploadTimestamp = uploadTimestamp ?: 0, caption = caption, stickerLocator = stickerLocator, blurHash = BlurHash.parseOrNull(blurHash), @@ -79,14 +84,14 @@ class ArchivedAttachment : Attachment { transformProperties = null, uuid = uuid ) { - this.archiveCdn = archiveCdn ?: Cdn.CDN_3.cdnNumber + this.archiveCdn = archiveCdn this.archiveMediaName = archiveMediaName this.archiveMediaId = archiveMediaId this.archiveThumbnailMediaId = archiveThumbnailMediaId } constructor(parcel: Parcel) : super(parcel) { - archiveCdn = parcel.readInt() + archiveCdn = parcel.readInt().takeIf { it != NO_ARCHIVE_CDN } archiveMediaName = parcel.readString()!! archiveMediaId = parcel.readString()!! archiveThumbnailMediaId = parcel.readString()!! @@ -94,7 +99,7 @@ class ArchivedAttachment : Attachment { override fun writeToParcel(dest: Parcel, flags: Int) { super.writeToParcel(dest, flags) - dest.writeInt(archiveCdn) + dest.writeInt(archiveCdn ?: NO_ARCHIVE_CDN) dest.writeString(archiveMediaName) dest.writeString(archiveMediaId) dest.writeString(archiveThumbnailMediaId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt index fb2a92f43a..8f47b5ac9a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt @@ -14,6 +14,10 @@ import java.util.UUID class DatabaseAttachment : Attachment { + companion object { + private const val NO_ARCHIVE_CDN = -404 + } + @JvmField val attachmentId: AttachmentId @@ -27,7 +31,7 @@ class DatabaseAttachment : Attachment { val dataHash: String? @JvmField - val archiveCdn: Int + val archiveCdn: Int? @JvmField val thumbnailRestoreState: AttachmentTable.ThumbnailRestoreState @@ -69,7 +73,7 @@ class DatabaseAttachment : Attachment { displayOrder: Int, uploadTimestamp: Long, dataHash: String?, - archiveCdn: Int, + archiveCdn: Int?, thumbnailRestoreState: AttachmentTable.ThumbnailRestoreState, archiveTransferState: AttachmentTable.ArchiveTransferState, uuid: UUID? @@ -117,7 +121,7 @@ class DatabaseAttachment : Attachment { hasThumbnail = ParcelUtil.readBoolean(parcel) mmsId = parcel.readLong() displayOrder = parcel.readInt() - archiveCdn = parcel.readInt() + archiveCdn = parcel.readInt().takeIf { it != NO_ARCHIVE_CDN } thumbnailRestoreState = AttachmentTable.ThumbnailRestoreState.deserialize(parcel.readInt()) archiveTransferState = AttachmentTable.ArchiveTransferState.deserialize(parcel.readInt()) } @@ -130,7 +134,7 @@ class DatabaseAttachment : Attachment { ParcelUtil.writeBoolean(dest, hasThumbnail) dest.writeLong(mmsId) dest.writeInt(displayOrder) - dest.writeInt(archiveCdn) + dest.writeInt(archiveCdn ?: NO_ARCHIVE_CDN) dest.writeInt(thumbnailRestoreState.value) dest.writeInt(archiveTransferState.value) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 221a3e4747..90b84a6246 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -26,7 +26,7 @@ import org.signal.core.util.getAllTableDefinitions import org.signal.core.util.getAllTriggerDefinitions import org.signal.core.util.getForeignKeyViolations import org.signal.core.util.logging.Log -import org.signal.core.util.requireInt +import org.signal.core.util.requireIntOrNull import org.signal.core.util.requireNonNullBlob import org.signal.core.util.stream.NonClosingOutputStream import org.signal.core.util.urlEncode @@ -1637,12 +1637,10 @@ sealed class ImportResult { } /** - * Iterator that reads values from the given cursor. Expects that ARCHIVE_MEDIA_ID and ARCHIVE_CDN are both - * present and non-null in the cursor. + * Iterator that reads values from the given cursor. Expects that REMOTE_DIGEST is present and non-null, and ARCHIVE_CDN is present. * * This class does not assume ownership of the cursor. Recommended usage is within a use statement: * - * * ``` * databaseCall().use { cursor -> * val iterator = ArchivedMediaObjectIterator(cursor) @@ -1661,7 +1659,7 @@ class ArchiveMediaItemIterator(private val cursor: Cursor) : Iterator true + + else -> false + } + } } fun DatabaseAttachment.requireMediaName(): MediaName { @@ -77,7 +97,7 @@ fun DatabaseAttachment.createArchiveAttachmentPointer(useArchiveCdn: Boolean): S mediaId = this.requireMediaName().toMediaId(mediaRootBackupKey).encode() ) - id to archiveCdn + id to (archiveCdn ?: RemoteConfig.backupFallbackArchiveCdn) } else { if (remoteLocation.isNullOrEmpty()) { throw InvalidAttachmentException("empty content id") @@ -131,7 +151,7 @@ fun DatabaseAttachment.createArchiveThumbnailPointer(): SignalServiceAttachmentP val key = mediaRootBackupKey.deriveThumbnailTransitKey(requireThumbnailMediaName()) val mediaId = mediaRootBackupKey.deriveMediaId(requireThumbnailMediaName()).encode() SignalServiceAttachmentPointer( - cdnNumber = archiveCdn, + cdnNumber = archiveCdn ?: RemoteConfig.backupFallbackArchiveCdn, remoteId = SignalServiceAttachmentRemoteId.Backup( mediaCdnPath = mediaCdnPath, mediaId = mediaId diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt index 699ad1ff96..e719c81073 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.components.settings.app.usernamelinks.Username import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord +import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues @@ -37,6 +38,8 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.ProfileUtil import org.thoughtcrime.securesms.util.TextSecurePreferences import org.whispersystems.signalservice.api.push.UsernameLinkComponents +import org.whispersystems.signalservice.api.storage.IAPSubscriptionId.AppleIAPOriginalTransactionId +import org.whispersystems.signalservice.api.storage.IAPSubscriptionId.GooglePlayBillingPurchaseToken import org.whispersystems.signalservice.api.subscriptions.SubscriberId import org.whispersystems.signalservice.api.util.UuidUtil import org.whispersystems.signalservice.api.util.toByteArray @@ -61,6 +64,8 @@ object AccountDataArchiveProcessor { val chatColors = SignalStore.chatColors.chatColors val chatWallpaper = SignalStore.wallpaper.currentRawWallpaper + val backupSubscriberRecord = db.inAppPaymentSubscriberTable.getBackupsSubscriber() + emitter.emit( Frame( account = AccountData( @@ -98,6 +103,7 @@ object AccountDataArchiveProcessor { hasSeenGroupStoryEducationSheet = signalStore.storyValues.userHasSeenGroupStoryEducationSheet, hasCompletedUsernameOnboarding = signalStore.uiHintValues.hasCompletedUsernameOnboarding(), customChatColors = db.chatColorsTable.getSavedChatColors().toRemoteChatColors(), + optimizeOnDeviceStorage = signalStore.backupValues.optimizeStorage, defaultChatStyle = ChatStyleConverter.constructRemoteChatStyle( db = db, chatColors = chatColors, @@ -105,7 +111,8 @@ object AccountDataArchiveProcessor { chatWallpaper = chatWallpaper ) ), - donationSubscriberData = donationSubscriber?.toSubscriberData(signalStore.inAppPaymentValues.isDonationSubscriptionManuallyCancelled()) + donationSubscriberData = donationSubscriber?.toSubscriberData(signalStore.inAppPaymentValues.isDonationSubscriptionManuallyCancelled()), + backupsSubscriberData = backupSubscriberRecord?.toIAPSubscriberData() ) ) ) @@ -148,6 +155,26 @@ object AccountDataArchiveProcessor { } } + if (accountData.backupsSubscriberData != null && accountData.backupsSubscriberData.subscriberId.size > 0 && (accountData.backupsSubscriberData.purchaseToken != null || accountData.backupsSubscriberData.originalTransactionId != null)) { + val remoteSubscriberId = SubscriberId.fromBytes(accountData.backupsSubscriberData.subscriberId.toByteArray()) + val localSubscriber = InAppPaymentsRepository.getSubscriber(InAppPaymentSubscriberRecord.Type.BACKUP) + + val subscriber = InAppPaymentSubscriberRecord( + subscriberId = remoteSubscriberId, + currency = localSubscriber?.currency, + type = InAppPaymentSubscriberRecord.Type.BACKUP, + requiresCancel = localSubscriber?.requiresCancel ?: false, + paymentMethodType = InAppPaymentData.PaymentMethodType.UNKNOWN, + iapSubscriptionId = if (accountData.backupsSubscriberData.purchaseToken != null) { + GooglePlayBillingPurchaseToken(accountData.backupsSubscriberData.purchaseToken) + } else { + AppleIAPOriginalTransactionId(accountData.backupsSubscriberData.originalTransactionId!!) + } + ) + + InAppPaymentsRepository.setSubscriber(subscriber) + } + if (accountData.avatarUrlPath.isNotEmpty()) { AppDependencies.jobManager.add(RetrieveProfileAvatarJob(Recipient.self().fresh(), accountData.avatarUrlPath)) } @@ -184,6 +211,7 @@ object AccountDataArchiveProcessor { SignalStore.story.isFeatureDisabled = settings.storiesDisabled SignalStore.story.userHasSeenGroupStoryEducationSheet = settings.hasSeenGroupStoryEducationSheet SignalStore.story.viewedReceiptsEnabled = settings.storyViewReceiptsEnabled ?: settings.readReceipts + SignalStore.backup.optimizeStorage = settings.optimizeOnDeviceStorage settings.customChatColors .mapNotNull { chatColor -> @@ -288,6 +316,23 @@ object AccountDataArchiveProcessor { return AccountData.SubscriberData(subscriberId = subscriberId, currencyCode = currencyCode, manuallyCancelled = manuallyCancelled) } + private fun InAppPaymentSubscriberRecord?.toIAPSubscriberData(): AccountData.IAPSubscriberData? { + if (this == null) { + return null + } + + val builder = AccountData.IAPSubscriberData.Builder() + .subscriberId(this.subscriberId.bytes.toByteString()) + + if (this.iapSubscriptionId?.purchaseToken != null) { + builder.purchaseToken(this.iapSubscriptionId.purchaseToken) + } else if (this.iapSubscriptionId?.originalTransactionId != null) { + builder.originalTransactionId(this.iapSubscriptionId.originalTransactionId) + } + + return builder.build() + } + private fun List.toRemoteChatColors(): List { return this .mapNotNull { local -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt index cfc2e3c5d9..0d077d3e44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt @@ -9,6 +9,7 @@ import okio.ByteString import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 import org.signal.core.util.emptyIfNull +import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.nullIfBlank import org.signal.core.util.orNull import org.thoughtcrime.securesms.attachments.ArchivedAttachment @@ -45,19 +46,22 @@ fun FilePointer?.toLocalAttachment( uuid: ByteString? = null, quote: Boolean = false ): Attachment? { - if (this == null) return null + if (this == null || this.locatorInfo == null) return null - if (this.attachmentLocator != null) { + val hasMediaName = this.locatorInfo.mediaName.isNotEmpty() + val hasTransitInfo = this.locatorInfo.transitCdnKey != null + + if (hasTransitInfo && !hasMediaName) { val signalAttachmentPointer = SignalServiceAttachmentPointer( - cdnNumber = this.attachmentLocator.cdnNumber, - remoteId = SignalServiceAttachmentRemoteId.from(attachmentLocator.cdnKey), + cdnNumber = this.locatorInfo.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, + remoteId = SignalServiceAttachmentRemoteId.from(locatorInfo.transitCdnKey), contentType = contentType, - key = this.attachmentLocator.key.toByteArray(), - size = Optional.ofNullable(attachmentLocator.size), + key = this.locatorInfo.key.toByteArray(), + size = Optional.ofNullable(locatorInfo.size), preview = Optional.empty(), width = this.width ?: 0, height = this.height ?: 0, - digest = Optional.ofNullable(this.attachmentLocator.digest.toByteArray()), + digest = Optional.ofNullable(this.locatorInfo.digest.toByteArray()), incrementalDigest = Optional.ofNullable(this.incrementalMac?.toByteArray()), incrementalMacChunkSize = this.incrementalMacChunkSize ?: 0, fileName = Optional.ofNullable(fileName), @@ -66,7 +70,7 @@ fun FilePointer?.toLocalAttachment( isGif = gif, caption = Optional.ofNullable(this.caption), blurHash = Optional.ofNullable(this.blurHash), - uploadTimestamp = this.attachmentLocator.uploadTimestamp?.clampToValidBackupRange() ?: 0, + uploadTimestamp = this.locatorInfo.transitTierUploadTimestamp?.clampToValidBackupRange() ?: 0, uuid = UuidUtil.fromByteStringOrNull(uuid) ) return PointerAttachment.forPointer( @@ -74,7 +78,7 @@ fun FilePointer?.toLocalAttachment( stickerLocator = stickerLocator, transferState = if (wasDownloaded) AttachmentTable.TRANSFER_NEEDS_RESTORE else AttachmentTable.TRANSFER_PROGRESS_PENDING ).orNull() - } else if (this.invalidAttachmentLocator != null) { + } else if (!hasMediaName) { return TombstoneAttachment( contentType = contentType, incrementalMac = this.incrementalMac?.toByteArray(), @@ -91,19 +95,20 @@ fun FilePointer?.toLocalAttachment( stickerLocator = stickerLocator, uuid = UuidUtil.fromByteStringOrNull(uuid) ) - } else if (this.backupLocator != null) { + } else { return ArchivedAttachment( contentType = contentType, - size = this.backupLocator.size.toLong(), - cdn = this.backupLocator.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, - key = this.backupLocator.key.toByteArray(), + size = this.locatorInfo.size.toLong(), + cdn = this.locatorInfo.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, + uploadTimestamp = this.locatorInfo.transitTierUploadTimestamp ?: 0, + key = this.locatorInfo.key.toByteArray(), iv = null, - cdnKey = this.backupLocator.transitCdnKey?.nullIfBlank(), - archiveCdn = this.backupLocator.cdnNumber, - archiveMediaName = this.backupLocator.mediaName, - archiveMediaId = importState.mediaRootBackupKey.deriveMediaId(MediaName(this.backupLocator.mediaName)).encode(), - archiveThumbnailMediaId = importState.mediaRootBackupKey.deriveMediaId(MediaName.forThumbnailFromMediaName(this.backupLocator.mediaName)).encode(), - digest = this.backupLocator.digest.toByteArray(), + cdnKey = this.locatorInfo.transitCdnKey?.nullIfBlank(), + archiveCdn = this.locatorInfo.mediaTierCdnNumber, + archiveMediaName = this.locatorInfo.mediaName, + archiveMediaId = importState.mediaRootBackupKey.deriveMediaId(MediaName(this.locatorInfo.mediaName)).encode(), + archiveThumbnailMediaId = importState.mediaRootBackupKey.deriveMediaId(MediaName.forThumbnailFromMediaName(this.locatorInfo.mediaName)).encode(), + digest = this.locatorInfo.digest.toByteArray(), incrementalMac = this.incrementalMac?.toByteArray(), incrementalMacChunkSize = this.incrementalMacChunkSize, width = this.width, @@ -119,7 +124,6 @@ fun FilePointer?.toLocalAttachment( fileName = fileName ) } - return null } /** @@ -136,49 +140,85 @@ fun DatabaseAttachment.toRemoteFilePointer(mediaArchiveEnabled: Boolean, content builder.caption = this.caption builder.blurHash = this.blurHash?.hash - if (this.remoteKey.isNullOrBlank() || this.remoteDigest == null || this.size == 0L) { - builder.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() - return builder.build() + builder.setLegacyLocators(this, mediaArchiveEnabled) + builder.locatorInfo = this.toLocatorInfo() + + return builder.build() +} + +fun FilePointer.Builder.setLegacyLocators(attachment: DatabaseAttachment, mediaArchiveEnabled: Boolean) { + if (attachment.remoteKey.isNullOrBlank() || attachment.remoteDigest == null || attachment.size == 0L) { + this.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() + return } - if (this.transferState == AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE && this.archiveTransferState != AttachmentTable.ArchiveTransferState.FINISHED) { - builder.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() - return builder.build() + if (attachment.transferState == AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE && attachment.archiveTransferState != AttachmentTable.ArchiveTransferState.FINISHED) { + this.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() + return } - val pending = this.archiveTransferState != AttachmentTable.ArchiveTransferState.FINISHED && (this.transferState != AttachmentTable.TRANSFER_PROGRESS_DONE && this.transferState != AttachmentTable.TRANSFER_RESTORE_OFFLOADED) + val pending = attachment.archiveTransferState != AttachmentTable.ArchiveTransferState.FINISHED && (attachment.transferState != AttachmentTable.TRANSFER_PROGRESS_DONE && attachment.transferState != AttachmentTable.TRANSFER_RESTORE_OFFLOADED) if (mediaArchiveEnabled && !pending) { - val transitCdnKey = this.remoteLocation?.nullIfBlank() - val transitCdnNumber = this.cdn.cdnNumber.takeIf { transitCdnKey != null } - val archiveMediaName = this.getMediaName()?.toString() + val transitCdnKey = attachment.remoteLocation?.nullIfBlank() + val transitCdnNumber = attachment.cdn.cdnNumber.takeIf { transitCdnKey != null } + val archiveMediaName = attachment.getMediaName()?.toString() - builder.backupLocator = FilePointer.BackupLocator( + this.backupLocator = FilePointer.BackupLocator( mediaName = archiveMediaName.emptyIfNull(), - cdnNumber = this.archiveCdn.takeIf { archiveMediaName != null }, - key = Base64.decode(remoteKey).toByteString(), - size = this.size.toInt(), - digest = this.remoteDigest.toByteString(), + cdnNumber = attachment.archiveCdn.takeIf { archiveMediaName != null }, + key = Base64.decode(attachment.remoteKey).toByteString(), + size = attachment.size.toInt(), + digest = attachment.remoteDigest.toByteString(), transitCdnNumber = transitCdnNumber, transitCdnKey = transitCdnKey ) - return builder.build() + return } - if (this.remoteLocation.isNullOrBlank()) { - builder.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() - return builder.build() + if (attachment.remoteLocation.isNullOrBlank()) { + this.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() + return } - builder.attachmentLocator = FilePointer.AttachmentLocator( - cdnKey = this.remoteLocation, - cdnNumber = this.cdn.cdnNumber, - uploadTimestamp = this.uploadTimestamp.takeIf { it > 0 }?.clampToValidBackupRange(), - key = Base64.decode(remoteKey).toByteString(), - size = this.size.toInt(), - digest = this.remoteDigest.toByteString() + this.attachmentLocator = FilePointer.AttachmentLocator( + cdnKey = attachment.remoteLocation, + cdnNumber = attachment.cdn.cdnNumber, + uploadTimestamp = attachment.uploadTimestamp.takeIf { it > 0 }?.clampToValidBackupRange(), + key = Base64.decode(attachment.remoteKey).toByteString(), + size = attachment.size.toInt(), + digest = attachment.remoteDigest.toByteString() ) - return builder.build() +} + +fun DatabaseAttachment.toLocatorInfo(): FilePointer.LocatorInfo { + if (this.remoteKey.isNullOrBlank() || this.remoteDigest == null || this.size == 0L) { + return FilePointer.LocatorInfo() + } + + if (this.transferState == AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE && this.archiveTransferState != AttachmentTable.ArchiveTransferState.FINISHED) { + return FilePointer.LocatorInfo() + } + + val locatorBuilder = FilePointer.LocatorInfo.Builder() + + val remoteKey = Base64.decode(this.remoteKey).toByteString() + val archiveMediaName = this.getMediaName()?.toString() + + locatorBuilder.key = remoteKey + locatorBuilder.digest = this.remoteDigest.toByteString() + locatorBuilder.size = this.size.toInt() + + if (this.remoteLocation.isNotNullOrBlank()) { + locatorBuilder.transitCdnKey = this.remoteLocation + locatorBuilder.transitCdnNumber = this.cdn.cdnNumber + locatorBuilder.transitTierUploadTimestamp = this.uploadTimestamp.takeIf { it > 0 }?.clampToValidBackupRange() + } + + locatorBuilder.mediaTierCdnNumber = this.archiveCdn?.takeIf { archiveMediaName != null } + locatorBuilder.mediaName = archiveMediaName.emptyIfNull() + + return locatorBuilder.build() } fun Long.clampToValidBackupRange(): Long { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt index d9f6c358b4..da6c565015 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt @@ -54,6 +54,7 @@ import org.signal.core.util.readToSingleObject import org.signal.core.util.requireBlob import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt +import org.signal.core.util.requireIntOrNull import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullBlob import org.signal.core.util.requireNonNullString @@ -264,7 +265,7 @@ class AttachmentTable( $UPLOAD_TIMESTAMP INTEGER DEFAULT 0, $DATA_HASH_START TEXT DEFAULT NULL, $DATA_HASH_END TEXT DEFAULT NULL, - $ARCHIVE_CDN INTEGER DEFAULT 0, + $ARCHIVE_CDN INTEGER DEFAULT NULL, $ARCHIVE_TRANSFER_FILE TEXT DEFAULT NULL, $ARCHIVE_TRANSFER_STATE INTEGER DEFAULT ${ArchiveTransferState.NONE.value}, $THUMBNAIL_FILE TEXT DEFAULT NULL, @@ -705,7 +706,7 @@ class AttachmentTable( .update(TABLE_NAME) .values( ARCHIVE_TRANSFER_STATE to ArchiveTransferState.NONE.value, - ARCHIVE_CDN to 0 + ARCHIVE_CDN to null ) .where("$REMOTE_DIGEST = ?", digest) .run() @@ -1977,7 +1978,7 @@ class AttachmentTable( displayOrder = jsonObject.getInt(DISPLAY_ORDER), uploadTimestamp = jsonObject.getLong(UPLOAD_TIMESTAMP), dataHash = jsonObject.getString(DATA_HASH_END), - archiveCdn = jsonObject.getInt(ARCHIVE_CDN), + archiveCdn = if (jsonObject.isNull(ARCHIVE_CDN)) null else jsonObject.getInt(ARCHIVE_CDN), thumbnailRestoreState = ThumbnailRestoreState.deserialize(jsonObject.getInt(THUMBNAIL_RESTORE_STATE)), archiveTransferState = ArchiveTransferState.deserialize(jsonObject.getInt(ARCHIVE_TRANSFER_STATE)), uuid = UuidUtil.parseOrNull(jsonObject.getString(ATTACHMENT_UUID)) @@ -2064,7 +2065,7 @@ class AttachmentTable( writableDatabase .update(TABLE_NAME) .values( - ARCHIVE_CDN to 0 + ARCHIVE_CDN to null ) .where(query.where, query.whereArgs) .run() @@ -2075,7 +2076,7 @@ class AttachmentTable( writableDatabase .updateAll(TABLE_NAME) .values( - ARCHIVE_CDN to 0, + ARCHIVE_CDN to null, ARCHIVE_TRANSFER_STATE to ArchiveTransferState.NONE.value ) .run() @@ -2630,7 +2631,7 @@ class AttachmentTable( displayOrder = cursor.requireInt(DISPLAY_ORDER), uploadTimestamp = cursor.requireLong(UPLOAD_TIMESTAMP), dataHash = cursor.requireString(DATA_HASH_END), - archiveCdn = cursor.requireInt(ARCHIVE_CDN), + archiveCdn = cursor.requireIntOrNull(ARCHIVE_CDN), thumbnailRestoreState = ThumbnailRestoreState.deserialize(cursor.requireInt(THUMBNAIL_RESTORE_STATE)), archiveTransferState = ArchiveTransferState.deserialize(cursor.requireInt(ARCHIVE_TRANSFER_STATE)), uuid = UuidUtil.parseOrNull(cursor.requireString(ATTACHMENT_UUID)) @@ -2658,7 +2659,7 @@ class AttachmentTable( hashEnd = this.requireString(DATA_HASH_END), transformProperties = TransformProperties.parse(this.requireString(TRANSFORM_PROPERTIES)), uploadTimestamp = this.requireLong(UPLOAD_TIMESTAMP), - archiveCdn = this.requireInt(ARCHIVE_CDN), + archiveCdn = this.requireIntOrNull(ARCHIVE_CDN), archiveTransferState = this.requireInt(ARCHIVE_TRANSFER_STATE), thumbnailFile = this.requireString(THUMBNAIL_FILE), thumbnailRandom = this.requireBlob(THUMBNAIL_RANDOM), @@ -2726,7 +2727,7 @@ class AttachmentTable( val hashEnd: String?, val transformProperties: TransformProperties, val uploadTimestamp: Long, - val archiveCdn: Int, + val archiveCdn: Int?, val archiveTransferState: Int, val thumbnailFile: String?, val thumbnailRandom: ByteArray?, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/BackupMediaSnapshotTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/BackupMediaSnapshotTable.kt index 24367aa446..d83981c590 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/BackupMediaSnapshotTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/BackupMediaSnapshotTable.kt @@ -15,6 +15,7 @@ import org.signal.core.util.readToList import org.signal.core.util.readToSet import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt +import org.signal.core.util.requireIntOrNull import org.signal.core.util.requireNonNullBlob import org.signal.core.util.requireNonNullString import org.signal.core.util.select @@ -257,7 +258,7 @@ class BackupMediaSnapshotTable(context: Context, database: SignalDatabase) : Dat class ArchiveMediaItem( val mediaId: String, val thumbnailMediaId: String, - val cdn: Int, + val cdn: Int?, val digest: ByteArray ) @@ -268,7 +269,7 @@ class BackupMediaSnapshotTable(context: Context, database: SignalDatabase) : Dat class MediaEntry( val mediaId: String, - val cdn: Int, + val cdn: Int?, val digest: ByteArray, val isThumbnail: Boolean ) { @@ -276,7 +277,7 @@ class BackupMediaSnapshotTable(context: Context, database: SignalDatabase) : Dat fun fromCursor(cursor: Cursor): MediaEntry { return MediaEntry( mediaId = cursor.requireNonNullString(MEDIA_ID), - cdn = cursor.requireInt(CDN), + cdn = cursor.requireIntOrNull(CDN), digest = cursor.requireNonNullBlob(REMOTE_DIGEST), isThumbnail = cursor.requireBoolean(IS_THUMBNAIL) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index 85170629cc..5951501449 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -130,6 +130,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V272_UpdateUnreadCo import org.thoughtcrime.securesms.database.helpers.migration.V273_FixUnreadOriginalMessages import org.thoughtcrime.securesms.database.helpers.migration.V274_BackupMediaSnapshotLastSeenOnRemote import org.thoughtcrime.securesms.database.helpers.migration.V275_EnsureDefaultAllChatsFolder +import org.thoughtcrime.securesms.database.helpers.migration.V276_AttachmentCdnDefaultValueMigration import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSqliteDatabase /** @@ -265,10 +266,11 @@ object SignalDatabaseMigrations { 272 to V272_UpdateUnreadCountIndices, 273 to V273_FixUnreadOriginalMessages, 274 to V274_BackupMediaSnapshotLastSeenOnRemote, - 275 to V275_EnsureDefaultAllChatsFolder + 275 to V275_EnsureDefaultAllChatsFolder, + 276 to V276_AttachmentCdnDefaultValueMigration ) - const val DATABASE_VERSION = 275 + const val DATABASE_VERSION = 276 @JvmStatic fun migrate(context: Application, db: SignalSqliteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V276_AttachmentCdnDefaultValueMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V276_AttachmentCdnDefaultValueMigration.kt new file mode 100644 index 0000000000..6adcc206a0 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V276_AttachmentCdnDefaultValueMigration.kt @@ -0,0 +1,108 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import org.signal.core.util.Stopwatch +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase + +/** + * We want to be able to distinguish between an unset CDN (null) and CDN 0. But we default the current CDN values to zero. + * This migration updates things so that the CDN columns default to null. We also consider all current CDN 0's to actually be unset values. + */ +object V276_AttachmentCdnDefaultValueMigration : SignalDatabaseMigration { + + private val TAG = Log.tag(V276_AttachmentCdnDefaultValueMigration::class) + + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + val stopwatch = Stopwatch("v276") + + db.execSQL("UPDATE attachment SET archive_cdn = NULL WHERE archive_cdn = 0") + stopwatch.split("fix-old-data") + + db.execSQL( + """ + CREATE TABLE attachment_tmp ( + _id INTEGER PRIMARY KEY AUTOINCREMENT, + message_id INTEGER, + content_type TEXT, + remote_key TEXT, + remote_location TEXT, + remote_digest BLOB, + remote_incremental_digest BLOB, + remote_incremental_digest_chunk_size INTEGER DEFAULT 0, + cdn_number INTEGER DEFAULT 0, + transfer_state INTEGER, + transfer_file TEXT DEFAULT NULL, + data_file TEXT, + data_size INTEGER, + data_random BLOB, + file_name TEXT, + fast_preflight_id TEXT, + voice_note INTEGER DEFAULT 0, + borderless INTEGER DEFAULT 0, + video_gif INTEGER DEFAULT 0, + quote INTEGER DEFAULT 0, + width INTEGER DEFAULT 0, + height INTEGER DEFAULT 0, + caption TEXT DEFAULT NULL, + sticker_pack_id TEXT DEFAULT NULL, + sticker_pack_key DEFAULT NULL, + sticker_id INTEGER DEFAULT -1, + sticker_emoji STRING DEFAULT NULL, + blur_hash TEXT DEFAULT NULL, + transform_properties TEXT DEFAULT NULL, + display_order INTEGER DEFAULT 0, + upload_timestamp INTEGER DEFAULT 0, + data_hash_start TEXT DEFAULT NULL, + data_hash_end TEXT DEFAULT NULL, + archive_cdn INTEGER DEFAULT NULL, + archive_transfer_file TEXT DEFAULT NULL, + archive_transfer_state INTEGER DEFAULT 0, + thumbnail_file TEXT DEFAULT NULL, + thumbnail_random BLOB DEFAULT NULL, + thumbnail_restore_state INTEGER DEFAULT 0, + attachment_uuid TEXT DEFAULT NULL, + remote_iv BLOB DEFAULT NULL, + offload_restored_at INTEGER DEFAULT 0 + ) + """ + ) + stopwatch.split("create-new-table") + + db.execSQL("INSERT INTO attachment_tmp SELECT * FROM attachment") + stopwatch.split("copy-data") + + db.execSQL("DROP TABLE attachment") + stopwatch.split("drop-table") + + db.execSQL("ALTER TABLE attachment_tmp RENAME TO attachment") + stopwatch.split("rename-table") + + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_message_id_index ON attachment (message_id);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_transfer_state_index ON attachment (transfer_state);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_sticker_pack_id_index ON attachment (sticker_pack_id);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_data_hash_start_index ON attachment (data_hash_start);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_data_hash_end_index ON attachment (data_hash_end);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_data_index ON attachment (data_file);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_archive_transfer_state ON attachment (archive_transfer_state);") + db.execSQL("CREATE INDEX IF NOT EXISTS attachment_remote_digest_index ON attachment (remote_digest);") + stopwatch.split("create-indexes") + + db.execSQL( + """ + CREATE TRIGGER msl_attachment_delete AFTER DELETE ON attachment + BEGIN + DELETE FROM msl_payload WHERE _id IN (SELECT payload_id FROM msl_message WHERE msl_message.message_id = old.message_id); + END + """ + ) + stopwatch.split("create-triggers") + + stopwatch.stop(TAG) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveThumbnailUploadJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveThumbnailUploadJob.kt index e0d878ec5d..7d1c37dfa7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveThumbnailUploadJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveThumbnailUploadJob.kt @@ -132,8 +132,6 @@ class ArchiveThumbnailUploadJob private constructor( return Result.retry(defaultBackoff()) } - val mediaSecrets = mediaRootBackupKey.deriveMediaSecrets(attachment.requireThumbnailMediaName()) - return when (val result = BackupRepository.copyThumbnailToArchive(attachmentPointer, attachment)) { is NetworkResult.Success -> { // save attachment thumbnail diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentJob.kt index 07648a256c..c70ab070cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentJob.kt @@ -241,7 +241,7 @@ class RestoreAttachmentJob private constructor( val downloadResult = if (useArchiveCdn) { archiveFile = SignalDatabase.attachments.getOrCreateArchiveTransferFile(attachmentId) - val cdnCredentials = BackupRepository.getCdnReadCredentials(BackupRepository.CredentialType.MEDIA, attachment.archiveCdn).successOrThrow().headers + val cdnCredentials = BackupRepository.getCdnReadCredentials(BackupRepository.CredentialType.MEDIA, attachment.archiveCdn ?: RemoteConfig.backupFallbackArchiveCdn).successOrThrow().headers messageReceiver .retrieveArchivedAttachment( diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentThumbnailJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentThumbnailJob.kt index 433fa8fce9..09763eb588 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentThumbnailJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RestoreAttachmentThumbnailJob.kt @@ -126,7 +126,7 @@ class RestoreAttachmentThumbnailJob private constructor( override fun shouldCancel(): Boolean = this@RestoreAttachmentThumbnailJob.isCanceled } - val cdnCredentials = BackupRepository.getCdnReadCredentials(BackupRepository.CredentialType.MEDIA, attachment.archiveCdn).successOrThrow().headers + val cdnCredentials = BackupRepository.getCdnReadCredentials(BackupRepository.CredentialType.MEDIA, attachment.archiveCdn ?: RemoteConfig.backupFallbackArchiveCdn).successOrThrow().headers val pointer = attachment.createArchiveThumbnailPointer() Log.i(TAG, "Downloading thumbnail for $attachmentId") @@ -142,7 +142,7 @@ class RestoreAttachmentThumbnailJob private constructor( progressListener ) - SignalDatabase.attachments.finalizeAttachmentThumbnailAfterDownload(attachmentId, attachment.remoteDigest!!, downloadResult.dataStream, thumbnailTransferFile) + SignalDatabase.attachments.finalizeAttachmentThumbnailAfterDownload(attachmentId, attachment.remoteDigest, downloadResult.dataStream, thumbnailTransferFile) if (!SignalDatabase.messages.isStory(messageId)) { AppDependencies.messageNotifier.updateNotification(context) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt index 8f7ab5abff..ffe6c76a7a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt @@ -982,6 +982,13 @@ object RemoteConfig { BuildConfig.MESSAGE_BACKUP_RESTORE_ENABLED || value.asBoolean(false) } + val backupFallbackArchiveCdn: Int by remoteInt( + key = "global.backups.mediaTierFallbackCdnNumber", + hotSwappable = true, + active = true, + defaultValue = 3 + ) + /** Whether unauthenticated chat web socket is backed by libsignal-net */ @JvmStatic @get:JvmName("libSignalWebSocketEnabled") diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index 5ac5ceb260..b19ebe330f 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -87,6 +87,7 @@ message AccountData { PhoneNumberSharingMode phoneNumberSharingMode = 17; ChatStyle defaultChatStyle = 18; repeated ChatStyle.CustomChatColor customChatColors = 19; + bool optimizeOnDeviceStorage = 20; } message SubscriberData { @@ -689,6 +690,7 @@ message MessageAttachment { message FilePointer { // References attachments in the backup (media) storage tier. + // DEPRECATED; use LocatorInfo instead if available. message BackupLocator { string mediaName = 1; // If present, the cdn number of the succesful upload. @@ -698,6 +700,7 @@ message FilePointer { bytes key = 3; bytes digest = 4; uint32 size = 5; + // Fallback in case backup tier upload failed. optional string transitCdnKey = 6; optional uint32 transitCdnNumber = 7; @@ -707,6 +710,7 @@ message FilePointer { // May be downloaded or not when the backup is generated; // primarily for free-tier users who cannot copy the // attachments to the backup (media) storage tier. + // DEPRECATED; use LocatorInfo instead if available. message AttachmentLocator { string cdnKey = 1; uint32 cdnNumber = 2; @@ -721,12 +725,14 @@ message FilePointer { // CDN keys or anything else that makes download attempts impossible. // This serves as a 'tombstone' so that the UX can show that an attachment // did exist, but for whatever reason it's not retrievable. + // DEPRECATED; use LocatorInfo instead if available. message InvalidAttachmentLocator { } // References attachments in a local encrypted backup. // Importers should first attempt to read the file from the local backup, // and on failure fallback to backup and transit cdn if possible. + // DEPRECATED; use LocatorInfo instead if available. message LocalLocator { string mediaName = 1; // Separate key used to encrypt this file for the local backup. @@ -742,7 +748,45 @@ message FilePointer { optional uint32 transitCdnNumber = 8; } + message LocatorInfo { + // Must be non-empty if transitCdnKey or mediaName are set/nonempty. + // Otherwise must be empty. + bytes key = 1; + // From the sender of the attachment (incl. ourselves) + // Must be non-empty if transitCdnKey or mediaName are set/nonempty. + // Otherwise must be empty. + bytes digest = 2; + // Must be non-zero if transitCdnKey or mediaName are set/nonempty. + // Otherwise must be zero. + uint32 size = 3; + + // Either both transit cdn key and number are set or neither should be set. + // Upload timestamp is optional but should only be set if key/number are set. + optional string transitCdnKey = 4; + optional uint32 transitCdnNumber = 5; + optional uint64 transitTierUploadTimestamp = 6; + + // If present, the cdn number of the succesful upload to media tier. + // If unset, may still have been uploaded, and clients + // can discover the cdn number via the list endpoint. + // Exporting clients should set this as long as their subscription + // has not rotated since last upload; even if currently free tier. + optional uint32 mediaTierCdnNumber = 7; + + // Nonempty any time the attachment was downloaded and its + // digest validated, whether free tier or paid subscription. + string mediaName = 8; + + // Separate key used to encrypt this file for the local backup. + // Generally required for local backups. + // Missing field indicates attachment was not available locally + // when the backup was generated, but remote backup or transit + // info was available. + optional bytes localKey = 9; + } + // If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error. + // DEPRECATED; use locatorInfo instead. oneof locator { BackupLocator backupLocator = 1; AttachmentLocator attachmentLocator = 2; @@ -758,6 +802,7 @@ message FilePointer { optional uint32 height = 9; optional string caption = 10; optional string blurHash = 11; + LocatorInfo locatorInfo = 13; } message Quote { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f5b5c06e4d..5c603876ed 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-window = "1.3.0" glide = "4.15.1" gradle = "8.9.0" kotlin = "2.1.0" -libsignal-client = "0.73.0" +libsignal-client = "0.73.1" mp4parser = "1.9.39" android-gradle-plugin = "8.7.2" accompanist = "0.28.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index fa719a3fd2..cf642fd505 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7180,20 +7180,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + +