Chromium Code Reviews| 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 |