Clone
1
self destructing messages
Ivana edited this page 2021-03-25 11:13:00 +00:00

Self destructing messages

MR 1351, ticket #1893 (closed)

MR1351 Testing instructions

send messages with a contact and enable/disable disappearing messages in between messages.
check that there's little notices highlighting the change that say 'tap to learn more'
check that tapping a notice opens a screen explaining disappearing messages

Ticket #1893 (closed) Title: Provide explanation when self-destruct timer gets changed

When self-destruct timer gets changed initially and later, we should provide a way to get more information about this feature for users that don't understand it, yet.

This could be as simple as making the timer changed message bubble tapable "Tap here to change" and bring the user to the settings screen for self-destructing messages that has further explanation #1837 (closed) (closed)

**Test Specification ** (derived form the above two gitlab entries and from the actual use of devices)

Default is: disappearing messages setting is off
Precondition: User on device1 has some contacts, but no messages yet. User on device2 - ditto.
Send a few messages from one contact to another, while the 'disappearing messages' setting is off.
User on device1 goes to the menu in the upper right corner and selects Disappearing Messages
A screen on device1 shows with the message: "Make future messages in this conversation automatically disappear after 7 days", a little bomb icon, and a switch to turn this setting on or off.
Tappable Link that says: learn more
User on device1 sees the above described screen, but before they send messages to device2, the device2 user doesn't know that this setting has changed - there is no infromation for them yet at this point.
on tapping Learn more link, User on device1 is shown the information screen exaplaining the functioning of this setting.
Bottom right corner of the information screen, there is a Got It tappable link, and tapping on that, returns the user on device1 back to the previous screen. There is also 'Back' navigation arrow in the navigtion bar, which returns the user from the information screen back to the previous screen. (POrtrait and landscape orientation).
Information screen is scrollable in landscape orientation and all the links still work (back button in navigation bar and Got it in the right hand side bottom corner)
<When the user on device 1 starts typing the next message to the user on device2, there is a little bomb icon in the text field itself, to remind the user that they are typing a message that will disappear
After device1 sends the message to the device2, both users are informed that the messages will disappear (automatically generated information messages on their sceens that inform them that messages will disappear after a period of time - not configurable by user).
After the device1 sends a disappearing message to the device2, this act will change the device2 disappearing setting: if it is 'off' it will change it to 'on'.
Device 1 user sees a little bomb icon on their sent message, and the device2 user sees the little bomb icon on the message they received.
The messages disappear after the stated time interval
Tested with both devices having this setting 'on', one 'on' and one 'off', changing the setting from either device during conversation, portrait and landscape, and both devices having this setting 'off'.

**#1864 (closed) Show warning dialog when the expected timer differs from the current timer **

We mirror the timer duration from our contact's messages. It is possible that we are writing a message and short before we hit send, the timer changes or gets turned off. To prevent this scenario, we should show a warning dialog that pops up if the timer when sending is different from the timer when we started typing the message.

**MR 1328 Show warning dialog when the expected timer differs from the current timer **

This MR refactors message sending to return a LiveData that the TextSendController can observe to react to the sending state. The main reason is to be able to reliably catch automatic changes to the auto-delete timer which might surprise the user.

Test instructions:

Add a contact, open private conversation screen and send a message
Start typing a second message and activate disappearing messages, finish typing the message and send
    check that a warning message appears warning about the changed timer
Start typing a third message, but don't send
Let your contact disable disappearing messages and send a message
Wait for the contact's message to arrive and then send your message
    check that a warning message appears warning about the changed timer

Test Specification

Preconditions:

Delete all messages between the device1 and Device2, if there are any.
Send a few non-disappearing messages between the two devices
Device1 start typing a message to device 2, device 2 change the disappearing messages setting to 'on' and start typing a message to device1
device2 sends its message to device1, device 1 sends it message to device 2
Device 2 sees an automatically generates message on their screen: Disappearing messages changed. Since you started composing your message, disappearing messages have changed'. ON this warning message, options for the user are: 'send anyway' and 'cancel'.
Tapping on 'cancel' cancels the warning message and returns the user back to the mesage composing screen.
Tapping on 'Send anyway' sends the message to the device1
Device 1 receives the disappearing message, and there is the 'device2's message, containing little bomb icon, there is an automatically generated message to say that device2's message will disappear after a period of time, and there is a little icon on the device1 text input field.
Device1 setting 'disappearing messages' has been turned 'on' when they received the device2 disappearing message.
When device1 tries to send the message they were composing, they receive the same warning as did device2 when they changed this setting in the middle of composing the message: Disappearing messages changed. Since you started composing your message, disappearing messages have changed'. ON this warning message, options for the user are: 'send anyway' and 'cancel'.

#1833 (closed) Delete messages when their self-destruct timers expire

#1836 (closed) Automatically decline incoming private group invitations when they self-destruct

MR 1389 Automatically decline incoming private group invitations when they self-destruct

Test instructions:

use two or more contacts
create various private groups
invite contacts to private groups
accept/decline invitations
enable/disable disappearing messages throughout the process
ensure that messages sent with enabled timers self-destruct (also while private conversation is open)
ensure that open invitations get automatically declined and are recognizable as automatic for the sender of the decline

#1833 (closed) Delete messages when their self-destruct timers expire

Create a component that tracks pending self-destruct timers and deletes messages when their self-destruct timers expire.

Conversation clients will register messages for deletion during delivery. The new component will be responsible for calling back into the client when a message is due to be deleted. This will allow the client to take any necessary steps before deletion, such as declining an open introduction.

MR 1312 Mirror the contact's changes to the self-destruct timer

This branch records the self-destruct timer from incoming messages and updates the local timer to match the remote timer when appropriate:

If the incoming message has an earlier or equal timestamp to the latest message sent or received so far, we don't update our timer
If we haven't changed the local timer since sending our last message, we mirror the remote timer
If we have changed the local timer since sending our last message, we only mirror the remote timer if it has changed; messages that continue to use the old timer don't overwrite our local change

Test specification

For the incoming message to have an earlier timestamp than the latest message we sent or received, there would have to be a delay in the message delivery - how to simulate that?

If we haven't changed the local timer since sending our last message, we mirror the remote timer

To test this scenario:

device 1 has their Disappearing messages setting set to On. The remote device2 has their Disappearing setting set to Off.
device2 sends device1 a message.
device1 receives message, together with the automatically generated messages informing them that the message they just received is not going to be seld-destucted.

**MR1382 Delete messages when their self-destruct timers expire (no UI) **

This branch implements automatic deletion of private messages and attachments. The sender starts the timer for a private message when it's acked; the recipient starts the timer when the private message is read.

When an attachment is received, we check whether it's listed as an attachment by any private message received in the conversation so far. If not, an orphan cleanup timer with a duration of 28 days is started. The timer is stopped if we receive a private message that lists the attachment; otherwise the orphaned attachment is deleted.

Manual deletion of private messages with missing attachments is now allowed; the orphan cleanup timer will ensure any attachments that arrive after their private messages have been deleted will eventually be deleted too. Making this change was easier than updating the attachment format to indicate whether each attachment belongs to a private message with a self-destruct timer, and I think it improves the manual deletion feature.

This branch also contains an unrelated change: moving ConversationManagerImpl to the conversation package (like its interface). I can move this change to a separate MR if preferred.

The default timer duration is changed to 1 minute for easier testing; we should revert this before merging the feature branch.

Part of #1833 (closed).

Was WIP because the UI isn't updated when messages are deleted. @grote let's discuss whether to merge this to the feature branch and add the UI changes separately, or add them before merging this MR. We also need to update the onboarding text to explain that the recipient's timer starts when the message is read.

Ticket #1834 Automatically decline incoming introduction requests when they self-destruct (MR

Testing instructions:

Use three devices, users A, B and C
Enable self-destructing messages in the conversations A-B and A-C
Let A introduce contacts B and C
Expect invitation messages to arrive at B and C about the invitation
Expect the invitation messages to have a auto-delete timers
Let those timers expire. Expect that to trigger an automatic decline of the invitation, i.e. on all three devices it is visible that the introduction failed (due to the expired response)
Expect all messages from that interaction to destroy after each message's timer expires
Let A introduce B and C again. Expect this not to fail due to an introduction that is already going on (because none should be going on any longer)
Let B and C accept the introduction
Expect the introduction to work
Confirm that B and C have each other in the contact list
Expect all messages involved in the transaction to have auto-delete timers
Let those timers expire and expect all those messages to disappear

Preconditions: Use three devices, users A, B and C A has a contact with B and A has a contact with C. B and C are not connected.

Test Scenario:

A wants to introduce B and C, and A all three of them have the disappearing messages setting set to On. Both B and C accept the introduction.
Expected results: introductions are successful, B and C appear in each other's contact lists,
Sender A receives an automatically generated message saying "Your messages will disappear after x minutes. Tap to learn more. "
Tap on words 'tap to learn more' A screen appears with a message saying "Make future messages in this conversation automatically disappear after 7 days. The user is able to siwtch the Disappearing messages setting on or off on this screen. User can tap on Learn More link.
Tapping on Learn More - An informational screen appears explaining to the user how this setting works.
Sender A receives another automatically generated message which contains: The text message they typed into their intro before senidng it+ and underneath that "you have asked to introduce B to C" + bomb icon.
Recipient B = the one the sender selected first in their contact list... and from there they selected Make Introduction.
Recipient B receives: autogenerated message saying : "A's messages will disappear in 1 min", the text message that A typed to accompany their intro msg, and an atugenerated message aying "A asked to introduced you to C". Which the user can accept or decline.

B receives a message saying: A has asked to introduce you to C... doesn't have a little bomb icon on.

Timer expired before either B or C have seen the introduction message. The original automatically generated message that the A received, saying "Your messages will disappear after x minutes. Tap to learn more. " has disappeared as did the message saying you have sent an introduction message to B and C...

Ticket # Automatically decline incoming blog/forum invitations when they self-destruct

MR1392 Testing Instructions Test instructions:

Testing that an invitation to a "shareable" -- a forum, a contact's personal blog, or an imported RSS feed -- is automatically declined when the invitation message is self-destructed.

use two or more contacts
create various forums or RSS blogs
    personal blogs are automatically shared between mutual contacts, but can be shared to a 3rd party
share items to other contacts
accept/decline invitations
enable/disable disappearing messages throughout the process
ensure that the invitation message to a shareable gets automatically declined and are recognizable as automatic for the contact that declines it

Test Scenario: Device A - writes a blog Device B is a direct contact of device A - they receive the blog directly. The blog entries cannot be 'self-destructing', only direct messages to direct contacts can. Device B is a direct contact of Device C. Disappearing messages = ON on both devices. Device B shares a blog wtih device C.