| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bri
dge.h" | 5 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bri
dge.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" | 8 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
| 9 #include "chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h" | 9 #include "chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h" |
| 10 #include "chromeos/chromeos_switches.h" | 10 #include "chromeos/chromeos_switches.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 class FocusStealer : public views::View { | 25 class FocusStealer : public views::View { |
| 26 public: | 26 public: |
| 27 explicit FocusStealer(int32_t id) : id_(id) { | 27 explicit FocusStealer(int32_t id) : id_(id) { |
| 28 SetFocusBehavior(views::View::FocusBehavior::ALWAYS); | 28 SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
| 29 set_owned_by_client(); | 29 set_owned_by_client(); |
| 30 } | 30 } |
| 31 | 31 |
| 32 // views::View overrides. | 32 // views::View overrides. |
| 33 void GetAccessibleNodeData(ui::AXNodeData* node_data) override { | 33 void GetAccessibleNodeData(ui::AXNodeData* node_data) override { |
| 34 node_data->AddIntAttribute(ui::AX_ATTR_CHILD_TREE_ID, id_); | 34 node_data->AddIntAttribute(ui::AX_ATTR_CHILD_TREE_ID, id_); |
| 35 node_data->role = ui::AX_ROLE_CLIENT; |
| 35 } | 36 } |
| 36 | 37 |
| 37 private: | 38 private: |
| 38 int32_t id_; | 39 int32_t id_; |
| 39 DISALLOW_COPY_AND_ASSIGN(FocusStealer); | 40 DISALLOW_COPY_AND_ASSIGN(FocusStealer); |
| 40 }; | 41 }; |
| 41 | 42 |
| 42 exo::Surface* GetArcSurface(const aura::Window* window) { | 43 exo::Surface* GetArcSurface(const aura::Window* window) { |
| 43 if (!window) | 44 if (!window) |
| 44 return nullptr; | 45 return nullptr; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 arc_bridge_service()->accessibility_helper(), Init); | 89 arc_bridge_service()->accessibility_helper(), Init); |
| 89 DCHECK(instance); | 90 DCHECK(instance); |
| 90 instance->Init(binding_.CreateInterfacePtrAndBind()); | 91 instance->Init(binding_.CreateInterfacePtrAndBind()); |
| 91 | 92 |
| 92 chromeos::AccessibilityManager* accessibility_manager = | 93 chromeos::AccessibilityManager* accessibility_manager = |
| 93 chromeos::AccessibilityManager::Get(); | 94 chromeos::AccessibilityManager::Get(); |
| 94 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 95 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 95 chromeos::switches::kEnableChromeVoxArcSupport)) { | 96 chromeos::switches::kEnableChromeVoxArcSupport)) { |
| 96 instance->SetFilter(arc::mojom::AccessibilityFilterType::ALL); | 97 instance->SetFilter(arc::mojom::AccessibilityFilterType::ALL); |
| 97 if (!tree_source_) { | 98 if (!tree_source_) { |
| 98 tree_source_.reset(new AXTreeSourceArc()); | 99 tree_source_.reset(new AXTreeSourceArc(tree_id())); |
| 99 focus_stealer_.reset(new FocusStealer(tree_source_->tree_id())); | 100 focus_stealer_.reset(new FocusStealer(tree_source_->tree_id())); |
| 100 exo::WMHelper::GetInstance()->AddActivationObserver(this); | 101 exo::WMHelper::GetInstance()->AddActivationObserver(this); |
| 101 } | 102 } |
| 102 } else if (accessibility_manager && | 103 } else if (accessibility_manager && |
| 103 accessibility_manager->IsFocusHighlightEnabled()) { | 104 accessibility_manager->IsFocusHighlightEnabled()) { |
| 104 instance->SetFilter(arc::mojom::AccessibilityFilterType::FOCUS); | 105 instance->SetFilter(arc::mojom::AccessibilityFilterType::FOCUS); |
| 105 } | 106 } |
| 106 } | 107 } |
| 107 | 108 |
| 108 void ArcAccessibilityHelperBridge::OnAccessibilityEventDeprecated( | 109 void ArcAccessibilityHelperBridge::OnAccessibilityEventDeprecated( |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 views::Widget* widget = views::Widget::GetWidgetForNativeView(gained_active); | 153 views::Widget* widget = views::Widget::GetWidgetForNativeView(gained_active); |
| 153 if (widget && widget->GetContentsView()) { | 154 if (widget && widget->GetContentsView()) { |
| 154 views::View* view = widget->GetContentsView(); | 155 views::View* view = widget->GetContentsView(); |
| 155 if (!view->Contains(focus_stealer_.get())) | 156 if (!view->Contains(focus_stealer_.get())) |
| 156 view->AddChildView(focus_stealer_.get()); | 157 view->AddChildView(focus_stealer_.get()); |
| 157 focus_stealer_->RequestFocus(); | 158 focus_stealer_->RequestFocus(); |
| 158 view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false); | 159 view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false); |
| 159 } | 160 } |
| 160 } | 161 } |
| 161 | 162 |
| 163 void ArcAccessibilityHelperBridge::PerformAction(const ui::AXActionData& data) { |
| 164 arc::mojom::AccessibilityActionType mojo_action; |
| 165 switch (data.action) { |
| 166 case ui::AX_ACTION_DO_DEFAULT: |
| 167 mojo_action = arc::mojom::AccessibilityActionType::CLICK; |
| 168 break; |
| 169 default: |
| 170 return; |
| 171 } |
| 172 |
| 173 auto* instance = ARC_GET_INSTANCE_FOR_METHOD( |
| 174 arc_bridge_service()->accessibility_helper(), PerformAction); |
| 175 instance->PerformAction(data.target_node_id, mojo_action); |
| 176 } |
| 177 |
| 162 } // namespace arc | 178 } // namespace arc |
| OLD | NEW |