From a0031298d86e4f56310d50191685b431172fe7c7 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 24 Jan 2022 17:32:39 -0500 Subject: [PATCH] Disallow visually-empty profile names. --- .../securesms/profiles/manage/EditProfileNameFragment.java | 4 ++-- .../securesms/profiles/manage/EditProfileNameViewModel.java | 6 ++++-- .../java/org/thoughtcrime/securesms/util/StringUtil.java | 5 ++++- .../securesms/util/StringUtilTest_whitespace_handling.java | 2 ++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameFragment.java index bcbdfeb113..ddab6a558b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameFragment.java @@ -53,7 +53,7 @@ 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()); + viewModel.onGivenNameChanged(this.givenName.getText().toString()); view.findViewById(R.id.toolbar) .setNavigationOnClickListener(v -> Navigation.findNavController(view) @@ -64,7 +64,7 @@ public class EditProfileNameFragment extends Fragment { this.givenName.addTextChangedListener(new AfterTextChanged(s -> { trimFieldToMaxByteLength(s); - viewModel.onGivenNameLengthChanged(s.length()); + viewModel.onGivenNameChanged(s.toString()); })); this.familyName.addTextChangedListener(new AfterTextChanged(EditProfileNameFragment::trimFieldToMaxByteLength)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java index fa85f859ed..1d4b561171 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.profiles.manage; import android.content.Context; +import android.text.Editable; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; @@ -9,6 +10,7 @@ import androidx.lifecycle.ViewModel; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.util.SingleLiveEvent; +import org.thoughtcrime.securesms.util.StringUtil; public final class EditProfileNameViewModel extends ViewModel { @@ -22,8 +24,8 @@ public final class EditProfileNameViewModel extends ViewModel { this.events = new SingleLiveEvent<>(); } - void onGivenNameLengthChanged(int length) { - if (length <= 0) { + void onGivenNameChanged(@NonNull String text) { + if (StringUtil.isVisuallyEmpty(text.toString())) { saveState.setValue(SaveState.DISABLED); } else { saveState.setValue(SaveState.IDLE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/StringUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/StringUtil.java index 21337c2348..4e244d5d46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/StringUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/StringUtil.java @@ -17,7 +17,10 @@ public final class StringUtil { private static final Set WHITESPACE = SetUtil.newHashSet('\u200E', // left-to-right mark '\u200F', // right-to-left mark - '\u2007'); // figure space + '\u2007', // figure space + '\u200B', // zero-width space + '\u2800'); // braille blank + private static final class Bidi { /** Override text direction */ diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_whitespace_handling.java b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_whitespace_handling.java index dbaae6ad61..145067baed 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_whitespace_handling.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_whitespace_handling.java @@ -30,6 +30,8 @@ public final class StringUtilTest_whitespace_handling { { "\u200E", "", true }, { "\u200F", "", true }, { "\u2007", "", true }, + { "\u200B", "", true }, + { "\u2800", "", true }, { "\u2007\u200FA\tB\u200EC\u200E\u200F", "A\tB\u200EC", false }, });