From b2e8b1ccc50c3616a1f710cbb0fd35b8bd168795 Mon Sep 17 00:00:00 2001 From: AL-Session <160798022+AL-Session@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:27:34 +1100 Subject: [PATCH] =?UTF-8?q?Set=20the=20recovery=20phrase=20as=20being=20vi?= =?UTF-8?q?ewed=20when=20the=20user=20has=20visited=20the=E2=80=A6=20(#846?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Set the recovery phrase as being viewed when the user has visited the RecoveryPasswordActivity * Fix scenario whereby permanently hiding the recovery phrase via the banner does not --------- Co-authored-by: alansley --- .../securesms/preferences/SettingsActivity.kt | 4 ++-- .../RecoveryPasswordActivity.kt | 17 ++++++++++++++++- .../RecoveryPasswordViewModel.kt | 4 +--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt index 9554787c48..5a7e53a395 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt @@ -130,7 +130,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { private val onPickImage = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ){ result -> - if (result.resultCode != Activity.RESULT_OK) return@registerForActivityResult + if (result.resultCode != RESULT_OK) return@registerForActivityResult val outputFile = Uri.fromFile(File(cacheDir, "cropped")) val inputFile: Uri? = result.data?.data ?: viewModel.getTempFile()?.let(Uri::fromFile) @@ -140,7 +140,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { private val hideRecoveryLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> - if (result.resultCode != Activity.RESULT_OK) return@registerForActivityResult + if (result.resultCode != RESULT_OK) return@registerForActivityResult if(result.data?.getBooleanExtra(RecoveryPasswordActivity.RESULT_RECOVERY_HIDDEN, false) == true){ viewModel.permanentlyHidePassword() diff --git a/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordActivity.kt index cc9630ef57..da92c5374a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordActivity.kt @@ -5,11 +5,14 @@ import android.os.Bundle import androidx.activity.viewModels import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject import network.loki.messenger.R +import org.session.libsession.utilities.TextSecurePreferences import org.thoughtcrime.securesms.BaseActionBarActivity import org.thoughtcrime.securesms.ui.setComposeContent - +@AndroidEntryPoint class RecoveryPasswordActivity : BaseActionBarActivity() { companion object { @@ -18,6 +21,8 @@ class RecoveryPasswordActivity : BaseActionBarActivity() { private val viewModel: RecoveryPasswordViewModel by viewModels() + @Inject lateinit var prefs: TextSecurePreferences + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportActionBar!!.title = resources.getString(R.string.sessionRecoveryPassword) @@ -33,10 +38,20 @@ class RecoveryPasswordActivity : BaseActionBarActivity() { val returnIntent = Intent() returnIntent.putExtra(RESULT_RECOVERY_HIDDEN, true) setResult(RESULT_OK, returnIntent) + + // The returnIntent assumes we're going back to the SettingsActivity, which handles the result - but + // if we entered this activity through the recovery phrase banner then we're going back to the + // HomeActivity, which does not. As such we'll write the change here to cover all our bases. + prefs.setHidePassword(true) + finish() }, copyMnemonic = viewModel::copyMnemonic ) } + + // Set the seed as having been viewed when the user has seen this activity, which + // removes the reminder banner on the HomeActivity. + prefs.setHasViewedSeed(true) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordViewModel.kt index b159accf23..817859b14c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recoverypassword/RecoveryPasswordViewModel.kt @@ -7,21 +7,19 @@ import android.content.Context import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import org.session.libsession.utilities.AppTextSecurePreferences -import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.crypto.MnemonicCodec import org.session.libsignal.utilities.hexEncodedPrivateKey import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.MnemonicUtilities -import javax.inject.Inject @HiltViewModel class RecoveryPasswordViewModel @Inject constructor(