Bug 576065 - Fix Android IME implementation, r=mwu a=blocking-fennec

This commit is contained in:
Jim Chen
2010-08-04 12:47:26 -07:00
parent 0373a91c7b
commit 76c6acd5a7
11 changed files with 850 additions and 197 deletions

View File

@@ -91,7 +91,8 @@ AndroidBridge::Init(JNIEnv *jEnv,
mGeckoAppShellClass = (jclass) jEnv->NewGlobalRef(jGeckoAppShellClass);
jShowIME = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "showIME", "(I)V");
jNotifyIME = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "notifyIME", "(II)V");
jNotifyIMEChange = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "notifyIMEChange", "(Ljava/lang/String;III)V");
jEnableAccelerometer = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "enableAccelerometer", "(Z)V");
jEnableLocation = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "enableLocation", "(Z)V");
jReturnIMEQueryResult = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "returnIMEQueryResult", "(Ljava/lang/String;II)V");
@@ -183,9 +184,24 @@ AndroidBridge::EnsureJNIThread()
}
void
AndroidBridge::ShowIME(int aState)
AndroidBridge::NotifyIME(int aType, int aState)
{
mJNIEnv->CallStaticVoidMethod(mGeckoAppShellClass, jShowIME, aState);
mJNIEnv->CallStaticVoidMethod(mGeckoAppShellClass,
jNotifyIME, aType, aState);
}
void
AndroidBridge::NotifyIMEChange(const PRUnichar *aText, PRUint32 aTextLen,
int aStart, int aEnd, int aNewEnd)
{
jvalue args[4];
AutoLocalJNIFrame jniFrame(1);
args[0].l = mJNIEnv->NewString(aText, aTextLen);
args[1].i = aStart;
args[2].i = aEnd;
args[3].i = aNewEnd;
mJNIEnv->CallStaticVoidMethodA(mGeckoAppShellClass,
jNotifyIMEChange, args);
}
void
@@ -201,13 +217,16 @@ AndroidBridge::EnableLocation(bool aEnable)
}
void
AndroidBridge::ReturnIMEQueryResult(const PRUnichar *result, PRUint32 len, int selectionStart, int selectionEnd)
AndroidBridge::ReturnIMEQueryResult(const PRUnichar *aResult, PRUint32 aLen,
int aSelStart, int aSelLen)
{
jvalue args[3];
args[0].l = mJNIEnv->NewString(result, len);
args[1].i = selectionStart;
args[2].i = selectionEnd;
mJNIEnv->CallStaticVoidMethodA(mGeckoAppShellClass, jReturnIMEQueryResult, args);
AutoLocalJNIFrame jniFrame(1);
args[0].l = mJNIEnv->NewString(aResult, aLen);
args[1].i = aSelStart;
args[2].i = aSelLen;
mJNIEnv->CallStaticVoidMethodA(mGeckoAppShellClass,
jReturnIMEQueryResult, args);
}
void