Remove unused 'registration' variant of username screen.

This commit is contained in:
Greyson Parrelli 2024-02-13 14:13:22 -05:00 committed by Cody Henthorne
parent 57ac7cb328
commit f484fdbbac
8 changed files with 35 additions and 175 deletions

View file

@ -57,23 +57,6 @@ class UsernameEditFragmentTest {
InstrumentationApplicationDependencyProvider.clearHandlers()
}
@Test
fun testUsernameCreationInRegistration() {
val scenario = createScenario(UsernameEditMode.REGISTRATION)
scenario.moveToState(Lifecycle.State.RESUMED)
onView(withId(R.id.toolbar)).check { view, noViewFoundException ->
noViewFoundException.assertIsNull()
val toolbar = view as Toolbar
toolbar.navigationIcon.assertIsNull()
}
onView(withText(R.string.UsernameEditFragment__add_a_username)).check(matches(isDisplayed()))
onView(withContentDescription(R.string.load_more_header__loading)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
}
@Ignore("Flakey espresso test.")
@Test
fun testUsernameCreationOutsideOfRegistration() {
@ -108,7 +91,7 @@ class UsernameEditFragmentTest {
}
)
val scenario = createScenario(UsernameEditMode.REGISTRATION)
val scenario = createScenario(UsernameEditMode.NORMAL)
scenario.moveToState(Lifecycle.State.RESUMED)
onView(withId(R.id.username_text)).perform(typeText(nickname))

View file

@ -976,11 +976,6 @@
android:windowSoftInputMode="stateVisible|adjustResize"
android:exported="false"/>
<activity android:name=".profiles.username.AddAUsernameActivity"
android:theme="@style/Signal.DayNight.NoActionBar"
android:windowSoftInputMode="stateVisible|adjustResize"
android:exported="false"/>
<activity android:name=".profiles.manage.EditProfileActivity"
android:theme="@style/TextSecure.LightTheme"
android:windowSoftInputMode="stateVisible|adjustResize"

View file

@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.profiles.manage;
import android.animation.LayoutTransition;
import android.app.Activity;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -15,7 +14,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation;
@ -27,11 +25,9 @@ import com.google.android.material.textfield.TextInputLayout;
import org.signal.core.util.EditTextUtil;
import org.signal.core.util.concurrent.LifecycleDisposable;
import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
import org.thoughtcrime.securesms.databinding.UsernameEditFragmentBinding;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.util.FragmentResultContract;
import org.thoughtcrime.securesms.util.UsernameUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
@ -43,7 +39,6 @@ public class UsernameEditFragment extends LoggingFragment {
public static final String IGNORE_TEXT_CHANGE_EVENT = "ignore.text.change.event";
public static final int REQUEST_CODE = 4242;
public static final String EXTRA_USERNAME = "username";
private UsernameEditViewModel viewModel;
private UsernameEditFragmentBinding binding;
@ -80,12 +75,6 @@ public class UsernameEditFragment extends LoggingFragment {
args = new UsernameEditFragmentArgs.Builder().build();
}
if (args.getMode() == UsernameEditMode.REGISTRATION) {
binding.toolbar.setNavigationIcon(null);
binding.toolbar.setTitle(R.string.UsernameEditFragment__add_a_username);
binding.usernameSkipButton.setVisibility(View.VISIBLE);
binding.usernameDoneButton.setVisibility(View.VISIBLE);
} else {
binding.toolbar.setNavigationOnClickListener(v -> {
if (args.getMode() == UsernameEditMode.RECOVERY) {
getActivity().finish();
@ -94,7 +83,6 @@ public class UsernameEditFragment extends LoggingFragment {
}
});
binding.usernameSubmitButton.setVisibility(View.VISIBLE);
}
binding.usernameTextWrapper.setErrorIconDrawable(null);
@ -211,47 +199,6 @@ public class UsernameEditFragment extends LoggingFragment {
}
private void presentButtonState(@NonNull UsernameEditViewModel.ButtonState buttonState) {
if (args.getMode() == UsernameEditMode.REGISTRATION) {
presentRegistrationButtonState(buttonState);
} else {
presentProfileUpdateButtonState(buttonState);
}
}
private void presentSummary(@NonNull UsernameState usernameState) {
if (usernameState.getUsername() != null) {
binding.summary.setText(usernameState.getUsername().getUsername());
binding.summary.setAlpha(1f);
} else if (!(usernameState instanceof UsernameState.Loading)) {
binding.summary.setText(R.string.UsernameEditFragment__choose_your_username);
binding.summary.setAlpha(1f);
}
}
private void presentRegistrationButtonState(@NonNull UsernameEditViewModel.ButtonState buttonState) {
binding.usernameText.setEnabled(true);
binding.usernameProgressCard.setVisibility(View.GONE);
switch (buttonState) {
case SUBMIT:
binding.usernameDoneButton.setEnabled(true);
binding.usernameDoneButton.setAlpha(1f);
break;
case SUBMIT_DISABLED:
binding.usernameDoneButton.setEnabled(false);
binding.usernameDoneButton.setAlpha(DISABLED_ALPHA);
break;
case SUBMIT_LOADING:
binding.usernameDoneButton.setEnabled(false);
binding.usernameDoneButton.setAlpha(DISABLED_ALPHA);
binding.usernameProgressCard.setVisibility(View.VISIBLE);
break;
default:
throw new IllegalStateException("Delete functionality is not available during registration.");
}
}
private void presentProfileUpdateButtonState(@NonNull UsernameEditViewModel.ButtonState buttonState) {
CircularProgressMaterialButton submitButton = binding.usernameSubmitButton;
CircularProgressMaterialButton deleteButton = binding.usernameDeleteButton;
EditText usernameInput = binding.usernameText;
@ -303,6 +250,16 @@ public class UsernameEditFragment extends LoggingFragment {
}
}
private void presentSummary(@NonNull UsernameState usernameState) {
if (usernameState.getUsername() != null) {
binding.summary.setText(usernameState.getUsername().getUsername());
binding.summary.setAlpha(1f);
} else if (!(usernameState instanceof UsernameState.Loading)) {
binding.summary.setText(R.string.UsernameEditFragment__choose_your_username);
binding.summary.setAlpha(1f);
}
}
private void presentUsernameInputState(@NonNull UsernameEditStateMachine.State state) {
binding.usernameText.setTag(IGNORE_TEXT_CHANGE_EVENT);
String nickname = state.getNickname();
@ -366,34 +323,13 @@ public class UsernameEditFragment extends LoggingFragment {
}
private void closeScreen() {
if (args.getMode() == UsernameEditMode.REGISTRATION) {
finishAndStartNextIntent();
} else if (args.getMode() == UsernameEditMode.RECOVERY) {
if (args.getMode() == UsernameEditMode.RECOVERY) {
getActivity().finish();
} else {
NavHostFragment.findNavController(this).popBackStack();
}
}
private void finishAndStartNextIntent() {
FragmentActivity activity = requireActivity();
boolean didLaunch = false;
Intent activityIntent = activity.getIntent();
if (activityIntent != null) {
Intent nextIntent = activityIntent.getParcelableExtra(PassphraseRequiredActivity.NEXT_INTENT_EXTRA);
if (nextIntent != null) {
activity.startActivity(nextIntent);
activity.finish();
didLaunch = true;
}
}
if (!didLaunch) {
activity.finish();
}
}
static class ResultContract extends FragmentResultContract<Boolean> {
private static final String REQUEST_KEY = "username_created";

View file

@ -9,11 +9,6 @@ enum class UsernameEditMode {
/** A typical launch, no special conditions. */
NORMAL,
/** Screen is launched during registration, includes special first-time flows. */
REGISTRATION,
/** Screen was launched because the username was in a bad state and needs to be recovered. Shows a special dialog. */
RECOVERY;
val allowsDelete get() = this == NORMAL || this == RECOVERY
RECOVERY
}

View file

@ -84,7 +84,7 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
uiState.update { state: State ->
if (nickname.isBlank() && SignalStore.account().username != null) {
return@update State(
buttonState = if (mode.allowsDelete) ButtonState.DELETE else ButtonState.SUBMIT_DISABLED,
buttonState = ButtonState.DELETE,
usernameStatus = UsernameStatus.NONE,
usernameState = UsernameState.NoUsername
)
@ -106,7 +106,7 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
uiState.update { state: State ->
if (discriminator.isBlank() && SignalStore.account().username != null) {
return@update State(
buttonState = if (mode.allowsDelete) ButtonState.DELETE else ButtonState.SUBMIT_DISABLED,
buttonState = ButtonState.DELETE,
usernameStatus = UsernameStatus.NONE,
usernameState = UsernameState.NoUsername
)

View file

@ -1,38 +0,0 @@
package org.thoughtcrime.securesms.profiles.username
import android.os.Bundle
import androidx.navigation.fragment.NavHostFragment
import org.thoughtcrime.securesms.BaseActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.profiles.manage.UsernameEditFragmentArgs
import org.thoughtcrime.securesms.profiles.manage.UsernameEditMode
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
import org.thoughtcrime.securesms.util.DynamicTheme
class AddAUsernameActivity : BaseActivity() {
private val dynamicTheme: DynamicTheme = DynamicNoActionBarTheme()
private val contentViewId: Int = R.layout.fragment_container
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(contentViewId)
dynamicTheme.onCreate(this)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(
R.id.fragment_container,
NavHostFragment.create(
R.navigation.create_username,
UsernameEditFragmentArgs.Builder().setMode(UsernameEditMode.REGISTRATION).build().toBundle()
)
)
.commit()
}
}
override fun onResume() {
super.onResume()
dynamicTheme.onResume(this)
}
}

View file

@ -585,7 +585,7 @@
<action
android:id="@+id/action_direct_to_usernameRecovery"
app:destination="@id/create_username"
app:destination="@id/createUsernameFragment"
app:enterAnim="@anim/fragment_open_enter"
app:exitAnim="@anim/fragment_open_exit"
app:popEnterAnim="@anim/fragment_close_enter"
@ -936,9 +936,18 @@
</fragment>
<fragment
android:id="@+id/createUsernameFragment"
android:name="org.thoughtcrime.securesms.profiles.manage.UsernameEditFragment"
tools:layout="@layout/username_edit_fragment">
<argument
android:name="mode"
android:defaultValue="NORMAL"
app:argType="org.thoughtcrime.securesms.profiles.manage.UsernameEditMode" />
</fragment>
<include app:graph="@navigation/username_link_settings" />
<include app:graph="@navigation/create_username" />
<include app:graph="@navigation/story_privacy_settings" />
</navigation>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/create_username"
app:startDestination="@id/createUsernameFragment">
<fragment
android:id="@+id/createUsernameFragment"
android:name="org.thoughtcrime.securesms.profiles.manage.UsernameEditFragment"
tools:layout="@layout/username_edit_fragment">
<argument
android:name="mode"
android:defaultValue="NORMAL"
app:argType="org.thoughtcrime.securesms.profiles.manage.UsernameEditMode" />
</fragment>
</navigation>