diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
index 73fb7a8784..3b79b78429 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.registration.fragments;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.InputType;
-import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -35,6 +34,9 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
private static final String TAG = Log.tag(RegistrationLockFragment.class);
+ /** Applies to both V1 and V2 pins, because some V2 pins may have been migrated from V1. */
+ private static final int MINIMUM_PIN_LENGTH = 4;
+
private EditText pinEntry;
private View forgotPin;
private CircularProgressButton pinButton;
@@ -129,11 +131,17 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
private void handlePinEntry() {
final String pin = pinEntry.getText().toString();
- if (TextUtils.isEmpty(pin) || TextUtils.isEmpty(pin.replace(" ", ""))) {
+ int trimmedLength = pin.replace(" ", "").length();
+ if (trimmedLength == 0) {
Toast.makeText(requireContext(), R.string.RegistrationActivity_you_must_enter_your_registration_lock_PIN, Toast.LENGTH_LONG).show();
return;
}
+ if (trimmedLength < MINIMUM_PIN_LENGTH) {
+ Toast.makeText(requireContext(), getString(R.string.RegistrationActivity_your_pin_has_at_least_d_digits_or_characters, MINIMUM_PIN_LENGTH), Toast.LENGTH_LONG).show();
+ return;
+ }
+
RegistrationViewModel model = getModel();
RegistrationService registrationService = RegistrationService.getInstance(model.getNumber().getE164Number(), model.getRegistrationSecret());
TokenResponse tokenResponse = model.getKeyBackupCurrentToken();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6f270e44a0..e74e0b6606 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1866,6 +1866,7 @@
Registration Lock PIN
Registration Lock
You must enter your Registration Lock PIN
+ Your pin has at least %d digits or characters
Incorrect Registration Lock PIN
Too many attempts
You\'ve made too many incorrect Registration Lock PIN attempts. Please try again in a day.