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 @@
#include "base/bind.h"
#include "base/command_line.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/profiles/profile.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h"
......@@ -380,109 +381,57 @@ void ArcAccessibilityHelperBridge::OnAction(
const ui::AXActionData& data) const {
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);
if (!tree_source)
return;
if (data.action == ax::mojom::Action::kInternalInvalidateTree) {
tree_source->InvalidateTree();
return;
}
base::Optional<int32_t> window_id = tree_source->window_id();
if (!window_id)
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();
switch (data.action) {
case ax::mojom::Action::kDoDefault:
action_data->action_type = arc::mojom::AccessibilityActionType::CLICK;
break;
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;
}
const base::Optional<mojom::AccessibilityActionType> action =
ConvertToAndroidAction(data.action);
if (!action.has_value())
return;
instance->RefreshWithExtraData(
std::move(action_data),
base::BindOnce(
&ArcAccessibilityHelperBridge::OnGetTextLocationDataResult,
base::Unretained(this), data));
action_data->action_type = action.value();
if (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;
}
case ax::mojom::Action::kShowTooltip: {
action_data->action_type =
arc::mojom::AccessibilityActionType::SHOW_TOOLTIP;
break;
}
case ax::mojom::Action::kHideTooltip: {
action_data->action_type =
arc::mojom::AccessibilityActionType::HIDE_TOOLTIP;
break;
}
case ax::mojom::Action::kInternalInvalidateTree:
tree_source->InvalidateTree();
break;
default:
return;
instance->RefreshWithExtraData(
std::move(action_data),
base::BindOnce(
&ArcAccessibilityHelperBridge::OnGetTextLocationDataResult,
base::Unretained(this), data));
return;
} else if (action_data->action_type ==
arc::mojom::AccessibilityActionType::CUSTOM_ACTION) {
action_data->custom_action_id = data.custom_action_id;
}
auto* instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service_->accessibility_helper(), PerformAction);
if (!instance) {
// This case should probably destroy all trees.
// TODO (b/146809329): This case should probably destroy all trees.
OnActionResult(data, false);
return;
}
......
......@@ -73,6 +73,44 @@ ax::mojom::Event ToAXEvent(
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,
mojom::AccessibilityBooleanProperty prop) {
if (!node || !node->boolean_properties)
......
......@@ -8,6 +8,7 @@
#include <stdint.h>
#include <vector>
#include "base/optional.h"
#include "components/arc/mojom/accessibility_helper.mojom-forward.h"
#include "ui/accessibility/ax_enum_util.h"
......@@ -16,6 +17,9 @@ namespace arc {
ax::mojom::Event ToAXEvent(mojom::AccessibilityEventType arc_event_type,
mojom::AccessibilityNodeInfoData* node_info_data);
base::Optional<mojom::AccessibilityActionType> ConvertToAndroidAction(
ax::mojom::Action action);
// TODO(hirokisato) clean up GetProperty methods in AccessibilityNodeInfoData
// and AccessibilityWindowInfoData.
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