Index: content/browser/accessibility/browser_accessibility_manager_android.cc |
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc |
index 5b57b482caaf98ad26b5f4a27dc1d4af1d2b1435..d7ac9547e8c48f43b79180f9b081013c94c151e7 100644 |
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc |
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc |
@@ -13,6 +13,7 @@ |
#include "base/values.h" |
#include "content/browser/accessibility/browser_accessibility_android.h" |
#include "content/common/accessibility_messages.h" |
+#include "jni/BrowserAccessibilityManager_jni.h" |
using base::android::AttachCurrentThread; |
using base::android::ScopedJavaLocalRef; |
@@ -51,16 +52,19 @@ BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( |
if (content_view_core.is_null()) |
return; |
- // TODO(aboxhall): set up Java references |
+ JNIEnv* env = AttachCurrentThread(); |
+ java_ref_ = JavaObjectWeakGlobalRef( |
+ env, Java_BrowserAccessibilityManager_create( |
+ env, reinterpret_cast<jint>(this), content_view_core.obj()).obj()); |
} |
BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
+ JNIEnv* env = AttachCurrentThread(); |
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
if (obj.is_null()) |
return; |
- // TODO(aboxhall): tear down Java references |
+ Java_BrowserAccessibilityManager_onNativeObjectDestroyed(env, obj.obj()); |
} |
// static |
@@ -75,13 +79,52 @@ AccessibilityNodeData BrowserAccessibilityManagerAndroid::GetEmptyDocument() { |
void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent( |
int type, |
BrowserAccessibility* node) { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
+ JNIEnv* env = AttachCurrentThread(); |
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
if (obj.is_null()) |
return; |
- // TODO(aboxhall): call into appropriate Java method for each type of |
- // notification |
+ switch (type) { |
+ case AccessibilityNotificationLoadComplete: |
bulach
2013/06/19 10:26:53
not quite clear where these enum is coming from, b
dmazzoni
2013/06/19 19:54:41
It's been around for a while and that used to be a
|
+ Java_BrowserAccessibilityManager_handlePageLoaded( |
+ env, obj.obj(), focus_->renderer_id()); |
+ break; |
+ case AccessibilityNotificationFocusChanged: |
+ Java_BrowserAccessibilityManager_handleFocusChanged( |
+ env, obj.obj(), node->renderer_id()); |
+ break; |
+ case AccessibilityNotificationCheckStateChanged: |
+ Java_BrowserAccessibilityManager_handleCheckStateChanged( |
+ env, obj.obj(), node->renderer_id()); |
+ break; |
+ case AccessibilityNotificationScrolledToAnchor: |
+ Java_BrowserAccessibilityManager_handleScrolledToAnchor( |
+ env, obj.obj(), node->renderer_id()); |
+ break; |
+ case AccessibilityNotificationAlert: |
+ Java_BrowserAccessibilityManager_announceObjectShow( |
+ env, obj.obj(), node->renderer_id(), JNI_TRUE); |
bulach
2013/06/19 10:26:53
nit: missing break, is it intentional? if it is, p
dmazzoni
2013/06/19 19:54:41
Thanks, this was a bug.
|
+ case AccessibilityNotificationObjectShow: |
+ Java_BrowserAccessibilityManager_announceObjectShow( |
+ env, obj.obj(), node->renderer_id(), JNI_FALSE); |
bulach
2013/06/19 10:26:53
ditto
dmazzoni
2013/06/19 19:54:41
Done.
|
+ case AccessibilityNotificationSelectedTextChanged: |
+ Java_BrowserAccessibilityManager_handleTextSelectionChanged( |
+ env, obj.obj(), node->renderer_id()); |
+ break; |
+ case AccessibilityNotificationChildrenChanged: |
+ case AccessibilityNotificationTextChanged: |
+ case AccessibilityNotificationValueChanged: |
+ if (node->IsEditableText()) { |
+ Java_BrowserAccessibilityManager_handleEditableTextChanged( |
+ env, obj.obj(), node->renderer_id()); |
+ } else { |
+ Java_BrowserAccessibilityManager_handleContentChanged( |
+ env, obj.obj(), node->renderer_id()); |
+ } |
+ break; |
+ default: |
+ break; |
bulach
2013/06/19 10:26:53
nit: NOTREACHED() ?
dmazzoni
2013/06/19 19:54:41
I don't want this, but I added a comment.
|
+ } |
} |
jint BrowserAccessibilityManagerAndroid::GetRootId(JNIEnv* env, jobject obj) { |
@@ -168,7 +211,12 @@ jint BrowserAccessibilityManagerAndroid::GetNativeNodeById( |
} |
void BrowserAccessibilityManagerAndroid::NotifyRootChanged() { |
- // TODO(aboxhall): non-stub implementation |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
+ if (obj.is_null()) |
+ return; |
+ |
+ Java_BrowserAccessibilityManager_handleNavigate(env, obj.obj()); |
} |
bool |
@@ -178,8 +226,7 @@ BrowserAccessibilityManagerAndroid::UseRootScrollOffsetsWhenComputingBounds() { |
} |
bool RegisterBrowserAccessibilityManager(JNIEnv* env) { |
- // TODO(aboxhall): non-stub implementation |
- return false; |
+ return RegisterNativesImpl(env); |
} |
} // namespace content |