Bug 1464096 - 3. Remove SessionTextInput.isInputActive; r=esawin

The SessionTextInput.isInputActive API is prone to races. Its
functionality can be replicated through the
SessionTextInput.Delegate.restartInput callback, so it's okay to remove
it.

MozReview-Commit-ID: GFYjbH8cQv0

--HG--
extra : rebase_source : 89e17a3cb1c6779e8de08243f13bdb4c7b46a723
This commit is contained in:
Jim Chen 2018-06-05 17:49:01 -04:00
parent d1cc94799c
commit 0c01cc1913
3 changed files with 31 additions and 48 deletions

View File

@ -870,8 +870,7 @@ import android.view.inputmethod.EditorInfo;
}
@Override // SessionTextInput.EditableClient
public void sendKeyEvent(final @Nullable View view, final boolean inputActive, final int action,
@NonNull KeyEvent event) {
public void sendKeyEvent(final @Nullable View view, final int action, @NonNull KeyEvent event) {
final Editable editable = getEditable();
if (editable == null) {
return;
@ -885,7 +884,7 @@ import android.view.inputmethod.EditorInfo;
final int keyCode = event.getKeyCode();
final boolean handled;
if (!inputActive || shouldSkipKeyListener(keyCode, event)) {
if (shouldSkipKeyListener(keyCode, event)) {
handled = false;
} else if (action == KeyEvent.ACTION_DOWN) {
setSuppressKeyUp(true);
@ -946,6 +945,10 @@ import android.view.inputmethod.EditorInfo;
}
private boolean shouldSkipKeyListener(final int keyCode, final @NonNull KeyEvent event) {
if (mIMEState == SessionTextInput.EditableListener.IME_STATE_DISABLED) {
return true;
}
// Preserve enter and tab keys for the browser
if (keyCode == KeyEvent.KEYCODE_ENTER ||
keyCode == KeyEvent.KEYCODE_TAB) {
@ -1961,32 +1964,31 @@ import android.view.inputmethod.EditorInfo;
throw new UnsupportedOperationException("method must be called through mProxy");
}
public boolean onKeyPreIme(final @Nullable View view, final boolean inputActive,
final int keyCode, final @NonNull KeyEvent event) {
public boolean onKeyPreIme(final @Nullable View view, final int keyCode,
final @NonNull KeyEvent event) {
return false;
}
public boolean onKeyDown(final @Nullable View view, final boolean inputActive,
final int keyCode, final @NonNull KeyEvent event) {
return processKey(view, inputActive, KeyEvent.ACTION_DOWN, keyCode, event);
public boolean onKeyDown(final @Nullable View view, final int keyCode,
final @NonNull KeyEvent event) {
return processKey(view, KeyEvent.ACTION_DOWN, keyCode, event);
}
public boolean onKeyUp(final @Nullable View view, final boolean inputActive,
final int keyCode, final @NonNull KeyEvent event) {
return processKey(view, inputActive, KeyEvent.ACTION_UP, keyCode, event);
public boolean onKeyUp(final @Nullable View view, final int keyCode,
final @NonNull KeyEvent event) {
return processKey(view, KeyEvent.ACTION_UP, keyCode, event);
}
public boolean onKeyMultiple(final @Nullable View view, final boolean inputActive,
final int keyCode, int repeatCount,
public boolean onKeyMultiple(final @Nullable View view, final int keyCode, int repeatCount,
final @NonNull KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
// KEYCODE_UNKNOWN means the characters are in KeyEvent.getCharacters()
final String str = event.getCharacters();
for (int i = 0; i < str.length(); i++) {
final KeyEvent charEvent = getCharKeyEvent(str.charAt(i));
if (!processKey(view, inputActive, KeyEvent.ACTION_DOWN,
if (!processKey(view, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_UNKNOWN, charEvent) ||
!processKey(view, inputActive, KeyEvent.ACTION_UP,
!processKey(view, KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_UNKNOWN, charEvent)) {
return false;
}
@ -1995,16 +1997,16 @@ import android.view.inputmethod.EditorInfo;
}
while ((repeatCount--) > 0) {
if (!processKey(view, inputActive, KeyEvent.ACTION_DOWN, keyCode, event) ||
!processKey(view, inputActive, KeyEvent.ACTION_UP, keyCode, event)) {
if (!processKey(view, KeyEvent.ACTION_DOWN, keyCode, event) ||
!processKey(view, KeyEvent.ACTION_UP, keyCode, event)) {
return false;
}
}
return true;
}
public boolean onKeyLongPress(final @Nullable View view, final boolean inputActive,
final int keyCode, final @NonNull KeyEvent event) {
public boolean onKeyLongPress(final @Nullable View view, final int keyCode,
final @NonNull KeyEvent event) {
return false;
}
@ -2027,8 +2029,8 @@ import android.view.inputmethod.EditorInfo;
};
}
private boolean processKey(final @Nullable View view, final boolean inputActive,
final int action, final int keyCode, final @NonNull KeyEvent event) {
private boolean processKey(final @Nullable View view, final int action, final int keyCode,
final @NonNull KeyEvent event) {
if (keyCode > KeyEvent.getMaxKeyCode() || !shouldProcessKey(keyCode, event)) {
return false;
}
@ -2036,7 +2038,7 @@ import android.view.inputmethod.EditorInfo;
postToInputConnection(new Runnable() {
@Override
public void run() {
sendKeyEvent(view, inputActive, action, event);
sendKeyEvent(view, action, event);
}
});
return true;

View File

@ -590,7 +590,7 @@ import java.lang.reflect.Proxy;
@Override
public boolean sendKeyEvent(@NonNull KeyEvent event) {
event = translateKey(event.getKeyCode(), event);
mEditableClient.sendKeyEvent(getView(), isInputActive(), event.getAction(), event);
mEditableClient.sendKeyEvent(getView(), event.getAction(), event);
return false; // seems to always return false
}
@ -637,12 +637,6 @@ import java.lang.reflect.Proxy;
}
}
@Override // SessionTextInput.InputConnectionClient
public synchronized boolean isInputActive() {
// Make sure this picks up PASSWORD state as well.
return mIMEState != IME_STATE_DISABLED;
}
@Override // SessionTextInput.EditableListener
public void notifyIME(final int type) {
switch (type) {

View File

@ -145,7 +145,6 @@ public final class SessionTextInput {
View getView();
Handler getHandler(Handler defHandler);
InputConnection onCreateInputConnection(EditorInfo attrs);
boolean isInputActive();
}
// Interface to access GeckoEditable from GeckoInputConnection.
@ -160,8 +159,7 @@ public final class SessionTextInput {
// ENDT_MONITOR stops the monitor for composing character rects.
@WrapForJNI final int END_MONITOR = 3;
void sendKeyEvent(@Nullable View view, boolean inputActive, int action,
@NonNull KeyEvent event);
void sendKeyEvent(@Nullable View view, int action, @NonNull KeyEvent event);
Editable getEditable();
void setBatchMode(boolean isBatchMode);
Handler setInputConnectionHandler(@NonNull Handler handler);
@ -427,7 +425,7 @@ public final class SessionTextInput {
*/
public boolean onKeyPreIme(final int keyCode, final @NonNull KeyEvent event) {
ThreadUtils.assertOnUiThread();
return mEditable.onKeyPreIme(getView(), isInputActive(), keyCode, event);
return mEditable.onKeyPreIme(getView(), keyCode, event);
}
/**
@ -439,7 +437,7 @@ public final class SessionTextInput {
*/
public boolean onKeyDown(final int keyCode, final @NonNull KeyEvent event) {
ThreadUtils.assertOnUiThread();
return mEditable.onKeyDown(getView(), isInputActive(), keyCode, event);
return mEditable.onKeyDown(getView(), keyCode, event);
}
/**
@ -451,7 +449,7 @@ public final class SessionTextInput {
*/
public boolean onKeyUp(final int keyCode, final @NonNull KeyEvent event) {
ThreadUtils.assertOnUiThread();
return mEditable.onKeyUp(getView(), isInputActive(), keyCode, event);
return mEditable.onKeyUp(getView(), keyCode, event);
}
/**
@ -463,7 +461,7 @@ public final class SessionTextInput {
*/
public boolean onKeyLongPress(final int keyCode, final @NonNull KeyEvent event) {
ThreadUtils.assertOnUiThread();
return mEditable.onKeyLongPress(getView(), isInputActive(), keyCode, event);
return mEditable.onKeyLongPress(getView(), keyCode, event);
}
/**
@ -477,18 +475,7 @@ public final class SessionTextInput {
public boolean onKeyMultiple(final int keyCode, final int repeatCount,
final @NonNull KeyEvent event) {
ThreadUtils.assertOnUiThread();
return mEditable.onKeyMultiple(getView(), isInputActive(), keyCode, repeatCount, event);
}
/**
* Return whether there is an active input connection, usually as a result of a
* focused input field.
*
* @return True if input is active.
*/
public boolean isInputActive() {
ThreadUtils.assertOnUiThread();
return mInputConnection != null && mInputConnection.isInputActive();
return mEditable.onKeyMultiple(getView(), keyCode, repeatCount, event);
}
/**