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

Side by Side Diff: content/browser/accessibility/browser_accessibility_manager_android.cc

Issue 1872013002: Fix Android accessibility for editable text fields (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update test expectation Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 5 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <cmath> 9 #include <cmath>
10 10
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 if (content_view_core.is_null()) 174 if (content_view_core.is_null())
175 return; 175 return;
176 176
177 JNIEnv* env = AttachCurrentThread(); 177 JNIEnv* env = AttachCurrentThread();
178 java_ref_ = JavaObjectWeakGlobalRef( 178 java_ref_ = JavaObjectWeakGlobalRef(
179 env, Java_BrowserAccessibilityManager_create( 179 env, Java_BrowserAccessibilityManager_create(
180 env, reinterpret_cast<intptr_t>(this), 180 env, reinterpret_cast<intptr_t>(this),
181 content_view_core.obj()).obj()); 181 content_view_core.obj()).obj());
182 } 182 }
183 183
184 bool BrowserAccessibilityManagerAndroid::ShouldExposePasswordText() {
185 JNIEnv* env = AttachCurrentThread();
186 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager();
187 if (obj.is_null())
188 return false;
189
190 return Java_BrowserAccessibilityManager_shouldExposePasswordText(
191 env, obj.obj());
192 }
193
184 void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent( 194 void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent(
185 ui::AXEvent event_type, 195 ui::AXEvent event_type,
186 BrowserAccessibility* node) { 196 BrowserAccessibility* node) {
187 JNIEnv* env = AttachCurrentThread(); 197 JNIEnv* env = AttachCurrentThread();
188 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager(); 198 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager();
189 if (obj.is_null()) 199 if (obj.is_null())
190 return; 200 return;
191 201
192 BrowserAccessibilityAndroid* android_node = 202 BrowserAccessibilityAndroid* android_node =
193 static_cast<BrowserAccessibilityAndroid*>(node); 203 static_cast<BrowserAccessibilityAndroid*>(node);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 node->CanScrollLeft(), 406 node->CanScrollLeft(),
397 node->CanScrollRight(), 407 node->CanScrollRight(),
398 node->IsClickable(), 408 node->IsClickable(),
399 node->IsEditableText(), 409 node->IsEditableText(),
400 node->IsEnabled(), 410 node->IsEnabled(),
401 node->IsFocusable(), 411 node->IsFocusable(),
402 node->IsFocused()); 412 node->IsFocused());
403 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoClassName( 413 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoClassName(
404 env, obj, info, 414 env, obj, info,
405 base::android::ConvertUTF8ToJavaString(env, node->GetClassName()).obj()); 415 base::android::ConvertUTF8ToJavaString(env, node->GetClassName()).obj());
406 if (!node->IsPassword() || 416 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoText(
407 Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) { 417 env, obj, info,
408 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoContentDescription( 418 base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj(),
409 env, obj, info, 419 node->IsLink(),
410 base::android::ConvertUTF16ToJavaString(env, node->GetText()).obj(), 420 node->IsEditableText());
411 node->IsLink());
412 }
413 base::string16 element_id; 421 base::string16 element_id;
414 if (node->GetHtmlAttribute("id", &element_id)) { 422 if (node->GetHtmlAttribute("id", &element_id)) {
415 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoViewIdResourceName( 423 Java_BrowserAccessibilityManager_setAccessibilityNodeInfoViewIdResourceName(
416 env, obj, info, 424 env, obj, info,
417 base::android::ConvertUTF16ToJavaString(env, element_id).obj()); 425 base::android::ConvertUTF16ToJavaString(env, element_id).obj());
418 } 426 }
419 427
420 gfx::Rect absolute_rect = node->GetLocalBoundsRect(); 428 gfx::Rect absolute_rect = node->GetLocalBoundsRect();
421 gfx::Rect parent_relative_rect = absolute_rect; 429 gfx::Rect parent_relative_rect = absolute_rect;
422 if (node->GetParent()) { 430 if (node->GetParent()) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 node->GetItemCount()); 507 node->GetItemCount());
500 Java_BrowserAccessibilityManager_setAccessibilityEventScrollAttributes( 508 Java_BrowserAccessibilityManager_setAccessibilityEventScrollAttributes(
501 env, obj, event, 509 env, obj, event,
502 node->GetScrollX(), 510 node->GetScrollX(),
503 node->GetScrollY(), 511 node->GetScrollY(),
504 node->GetMaxScrollX(), 512 node->GetMaxScrollX(),
505 node->GetMaxScrollY()); 513 node->GetMaxScrollY());
506 514
507 switch (event_type) { 515 switch (event_type) {
508 case ANDROID_ACCESSIBILITY_EVENT_TEXT_CHANGED: { 516 case ANDROID_ACCESSIBILITY_EVENT_TEXT_CHANGED: {
509 base::string16 before_text, text; 517 base::string16 before_text = node->GetTextChangeBeforeText();
510 if (!node->IsPassword() || 518 base::string16 text = node->GetText();
511 Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
512 before_text = node->GetTextChangeBeforeText();
513 text = node->GetText();
514 }
515 Java_BrowserAccessibilityManager_setAccessibilityEventTextChangedAttrs( 519 Java_BrowserAccessibilityManager_setAccessibilityEventTextChangedAttrs(
516 env, obj, event, 520 env, obj, event,
517 node->GetTextChangeFromIndex(), 521 node->GetTextChangeFromIndex(),
518 node->GetTextChangeAddedCount(), 522 node->GetTextChangeAddedCount(),
519 node->GetTextChangeRemovedCount(), 523 node->GetTextChangeRemovedCount(),
520 base::android::ConvertUTF16ToJavaString( 524 base::android::ConvertUTF16ToJavaString(
521 env, before_text).obj(), 525 env, before_text).obj(),
522 base::android::ConvertUTF16ToJavaString(env, text).obj()); 526 base::android::ConvertUTF16ToJavaString(env, text).obj());
523 break; 527 break;
524 } 528 }
525 case ANDROID_ACCESSIBILITY_EVENT_TEXT_SELECTION_CHANGED: { 529 case ANDROID_ACCESSIBILITY_EVENT_TEXT_SELECTION_CHANGED: {
526 base::string16 text; 530 base::string16 text = node->GetText();
527 if (!node->IsPassword() ||
528 Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
529 text = node->GetText();
530 }
531 Java_BrowserAccessibilityManager_setAccessibilityEventSelectionAttrs( 531 Java_BrowserAccessibilityManager_setAccessibilityEventSelectionAttrs(
532 env, obj, event, 532 env, obj, event,
533 node->GetSelectionStart(), 533 node->GetSelectionStart(),
534 node->GetSelectionEnd(), 534 node->GetSelectionEnd(),
535 node->GetEditableTextLength(), 535 node->GetEditableTextLength(),
536 base::android::ConvertUTF16ToJavaString(env, text).obj()); 536 base::android::ConvertUTF16ToJavaString(env, text).obj());
537 break; 537 break;
538 } 538 }
539 default: 539 default:
540 break; 540 break;
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 jint id, 737 jint id,
738 jint cursor_index) { 738 jint cursor_index) {
739 BrowserAccessibilityAndroid* node = GetFromUniqueID(id); 739 BrowserAccessibilityAndroid* node = GetFromUniqueID(id);
740 if (!node) 740 if (!node)
741 return false; 741 return false;
742 742
743 jint start_index = -1; 743 jint start_index = -1;
744 int end_index = -1; 744 int end_index = -1;
745 if (NextAtGranularity(granularity, cursor_index, node, 745 if (NextAtGranularity(granularity, cursor_index, node,
746 &start_index, &end_index)) { 746 &start_index, &end_index)) {
747 base::string16 text; 747 base::string16 text = node->GetText();
748 if (!node->IsPassword() ||
749 Java_BrowserAccessibilityManager_shouldExposePasswordText(env, obj)) {
750 text = node->GetText();
751 }
752 Java_BrowserAccessibilityManager_finishGranularityMove( 748 Java_BrowserAccessibilityManager_finishGranularityMove(
753 env, obj, base::android::ConvertUTF16ToJavaString( 749 env, obj, base::android::ConvertUTF16ToJavaString(
754 env, text).obj(), 750 env, text).obj(),
755 extend_selection, start_index, end_index, true); 751 extend_selection, start_index, end_index, true);
756 return true; 752 return true;
757 } 753 }
758 return false; 754 return false;
759 } 755 }
760 756
761 jboolean BrowserAccessibilityManagerAndroid::PreviousAtGranularity( 757 jboolean BrowserAccessibilityManagerAndroid::PreviousAtGranularity(
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 939
944 JNIEnv* env = AttachCurrentThread(); 940 JNIEnv* env = AttachCurrentThread();
945 return root_manager->java_ref().get(env); 941 return root_manager->java_ref().get(env);
946 } 942 }
947 943
948 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { 944 bool RegisterBrowserAccessibilityManager(JNIEnv* env) {
949 return RegisterNativesImpl(env); 945 return RegisterNativesImpl(env);
950 } 946 }
951 947
952 } // namespace content 948 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698