Remove unused 'registration' variant of username screen.
This commit is contained in:
parent
57ac7cb328
commit
f484fdbbac
8 changed files with 35 additions and 175 deletions
|
@ -57,23 +57,6 @@ class UsernameEditFragmentTest {
|
||||||
InstrumentationApplicationDependencyProvider.clearHandlers()
|
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.")
|
@Ignore("Flakey espresso test.")
|
||||||
@Test
|
@Test
|
||||||
fun testUsernameCreationOutsideOfRegistration() {
|
fun testUsernameCreationOutsideOfRegistration() {
|
||||||
|
@ -108,7 +91,7 @@ class UsernameEditFragmentTest {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
val scenario = createScenario(UsernameEditMode.REGISTRATION)
|
val scenario = createScenario(UsernameEditMode.NORMAL)
|
||||||
scenario.moveToState(Lifecycle.State.RESUMED)
|
scenario.moveToState(Lifecycle.State.RESUMED)
|
||||||
|
|
||||||
onView(withId(R.id.username_text)).perform(typeText(nickname))
|
onView(withId(R.id.username_text)).perform(typeText(nickname))
|
||||||
|
|
|
@ -976,11 +976,6 @@
|
||||||
android:windowSoftInputMode="stateVisible|adjustResize"
|
android:windowSoftInputMode="stateVisible|adjustResize"
|
||||||
android:exported="false"/>
|
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"
|
<activity android:name=".profiles.manage.EditProfileActivity"
|
||||||
android:theme="@style/TextSecure.LightTheme"
|
android:theme="@style/TextSecure.LightTheme"
|
||||||
android:windowSoftInputMode="stateVisible|adjustResize"
|
android:windowSoftInputMode="stateVisible|adjustResize"
|
||||||
|
|
|
@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.profiles.manage;
|
||||||
|
|
||||||
import android.animation.LayoutTransition;
|
import android.animation.LayoutTransition;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -15,7 +14,6 @@ import android.widget.Toast;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.navigation.Navigation;
|
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.EditTextUtil;
|
||||||
import org.signal.core.util.concurrent.LifecycleDisposable;
|
import org.signal.core.util.concurrent.LifecycleDisposable;
|
||||||
import org.thoughtcrime.securesms.LoggingFragment;
|
import org.thoughtcrime.securesms.LoggingFragment;
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
|
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
|
||||||
import org.thoughtcrime.securesms.databinding.UsernameEditFragmentBinding;
|
import org.thoughtcrime.securesms.databinding.UsernameEditFragmentBinding;
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
|
||||||
import org.thoughtcrime.securesms.util.FragmentResultContract;
|
import org.thoughtcrime.securesms.util.FragmentResultContract;
|
||||||
import org.thoughtcrime.securesms.util.UsernameUtil;
|
import org.thoughtcrime.securesms.util.UsernameUtil;
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
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 String IGNORE_TEXT_CHANGE_EVENT = "ignore.text.change.event";
|
||||||
|
|
||||||
public static final int REQUEST_CODE = 4242;
|
public static final int REQUEST_CODE = 4242;
|
||||||
public static final String EXTRA_USERNAME = "username";
|
|
||||||
|
|
||||||
private UsernameEditViewModel viewModel;
|
private UsernameEditViewModel viewModel;
|
||||||
private UsernameEditFragmentBinding binding;
|
private UsernameEditFragmentBinding binding;
|
||||||
|
@ -80,12 +75,6 @@ public class UsernameEditFragment extends LoggingFragment {
|
||||||
args = new UsernameEditFragmentArgs.Builder().build();
|
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 -> {
|
binding.toolbar.setNavigationOnClickListener(v -> {
|
||||||
if (args.getMode() == UsernameEditMode.RECOVERY) {
|
if (args.getMode() == UsernameEditMode.RECOVERY) {
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
|
@ -94,7 +83,6 @@ public class UsernameEditFragment extends LoggingFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
binding.usernameSubmitButton.setVisibility(View.VISIBLE);
|
binding.usernameSubmitButton.setVisibility(View.VISIBLE);
|
||||||
}
|
|
||||||
|
|
||||||
binding.usernameTextWrapper.setErrorIconDrawable(null);
|
binding.usernameTextWrapper.setErrorIconDrawable(null);
|
||||||
|
|
||||||
|
@ -211,47 +199,6 @@ public class UsernameEditFragment extends LoggingFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void presentButtonState(@NonNull UsernameEditViewModel.ButtonState buttonState) {
|
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 submitButton = binding.usernameSubmitButton;
|
||||||
CircularProgressMaterialButton deleteButton = binding.usernameDeleteButton;
|
CircularProgressMaterialButton deleteButton = binding.usernameDeleteButton;
|
||||||
EditText usernameInput = binding.usernameText;
|
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) {
|
private void presentUsernameInputState(@NonNull UsernameEditStateMachine.State state) {
|
||||||
binding.usernameText.setTag(IGNORE_TEXT_CHANGE_EVENT);
|
binding.usernameText.setTag(IGNORE_TEXT_CHANGE_EVENT);
|
||||||
String nickname = state.getNickname();
|
String nickname = state.getNickname();
|
||||||
|
@ -366,34 +323,13 @@ public class UsernameEditFragment extends LoggingFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeScreen() {
|
private void closeScreen() {
|
||||||
if (args.getMode() == UsernameEditMode.REGISTRATION) {
|
if (args.getMode() == UsernameEditMode.RECOVERY) {
|
||||||
finishAndStartNextIntent();
|
|
||||||
} else if (args.getMode() == UsernameEditMode.RECOVERY) {
|
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
} else {
|
} else {
|
||||||
NavHostFragment.findNavController(this).popBackStack();
|
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> {
|
static class ResultContract extends FragmentResultContract<Boolean> {
|
||||||
private static final String REQUEST_KEY = "username_created";
|
private static final String REQUEST_KEY = "username_created";
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,6 @@ enum class UsernameEditMode {
|
||||||
/** A typical launch, no special conditions. */
|
/** A typical launch, no special conditions. */
|
||||||
NORMAL,
|
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. */
|
/** Screen was launched because the username was in a bad state and needs to be recovered. Shows a special dialog. */
|
||||||
RECOVERY;
|
RECOVERY
|
||||||
|
|
||||||
val allowsDelete get() = this == NORMAL || this == RECOVERY
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
|
||||||
uiState.update { state: State ->
|
uiState.update { state: State ->
|
||||||
if (nickname.isBlank() && SignalStore.account().username != null) {
|
if (nickname.isBlank() && SignalStore.account().username != null) {
|
||||||
return@update State(
|
return@update State(
|
||||||
buttonState = if (mode.allowsDelete) ButtonState.DELETE else ButtonState.SUBMIT_DISABLED,
|
buttonState = ButtonState.DELETE,
|
||||||
usernameStatus = UsernameStatus.NONE,
|
usernameStatus = UsernameStatus.NONE,
|
||||||
usernameState = UsernameState.NoUsername
|
usernameState = UsernameState.NoUsername
|
||||||
)
|
)
|
||||||
|
@ -106,7 +106,7 @@ internal class UsernameEditViewModel private constructor(private val mode: Usern
|
||||||
uiState.update { state: State ->
|
uiState.update { state: State ->
|
||||||
if (discriminator.isBlank() && SignalStore.account().username != null) {
|
if (discriminator.isBlank() && SignalStore.account().username != null) {
|
||||||
return@update State(
|
return@update State(
|
||||||
buttonState = if (mode.allowsDelete) ButtonState.DELETE else ButtonState.SUBMIT_DISABLED,
|
buttonState = ButtonState.DELETE,
|
||||||
usernameStatus = UsernameStatus.NONE,
|
usernameStatus = UsernameStatus.NONE,
|
||||||
usernameState = UsernameState.NoUsername
|
usernameState = UsernameState.NoUsername
|
||||||
)
|
)
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -585,7 +585,7 @@
|
||||||
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_direct_to_usernameRecovery"
|
android:id="@+id/action_direct_to_usernameRecovery"
|
||||||
app:destination="@id/create_username"
|
app:destination="@id/createUsernameFragment"
|
||||||
app:enterAnim="@anim/fragment_open_enter"
|
app:enterAnim="@anim/fragment_open_enter"
|
||||||
app:exitAnim="@anim/fragment_open_exit"
|
app:exitAnim="@anim/fragment_open_exit"
|
||||||
app:popEnterAnim="@anim/fragment_close_enter"
|
app:popEnterAnim="@anim/fragment_close_enter"
|
||||||
|
@ -936,9 +936,18 @@
|
||||||
|
|
||||||
</fragment>
|
</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/username_link_settings" />
|
||||||
<include app:graph="@navigation/create_username" />
|
|
||||||
<include app:graph="@navigation/story_privacy_settings" />
|
<include app:graph="@navigation/story_privacy_settings" />
|
||||||
|
|
||||||
</navigation>
|
</navigation>
|
|
@ -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>
|
|
Loading…
Add table
Reference in a new issue