From c90a72617efa7e9428b1886402570850c18568cc Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Sep 2018 18:02:21 -0300 Subject: [PATCH 1/5] Do not create two accounts when pressing enter for account creation Fixes #1367 --- .../briar/android/login/PasswordFragment.java | 2 ++ .../briar/android/login/SetupFragment.java | 16 +++++++++++++--- .../briarproject/briar/android/util/UiUtils.java | 16 ++++++++++++++-- .../main/res/layout/fragment_setup_password.xml | 1 + 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java index 49c90239c..72f3d6fae 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java @@ -22,6 +22,7 @@ import javax.annotation.Nullable; import static android.content.Context.INPUT_METHOD_SERVICE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK; @MethodsNotNullByDefault @@ -78,6 +79,7 @@ public class PasswordFragment extends SetupFragment { // the controller is not yet available in onCreateView() if (!setupController.needToShowDozeFragment()) { nextButton.setText(R.string.create_account_button); + passwordConfirmation.setImeOptions(IME_ACTION_DONE); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupFragment.java index 5d3fce362..5524edd8c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/SetupFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/SetupFragment.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.login; +import android.support.annotation.Nullable; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; @@ -10,13 +11,18 @@ import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.fragment.BaseFragment; import javax.inject.Inject; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; +import static android.view.inputmethod.EditorInfo.IME_ACTION_NEXT; +import static org.briarproject.briar.android.util.UiUtils.enterPressed; import static org.briarproject.briar.android.util.UiUtils.showOnboardingDialog; +@NotNullByDefault abstract class SetupFragment extends BaseFragment implements TextWatcher, OnEditorActionListener, OnClickListener { @@ -55,9 +61,13 @@ abstract class SetupFragment extends BaseFragment implements TextWatcher, @Override public boolean onEditorAction(TextView textView, int actionId, - KeyEvent keyEvent) { - onClick(textView); - return true; + @Nullable KeyEvent keyEvent) { + if (actionId == IME_ACTION_NEXT || actionId == IME_ACTION_DONE || + enterPressed(actionId, keyEvent)) { + onClick(textView); + return true; + } + return false; } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index 4cb49aac5..1fb856d4a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -11,6 +11,7 @@ import android.os.PowerManager; import android.support.annotation.AttrRes; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; +import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; @@ -27,6 +28,7 @@ import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.URLSpan; import android.util.TypedValue; +import android.view.KeyEvent; import android.view.View; import android.widget.TextView; @@ -39,8 +41,6 @@ import org.briarproject.briar.R; import org.briarproject.briar.android.view.ArticleMovementMethod; import org.briarproject.briar.android.widget.LinkDialogFragment; -import javax.annotation.Nullable; - import static android.content.Context.KEYGUARD_SERVICE; import static android.content.Context.POWER_SERVICE; import static android.content.Intent.CATEGORY_DEFAULT; @@ -60,6 +60,10 @@ import static android.text.format.DateUtils.FORMAT_ABBREV_TIME; import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; import static android.text.format.DateUtils.WEEK_IN_MILLIS; +import static android.view.KeyEvent.ACTION_DOWN; +import static android.view.KeyEvent.ACTION_UP; +import static android.view.KeyEvent.KEYCODE_ENTER; +import static android.view.inputmethod.EditorInfo.IME_NULL; import static org.briarproject.briar.BuildConfig.APPLICATION_ID; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; @@ -288,4 +292,12 @@ public class UiUtils { .handleException(new UserFeedback(), false)); } + public static boolean enterPressed(int actionId, + @Nullable KeyEvent keyEvent) { + return actionId == IME_NULL && + keyEvent != null && + keyEvent.getAction() == ACTION_DOWN && + keyEvent.getKeyCode() == KEYCODE_ENTER; + } + } diff --git a/briar-android/src/main/res/layout/fragment_setup_password.xml b/briar-android/src/main/res/layout/fragment_setup_password.xml index d89807598..eebc3fff1 100644 --- a/briar-android/src/main/res/layout/fragment_setup_password.xml +++ b/briar-android/src/main/res/layout/fragment_setup_password.xml @@ -71,6 +71,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/confirm_password" + android:imeOptions="actionNext" android:inputType="textPassword" android:maxLines="1"/> From a0d91da569bde48498e1a60cbe4e825c375c4425 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Sep 2018 18:19:15 -0300 Subject: [PATCH 2/5] Add TODO for not allowing double account creation --- .../org/briarproject/bramble/account/AccountManagerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java index 7eda4688b..bb58799b6 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java @@ -159,6 +159,7 @@ class AccountManagerImpl implements AccountManager { @Override public boolean createAccount(String name, String password) { synchronized (stateChangeLock) { + // TODO don't allow creating another account if one already exists LocalAuthor localAuthor = identityManager.createLocalAuthor(name); identityManager.registerLocalAuthor(localAuthor); SecretKey key = crypto.generateSecretKey(); From 30f87e626ad5a9447b673865a33726319b193387 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Sep 2018 18:37:41 -0300 Subject: [PATCH 3/5] Only create one forum when pressing enter --- .../briar/android/forum/CreateForumActivity.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java index 13f817642..96574abbe 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/CreateForumActivity.java @@ -27,11 +27,13 @@ import javax.inject.Inject; import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; import static android.widget.Toast.LENGTH_LONG; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.util.LogUtils.logDuration; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; +import static org.briarproject.briar.android.util.UiUtils.enterPressed; import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_NAME_LENGTH; @MethodsNotNullByDefault @@ -76,8 +78,11 @@ public class CreateForumActivity extends BriarActivity { } }); nameEntry.setOnEditorActionListener((v, actionId, e) -> { - createForum(); - return true; + if (actionId == IME_ACTION_DONE || enterPressed(actionId, e)) { + createForum(); + return true; + } + return false; }); createForumButton = findViewById(R.id.createForumButton); From fc626d09211edb23ee5565246761070c79934549 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Sep 2018 18:40:11 -0300 Subject: [PATCH 4/5] Only create one private group when pressing enter --- .../privategroup/creation/CreateGroupFragment.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java index c402bcb4a..29e7b0ad9 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupFragment.java @@ -19,6 +19,8 @@ import org.briarproject.briar.android.fragment.BaseFragment; import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; +import static org.briarproject.briar.android.util.UiUtils.enterPressed; import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH; public class CreateGroupFragment extends BaseFragment { @@ -62,8 +64,11 @@ public class CreateGroupFragment extends BaseFragment { } }); nameEntry.setOnEditorActionListener((v1, actionId, e) -> { - createGroup(); - return true; + if (actionId == IME_ACTION_DONE || enterPressed(actionId, e)) { + createGroup(); + return true; + } + return false; }); nameLayout = v.findViewById(R.id.nameLayout); From 10bee05856d37f92924b7912a106a187fddab9b7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 13 Sep 2018 18:40:32 -0300 Subject: [PATCH 5/5] Only sign-in once when pressing enter --- .../briar/android/login/PasswordActivity.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java index 09dafb060..e8b20f243 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java @@ -25,6 +25,8 @@ import javax.inject.Inject; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; +import static org.briarproject.briar.android.util.UiUtils.enterPressed; public class PasswordActivity extends BaseActivity { @@ -63,8 +65,11 @@ public class PasswordActivity extends BaseActivity { input = findViewById(R.id.password_layout); password = findViewById(R.id.edit_password); password.setOnEditorActionListener((v, actionId, event) -> { - validatePassword(); - return true; + if (actionId == IME_ACTION_DONE || enterPressed(actionId, event)) { + validatePassword(); + return true; + } + return false; }); password.addTextChangedListener(new TextWatcher() {