diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 853ea69d7117e5c51187e8f22d15fabdfcc91357..de394197fd26e8b8ce277ecb9bd31dc7d09fdc11 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -8,6 +8,7 @@ <string name="choose_password">Choose your password:</string> <string name="confirm_password">Confirm your password:</string> <string name="format_min_password">Password must be at least %1$d characters long</string> + <string name="passwords_do_not_match">Passwords do not match</string> <string name="enter_password">Enter your password:</string> <string name="try_again">Wrong password, try again:</string> <string name="expiry_warning">This software has expired.\nPlease install a newer version.</string> diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java index ef488ff66ea3c3b699771ffc446b6dd402752799..f5b3c227f2a832580aa17c94ce244ce777f68fff 100644 --- a/briar-android/src/org/briarproject/android/SetupActivity.java +++ b/briar-android/src/org/briarproject/android/SetupActivity.java @@ -26,10 +26,12 @@ import org.briarproject.api.crypto.CryptoExecutor; import org.briarproject.api.crypto.KeyPair; import org.briarproject.api.db.DatabaseConfig; import org.briarproject.util.StringUtils; + import roboguice.activity.RoboActivity; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.content.res.Resources; import android.os.Bundle; import android.text.Editable; import android.view.View; @@ -48,6 +50,7 @@ public class SetupActivity extends RoboActivity implements OnClickListener { @Inject @CryptoExecutor private Executor cryptoExecutor; private EditText nicknameEntry = null; private EditText passwordEntry = null, passwordConfirmation = null; + private TextView feedback = null; private Button continueButton = null; private ProgressBar progress = null; @@ -125,13 +128,13 @@ public class SetupActivity extends RoboActivity implements OnClickListener { passwordConfirmation.setInputType(inputType); layout.addView(passwordConfirmation); - TextView minPasswordLength = new TextView(this); - minPasswordLength.setGravity(CENTER); - minPasswordLength.setTextSize(14); - minPasswordLength.setPadding(10, 10, 10, 10); + feedback = new TextView(this); + feedback.setGravity(CENTER); + feedback.setTextSize(14); + feedback.setPadding(10, 10, 10, 10); String format = getResources().getString(R.string.format_min_password); - minPasswordLength.setText(String.format(format, MIN_PASSWORD_LENGTH)); - layout.addView(minPasswordLength); + feedback.setText(String.format(format, MIN_PASSWORD_LENGTH)); + layout.addView(feedback); continueButton = new Button(this); continueButton.setLayoutParams(WRAP_WRAP); @@ -142,6 +145,7 @@ public class SetupActivity extends RoboActivity implements OnClickListener { progress = new ProgressBar(this); progress.setLayoutParams(WRAP_WRAP); + progress.setPadding(0, 10, 0, 0); progress.setIndeterminate(true); progress.setVisibility(GONE); layout.addView(progress); @@ -162,6 +166,15 @@ public class SetupActivity extends RoboActivity implements OnClickListener { boolean passwordsMatch = Arrays.equals(firstPassword, secondPassword); for(int i = 0; i < firstPassword.length; i++) firstPassword[i] = 0; for(int i = 0; i < secondPassword.length; i++) secondPassword[i] = 0; + if(!passwordLength) { + Resources res = getResources(); + String format = res.getString(R.string.format_min_password); + feedback.setText(String.format(format, MIN_PASSWORD_LENGTH)); + } else if(!passwordsMatch) { + feedback.setText(R.string.passwords_do_not_match); + } else { + feedback.setText(""); + } boolean valid = nicknameNotEmpty && passwordLength && passwordsMatch; continueButton.setEnabled(valid); } @@ -174,13 +187,15 @@ public class SetupActivity extends RoboActivity implements OnClickListener { } public void onClick(View view) { + // Replace the feedback text and button with a progress bar + feedback.setVisibility(GONE); + continueButton.setVisibility(GONE); + progress.setVisibility(VISIBLE); + // Copy the passwords and erase the originals final String nickname = nicknameEntry.getText().toString(); final char[] password = getChars(passwordEntry.getText()); delete(passwordEntry.getText()); delete(passwordConfirmation.getText()); - // Replace the button with a progress bar - continueButton.setVisibility(GONE); - progress.setVisibility(VISIBLE); // Store the DB key and create the identity in a background thread cryptoExecutor.execute(new Runnable() { public void run() {