mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-26 14:09:58 +00:00
Add confirmation dialog when changing username would reset link.
This commit is contained in:
committed by
Cody Henthorne
parent
555ddb5b20
commit
47cdc50a81
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user