Update username to use . as delimiter.
This commit is contained in:
parent
a457d1f569
commit
c96fec9537
7 changed files with 26 additions and 7 deletions
|
@ -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()
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 = "."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue