Do not allow profile given names to be empty when editing.

This commit is contained in:
Greyson Parrelli 2021-05-12 15:29:35 -04:00
parent 80c911e118
commit 9640f3f215
2 changed files with 42 additions and 2 deletions

View file

@ -5,6 +5,7 @@ import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.Toast;
@ -56,6 +57,8 @@ public class EditProfileNameFragment extends Fragment {
this.givenName.setText(Recipient.self().getProfileName().getGivenName());
this.familyName.setText(Recipient.self().getProfileName().getFamilyName());
viewModel.onGivenNameLengthChanged(this.givenName.getText().length());
view.<Toolbar>findViewById(R.id.toolbar)
.setNavigationOnClickListener(v -> Navigation.findNavController(view)
.popBackStack());
@ -63,7 +66,10 @@ public class EditProfileNameFragment extends Fragment {
EditTextUtil.addGraphemeClusterLimitFilter(givenName, NAME_MAX_GLYPHS);
EditTextUtil.addGraphemeClusterLimitFilter(familyName, NAME_MAX_GLYPHS);
this.givenName.addTextChangedListener(new AfterTextChanged(EditProfileNameFragment::trimFieldToMaxByteLength));
this.givenName.addTextChangedListener(new AfterTextChanged(s -> {
trimFieldToMaxByteLength(s);
viewModel.onGivenNameLengthChanged(s.length());
}));
this.familyName.addTextChangedListener(new AfterTextChanged(EditProfileNameFragment::trimFieldToMaxByteLength));
saveButton.setOnClickListener(v -> viewModel.onSaveClicked(requireContext(),
@ -80,19 +86,34 @@ public class EditProfileNameFragment extends Fragment {
private void presentSaveState(@NonNull EditProfileNameViewModel.SaveState state) {
switch (state) {
case DISABLED:
saveButton.setClickable(false);
saveButton.setAlpha(0.5f);
setEditTextEnabled(givenName, true);
setEditTextEnabled(familyName, true);
break;
case IDLE:
saveButton.setClickable(true);
saveButton.setIndeterminateProgressMode(false);
saveButton.setProgress(0);
saveButton.setAlpha(1);
setEditTextEnabled(givenName, true);
setEditTextEnabled(familyName, true);
break;
case IN_PROGRESS:
saveButton.setClickable(false);
saveButton.setIndeterminateProgressMode(true);
saveButton.setProgress(50);
saveButton.setAlpha(1);
setEditTextEnabled(givenName, false);
setEditTextEnabled(familyName, false);
break;
case DONE:
saveButton.setClickable(false);
Navigation.findNavController(requireView()).popBackStack();
saveButton.setAlpha(1);
setEditTextEnabled(givenName, false);
setEditTextEnabled(familyName, false);
break;
}
}
@ -114,4 +135,15 @@ public class EditProfileNameFragment extends Fragment {
s.delete(trimmedLength, s.length());
}
}
private static void setEditTextEnabled(@NonNull EditText text, boolean enabled) {
text.setEnabled(enabled);
text.setFocusable(enabled);
if (enabled) {
text.setInputType(EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME);
} else {
text.clearFocus();
text.setInputType(EditorInfo.TYPE_NULL);
}
}
}

View file

@ -22,6 +22,14 @@ public final class EditProfileNameViewModel extends ViewModel {
this.events = new SingleLiveEvent<>();
}
void onGivenNameLengthChanged(int length) {
if (length <= 0) {
saveState.setValue(SaveState.DISABLED);
} else {
saveState.setValue(SaveState.IDLE);
}
}
@NonNull LiveData<SaveState> getSaveState() {
return saveState;
}
@ -46,7 +54,7 @@ public final class EditProfileNameViewModel extends ViewModel {
}
enum SaveState {
IDLE, IN_PROGRESS, DONE
IDLE, IN_PROGRESS, DONE, DISABLED
}
enum Event {