Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Unified Diff: content/browser/accessibility/browser_accessibility_manager_android.cc

Issue 15741009: Native Android accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split RendererAccessibilityFocusOnly fix into separate changelist Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698