Merge "Show InputView even when hardware keyboard is connected"
This commit is contained in:
commit
ef2c537e59
2 changed files with 41 additions and 1 deletions
|
@ -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() {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue