Remove hacks related to determine window width
Bug: 4311428 Change-Id: Ic93f264101d13963503fcd447a69bbffd06e69f3
This commit is contained in:
parent
5d4c5692f1
commit
b39f612d97
4 changed files with 3 additions and 113 deletions
|
@ -113,14 +113,6 @@ public class KeyboardId {
|
||||||
false, F2KEY_MODE_NONE, false, false, false);
|
false, F2KEY_MODE_NONE, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeyboardId cloneWithNewGeometry(int orientation, int width) {
|
|
||||||
if (mWidth == width)
|
|
||||||
return this;
|
|
||||||
return new KeyboardId(mXmlName, mXmlId, mLocale, orientation, width, mMode, mAttribute,
|
|
||||||
mHasSettingsKey, mF2KeyMode, mClobberSettingsKey, mShortcutKeyEnabled,
|
|
||||||
mHasShortcutKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getXmlId() {
|
public int getXmlId() {
|
||||||
return mXmlId;
|
return mXmlId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.inputmethodservice.InputMethodService;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.InflateException;
|
import android.view.InflateException;
|
||||||
|
@ -39,7 +39,6 @@ import com.android.inputmethod.latin.SubtypeSwitcher;
|
||||||
import com.android.inputmethod.latin.Utils;
|
import com.android.inputmethod.latin.Utils;
|
||||||
|
|
||||||
import java.lang.ref.SoftReference;
|
import java.lang.ref.SoftReference;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@ -78,9 +77,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
private KeyboardId mCurrentId;
|
private KeyboardId mCurrentId;
|
||||||
private final HashMap<KeyboardId, SoftReference<LatinKeyboard>> mKeyboardCache =
|
private final HashMap<KeyboardId, SoftReference<LatinKeyboard>> mKeyboardCache =
|
||||||
new HashMap<KeyboardId, SoftReference<LatinKeyboard>>();
|
new HashMap<KeyboardId, SoftReference<LatinKeyboard>>();
|
||||||
// TODO: Remove this cache object when {@link DisplayMetrics} has actual window width excluding
|
|
||||||
// system navigation bar.
|
|
||||||
private WindowWidthCache mWindowWidthCache;
|
|
||||||
|
|
||||||
private KeyboardLayoutState mSavedKeyboardState = new KeyboardLayoutState();
|
private KeyboardLayoutState mSavedKeyboardState = new KeyboardLayoutState();
|
||||||
|
|
||||||
|
@ -105,77 +101,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
|
|
||||||
private static final KeyboardSwitcher sInstance = new KeyboardSwitcher();
|
private static final KeyboardSwitcher sInstance = new KeyboardSwitcher();
|
||||||
|
|
||||||
private static class WindowWidthCache {
|
|
||||||
private final InputMethodService mService;
|
|
||||||
private final Resources mResources;
|
|
||||||
private final boolean mIsRegistered[] = new boolean[Configuration.ORIENTATION_SQUARE + 1];
|
|
||||||
private final int mWidth[] = new int[Configuration.ORIENTATION_SQUARE + 1];
|
|
||||||
|
|
||||||
public WindowWidthCache(InputMethodService service) {
|
|
||||||
mService = service;
|
|
||||||
mResources = service.getResources();
|
|
||||||
|
|
||||||
Arrays.fill(mIsRegistered, false);
|
|
||||||
Arrays.fill(mWidth, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getCurrentWindowWidth() {
|
|
||||||
return mService.getWindow().getWindow().getDecorView().getWidth();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWidth(Configuration conf) {
|
|
||||||
final int orientation = conf.orientation;
|
|
||||||
try {
|
|
||||||
final int width = mWidth[orientation];
|
|
||||||
if (mIsRegistered[orientation] || width > 0) {
|
|
||||||
// Return registered or cached window width for this orientation.
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
// Fall through
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
Log.w(TAG, "unknwon orientation value " + orientation);
|
|
||||||
// Fall through
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return screen width as default window width.
|
|
||||||
return mResources.getDisplayMetrics().widthPixels;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWidthOnSizeChanged(Configuration conf) {
|
|
||||||
final int orientation = conf.orientation;
|
|
||||||
try {
|
|
||||||
if (mIsRegistered[orientation]) {
|
|
||||||
// Return registered window width for this orientation.
|
|
||||||
return mWidth[orientation];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cache the current window width without registering.
|
|
||||||
final int width = getCurrentWindowWidth();
|
|
||||||
mWidth[orientation] = width;
|
|
||||||
return width;
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
Log.w(TAG, "unknwon orientation value " + orientation);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerWidth() {
|
|
||||||
final int orientation = mResources.getConfiguration().orientation;
|
|
||||||
try {
|
|
||||||
if (!mIsRegistered[orientation]) {
|
|
||||||
final int width = getCurrentWindowWidth();
|
|
||||||
if (width > 0) {
|
|
||||||
// Register current window width.
|
|
||||||
mWidth[orientation] = width;
|
|
||||||
mIsRegistered[orientation] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
Log.w(TAG, "unknwon orientation value " + orientation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class KeyboardLayoutState {
|
public class KeyboardLayoutState {
|
||||||
private boolean mIsValid;
|
private boolean mIsValid;
|
||||||
private boolean mIsAlphabetMode;
|
private boolean mIsAlphabetMode;
|
||||||
|
@ -247,7 +172,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
mResources = ims.getResources();
|
mResources = ims.getResources();
|
||||||
mPrefs = prefs;
|
mPrefs = prefs;
|
||||||
mSubtypeSwitcher = SubtypeSwitcher.getInstance();
|
mSubtypeSwitcher = SubtypeSwitcher.getInstance();
|
||||||
mWindowWidthCache = new WindowWidthCache(ims);
|
|
||||||
setContextThemeWrapper(ims, getKeyboardThemeIndex(ims, prefs));
|
setContextThemeWrapper(ims, getKeyboardThemeIndex(ims, prefs));
|
||||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
@ -298,26 +222,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
mIsAutoCorrectionActive = false;
|
mIsAutoCorrectionActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerWindowWidth() {
|
|
||||||
mWindowWidthCache.registerWidth();
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void onSizeChanged(int w, int h, int oldw, int oldh) {
|
|
||||||
// TODO: This hack should be removed when display metric returns a proper width.
|
|
||||||
// Until then, the behavior of KeyboardSwitcher is suboptimal on a device that has a
|
|
||||||
// vertical system navigation bar in landscape screen orientation, for instance.
|
|
||||||
final Configuration conf = mResources.getConfiguration();
|
|
||||||
final int width = mWindowWidthCache.getWidthOnSizeChanged(conf);
|
|
||||||
// If the window width hasn't fixed yet or keyboard doesn't exist, nothing to do with.
|
|
||||||
if (width == 0 || mCurrentId == null)
|
|
||||||
return;
|
|
||||||
// Reload keyboard with new width.
|
|
||||||
final KeyboardId newId = mCurrentId.cloneWithNewGeometry(conf.orientation, width);
|
|
||||||
mInputMethodService.mHandler.postRestoreKeyboardLayout();
|
|
||||||
setKeyboard(getKeyboard(newId));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setKeyboard(final Keyboard keyboard) {
|
private void setKeyboard(final Keyboard keyboard) {
|
||||||
final Keyboard oldKeyboard = mKeyboardView.getKeyboard();
|
final Keyboard oldKeyboard = mKeyboardView.getKeyboard();
|
||||||
mKeyboardView.setKeyboard(keyboard);
|
mKeyboardView.setKeyboard(keyboard);
|
||||||
|
@ -416,10 +320,11 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
final int f2KeyMode = getF2KeyMode(settingsKeyEnabled, noSettingsKey);
|
final int f2KeyMode = getF2KeyMode(settingsKeyEnabled, noSettingsKey);
|
||||||
final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != voiceKeyOnMain);
|
final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != voiceKeyOnMain);
|
||||||
final Configuration conf = mResources.getConfiguration();
|
final Configuration conf = mResources.getConfiguration();
|
||||||
|
final DisplayMetrics dm = mResources.getDisplayMetrics();
|
||||||
|
|
||||||
return new KeyboardId(
|
return new KeyboardId(
|
||||||
mResources.getResourceEntryName(xmlId), xmlId, mSubtypeSwitcher.getInputLocale(),
|
mResources.getResourceEntryName(xmlId), xmlId, mSubtypeSwitcher.getInputLocale(),
|
||||||
conf.orientation, mWindowWidthCache.getWidth(conf), mode, editorInfo,
|
conf.orientation, dm.widthPixels, mode, editorInfo,
|
||||||
hasSettingsKey, f2KeyMode, noSettingsKey, voiceKeyEnabled, hasShortcutKey);
|
hasSettingsKey, f2KeyMode, noSettingsKey, voiceKeyEnabled, hasShortcutKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -266,12 +266,6 @@ public class LatinKeyboardBaseView extends KeyboardView implements PointerTracke
|
||||||
return mKeyTimerHandler;
|
return mKeyTimerHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
|
||||||
// TODO: Should notify InputMethodService instead?
|
|
||||||
KeyboardSwitcher.getInstance().onSizeChanged(w, h, oldw, oldh);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attaches a keyboard to this view. The keyboard can be switched at any time and the
|
* Attaches a keyboard to this view. The keyboard can be switched at any time and the
|
||||||
* view will re-layout itself to accommodate the keyboard.
|
* view will re-layout itself to accommodate the keyboard.
|
||||||
|
|
|
@ -2027,7 +2027,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
||||||
@Override
|
@Override
|
||||||
public void onPress(int primaryCode, boolean withSliding) {
|
public void onPress(int primaryCode, boolean withSliding) {
|
||||||
final KeyboardSwitcher switcher = mKeyboardSwitcher;
|
final KeyboardSwitcher switcher = mKeyboardSwitcher;
|
||||||
switcher.registerWindowWidth();
|
|
||||||
if (switcher.isVibrateAndSoundFeedbackRequired()) {
|
if (switcher.isVibrateAndSoundFeedbackRequired()) {
|
||||||
vibrate();
|
vibrate();
|
||||||
playKeyClick(primaryCode);
|
playKeyClick(primaryCode);
|
||||||
|
|
Loading…
Reference in a new issue