Add CoordinateUtils class

Change-Id: I23784117f77da54ee2a0670e65d86e26d762a687
main
Tadashi G. Takaoka 2012-11-28 17:25:23 +09:00
parent 2200dbbf09
commit 359c35e0f6
5 changed files with 59 additions and 12 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

@ -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

@ -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

@ -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();