Update username to use . as delimiter.

This commit is contained in:
Alex Hart 2022-09-15 10:18:40 -03:00 committed by Greyson Parrelli
parent a457d1f569
commit c96fec9537
7 changed files with 26 additions and 7 deletions

View file

@ -93,10 +93,11 @@ class UsernameEditFragmentTest {
fun testNicknameUpdateHappyPath() {
val nickname = "Spiderman"
val discriminator = "4578"
val username = "$nickname${UsernameState.DELIMITER}$discriminator"
InstrumentationApplicationDependencyProvider.addMockWebRequestHandlers(
Put("/v1/accounts/username/reserved") {
MockResponse().success(ReserveUsernameResponse("$nickname#$discriminator", "reservationToken"))
MockResponse().success(ReserveUsernameResponse(username, "reservationToken"))
},
Put("/v1/accounts/username/confirm") {
MockResponse().success()
@ -119,6 +120,8 @@ class UsernameEditFragmentTest {
onView(withId(R.id.username_text)).perform(closeSoftKeyboard())
onView(withId(R.id.username_done_button)).check(matches(isDisplayed()))
onView(withId(R.id.username_done_button)).check(matches(isEnabled()))
onView(withText(username)).check(matches(isDisplayed()))
onView(withId(R.id.username_done_button)).perform(click())
computationScheduler.triggerActions()

View file

@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.conversation.colors.AvatarColor;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
import org.thoughtcrime.securesms.profiles.manage.UsernameState;
import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
@ -241,10 +242,10 @@ public class ContactSelectionListItem extends ConstraintLayout implements Recipi
}
private CharSequence presentUsername(@NonNull String username) {
if (username.contains("#")) {
if (username.contains(UsernameState.DELIMITER)) {
return username;
} else {
return new SpannableStringBuilder(username).append(SpanUtil.color(ContextCompat.getColor(getContext(), R.color.signal_colorOutline), "#"));
return new SpannableStringBuilder(username).append(SpanUtil.color(ContextCompat.getColor(getContext(), R.color.signal_colorOutline), UsernameState.DELIMITER));
}
}

View file

@ -168,6 +168,7 @@ public class UsernameEditFragment extends LoggingFragment {
presentSuffix(state.getUsername());
presentButtonState(state.getButtonState());
presentSummary(state.getUsername());
switch (state.getUsernameStatus()) {
case NONE:
@ -210,6 +211,14 @@ public class UsernameEditFragment extends LoggingFragment {
}
}
private void presentSummary(@NonNull UsernameState usernameState) {
if (usernameState.getUsername() != null) {
binding.summary.setText(usernameState.getUsername());
} else {
binding.summary.setText(R.string.UsernameEditFragment__choose_your_username);
}
}
private void presentRegistrationButtonState(@NonNull UsernameEditViewModel.ButtonState buttonState) {
binding.usernameText.setEnabled(true);
binding.usernameProgressCard.setVisibility(View.GONE);

View file

@ -261,7 +261,7 @@ class UsernameEditViewModel extends ViewModel {
NETWORK_FAILURE, SUBMIT_SUCCESS, DELETE_SUCCESS, SUBMIT_FAIL_INVALID, SUBMIT_FAIL_TAKEN, SKIPPED
}
static class Factory extends ViewModelProvider.NewInstanceFactory {
static class Factory implements ViewModelProvider.Factory {
private final boolean isInRegistration;

View file

@ -27,10 +27,14 @@ sealed class UsernameState {
) : UsernameState()
fun getNickname(): String? {
return username?.split('#')?.firstOrNull()
return username?.split(DELIMITER)?.firstOrNull()
}
fun getDiscriminator(): String? {
return username?.split('#')?.lastOrNull()
return username?.split(DELIMITER)?.lastOrNull()
}
companion object {
const val DELIMITER = "."
}
}

View file

@ -178,6 +178,7 @@ public final class FeatureFlags {
@SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
@VisibleForTesting
static final Map<String, Object> FORCED_VALUES = new HashMap<String, Object>() {{
put(USERNAMES, true);
}};
/**

View file

@ -31,7 +31,8 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:srcCompat="@drawable/ic_at_24" />
app:srcCompat="@drawable/ic_at_24"
app:tint="@color/signal_colorOnSurface" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/username_text_wrapper"