diff --git a/briar-android/build.gradle b/briar-android/build.gradle
index 915248827..c9b7ed78f 100644
--- a/briar-android/build.gradle
+++ b/briar-android/build.gradle
@@ -117,7 +117,7 @@ dependencies {
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'com.google.zxing:core:3.3.3'
implementation 'uk.co.samuelwall:material-tap-target-prompt:2.14.0'
- implementation 'com.vanniktech:emoji-google:0.5.1'
+ implementation 'com.vanniktech:emoji-google:0.6.0' // later versions already use androidx
implementation 'com.github.kobakei:MaterialFabSpeedDial:1.2.1' // later versions already use androidx
def glideVersion = '4.9.0'
implementation("com.github.bumptech.glide:glide:$glideVersion") {
diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
index 0afef62b0..7e5db298f 100644
--- a/briar-android/src/main/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -89,7 +89,7 @@
+ android:windowSoftInputMode="stateVisible|adjustResize">
+ android:windowSoftInputMode="stateUnchanged|adjustResize">
@@ -145,7 +145,7 @@
android:name="org.briarproject.briar.android.privategroup.creation.CreateGroupActivity"
android:label="@string/groups_create_group_title"
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity"
- android:windowSoftInputMode="adjustResize">
+ android:windowSoftInputMode="stateVisible|adjustResize">
@@ -156,7 +156,7 @@
android:label="@string/app_name"
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity"
android:theme="@style/BriarTheme.NoActionBar"
- android:windowSoftInputMode="adjustResize|stateHidden">
+ android:windowSoftInputMode="adjustResize|stateUnchanged">
@@ -223,7 +223,7 @@
android:name="org.briarproject.briar.android.forum.CreateForumActivity"
android:label="@string/create_forum_title"
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity"
- android:windowSoftInputMode="adjustResize">
+ android:windowSoftInputMode="stateVisible|adjustResize">
@@ -234,7 +234,7 @@
android:label="@string/app_name"
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity"
android:theme="@style/BriarTheme.NoActionBar"
- android:windowSoftInputMode="adjustResize|stateHidden">
+ android:windowSoftInputMode="adjustResize|stateUnchanged">
@@ -302,7 +302,7 @@
android:name="org.briarproject.briar.android.blog.ReblogActivity"
android:label="@string/blogs_reblog_button"
android:parentActivityName="org.briarproject.briar.android.blog.BlogActivity"
- android:windowSoftInputMode="stateHidden">
+ android:windowSoftInputMode="stateUnchanged">
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
index 49e86c469..c7b5761f2 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java
@@ -2,7 +2,6 @@ package org.briarproject.briar.android.activity;
import android.content.Context;
import android.os.Bundle;
-import android.os.IBinder;
import android.support.annotation.LayoutRes;
import android.support.annotation.UiThread;
import android.support.v4.app.Fragment;
@@ -12,7 +11,6 @@ import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
-import android.view.inputmethod.InputMethodManager;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
@@ -44,7 +42,6 @@ import javax.inject.Inject;
import static android.arch.lifecycle.Lifecycle.State.STARTED;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT;
import static java.util.logging.Level.INFO;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS;
@@ -218,14 +215,11 @@ public abstract class BaseActivity extends AppCompatActivity
}
public void showSoftKeyboard(View view) {
- Object o = getSystemService(INPUT_METHOD_SERVICE);
- ((InputMethodManager) o).showSoftInput(view, SHOW_IMPLICIT);
+ UiUtils.showSoftKeyboard(view);
}
public void hideSoftKeyboard(View view) {
- IBinder token = view.getWindowToken();
- Object o = getSystemService(INPUT_METHOD_SERVICE);
- ((InputMethodManager) o).hideSoftInputFromWindow(token, 0);
+ UiUtils.hideSoftKeyboard(view);
}
@UiThread
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
index 0a3ab6994..0a0558dfb 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
@@ -89,6 +89,12 @@ public class RssFeedImportActivity extends BriarActivity {
progressBar = findViewById(R.id.progressBar);
}
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (urlInput.requestFocus()) showSoftKeyboard(urlInput);
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
index 1ea824b79..5032e1241 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
@@ -89,6 +89,7 @@ public class WriteBlogPostActivity extends BriarActivity
public void onStart() {
super.onStart();
notificationManager.blockNotification(groupId);
+ if (input.requestFocus()) showSoftKeyboard(input);
}
@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java
index b91256bef..03ed92b7f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java
@@ -21,9 +21,11 @@ import org.briarproject.briar.android.activity.BaseActivity;
import javax.inject.Inject;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;
import static java.util.Objects.requireNonNull;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
import static org.briarproject.bramble.util.StringUtils.toUtf8;
+import static org.briarproject.briar.android.util.UiUtils.showSoftKeyboard;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -91,4 +93,14 @@ public class AliasDialogFragment extends AppCompatDialogFragment {
}
}
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (aliasEditText.requestFocus()) {
+ requireNonNull(getDialog().getWindow())
+ .setSoftInputMode(SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ showSoftKeyboard(aliasEditText);
+ }
+ }
+
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
index 01bc51c3e..9b89740e3 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
@@ -276,7 +276,7 @@ public class ConversationActivity extends BriarActivity
textInputView.setSendController(sendController);
textInputView.setMaxTextLength(MAX_PRIVATE_MESSAGE_TEXT_LENGTH);
textInputView.setReady(false);
- textInputView.addOnKeyboardShownListener(this::scrollToBottom);
+ textInputView.setOnKeyboardShownListener(this::scrollToBottom);
}
private void scrollToBottom() {
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 96574abbe..5279b6449 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
@@ -94,7 +94,7 @@ public class CreateForumActivity extends BriarActivity {
@Override
public void onStart() {
super.onStart();
- showSoftKeyboard(nameEntry);
+ if (nameEntry.requestFocus()) showSoftKeyboard(nameEntry);
}
@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
index 136e9e19d..af53df32b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java
@@ -83,6 +83,10 @@ public class ChangePasswordActivity extends BriarActivity
newPasswordConfirmation.addTextChangedListener(tw);
newPasswordConfirmation.setOnEditorActionListener(this);
changePasswordButton.setOnClickListener(this);
+
+ if (state == null && currentPassword.requestFocus()) {
+ showSoftKeyboard(currentPassword);
+ }
}
@Override
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 f36c749ef..24caee716 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
@@ -94,7 +94,7 @@ public class CreateGroupFragment extends BaseFragment {
@Override
public void onStart() {
super.onStart();
- listener.showSoftKeyboard(nameEntry);
+ if (nameEntry.requestFocus()) listener.showSoftKeyboard(nameEntry);
}
@Override
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
index 80456c453..88c8edda8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
@@ -27,7 +27,6 @@ import org.briarproject.briar.android.threaded.ThreadListController.ThreadListDa
import org.briarproject.briar.android.threaded.ThreadListController.ThreadListListener;
import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView;
-import org.briarproject.briar.android.view.KeyboardAwareLinearLayout;
import org.briarproject.briar.android.view.TextInputView;
import org.briarproject.briar.android.view.TextSendController;
import org.briarproject.briar.android.view.TextSendController.SendListener;
@@ -284,14 +283,10 @@ public abstract class ThreadListActivity {
+ scrollToItemAtTop(item);
+ textInput.setOnKeyboardShownListener(null);
+ });
}
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java
index b9036b6df..3127d287f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java
@@ -13,8 +13,8 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
+import android.widget.LinearLayout;
-import com.vanniktech.emoji.EmojiEditText;
import com.vanniktech.emoji.EmojiPopup;
import com.vanniktech.emoji.RecentEmoji;
@@ -31,8 +31,9 @@ import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT;
import static java.lang.Character.isWhitespace;
import static java.util.Objects.requireNonNull;
import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong;
+import static org.briarproject.briar.android.util.UiUtils.resolveColorAttribute;
-public class EmojiTextInputView extends KeyboardAwareLinearLayout implements
+public class EmojiTextInputView extends LinearLayout implements
TextWatcher {
@Inject
@@ -41,12 +42,16 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements
private final AppCompatImageButton emojiToggle;
private final EmojiPopup emojiPopup;
private final EditText editText;
+ private final InputMethodManager imm;
@Nullable
private TextInputListener listener;
+ @Nullable
+ private OnKeyboardShownListener keyboardShownListener;
private int maxLength = Integer.MAX_VALUE;
private boolean emptyTextAllowed = false;
private boolean isEmpty = true;
+ private boolean keyboardOpen = false;
public EmojiTextInputView(Context context) {
this(context, null);
@@ -104,17 +109,26 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements
// stuff we can't do in edit mode goes below
if (isInEditMode()) {
emojiPopup = null;
+ imm = null;
return;
}
+ Object o = getContext().getSystemService(INPUT_METHOD_SERVICE);
+ imm = (InputMethodManager) requireNonNull(o);
+
BriarApplication app =
(BriarApplication) context.getApplicationContext();
app.getApplicationComponent().inject(this);
emojiPopup = EmojiPopup.Builder
- .fromRootView(this)
+ .fromRootView(getRootView())
.setRecentEmoji(recentEmoji)
.setOnEmojiPopupShownListener(this::showKeyboardIcon)
.setOnEmojiPopupDismissListener(this::showEmojiIcon)
- .build((EmojiEditText) editText);
+ .setKeyboardAnimationStyle(R.style.emoji_fade_animation_style)
+ .setOnSoftKeyboardOpenListener(this::onKeyboardOpened)
+ .setOnSoftKeyboardCloseListener(this::onKeyboardClosed)
+ .setIconColor(resolveColorAttribute(getContext(),
+ R.attr.colorControlNormal))
+ .build(editText);
emojiToggle.setOnClickListener(v -> emojiPopup.toggle());
}
@@ -231,6 +245,10 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements
editText.setHint(hint);
}
+ boolean isKeyboardOpen() {
+ return keyboardOpen || imm.isFullscreenMode();
+ }
+
private void showEmojiIcon() {
emojiToggle.setImageResource(R.drawable.ic_emoji_toggle);
}
@@ -240,23 +258,43 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements
}
void showSoftKeyboard() {
- Object o = getContext().getSystemService(INPUT_METHOD_SERVICE);
- InputMethodManager imm = (InputMethodManager) requireNonNull(o);
imm.showSoftInput(editText, SHOW_IMPLICIT);
}
void hideSoftKeyboard() {
if (emojiPopup.isShowing()) emojiPopup.dismiss();
IBinder token = editText.getWindowToken();
- Object o = getContext().getSystemService(INPUT_METHOD_SERVICE);
- InputMethodManager imm = (InputMethodManager) requireNonNull(o);
imm.hideSoftInputFromWindow(token, 0);
}
+ private void onKeyboardOpened(
+ @SuppressWarnings("unused") int keyboardHeight) {
+ keyboardOpen = true;
+ if (keyboardShownListener != null)
+ keyboardShownListener.onKeyboardShown();
+ }
+
+ private void onKeyboardClosed() {
+ if (imm.isFullscreenMode()) {
+ onKeyboardOpened(0);
+ return;
+ }
+ keyboardOpen = false;
+ }
+
+ void setOnKeyboardShownListener(
+ @Nullable OnKeyboardShownListener listener) {
+ keyboardShownListener = listener;
+ }
+
interface TextInputListener {
void onTextIsEmptyChanged(boolean isEmpty);
void onSendEvent();
}
+ public interface OnKeyboardShownListener {
+ void onKeyboardShown();
+ }
+
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java b/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java
deleted file mode 100644
index fa4028aeb..000000000
--- a/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- Taken from Signal, licences under GPLv3
- */
-
-package org.briarproject.briar.android.view;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.graphics.Rect;
-import android.os.Build;
-import android.preference.PreferenceManager;
-import android.support.annotation.UiThread;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.LinearLayout;
-
-import org.briarproject.briar.R;
-
-import java.lang.reflect.Field;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Logger;
-
-import javax.annotation.Nullable;
-
-import static android.content.Context.WINDOW_SERVICE;
-import static android.view.Surface.ROTATION_270;
-import static android.view.Surface.ROTATION_90;
-import static java.util.Objects.requireNonNull;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-
-/**
- * RelativeLayout that, when a view container, will report back when it thinks
- * a soft keyboard has been opened and what its height would be.
- */
-@UiThread
-public class KeyboardAwareLinearLayout extends LinearLayout {
-
- private static final Logger LOG =
- Logger.getLogger(KeyboardAwareLinearLayout.class.getName());
-
- private final Rect rect = new Rect();
- private final Set shownListeners = new HashSet<>();
- private final int minKeyboardSize;
- private final int minCustomKeyboardSize;
- private final int defaultCustomKeyboardSize;
- private final int minCustomKeyboardTopMargin;
- private final int statusBarHeight;
-
- private int viewInset;
-
- private boolean keyboardOpen = false;
- private int rotation = -1;
-
- public KeyboardAwareLinearLayout(Context context) {
- this(context, null);
- }
-
- public KeyboardAwareLinearLayout(Context context,
- @Nullable AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public KeyboardAwareLinearLayout(Context context,
- @Nullable AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- rotation = getDeviceRotation();
- int statusBarRes = getResources()
- .getIdentifier("status_bar_height", "dimen", "android");
- minKeyboardSize =
- getResources().getDimensionPixelSize(R.dimen.min_keyboard_size);
- minCustomKeyboardSize = getResources()
- .getDimensionPixelSize(R.dimen.min_custom_keyboard_size);
- defaultCustomKeyboardSize = getResources()
- .getDimensionPixelSize(R.dimen.default_custom_keyboard_size);
- minCustomKeyboardTopMargin = getResources()
- .getDimensionPixelSize(R.dimen.min_custom_keyboard_top_margin);
- statusBarHeight = statusBarRes > 0 ?
- getResources().getDimensionPixelSize(statusBarRes) : 0;
- viewInset = getViewInset();
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- updateRotation();
- updateKeyboardState();
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-
- private void updateRotation() {
- int oldRotation = rotation;
- rotation = getDeviceRotation();
- if (oldRotation != rotation) {
- LOG.info("Rotation changed");
- onKeyboardClose();
- }
- }
-
- private void updateKeyboardState() {
- if (isLandscape()) {
- if (keyboardOpen) onKeyboardClose();
- return;
- }
-
- if (viewInset == 0 && Build.VERSION.SDK_INT >= 21)
- viewInset = getViewInset();
- int availableHeight =
- getRootView().getHeight() - statusBarHeight - viewInset;
- getWindowVisibleDisplayFrame(rect);
-
- int keyboardHeight = availableHeight - (rect.bottom - rect.top);
-
- if (keyboardHeight > minKeyboardSize) {
- if (getKeyboardHeight() != keyboardHeight)
- setKeyboardPortraitHeight(keyboardHeight);
- if (!keyboardOpen) onKeyboardOpen(keyboardHeight);
- } else if (keyboardOpen) {
- onKeyboardClose();
- }
- }
-
- @TargetApi(21)
- private int getViewInset() {
- try {
- Field attachInfoField = View.class.getDeclaredField("mAttachInfo");
- attachInfoField.setAccessible(true);
- Object attachInfo = attachInfoField.get(this);
- if (attachInfo != null) {
- Field stableInsetsField =
- attachInfo.getClass().getDeclaredField("mStableInsets");
- stableInsetsField.setAccessible(true);
- Rect insets = (Rect) stableInsetsField.get(attachInfo);
- return insets.bottom;
- }
- } catch (NoSuchFieldException e) {
- LOG.log(WARNING,
- "field reflection error when measuring view inset", e);
- } catch (IllegalAccessException e) {
- LOG.log(WARNING,
- "access reflection error when measuring view inset", e);
- }
- return 0;
- }
-
- protected void onKeyboardOpen(int keyboardHeight) {
- if (LOG.isLoggable(INFO))
- LOG.info("onKeyboardOpen(" + keyboardHeight + ")");
- keyboardOpen = true;
-
- notifyShownListeners();
- }
-
- protected void onKeyboardClose() {
- LOG.info("onKeyboardClose()");
- keyboardOpen = false;
- }
-
- public boolean isKeyboardOpen() {
- return keyboardOpen;
- }
-
- public int getKeyboardHeight() {
- return isLandscape() ? getKeyboardLandscapeHeight() :
- getKeyboardPortraitHeight();
- }
-
- public boolean isLandscape() {
- int rotation = getDeviceRotation();
- return rotation == ROTATION_90 || rotation == ROTATION_270;
- }
-
- private int getDeviceRotation() {
- WindowManager windowManager =
- (WindowManager) getContext().getSystemService(WINDOW_SERVICE);
- return requireNonNull(windowManager).getDefaultDisplay().getRotation();
- }
-
- private int getKeyboardLandscapeHeight() {
- return Math.max(getHeight(), getRootView().getHeight()) / 2;
- }
-
- private int getKeyboardPortraitHeight() {
- SharedPreferences prefs =
- PreferenceManager.getDefaultSharedPreferences(getContext());
- int keyboardHeight = prefs.getInt("keyboard_height_portrait",
- defaultCustomKeyboardSize);
- return clamp(keyboardHeight, minCustomKeyboardSize,
- getRootView().getHeight() - minCustomKeyboardTopMargin);
- }
-
- private int clamp(int value, int min, int max) {
- return Math.min(Math.max(value, min), max);
- }
-
- private void setKeyboardPortraitHeight(int height) {
- SharedPreferences prefs =
- PreferenceManager.getDefaultSharedPreferences(getContext());
- prefs.edit().putInt("keyboard_height_portrait", height).apply();
- }
-
- public void addOnKeyboardShownListener(OnKeyboardShownListener listener) {
- shownListeners.add(listener);
- }
-
- public void removeOnKeyboardShownListener(
- OnKeyboardShownListener listener) {
- shownListeners.remove(listener);
- }
-
- private void notifyShownListeners() {
- // Make a copy as listeners may remove themselves when called
- Set listeners = new HashSet<>(shownListeners);
- for (OnKeyboardShownListener listener : listeners) {
- listener.onKeyboardShown();
- }
- }
-
- public interface OnKeyboardShownListener {
- void onKeyboardShown();
- }
-
-}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
index 89a32c1e4..1fbb4301d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
@@ -16,7 +16,7 @@ import android.widget.LinearLayout;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
-import org.briarproject.briar.android.view.KeyboardAwareLinearLayout.OnKeyboardShownListener;
+import org.briarproject.briar.android.view.EmojiTextInputView.OnKeyboardShownListener;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static java.util.Objects.requireNonNull;
@@ -139,13 +139,9 @@ public class TextInputView extends LinearLayout {
textInput.hideSoftKeyboard();
}
- public void addOnKeyboardShownListener(OnKeyboardShownListener listener) {
- textInput.addOnKeyboardShownListener(listener);
- }
-
- public void removeOnKeyboardShownListener(
- OnKeyboardShownListener listener) {
- textInput.removeOnKeyboardShownListener(listener);
+ public void setOnKeyboardShownListener(
+ @Nullable OnKeyboardShownListener listener) {
+ textInput.setOnKeyboardShownListener(listener);
}
}
diff --git a/briar-android/src/main/res/layout/activity_change_password.xml b/briar-android/src/main/res/layout/activity_change_password.xml
index fad60ccbc..a67060cfd 100644
--- a/briar-android/src/main/res/layout/activity_change_password.xml
+++ b/briar-android/src/main/res/layout/activity_change_password.xml
@@ -29,7 +29,7 @@
app:layout_constraintTop_toTopOf="parent"
app:passwordToggleEnabled="true">
-
-
-
-
-
+