Show InputView even when hardware keyboard is connected

Bug: 13988700
Change-Id: I4aeb01bf3571afc97959c213474a6424d7896120
main
Tadashi G. Takaoka 2014-08-08 16:26:25 +09:00
parent 0807c897f4
commit 06514f00f4
2 changed files with 41 additions and 1 deletions

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.keyboard;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.util.Log;
@ -233,11 +234,21 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
}
private void setMainKeyboardFrame() {
mMainKeyboardFrame.setVisibility(View.VISIBLE);
mMainKeyboardFrame.setVisibility(hasHardwareKeyboard() ? View.GONE : View.VISIBLE);
mEmojiPalettesView.setVisibility(View.GONE);
mEmojiPalettesView.stopEmojiPalettes();
}
// TODO: Move this boolean to a member of {@link SettingsValues} and reset it
// at {@link LatinIME#onConfigurationChanged(Configuration)}.
public boolean hasHardwareKeyboard() {
// Copied from {@link InputMethodServce#onEvaluateInputViewShown()}.
final Configuration config = mLatinIME.getResources().getConfiguration();
final boolean noHardwareKeyboard = config.keyboard == Configuration.KEYBOARD_NOKEYS
|| config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
return !noHardwareKeyboard;
}
// Implements {@link KeyboardState.SwitchActions}.
@Override
public void setEmojiKeyboard() {
@ -249,6 +260,14 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mEmojiPalettesView.setVisibility(View.VISIBLE);
}
public void onToggleEmojiKeyboard() {
if (isShowingEmojiPalettes()) {
setAlphabetKeyboard();
} else {
setEmojiKeyboard();
}
}
// Implements {@link KeyboardState.SwitchActions}.
@Override
public void setSymbolsShiftedKeyboard() {

View File

@ -145,6 +145,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// If it turns out we need several, it will get grown seamlessly.
final SparseArray<HardwareEventDecoder> mHardwareEventDecoders = new SparseArray<>(1);
// TODO: Move these {@link View}s to {@link KeyboardSwitcher}.
private View mInputView;
private View mExtractArea;
private View mKeyPreviewBackingView;
private SuggestionStripView mSuggestionStripView;
@ -709,6 +711,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@Override
public void setInputView(final View view) {
super.setInputView(view);
mInputView = view;
mExtractArea = getWindow().getWindow().getDecorView()
.findViewById(android.R.id.extractArea);
mKeyPreviewBackingView = view.findViewById(R.id.key_preview_backing);
@ -1079,6 +1082,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (visibleKeyboardView == null || !hasSuggestionStripView()) {
return;
}
final boolean hasHardwareKeyboard = mKeyboardSwitcher.hasHardwareKeyboard();
if (hasHardwareKeyboard && visibleKeyboardView.getVisibility() == View.GONE) {
// If there is a hardware keyboard and a visible software keyboard view has been hidden,
// no visual element will be shown on the screen.
outInsets.touchableInsets = mInputView.getHeight();
outInsets.visibleTopInsets = mInputView.getHeight();
return;
}
final int adjustedBackingHeight = getAdjustedBackingViewHeight();
final boolean backingGone = (mKeyPreviewBackingView.getVisibility() == View.GONE);
final int backingHeight = backingGone ? 0 : adjustedBackingHeight;
@ -1110,8 +1121,18 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
outInsets.visibleTopInsets = visibleTopY;
}
@Override
public boolean onEvaluateInputViewShown() {
// Always show {@link InputView}.
return true;
}
@Override
public boolean onEvaluateFullscreenMode() {
if (mKeyboardSwitcher.hasHardwareKeyboard()) {
// If there is a hardware keyboard, disable full screen mode.
return false;
}
// Reread resource value here, because this method is called by the framework as needed.
final boolean isFullscreenModeAllowed = Settings.readUseFullscreenMode(getResources());
if (super.onEvaluateFullscreenMode() && isFullscreenModeAllowed) {