Merge remote-tracking branch 'goog/master' into mergescriptpackage

main
Ken Wakasa 2012-11-29 15:30:46 +09:00
commit 2e49ed9c67
13 changed files with 101 additions and 48 deletions

View File

@ -36,6 +36,7 @@ import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.CoordinateUtils;
/** /**
* Exposes a virtual view sub-tree for {@link KeyboardView} and generates * Exposes a virtual view sub-tree for {@link KeyboardView} and generates
@ -62,7 +63,7 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider
private final Rect mTempBoundsInScreen = new Rect(); private final Rect mTempBoundsInScreen = new Rect();
/** The parent view's cached on-screen location. */ /** The parent view's cached on-screen location. */
private final int[] mParentLocation = new int[2]; private final int[] mParentLocation = CoordinateUtils.newInstance();
/** The virtual view identifier for the focused node. */ /** The virtual view identifier for the focused node. */
private int mAccessibilityFocusedView = UNDEFINED; private int mAccessibilityFocusedView = UNDEFINED;
@ -180,7 +181,8 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider
// Calculate the key's in-screen bounds. // Calculate the key's in-screen bounds.
mTempBoundsInScreen.set(boundsInParent); mTempBoundsInScreen.set(boundsInParent);
mTempBoundsInScreen.offset(mParentLocation[0], mParentLocation[1]); mTempBoundsInScreen.offset(
CoordinateUtils.x(mParentLocation), CoordinateUtils.y(mParentLocation));
final Rect boundsInScreen = mTempBoundsInScreen; final Rect boundsInScreen = mTempBoundsInScreen;

View File

@ -45,6 +45,7 @@ import com.android.inputmethod.keyboard.internal.KeyVisualAttributes;
import com.android.inputmethod.keyboard.internal.PreviewPlacerView; import com.android.inputmethod.keyboard.internal.PreviewPlacerView;
import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.CoordinateUtils;
import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StaticInnerHandlerWrapper; import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
@ -134,7 +135,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
// Preview placer view // Preview placer view
private final PreviewPlacerView mPreviewPlacerView; private final PreviewPlacerView mPreviewPlacerView;
private final int[] mCoordinates = new int[2]; private final int[] mCoordinates = CoordinateUtils.newInstance();
// Key preview // Key preview
private static final int PREVIEW_ALPHA = 240; private static final int PREVIEW_ALPHA = 240;
@ -832,10 +833,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
// In transient state. // In transient state.
return; return;
} }
final int[] viewOrigin = new int[2]; final int[] viewOrigin = CoordinateUtils.newInstance();
getLocationInWindow(viewOrigin); getLocationInWindow(viewOrigin);
final DisplayMetrics dm = getResources().getDisplayMetrics(); final DisplayMetrics dm = getResources().getDisplayMetrics();
if (viewOrigin[1] < dm.heightPixels / 4) { if (CoordinateUtils.y(viewOrigin) < dm.heightPixels / 4) {
// In transient state. // In transient state.
return; return;
} }
@ -850,7 +851,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
Log.w(TAG, "Cannot find android.R.id.content view to add PreviewPlacerView"); Log.w(TAG, "Cannot find android.R.id.content view to add PreviewPlacerView");
} else { } else {
windowContentView.addView(mPreviewPlacerView); windowContentView.addView(mPreviewPlacerView);
mPreviewPlacerView.setKeyboardViewGeometry(viewOrigin[0], viewOrigin[1], width, height); mPreviewPlacerView.setKeyboardViewGeometry(
CoordinateUtils.x(viewOrigin), CoordinateUtils.y(viewOrigin), width, height);
} }
} }
@ -940,7 +942,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
// parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and // parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and
// the left/right background is used if such background is specified. // the left/right background is used if such background is specified.
final int statePosition; final int statePosition;
int previewX = key.getDrawX() - (previewWidth - keyDrawWidth) / 2 + mCoordinates[0]; int previewX = key.getDrawX() - (previewWidth - keyDrawWidth) / 2
+ CoordinateUtils.x(mCoordinates);
if (previewX < 0) { if (previewX < 0) {
previewX = 0; previewX = 0;
statePosition = STATE_LEFT; statePosition = STATE_LEFT;
@ -952,7 +955,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
} }
// The key preview is placed vertically above the top edge of the parent key with an // The key preview is placed vertically above the top edge of the parent key with an
// arbitrary offset. // arbitrary offset.
final int previewY = key.mY - previewHeight + mPreviewOffset + mCoordinates[1]; final int previewY = key.mY - previewHeight + mPreviewOffset
+ CoordinateUtils.y(mCoordinates);
if (background != null) { if (background != null) {
final int hasMoreKeys = (key.mMoreKeys != null) ? STATE_HAS_MOREKEYS : STATE_NORMAL; final int hasMoreKeys = (key.mMoreKeys != null) ? STATE_HAS_MOREKEYS : STATE_NORMAL;

View File

@ -369,13 +369,13 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
} }
@Override @Override
public void cancelAllUpdateBatchInputTimer() { public void cancelAllUpdateBatchInputTimers() {
removeMessages(MSG_UPDATE_BATCH_INPUT); removeMessages(MSG_UPDATE_BATCH_INPUT);
} }
public void cancelAllMessages() { public void cancelAllMessages() {
cancelKeyTimers(); cancelKeyTimers();
cancelAllUpdateBatchInputTimer(); cancelAllUpdateBatchInputTimers();
} }
} }

View File

@ -26,6 +26,7 @@ import android.widget.PopupWindow;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy; import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy; import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.CoordinateUtils;
import com.android.inputmethod.latin.InputPointers; import com.android.inputmethod.latin.InputPointers;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
@ -34,7 +35,7 @@ import com.android.inputmethod.latin.R;
* detecting key presses and touch movements. * detecting key presses and touch movements.
*/ */
public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel { public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel {
private final int[] mCoordinates = new int[2]; private final int[] mCoordinates = CoordinateUtils.newInstance();
private final KeyDetector mKeyDetector; private final KeyDetector mKeyDetector;
@ -169,7 +170,7 @@ public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeys
window.setHeight(container.getMeasuredHeight()); window.setHeight(container.getMeasuredHeight());
parentView.getLocationInWindow(mCoordinates); parentView.getLocationInWindow(mCoordinates);
window.showAtLocation(parentView, Gravity.NO_GRAVITY, window.showAtLocation(parentView, Gravity.NO_GRAVITY,
x + mCoordinates[0], y + mCoordinates[1]); x + CoordinateUtils.x(mCoordinates), y + CoordinateUtils.y(mCoordinates));
mOriginX = x + container.getPaddingLeft(); mOriginX = x + container.getPaddingLeft();
mOriginY = y + container.getPaddingTop(); mOriginY = y + container.getPaddingTop();

View File

@ -95,7 +95,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
public boolean isInDoubleTapTimeout(); public boolean isInDoubleTapTimeout();
public void cancelKeyTimers(); public void cancelKeyTimers();
public void startUpdateBatchInputTimer(PointerTracker tracker); public void startUpdateBatchInputTimer(PointerTracker tracker);
public void cancelAllUpdateBatchInputTimer(); public void cancelAllUpdateBatchInputTimers();
public static class Adapter implements TimerProxy { public static class Adapter implements TimerProxy {
@Override @Override
@ -121,7 +121,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
@Override @Override
public void startUpdateBatchInputTimer(PointerTracker tracker) {} public void startUpdateBatchInputTimer(PointerTracker tracker) {}
@Override @Override
public void cancelAllUpdateBatchInputTimer() {} public void cancelAllUpdateBatchInputTimers() {}
} }
} }
@ -754,7 +754,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
Log.d(TAG, String.format("[%d] onEndBatchInput : batchPoints=%d", Log.d(TAG, String.format("[%d] onEndBatchInput : batchPoints=%d",
mPointerId, sAggregratedPointers.getPointerSize())); mPointerId, sAggregratedPointers.getPointerSize()));
} }
mTimerProxy.cancelAllUpdateBatchInputTimer(); mTimerProxy.cancelAllUpdateBatchInputTimers();
mListener.onEndBatchInput(sAggregratedPointers); mListener.onEndBatchInput(sAggregratedPointers);
} }
} }

View File

@ -386,12 +386,11 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
public void onCreate(final Bundle savedInstanceState) { public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
RichInputMethodManager.init(getActivity()); mPrefs = getPreferenceManager().getSharedPreferences();
RichInputMethodManager.init(getActivity(), mPrefs);
mRichImm = RichInputMethodManager.getInstance(); mRichImm = RichInputMethodManager.getInstance();
addPreferencesFromResource(R.xml.additional_subtype_settings); addPreferencesFromResource(R.xml.additional_subtype_settings);
setHasOptionsMenu(true); setHasOptionsMenu(true);
mPrefs = getPreferenceManager().getSharedPreferences();
} }
@Override @Override

View File

@ -0,0 +1,39 @@
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.inputmethod.latin;
public final class CoordinateUtils {
private static final int INDEX_X = 0;
private static final int INDEX_Y = 1;
private static final int ARRAY_SIZE = INDEX_Y + 1;
private CoordinateUtils() {
// This utility class is not publicly instantiable.
}
public static int[] newInstance() {
return new int[ARRAY_SIZE];
}
public static int x(final int[] coords) {
return coords[INDEX_X];
}
public static int y(final int[] coords) {
return coords[INDEX_Y];
}
}

View File

@ -403,33 +403,28 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
@Override @Override
public void onCreate() { public void onCreate() {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
mPrefs = prefs; mResources = getResources();
LatinImeLogger.init(this, prefs);
LatinImeLogger.init(this, mPrefs);
if (ProductionFlag.IS_EXPERIMENTAL) { if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.getInstance().init(this, prefs); ResearchLogger.getInstance().init(this, mPrefs);
} }
RichInputMethodManager.init(this); RichInputMethodManager.init(this, mPrefs);
mRichImm = RichInputMethodManager.getInstance();
SubtypeSwitcher.init(this); SubtypeSwitcher.init(this);
KeyboardSwitcher.init(this, prefs); KeyboardSwitcher.init(this, mPrefs);
AccessibilityUtils.init(this); AccessibilityUtils.init(this);
super.onCreate(); super.onCreate();
mRichImm = RichInputMethodManager.getInstance();
mHandler.onCreate(); mHandler.onCreate();
DEBUG = LatinImeLogger.sDBG; DEBUG = LatinImeLogger.sDBG;
final Resources res = getResources();
mResources = res;
loadSettings(); loadSettings();
mRichImm.setAdditionalInputMethodSubtypes(mCurrentSettings.getAdditionalSubtypes());
initSuggest(); initSuggest();
mDisplayOrientation = res.getConfiguration().orientation; mDisplayOrientation = mResources.getConfiguration().orientation;
// Register to receive ringer mode change and network state change. // Register to receive ringer mode change and network state change.
// Also receive installation and removal of a dictionary pack. // Also receive installation and removal of a dictionary pack.

View File

@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import static com.android.inputmethod.latin.Constants.Subtype.KEYBOARD_MODE; import static com.android.inputmethod.latin.Constants.Subtype.KEYBOARD_MODE;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.os.IBinder; import android.os.IBinder;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
@ -49,19 +50,34 @@ public final class RichInputMethodManager {
return sInstance; return sInstance;
} }
public static void init(final Context context) { public static void init(final Context context, final SharedPreferences prefs) {
sInstance.initInternal(context); sInstance.initInternal(context, prefs);
}
private boolean isInitialized() {
return mImmWrapper != null;
} }
private void checkInitialized() { private void checkInitialized() {
if (mImmWrapper == null) { if (!isInitialized()) {
throw new RuntimeException(TAG + " is used before initialization"); throw new RuntimeException(TAG + " is used before initialization");
} }
} }
private void initInternal(final Context context) { private void initInternal(final Context context, final SharedPreferences prefs) {
if (isInitialized()) {
return;
}
mImmWrapper = new InputMethodManagerCompatWrapper(context); mImmWrapper = new InputMethodManagerCompatWrapper(context);
mInputMethodInfoOfThisIme = getInputMethodInfoOfThisIme(context); mInputMethodInfoOfThisIme = getInputMethodInfoOfThisIme(context);
// Initialize additional subtypes.
SubtypeLocale.init(context);
final String prefAdditionalSubtypes = SettingsValues.getPrefAdditionalSubtypes(
prefs, context.getResources());
final InputMethodSubtype[] additionalSubtypes =
AdditionalSubtype.createAdditionalSubtypesArray(prefAdditionalSubtypes);
setAdditionalInputMethodSubtypes(additionalSubtypes);
} }
public InputMethodManager getInputMethodManager() { public InputMethodManager getInputMethodManager() {

View File

@ -22,7 +22,6 @@ import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.util.Log; import android.util.Log;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.keyboard.internal.KeySpecParser; import com.android.inputmethod.keyboard.internal.KeySpecParser;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
@ -82,7 +81,6 @@ public final class SettingsValues {
private final int mVibrationDurationSettingsRawValue; private final int mVibrationDurationSettingsRawValue;
@SuppressWarnings("unused") // TODO: Use this @SuppressWarnings("unused") // TODO: Use this
private final float mKeypressSoundVolumeRawValue; private final float mKeypressSoundVolumeRawValue;
private final InputMethodSubtype[] mAdditionalSubtypes;
public final boolean mGestureInputEnabled; public final boolean mGestureInputEnabled;
public final boolean mGesturePreviewTrailEnabled; public final boolean mGesturePreviewTrailEnabled;
public final boolean mGestureFloatingPreviewTextEnabled; public final boolean mGestureFloatingPreviewTextEnabled;
@ -170,8 +168,6 @@ public final class SettingsValues {
mAutoCorrectionThresholdRawValue); mAutoCorrectionThresholdRawValue);
mVoiceKeyEnabled = mVoiceMode != null && !mVoiceMode.equals(voiceModeOff); mVoiceKeyEnabled = mVoiceMode != null && !mVoiceMode.equals(voiceModeOff);
mVoiceKeyOnMain = mVoiceMode != null && mVoiceMode.equals(voiceModeMain); mVoiceKeyOnMain = mVoiceMode != null && mVoiceMode.equals(voiceModeMain);
mAdditionalSubtypes = AdditionalSubtype.createAdditionalSubtypesArray(
getPrefAdditionalSubtypes(prefs, res));
final boolean gestureInputEnabledByBuildConfig = res.getBoolean( final boolean gestureInputEnabledByBuildConfig = res.getBoolean(
R.bool.config_gesture_input_enabled_by_build_config); R.bool.config_gesture_input_enabled_by_build_config);
mGestureInputEnabled = gestureInputEnabledByBuildConfig mGestureInputEnabled = gestureInputEnabledByBuildConfig
@ -375,10 +371,6 @@ public final class SettingsValues {
return res.getBoolean(R.bool.config_use_fullscreen_mode); return res.getBoolean(R.bool.config_use_fullscreen_mode);
} }
public InputMethodSubtype[] getAdditionalSubtypes() {
return mAdditionalSubtypes;
}
public static String getPrefAdditionalSubtypes(final SharedPreferences prefs, public static String getPrefAdditionalSubtypes(final SharedPreferences prefs,
final Resources res) { final Resources res) {
final String predefinedPrefSubtypes = AdditionalSubtype.createPrefSubtypes( final String predefinedPrefSubtypes = AdditionalSubtype.createPrefSubtypes(

View File

@ -34,6 +34,7 @@ import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy; import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.KeyEventHandler; import com.android.inputmethod.keyboard.PointerTracker.KeyEventHandler;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy; import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.latin.CoordinateUtils;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
/** /**
@ -41,7 +42,7 @@ import com.android.inputmethod.latin.R;
* key presses and touch movements. * key presses and touch movements.
*/ */
public final class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel { public final class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
private final int[] mCoordinates = new int[2]; private final int[] mCoordinates = CoordinateUtils.newInstance();
final KeyDetector mModalPanelKeyDetector; final KeyDetector mModalPanelKeyDetector;
private final KeyDetector mSlidingPanelKeyDetector; private final KeyDetector mSlidingPanelKeyDetector;
@ -163,7 +164,7 @@ public final class MoreSuggestionsView extends KeyboardView implements MoreKeysP
window.setHeight(container.getMeasuredHeight()); window.setHeight(container.getMeasuredHeight());
parentView.getLocationInWindow(mCoordinates); parentView.getLocationInWindow(mCoordinates);
window.showAtLocation(parentView, Gravity.NO_GRAVITY, window.showAtLocation(parentView, Gravity.NO_GRAVITY,
x + mCoordinates[0], y + mCoordinates[1]); x + CoordinateUtils.x(mCoordinates), y + CoordinateUtils.y(mCoordinates));
mOriginX = x + container.getPaddingLeft(); mOriginX = x + container.getPaddingLeft();
mOriginY = y + container.getPaddingTop(); mOriginY = y + container.getPaddingTop();

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.keyboard;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
@ -41,7 +42,8 @@ public class SpacebarTextTests extends AndroidTestCase {
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
final Context context = getContext(); final Context context = getContext();
RichInputMethodManager.init(context); RichInputMethodManager.init(
context, PreferenceManager.getDefaultSharedPreferences(context));
mRichImm = RichInputMethodManager.getInstance(); mRichImm = RichInputMethodManager.getInstance();
mRes = context.getResources(); mRes = context.getResources();
SubtypeLocale.init(context); SubtypeLocale.init(context);

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
@ -37,7 +38,8 @@ public class SubtypeLocaleTests extends AndroidTestCase {
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
final Context context = getContext(); final Context context = getContext();
RichInputMethodManager.init(context); RichInputMethodManager.init(
context, PreferenceManager.getDefaultSharedPreferences(context));
mRichImm = RichInputMethodManager.getInstance(); mRichImm = RichInputMethodManager.getInstance();
mRes = context.getResources(); mRes = context.getResources();
SubtypeLocale.init(context); SubtypeLocale.init(context);