author | Ryan VanderMeulen <ryanvm@gmail.com> |
Sat, 25 Feb 2012 22:09:23 -0500 | |
changeset 87755 | 0fb823decef1b362e789bfeb55a4170e7455c9f4 |
parent 87754 | fe5f655829e1641fa4944ab52d05813fc8a1d622 |
child 87756 | 92362d0c00e4ae87ce9cc07435ea2b7542328ef1 |
push id | 22143 |
push user | philringnalda@gmail.com |
push date | Sun, 26 Feb 2012 23:12:35 +0000 |
treeherder | mozilla-central@b98fc24ac54b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 729237 |
milestone | 13.0a1 |
backs out | 940194c616f271d65a01818ebe4fdf3e61dc6766 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -1866,35 +1866,34 @@ public class GeckoAppShell // http://developer.android.com/guide/practices/screens_support.html if ((config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE) { return true; } } return false; } - public static void emitGeckoAccessibilityEvent (int eventType, String[] textList, String description, boolean enabled, boolean checked, boolean password) { + public static void emitGeckoAccessibilityEvent (int eventType, String role, String text, String description, boolean enabled, boolean checked, boolean password) { AccessibilityManager accessibilityManager = (AccessibilityManager) GeckoApp.mAppContext.getSystemService(Context.ACCESSIBILITY_SERVICE); if (!accessibilityManager.isEnabled()) return; LayerController layerController = GeckoApp.mAppContext.getLayerController(); LayerView layerView = layerController.getView(); AccessibilityEvent event = AccessibilityEvent.obtain(eventType); - event.setClassName(layerView.getClass().getName()); + event.setClassName(layerView.getClass().getName() + "$" + role); event.setPackageName(GeckoApp.mAppContext.getPackageName()); event.setEnabled(enabled); event.setChecked(checked); event.setPassword(password); event.setContentDescription(description); - for (String text: textList) - event.getText().add(text); + event.getText().add(text); accessibilityManager.sendAccessibilityEvent(event); } public static void viewSizeChanged() { if (mInputConnection != null && mInputConnection.isIMEEnabled()) { sendEventToGecko(GeckoEvent.createBroadcastEvent("ScrollTo:FocusedInput", "")); }
--- a/widget/android/AndroidBridge.cpp +++ b/widget/android/AndroidBridge.cpp @@ -173,27 +173,24 @@ AndroidBridge::Init(JNIEnv *jEnv, jDeleteMessage = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "deleteMessage", "(IIJ)V"); jCreateMessageList = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "createMessageList", "(JJ[Ljava/lang/String;IIZIJ)V"); jGetNextMessageinList = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "getNextMessageInList", "(IIJ)V"); jClearMessageList = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "clearMessageList", "(I)V"); jGetCurrentNetworkInformation = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "getCurrentNetworkInformation", "()[D"); jEnableNetworkNotifications = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "enableNetworkNotifications", "()V"); jDisableNetworkNotifications = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "disableNetworkNotifications", "()V"); - jEmitGeckoAccessibilityEvent = (jmethodID) jEnv->GetStaticMethodID(jGeckoAppShellClass, "emitGeckoAccessibilityEvent", "(I[Ljava/lang/String;Ljava/lang/String;ZZZ)V"); jEGLContextClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("javax/microedition/khronos/egl/EGLContext")); jEGL10Class = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("javax/microedition/khronos/egl/EGL10")); jEGLSurfaceImplClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("com/google/android/gles_jni/EGLSurfaceImpl")); jEGLContextImplClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("com/google/android/gles_jni/EGLContextImpl")); jEGLConfigImplClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("com/google/android/gles_jni/EGLConfigImpl")); jEGLDisplayImplClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("com/google/android/gles_jni/EGLDisplayImpl")); - jStringClass = (jclass) jEnv->NewGlobalRef(jEnv->FindClass("java/lang/String")); - InitAndroidJavaWrappers(jEnv); // jEnv should NOT be cached here by anything -- the jEnv here // is not valid for the real gecko main thread, which is set // at SetMainThread time. return true; } @@ -1485,27 +1482,27 @@ AndroidBridge::MarkURIVisited(const nsAS if (!env) return; AutoLocalJNIFrame jniFrame(env, 1); jstring jstrURI = env->NewString(nsPromiseFlatString(aURI).get(), aURI.Length()); env->CallStaticVoidMethod(mGeckoAppShellClass, jMarkUriVisited, jstrURI); } -void AndroidBridge::EmitGeckoAccessibilityEvent (PRInt32 eventType, const nsTArray<nsString>& text, const nsAString& description, bool enabled, bool checked, bool password) { - AutoLocalJNIFrame jniFrame; - jobjectArray jarrayText = mJNIEnv->NewObjectArray(text.Length(), - jStringClass, 0); - for (PRUint32 i = 0; i < text.Length() ; i++) { - jstring jstrText = mJNIEnv->NewString(nsPromiseFlatString(text[i]).get(), - text[i].Length()); - mJNIEnv->SetObjectArrayElement(jarrayText, i, jstrText); - } - jstring jstrDescription = mJNIEnv->NewString(nsPromiseFlatString(description).get(), description.Length()); - mJNIEnv->CallStaticVoidMethod(mGeckoAppShellClass, jEmitGeckoAccessibilityEvent, eventType, jarrayText, jstrDescription, enabled, checked, password); +void AndroidBridge::EmitGeckoAccessibilityEvent (PRInt32 eventType, const nsAString& role, const nsAString& text, const nsAString& description, bool enabled, bool checked, bool password) { + + JNIEnv *env = GetJNIEnv(); + if (!env) + return; + + AutoLocalJNIFrame jniFrame(env); + jstring jstrRole = env->NewString(nsPromiseFlatString(role).get(), role.Length()); + jstring jstrText = env->NewString(nsPromiseFlatString(text).get(), text.Length()); + jstring jstrDescription = env->NewString(nsPromiseFlatString(description).get(), description.Length()); + env->CallStaticVoidMethod(mGeckoAppShellClass, jEmitGeckoAccessibilityEvent, eventType, jstrRole, jstrText, jstrDescription, enabled, checked, password); } PRUint16 AndroidBridge::GetNumberOfMessagesForText(const nsAString& aText) { ALOG_BRIDGE("AndroidBridge::GetNumberOfMessagesForText"); JNIEnv *env = GetJNIEnv(); @@ -1582,18 +1579,18 @@ AndroidBridge::CreateMessageList(const d JNIEnv *env = GetJNIEnv(); if (!env) return; AutoLocalJNIFrame jniFrame(env); jobjectArray numbers = (jobjectArray)env->NewObjectArray(aFilter.numbers().Length(), - jStringClass, - env->NewStringUTF("")); + env->FindClass("java/lang/String"), + env->NewStringUTF("")); for (PRUint32 i = 0; i < aFilter.numbers().Length(); ++i) { env->SetObjectArrayElement(numbers, i, env->NewStringUTF(NS_ConvertUTF16toUTF8(aFilter.numbers()[i]).get())); } env->CallStaticVoidMethod(mGeckoAppShellClass, jCreateMessageList, aFilter.startDate(), aFilter.endDate(),
--- a/widget/android/AndroidBridge.h +++ b/widget/android/AndroidBridge.h @@ -352,17 +352,17 @@ public: bool LockWindow(void *window, unsigned char **bits, int *width, int *height, int *format, int *stride); bool UnlockWindow(void *window); void HandleGeckoMessage(const nsAString& message, nsAString &aRet); nsCOMPtr<nsIAndroidDrawMetadataProvider> GetDrawMetadataProvider(); - void EmitGeckoAccessibilityEvent (PRInt32 eventType, const nsTArray<nsString>& text, const nsAString& description, bool enabled, bool checked, bool password); + void EmitGeckoAccessibilityEvent (PRInt32 eventType, const nsAString& role, const nsAString& text, const nsAString& description, bool enabled, bool checked, bool password); void CheckURIVisited(const nsAString& uri); void MarkURIVisited(const nsAString& uri); bool InitCamera(const nsCString& contentType, PRUint32 camera, PRUint32 *width, PRUint32 *height, PRUint32 *fps); void CloseCamera(); @@ -493,19 +493,16 @@ protected: // stuff we need for CallEglCreateWindowSurface jclass jEGLSurfaceImplClass; jclass jEGLContextImplClass; jclass jEGLConfigImplClass; jclass jEGLDisplayImplClass; jclass jEGLContextClass; jclass jEGL10Class; - // some convinient types to have around - jclass jStringClass; - // calls we've dlopened from libjnigraphics.so int (* AndroidBitmap_getInfo)(JNIEnv *env, jobject bitmap, void *info); int (* AndroidBitmap_lockPixels)(JNIEnv *env, jobject bitmap, void **buffer); int (* AndroidBitmap_unlockPixels)(JNIEnv *env, jobject bitmap); void* (*ANativeWindow_fromSurface)(JNIEnv *env, jobject surface); void (*ANativeWindow_release)(void *window); int (*ANativeWindow_setBuffersGeometry)(void *window, int width, int height, int format);