bug 590349 - Clipboard (copy/paste) support for Android r=mwu a=blocking-fennec=2.0+

This commit is contained in:
Brad Lassey
2010-08-26 19:43:23 -04:00
parent f885362b97
commit 5354987d41
7 changed files with 277 additions and 1 deletions

View File

@@ -108,6 +108,8 @@ AndroidBridge::Init(JNIEnv *jEnv,
jOpenUriExternal = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "openUriExternal", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z");
jGetMimeTypeFromExtension = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "getMimeTypeFromExtension", "(Ljava/lang/String;)Ljava/lang/String;");
jMoveTaskToBack = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "moveTaskToBack", "()V");
jGetClipboardText = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "getClipboardText", "()Ljava/lang/String;");
jSetClipboardText = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "setClipboardText", "(Ljava/lang/String;)V");
jEGLContextClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("javax/microedition/khronos/egl/EGLContext"));
@@ -360,6 +362,47 @@ AndroidBridge::MoveTaskToBack()
mJNIEnv->CallStaticVoidMethod(mGeckoAppShellClass, jMoveTaskToBack);
}
bool
AndroidBridge::GetClipboardText(nsAString& aText)
{
jstring jstrType =
static_cast<jstring>(mJNIEnv->
CallStaticObjectMethod(mGeckoAppShellClass,
jGetClipboardText));
if (!jstrType)
return PR_FALSE;
nsJNIString jniStr(jstrType);
aText.Assign(jniStr);
return PR_TRUE;
}
void
AndroidBridge::SetClipboardText(const nsAString& aText)
{
const PRUnichar* wText;
PRUint32 wTextLen = NS_StringGetData(aText, &wText);
jstring jstr = mJNIEnv->NewString(wText, wTextLen);
mJNIEnv->CallStaticObjectMethod(mGeckoAppShellClass, jSetClipboardText, jstr);
}
bool
AndroidBridge::ClipboardHasText()
{
jstring jstrType =
static_cast<jstring>(mJNIEnv->
CallStaticObjectMethod(mGeckoAppShellClass,
jGetClipboardText));
if (!jstrType)
return PR_FALSE;
return PR_TRUE;
}
void
AndroidBridge::EmptyClipboard()
{
mJNIEnv->CallStaticObjectMethod(mGeckoAppShellClass, jSetClipboardText, nsnull);
}
void
AndroidBridge::SetSurfaceView(jobject obj)
{