Commit 4bb37d93 authored by Sara Kato's avatar Sara Kato Committed by Commit Bot

Move action conversion to arc_a11y_util

Currently arc_a11y_helper_bridge converts mojom actions to android
actions, however it's cleaner if this handling is done in arc_a11y_util.

Bug: b/145316954
Test: refactoring
Test: ArcAccessibilityHelperBridgeTest.* passes
Change-Id: I48e1367a479bfc2d44664c2c4de6ce96eda44daf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1975478
Commit-Queue: Sara Kato <sarakato@chromium.org>
Reviewed-by: default avatarHiroki Sato <hirokisato@chromium.org>
Reviewed-by: default avatarSara Kato <sarakato@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732245}
parent 9b4367a9
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h" #include "base/command_line.h"
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.h"
#include "chrome/browser/chromeos/arc/accessibility/geometry_util.h" #include "chrome/browser/chromeos/arc/accessibility/geometry_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h"
...@@ -380,109 +381,57 @@ void ArcAccessibilityHelperBridge::OnAction( ...@@ -380,109 +381,57 @@ void ArcAccessibilityHelperBridge::OnAction(
const ui::AXActionData& data) const { const ui::AXActionData& data) const {
DCHECK(data.target_node_id); DCHECK(data.target_node_id);
arc::mojom::AccessibilityActionDataPtr action_data =
arc::mojom::AccessibilityActionData::New();
action_data->node_id = data.target_node_id;
AXTreeSourceArc* tree_source = GetFromTreeId(data.target_tree_id); AXTreeSourceArc* tree_source = GetFromTreeId(data.target_tree_id);
if (!tree_source) if (!tree_source)
return; return;
if (data.action == ax::mojom::Action::kInternalInvalidateTree) {
tree_source->InvalidateTree();
return;
}
base::Optional<int32_t> window_id = tree_source->window_id(); base::Optional<int32_t> window_id = tree_source->window_id();
if (!window_id) if (!window_id)
return; return;
arc::mojom::AccessibilityActionDataPtr action_data =
arc::mojom::AccessibilityActionData::New();
action_data->node_id = data.target_node_id;
action_data->window_id = window_id.value(); action_data->window_id = window_id.value();
switch (data.action) { const base::Optional<mojom::AccessibilityActionType> action =
case ax::mojom::Action::kDoDefault: ConvertToAndroidAction(data.action);
action_data->action_type = arc::mojom::AccessibilityActionType::CLICK; if (!action.has_value())
break; return;
case ax::mojom::Action::kFocus:
action_data->action_type =
arc::mojom::AccessibilityActionType::ACCESSIBILITY_FOCUS;
break;
case ax::mojom::Action::kScrollToMakeVisible:
action_data->action_type =
arc::mojom::AccessibilityActionType::SHOW_ON_SCREEN;
break;
case ax::mojom::Action::kScrollBackward:
action_data->action_type =
arc::mojom::AccessibilityActionType::SCROLL_BACKWARD;
break;
case ax::mojom::Action::kScrollForward:
action_data->action_type =
arc::mojom::AccessibilityActionType::SCROLL_FORWARD;
break;
case ax::mojom::Action::kScrollUp:
action_data->action_type = arc::mojom::AccessibilityActionType::SCROLL_UP;
break;
case ax::mojom::Action::kScrollDown:
action_data->action_type =
arc::mojom::AccessibilityActionType::SCROLL_DOWN;
break;
case ax::mojom::Action::kScrollLeft:
action_data->action_type =
arc::mojom::AccessibilityActionType::SCROLL_LEFT;
break;
case ax::mojom::Action::kScrollRight:
action_data->action_type =
arc::mojom::AccessibilityActionType::SCROLL_RIGHT;
break;
case ax::mojom::Action::kCustomAction:
action_data->action_type =
arc::mojom::AccessibilityActionType::CUSTOM_ACTION;
action_data->custom_action_id = data.custom_action_id;
break;
case ax::mojom::Action::kSetAccessibilityFocus:
action_data->action_type =
arc::mojom::AccessibilityActionType::ACCESSIBILITY_FOCUS;
break;
case ax::mojom::Action::kClearAccessibilityFocus:
action_data->action_type =
arc::mojom::AccessibilityActionType::CLEAR_ACCESSIBILITY_FOCUS;
break;
case ax::mojom::Action::kGetTextLocation: {
action_data->action_type =
arc::mojom::AccessibilityActionType::GET_TEXT_LOCATION;
action_data->start_index = data.start_index;
action_data->end_index = data.end_index;
auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service_->accessibility_helper(), RefreshWithExtraData);
if (!instance) {
OnActionResult(data, false);
return;
}
instance->RefreshWithExtraData( action_data->action_type = action.value();
std::move(action_data),
base::BindOnce( if (action_data->action_type ==
&ArcAccessibilityHelperBridge::OnGetTextLocationDataResult, arc::mojom::AccessibilityActionType::GET_TEXT_LOCATION) {
base::Unretained(this), data)); action_data->start_index = data.start_index;
action_data->end_index = data.end_index;
auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service_->accessibility_helper(), RefreshWithExtraData);
if (!instance) {
OnActionResult(data, false);
return; return;
} }
case ax::mojom::Action::kShowTooltip: { instance->RefreshWithExtraData(
action_data->action_type = std::move(action_data),
arc::mojom::AccessibilityActionType::SHOW_TOOLTIP; base::BindOnce(
break; &ArcAccessibilityHelperBridge::OnGetTextLocationDataResult,
} base::Unretained(this), data));
case ax::mojom::Action::kHideTooltip: { return;
action_data->action_type = } else if (action_data->action_type ==
arc::mojom::AccessibilityActionType::HIDE_TOOLTIP; arc::mojom::AccessibilityActionType::CUSTOM_ACTION) {
break; action_data->custom_action_id = data.custom_action_id;
}
case ax::mojom::Action::kInternalInvalidateTree:
tree_source->InvalidateTree();
break;
default:
return;
} }
auto* instance = ARC_GET_INSTANCE_FOR_METHOD( auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service_->accessibility_helper(), PerformAction); arc_bridge_service_->accessibility_helper(), PerformAction);
if (!instance) { if (!instance) {
// This case should probably destroy all trees. // TODO (b/146809329): This case should probably destroy all trees.
OnActionResult(data, false); OnActionResult(data, false);
return; return;
} }
......
...@@ -73,6 +73,44 @@ ax::mojom::Event ToAXEvent( ...@@ -73,6 +73,44 @@ ax::mojom::Event ToAXEvent(
return ax::mojom::Event::kChildrenChanged; return ax::mojom::Event::kChildrenChanged;
} }
base::Optional<mojom::AccessibilityActionType> ConvertToAndroidAction(
ax::mojom::Action action) {
switch (action) {
case ax::mojom::Action::kDoDefault:
return arc::mojom::AccessibilityActionType::CLICK;
case ax::mojom::Action::kFocus:
return arc::mojom::AccessibilityActionType::ACCESSIBILITY_FOCUS;
case ax::mojom::Action::kScrollToMakeVisible:
return arc::mojom::AccessibilityActionType::SHOW_ON_SCREEN;
case ax::mojom::Action::kScrollBackward:
return arc::mojom::AccessibilityActionType::SCROLL_BACKWARD;
case ax::mojom::Action::kScrollForward:
return arc::mojom::AccessibilityActionType::SCROLL_FORWARD;
case ax::mojom::Action::kScrollUp:
return arc::mojom::AccessibilityActionType::SCROLL_UP;
case ax::mojom::Action::kScrollDown:
return arc::mojom::AccessibilityActionType::SCROLL_DOWN;
case ax::mojom::Action::kScrollLeft:
return arc::mojom::AccessibilityActionType::SCROLL_LEFT;
case ax::mojom::Action::kScrollRight:
return arc::mojom::AccessibilityActionType::SCROLL_RIGHT;
case ax::mojom::Action::kCustomAction:
return arc::mojom::AccessibilityActionType::CUSTOM_ACTION;
case ax::mojom::Action::kSetAccessibilityFocus:
return arc::mojom::AccessibilityActionType::ACCESSIBILITY_FOCUS;
case ax::mojom::Action::kClearAccessibilityFocus:
return arc::mojom::AccessibilityActionType::CLEAR_ACCESSIBILITY_FOCUS;
case ax::mojom::Action::kGetTextLocation:
return arc::mojom::AccessibilityActionType::GET_TEXT_LOCATION;
case ax::mojom::Action::kShowTooltip:
return arc::mojom::AccessibilityActionType::SHOW_TOOLTIP;
case ax::mojom::Action::kHideTooltip:
return arc::mojom::AccessibilityActionType::HIDE_TOOLTIP;
default:
return base::nullopt;
}
}
bool GetBooleanProperty(mojom::AccessibilityNodeInfoData* node, bool GetBooleanProperty(mojom::AccessibilityNodeInfoData* node,
mojom::AccessibilityBooleanProperty prop) { mojom::AccessibilityBooleanProperty prop) {
if (!node || !node->boolean_properties) if (!node || !node->boolean_properties)
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
#include "base/optional.h"
#include "components/arc/mojom/accessibility_helper.mojom-forward.h" #include "components/arc/mojom/accessibility_helper.mojom-forward.h"
#include "ui/accessibility/ax_enum_util.h" #include "ui/accessibility/ax_enum_util.h"
...@@ -16,6 +17,9 @@ namespace arc { ...@@ -16,6 +17,9 @@ namespace arc {
ax::mojom::Event ToAXEvent(mojom::AccessibilityEventType arc_event_type, ax::mojom::Event ToAXEvent(mojom::AccessibilityEventType arc_event_type,
mojom::AccessibilityNodeInfoData* node_info_data); mojom::AccessibilityNodeInfoData* node_info_data);
base::Optional<mojom::AccessibilityActionType> ConvertToAndroidAction(
ax::mojom::Action action);
// TODO(hirokisato) clean up GetProperty methods in AccessibilityNodeInfoData // TODO(hirokisato) clean up GetProperty methods in AccessibilityNodeInfoData
// and AccessibilityWindowInfoData. // and AccessibilityWindowInfoData.
bool GetBooleanProperty(mojom::AccessibilityNodeInfoData* node, bool GetBooleanProperty(mojom::AccessibilityNodeInfoData* node,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment