am ed5ce6c1: Merge "Remove extension keyboard" into gingerbread
Merge commit 'ed5ce6c1a3d3a38a28cd2ed480a4d877160fa6ae' into gingerbread-plus-aosp * commit 'ed5ce6c1a3d3a38a28cd2ed480a4d877160fa6ae': Remove extension keyboardmain
commit
1cd7d96fe4
|
@ -1,61 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2008, 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.
|
|
||||||
*/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:keyWidth="10%p"
|
|
||||||
android:horizontalGap="0px"
|
|
||||||
android:verticalGap="0px"
|
|
||||||
android:keyHeight="@dimen/key_height"
|
|
||||||
>
|
|
||||||
|
|
||||||
<Row android:rowEdgeFlags="top">
|
|
||||||
<Key android:keyLabel="!" android:keyEdgeFlags="left"/>
|
|
||||||
<Key android:keyLabel="\@"/>
|
|
||||||
<Key android:keyLabel="\#"/>
|
|
||||||
<Key android:keyLabel="&"/>
|
|
||||||
<Key android:keyLabel="-"/>
|
|
||||||
<Key android:keyLabel="\'"/>
|
|
||||||
<Key android:keyLabel=":"/>
|
|
||||||
<Key android:keyLabel="""/>
|
|
||||||
<Key android:keyLabel="/"/>
|
|
||||||
<Key android:keyLabel="\?" android:keyEdgeFlags="right"
|
|
||||||
/>
|
|
||||||
</Row>
|
|
||||||
|
|
||||||
<Row android:rowEdgeFlags="bottom">
|
|
||||||
<Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"
|
|
||||||
/>
|
|
||||||
<Key android:codes="50" android:keyLabel="2"
|
|
||||||
/>
|
|
||||||
<Key android:codes="51" android:keyLabel="3"
|
|
||||||
/>
|
|
||||||
<Key android:codes="52" android:keyLabel="4"
|
|
||||||
/>
|
|
||||||
<Key android:codes="53" android:keyLabel="5"
|
|
||||||
/>
|
|
||||||
<Key android:codes="54" android:keyLabel="6"/>
|
|
||||||
<Key android:codes="55" android:keyLabel="7"
|
|
||||||
/>
|
|
||||||
<Key android:codes="56" android:keyLabel="8"/>
|
|
||||||
<Key android:codes="57" android:keyLabel="9"/>
|
|
||||||
<Key android:codes="48" android:keyLabel="0"
|
|
||||||
android:keyEdgeFlags="right"/>
|
|
||||||
</Row>
|
|
||||||
</Keyboard>
|
|
|
@ -261,14 +261,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
|| id.mXml == R.xml.kbd_symbols_black), mHasVoice);
|
|| id.mXml == R.xml.kbd_symbols_black), mHasVoice);
|
||||||
keyboard.setLanguageSwitcher(mLanguageSwitcher);
|
keyboard.setLanguageSwitcher(mLanguageSwitcher);
|
||||||
keyboard.setBlackFlag(isBlackSym());
|
keyboard.setBlackFlag(isBlackSym());
|
||||||
if (id.mKeyboardMode == KEYBOARDMODE_NORMAL
|
|
||||||
|| id.mKeyboardMode == KEYBOARDMODE_URL
|
|
||||||
|| id.mKeyboardMode == KEYBOARDMODE_IM
|
|
||||||
|| id.mKeyboardMode == KEYBOARDMODE_EMAIL
|
|
||||||
|| id.mKeyboardMode == KEYBOARDMODE_WEB
|
|
||||||
) {
|
|
||||||
keyboard.setExtension(R.xml.kbd_extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (id.mEnableShiftLock) {
|
if (id.mEnableShiftLock) {
|
||||||
keyboard.enableShiftLock();
|
keyboard.enableShiftLock();
|
||||||
|
@ -439,7 +431,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
|
||||||
mLayoutId + "," + newLayout, e);
|
mLayoutId + "," + newLayout, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mInputView.setExtentionLayoutResId(THEMES[newLayout]);
|
|
||||||
mInputView.setOnKeyboardActionListener(mInputMethodService);
|
mInputView.setOnKeyboardActionListener(mInputMethodService);
|
||||||
mLayoutId = newLayout;
|
mLayoutId = newLayout;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,6 @@ public class LatinKeyboard extends Keyboard {
|
||||||
private int mPrefLetterY;
|
private int mPrefLetterY;
|
||||||
private int mPrefDistance;
|
private int mPrefDistance;
|
||||||
|
|
||||||
private int mExtensionResId;
|
|
||||||
// TODO: generalize for any keyboardId
|
// TODO: generalize for any keyboardId
|
||||||
private boolean mIsBlackSym;
|
private boolean mIsBlackSym;
|
||||||
|
|
||||||
|
@ -278,14 +277,6 @@ public class LatinKeyboard extends Keyboard {
|
||||||
return mIsAlphaKeyboard;
|
return mIsAlphaKeyboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExtension(int resId) {
|
|
||||||
mExtensionResId = resId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getExtension() {
|
|
||||||
return mExtensionResId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBlackFlag(boolean f) {
|
public void setBlackFlag(boolean f) {
|
||||||
mIsBlackSym = f;
|
mIsBlackSym = f;
|
||||||
if (f) {
|
if (f) {
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
|
|
||||||
package com.android.inputmethod.latin;
|
package com.android.inputmethod.latin;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
@ -27,9 +25,9 @@ import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.widget.PopupWindow;
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class LatinKeyboardView extends LatinKeyboardBaseView {
|
public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
|
|
||||||
|
@ -41,21 +39,11 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
|
|
||||||
private Keyboard mPhoneKeyboard;
|
private Keyboard mPhoneKeyboard;
|
||||||
|
|
||||||
/** Whether the extension of this keyboard is visible */
|
|
||||||
private boolean mExtensionVisible;
|
|
||||||
/** The view that is shown as an extension of this keyboard view */
|
|
||||||
private LatinKeyboardView mExtension;
|
|
||||||
/** The popup window that contains the extension of this keyboard */
|
|
||||||
private PopupWindow mExtensionPopup;
|
|
||||||
/** Whether this view is an extension of another keyboard */
|
|
||||||
private boolean mIsExtensionType;
|
|
||||||
private boolean mFirstEvent;
|
|
||||||
/** Whether we've started dropping move events because we found a big jump */
|
/** Whether we've started dropping move events because we found a big jump */
|
||||||
private boolean mDroppingEvents;
|
private boolean mDroppingEvents;
|
||||||
/**
|
/**
|
||||||
* Whether multi-touch disambiguation needs to be disabled for any reason. There are 2 reasons
|
* Whether multi-touch disambiguation needs to be disabled if a real multi-touch event has
|
||||||
* for this to happen - (1) if a real multi-touch event has occured and (2) we've opened an
|
* occured
|
||||||
* extension keyboard.
|
|
||||||
*/
|
*/
|
||||||
private boolean mDisableDisambiguation;
|
private boolean mDisableDisambiguation;
|
||||||
/** The distance threshold at which we start treating the touch session as a multi-touch */
|
/** The distance threshold at which we start treating the touch session as a multi-touch */
|
||||||
|
@ -63,8 +51,6 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
/** The y coordinate of the last row */
|
/** The y coordinate of the last row */
|
||||||
private int mLastRowY;
|
private int mLastRowY;
|
||||||
|
|
||||||
private int mExtensionLayoutResId = 0;
|
|
||||||
|
|
||||||
public LatinKeyboardView(Context context, AttributeSet attrs) {
|
public LatinKeyboardView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
|
@ -77,10 +63,6 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
mPhoneKeyboard = phoneKeyboard;
|
mPhoneKeyboard = phoneKeyboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExtentionLayoutResId (int id) {
|
|
||||||
mExtensionLayoutResId = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setKeyboard(Keyboard k) {
|
public void setKeyboard(Keyboard k) {
|
||||||
super.setKeyboard(k);
|
super.setKeyboard(k);
|
||||||
|
@ -214,11 +196,10 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If an extension keyboard is visible or this is an extension keyboard, don't look
|
// If there was a sudden jump, return without processing the actual motion event.
|
||||||
// for sudden jumps. Otherwise, if there was a sudden jump, return without processing the
|
if (handleSuddenJump(me))
|
||||||
// actual motion event.
|
return true;
|
||||||
if (!mExtensionVisible && !mIsExtensionType
|
|
||||||
&& handleSuddenJump(me)) return true;
|
|
||||||
// Reset any bounding box controls in the keyboard
|
// Reset any bounding box controls in the keyboard
|
||||||
if (me.getAction() == MotionEvent.ACTION_DOWN) {
|
if (me.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
keyboard.keyReleased();
|
keyboard.keyReleased();
|
||||||
|
@ -236,154 +217,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we don't have an extension keyboard, don't go any further.
|
return super.onTouchEvent(me);
|
||||||
if (keyboard.getExtension() == 0) {
|
|
||||||
return super.onTouchEvent(me);
|
|
||||||
}
|
|
||||||
// If the motion event is above the keyboard and it's not an UP event coming
|
|
||||||
// even before the first MOVE event into the extension area
|
|
||||||
if (me.getY() < 0 && (mExtensionVisible || me.getAction() != MotionEvent.ACTION_UP)) {
|
|
||||||
if (mExtensionVisible) {
|
|
||||||
int action = me.getAction();
|
|
||||||
if (mFirstEvent) action = MotionEvent.ACTION_DOWN;
|
|
||||||
mFirstEvent = false;
|
|
||||||
MotionEvent translated = MotionEvent.obtain(me.getEventTime(), me.getEventTime(),
|
|
||||||
action,
|
|
||||||
me.getX(), me.getY() + mExtension.getHeight(), me.getMetaState());
|
|
||||||
boolean result = mExtension.onTouchEvent(translated);
|
|
||||||
translated.recycle();
|
|
||||||
if (me.getAction() == MotionEvent.ACTION_UP
|
|
||||||
|| me.getAction() == MotionEvent.ACTION_CANCEL) {
|
|
||||||
closeExtension();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
if (openExtension()) {
|
|
||||||
MotionEvent cancel = MotionEvent.obtain(me.getDownTime(), me.getEventTime(),
|
|
||||||
MotionEvent.ACTION_CANCEL, me.getX() - 100, me.getY() - 100, 0);
|
|
||||||
super.onTouchEvent(cancel);
|
|
||||||
cancel.recycle();
|
|
||||||
if (mExtension.getHeight() > 0) {
|
|
||||||
MotionEvent translated = MotionEvent.obtain(me.getEventTime(),
|
|
||||||
me.getEventTime(),
|
|
||||||
MotionEvent.ACTION_DOWN,
|
|
||||||
me.getX(), me.getY() + mExtension.getHeight(),
|
|
||||||
me.getMetaState());
|
|
||||||
mExtension.onTouchEvent(translated);
|
|
||||||
translated.recycle();
|
|
||||||
} else {
|
|
||||||
mFirstEvent = true;
|
|
||||||
}
|
|
||||||
// Stop processing multi-touch errors
|
|
||||||
mDisableDisambiguation = true;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else if (mExtensionVisible) {
|
|
||||||
closeExtension();
|
|
||||||
// Send a down event into the main keyboard first
|
|
||||||
MotionEvent down = MotionEvent.obtain(me.getEventTime(), me.getEventTime(),
|
|
||||||
MotionEvent.ACTION_DOWN,
|
|
||||||
me.getX(), me.getY(), me.getMetaState());
|
|
||||||
super.onTouchEvent(down);
|
|
||||||
down.recycle();
|
|
||||||
// Send the actual event
|
|
||||||
return super.onTouchEvent(me);
|
|
||||||
} else {
|
|
||||||
return super.onTouchEvent(me);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setExtensionType(boolean isExtensionType) {
|
|
||||||
mIsExtensionType = isExtensionType;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean openExtension() {
|
|
||||||
// If the current keyboard is not visible, don't show the popup
|
|
||||||
if (!isShown()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (((LatinKeyboard) getKeyboard()).getExtension() == 0) return false;
|
|
||||||
makePopupWindow();
|
|
||||||
mExtensionVisible = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void makePopupWindow() {
|
|
||||||
if (mExtensionPopup == null) {
|
|
||||||
int[] windowLocation = new int[2];
|
|
||||||
mExtensionPopup = new PopupWindow(getContext());
|
|
||||||
mExtensionPopup.setBackgroundDrawable(null);
|
|
||||||
LayoutInflater li = (LayoutInflater) getContext().getSystemService(
|
|
||||||
Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
mExtension = (LatinKeyboardView) li.inflate(mExtensionLayoutResId == 0 ?
|
|
||||||
R.layout.input_trans : mExtensionLayoutResId, null);
|
|
||||||
mExtension.setExtensionType(true);
|
|
||||||
mExtension.setOnKeyboardActionListener(
|
|
||||||
new ExtensionKeyboardListener(getOnKeyboardActionListener()));
|
|
||||||
mExtension.setPopupParent(this);
|
|
||||||
mExtension.setPopupOffset(0, -windowLocation[1]);
|
|
||||||
Keyboard keyboard;
|
|
||||||
mExtension.setKeyboard(keyboard = new LatinKeyboard(getContext(),
|
|
||||||
((LatinKeyboard) getKeyboard()).getExtension()));
|
|
||||||
mExtensionPopup.setContentView(mExtension);
|
|
||||||
mExtensionPopup.setWidth(getWidth());
|
|
||||||
mExtensionPopup.setHeight(keyboard.getHeight());
|
|
||||||
mExtensionPopup.setAnimationStyle(-1);
|
|
||||||
getLocationInWindow(windowLocation);
|
|
||||||
// TODO: Fix the "- 30".
|
|
||||||
mExtension.setPopupOffset(0, -windowLocation[1] - 30);
|
|
||||||
mExtensionPopup.showAtLocation(this, 0, 0, -keyboard.getHeight()
|
|
||||||
+ windowLocation[1]);
|
|
||||||
} else {
|
|
||||||
mExtension.setVisibility(VISIBLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void closing() {
|
|
||||||
super.closing();
|
|
||||||
if (mExtensionPopup != null && mExtensionPopup.isShowing()) {
|
|
||||||
mExtensionPopup.dismiss();
|
|
||||||
mExtensionPopup = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void closeExtension() {
|
|
||||||
mExtension.closing();
|
|
||||||
mExtension.setVisibility(INVISIBLE);
|
|
||||||
mExtensionVisible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ExtensionKeyboardListener implements OnKeyboardActionListener {
|
|
||||||
private OnKeyboardActionListener mTarget;
|
|
||||||
ExtensionKeyboardListener(OnKeyboardActionListener target) {
|
|
||||||
mTarget = target;
|
|
||||||
}
|
|
||||||
public void onKey(int primaryCode, int[] keyCodes, int x, int y) {
|
|
||||||
mTarget.onKey(primaryCode, keyCodes, x, y);
|
|
||||||
}
|
|
||||||
public void onPress(int primaryCode) {
|
|
||||||
mTarget.onPress(primaryCode);
|
|
||||||
}
|
|
||||||
public void onRelease(int primaryCode) {
|
|
||||||
mTarget.onRelease(primaryCode);
|
|
||||||
}
|
|
||||||
public void onText(CharSequence text) {
|
|
||||||
mTarget.onText(text);
|
|
||||||
}
|
|
||||||
public void swipeDown() {
|
|
||||||
// Don't pass through
|
|
||||||
}
|
|
||||||
public void swipeLeft() {
|
|
||||||
// Don't pass through
|
|
||||||
}
|
|
||||||
public void swipeRight() {
|
|
||||||
// Don't pass through
|
|
||||||
}
|
|
||||||
public void swipeUp() {
|
|
||||||
// Don't pass through
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************** INSTRUMENTATION *******************************/
|
/**************************** INSTRUMENTATION *******************************/
|
||||||
|
|
Loading…
Reference in New Issue