| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.ui.GetString
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kotlin.time.Duration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kotlin.time.Duration.Companion.days
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kotlin.time.Duration.Companion.hours
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kotlin.time.Duration.Companion.minutes
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				private const val THREAD_ID = 1L
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -204,9 +205,67 @@ class ExpirationSettingsViewModelTest {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private fun newExpirationConfiguration(time: Duration? = null) = ExpirationConfiguration(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    @Test
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    fun `1-1 conversation, 1 day after read, new config`() = runTest {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val time = 1.days
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val someAddress = Address.fromSerialized("05---SOME---ADDRESS")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val config = newExpirationConfiguration(time, ExpiryType.AFTER_READ)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        whenever(threadDb.getRecipientForThreadId(Mockito.anyLong())).thenReturn(recipient)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        whenever(storage.getExpirationConfiguration(Mockito.anyLong())).thenReturn(config)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        whenever(textSecurePreferences.getLocalNumber()).thenReturn("05---LOCAL---ADDRESS")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        whenever(recipient.isClosedGroupRecipient).thenReturn(false)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        whenever(recipient.address).thenReturn(someAddress)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val viewModel = createViewModel()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        advanceUntilIdle()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        assertThat(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            viewModel.state.value
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        ).isEqualTo(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            State(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isGroup = false,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isSelfAdmin = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                address = someAddress,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isNoteToSelf = false,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                expiryMode = ExpiryMode.AfterRead(1.days.inWholeSeconds),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isNewConfigEnabled = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                persistedMode = ExpiryMode.AfterRead(1.days.inWholeSeconds),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                showDebugOptions = false
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val newTypeOption = TypeOptionCreator(time)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        val newTimeOption = TimeOptionCreator(ExpiryType.AFTER_READ)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        assertThat(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            viewModel.uiState.value
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        ).isEqualTo(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            UiState(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                showGroupFooter = false,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                CardModel(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    R.string.activity_expiration_settings_delete_type,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTypeOption(ExpiryType.NONE),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    typeOption(1.days, ExpiryType.AFTER_READ, selected = true),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTypeOption(ExpiryType.AFTER_SEND)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                ),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                CardModel(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    GetString(R.string.activity_expiration_settings_timer),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 5.minutes),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 1.hours),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 12.hours),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 1.days, selected = true),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 7.days),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    newTimeOption(duration = 14.days)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private fun newExpirationConfiguration(time: Duration? = null, type: ExpiryType = ExpiryType.AFTER_SEND) = ExpirationConfiguration(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        threadId = THREAD_ID,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        expiryMode = time?.inWholeSeconds?.let(ExpiryMode::AfterSend) ?: ExpiryMode.NONE,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        expiryMode = time?.inWholeSeconds?.let(type::mode) ?: ExpiryMode.NONE,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        updatedTimestampMs = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |