Add confirmation dialog when changing username would reset link.

This commit is contained in:
Greyson Parrelli
2024-02-13 11:00:50 -05:00
committed by Cody Henthorne
parent 555ddb5b20
commit 47cdc50a81
3 changed files with 24 additions and 5 deletions

View File

@@ -109,7 +109,7 @@ public class UsernameEditFragment extends LoggingFragment {
binding.usernameSubmitButton.setOnClickListener(v -> promptOrSubmitUsername());
binding.usernameDeleteButton.setOnClickListener(v -> viewModel.onUsernameDeleted());
binding.usernameDoneButton.setOnClickListener(v -> viewModel.onUsernameSubmitted());
binding.usernameDoneButton.setOnClickListener(v -> viewModel.onUsernameSubmitted(false));
binding.usernameSkipButton.setOnClickListener(v -> viewModel.onUsernameSkipped());
binding.usernameText.addTextChangedListener(new SimpleTextWatcher() {
@@ -156,13 +156,13 @@ public class UsernameEditFragment extends LoggingFragment {
new MaterialAlertDialogBuilder(requireContext())
.setMessage(R.string.UsernameEditFragment_recovery_dialog_confirmation)
.setPositiveButton(android.R.string.ok, ((dialog, which) -> {
viewModel.onUsernameSubmitted();
viewModel.onUsernameSubmitted(true);
dialog.dismiss();
}))
.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())
.show();
} else {
viewModel.onUsernameSubmitted();
viewModel.onUsernameSubmitted(false);
}
}
@@ -356,6 +356,12 @@ public class UsernameEditFragment extends LoggingFragment {
case SKIPPED:
closeScreen();
break;
case NEEDS_CONFIRM_RESET:
new MaterialAlertDialogBuilder(requireContext())
.setMessage(R.string.UsernameEditFragment_change_confirmation_message)
.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())
.setPositiveButton(R.string.UsernameEditFragment_continue, (dialog, which) -> viewModel.onUsernameSubmitted(true))
.show();
}
}

View File

@@ -12,6 +12,7 @@ import io.reactivex.rxjava3.kotlin.subscribeBy
import io.reactivex.rxjava3.schedulers.Schedulers
import io.reactivex.rxjava3.subjects.PublishSubject
import org.signal.core.util.Result
import org.signal.core.util.isNotNullOrBlank
import org.signal.core.util.logging.Log
import org.signal.libsignal.usernames.Username
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
@@ -128,7 +129,10 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
events.onNext(Event.SKIPPED)
}
fun onUsernameSubmitted() {
/**
* @param userConfirmedResetOk True if the user is submitting this after confirming that they're ok with resetting their username via [Event.NEEDS_CONFIRM_RESET].
*/
fun onUsernameSubmitted(userConfirmedResetOk: Boolean) {
if (!NetworkUtil.isConnected(ApplicationDependencies.getApplication())) {
events.onNext(Event.NETWORK_FAILURE)
return
@@ -138,6 +142,11 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
val usernameState = uiState.state.usernameState
val isCaseChange = isCaseChange(editState)
if (!isCaseChange && SignalStore.account().username.isNotNullOrBlank() && !userConfirmedResetOk) {
events.onNext(Event.NEEDS_CONFIRM_RESET)
return
}
if (usernameState !is UsernameState.Reserved && usernameState !is UsernameState.CaseChange) {
Log.w(TAG, "Username was submitted, current state is invalid! State: ${usernameState.javaClass.simpleName}")
uiState.update { it.copy(buttonState = ButtonState.SUBMIT_DISABLED, usernameStatus = UsernameStatus.NONE) }
@@ -365,7 +374,7 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
}
enum class Event {
NETWORK_FAILURE, SUBMIT_SUCCESS, DELETE_SUCCESS, SUBMIT_FAIL_INVALID, SUBMIT_FAIL_TAKEN, SKIPPED
NETWORK_FAILURE, SUBMIT_SUCCESS, DELETE_SUCCESS, SUBMIT_FAIL_INVALID, SUBMIT_FAIL_TAKEN, SKIPPED, NEEDS_CONFIRM_RESET
}
class Factory(private val mode: UsernameEditMode) : ViewModelProvider.Factory {