Fix not always showing input view with physical keyboard connected

Bug: 17163374
Change-Id: I57f7eeac0c9ac0a15d3d55927e18a2d97849c508
This commit is contained in:
Tadashi G. Takaoka 2014-09-08 17:56:19 +09:00
parent 64dd48e381
commit 88f282de0d
2 changed files with 24 additions and 24 deletions

View File

@ -18,7 +18,6 @@ package com.android.inputmethod.keyboard;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
@ -256,13 +255,12 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
} }
public void onToggleEmojiKeyboard() { public void onToggleEmojiKeyboard() {
if (mKeyboardLayoutSet == null) { if (mKeyboardLayoutSet == null || !isShowingEmojiPalettes()) {
return; mLatinIME.startShowingInputView();
}
if (isShowingEmojiPalettes()) {
setAlphabetKeyboard();
} else {
setEmojiKeyboard(); setEmojiKeyboard();
} else {
mLatinIME.stopShowingInputView();
setAlphabetKeyboard();
} }
} }

View File

@ -52,7 +52,6 @@ import android.view.WindowManager;
import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.CursorAnchorInfo;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethod;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import android.widget.TextView; import android.widget.TextView;
@ -87,8 +86,8 @@ import com.android.inputmethod.latin.suggestions.SuggestionStripView;
import com.android.inputmethod.latin.suggestions.SuggestionStripViewAccessor; import com.android.inputmethod.latin.suggestions.SuggestionStripViewAccessor;
import com.android.inputmethod.latin.utils.ApplicationUtils; import com.android.inputmethod.latin.utils.ApplicationUtils;
import com.android.inputmethod.latin.utils.CapsModeUtils; import com.android.inputmethod.latin.utils.CapsModeUtils;
import com.android.inputmethod.latin.utils.CursorAnchorInfoUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils; import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.CursorAnchorInfoUtils;
import com.android.inputmethod.latin.utils.DialogUtils; import com.android.inputmethod.latin.utils.DialogUtils;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatchesAndSuggestions; import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatchesAndSuggestions;
import com.android.inputmethod.latin.utils.ImportantNoticeUtils; import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
@ -162,6 +161,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private final SubtypeSwitcher mSubtypeSwitcher; private final SubtypeSwitcher mSubtypeSwitcher;
private final SubtypeState mSubtypeState = new SubtypeState(); private final SubtypeState mSubtypeState = new SubtypeState();
private final SpecialKeyDetector mSpecialKeyDetector; private final SpecialKeyDetector mSpecialKeyDetector;
// Working variable for {@link #startShowingInputView()} and
// {@link #onEvaluateInputViewShown()}.
private boolean mIsExecutingStartShowingInputView;
// Object for reacting to adding/removing a dictionary pack. // Object for reacting to adding/removing a dictionary pack.
private final BroadcastReceiver mDictionaryPackInstallReceiver = private final BroadcastReceiver mDictionaryPackInstallReceiver =
@ -1187,22 +1189,24 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
outInsets.visibleTopInsets = visibleTopY; outInsets.visibleTopInsets = visibleTopY;
} }
@Override public void startShowingInputView() {
public boolean onEvaluateInputViewShown() { mIsExecutingStartShowingInputView = true;
// Always show {@link InputView}. // This {@link #showWindow(boolean)} will eventually call back
return true; // {@link #onEvaluateInputViewShown()}.
showWindow(true /* showInput */);
mIsExecutingStartShowingInputView = false;
}
public void stopShowingInputView() {
showWindow(false /* showInput */);
} }
@Override @Override
public boolean onShowInputRequested(final int flags, final boolean configChange) { public boolean onEvaluateInputViewShown() {
final SettingsValues settingsValues = mSettings.getCurrent(); if (mIsExecutingStartShowingInputView) {
if ((flags & InputMethod.SHOW_EXPLICIT) == 0 && settingsValues.mHasHardwareKeyboard) {
// Even when IME is implicitly shown and physical keyboard is connected, we should
// show {@link InputView}.
// See {@link InputMethodService#onShowInputRequested(int,boolean)}.
return true; return true;
} }
return super.onShowInputRequested(flags, configChange); return super.onEvaluateInputViewShown();
} }
@Override @Override
@ -1221,9 +1225,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// hack for now. Let's get rid of this once the framework gets fixed. // hack for now. Let's get rid of this once the framework gets fixed.
final EditorInfo ei = getCurrentInputEditorInfo(); final EditorInfo ei = getCurrentInputEditorInfo();
return !(ei != null && ((ei.imeOptions & EditorInfo.IME_FLAG_NO_EXTRACT_UI) != 0)); return !(ei != null && ((ei.imeOptions & EditorInfo.IME_FLAG_NO_EXTRACT_UI) != 0));
} else {
return false;
} }
return false;
} }
@Override @Override
@ -1273,9 +1276,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (null == keyboard) { if (null == keyboard) {
return CoordinateUtils.newCoordinateArray(codePoints.length, return CoordinateUtils.newCoordinateArray(codePoints.length,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE); Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
} else {
return keyboard.getCoordinates(codePoints);
} }
return keyboard.getCoordinates(codePoints);
} }
// Callback for the {@link SuggestionStripView}, to call when the "add to dictionary" hint is // Callback for the {@link SuggestionStripView}, to call when the "add to dictionary" hint is