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

Unified Diff: chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc

Issue 2826423003: Expand Chrome OS ARC support to create one tree source per package (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
index 908e8737ed31b5d7d29ff1076bbef939e58ea61d..59916bc4a0cb815f538bf1f2cf0d7d2efe434f27 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
@@ -25,10 +25,20 @@ namespace {
class FocusStealer : public views::View {
public:
explicit FocusStealer(int32_t id) : id_(id) {
- SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
set_owned_by_client();
}
+ void StartStealing() {
+ SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
+ RequestFocus();
+ parent()->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+ }
+
+ void StopStealing() {
+ SetFocusBehavior(views::View::FocusBehavior::NEVER);
+ parent()->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+ }
+
// views::View overrides.
void GetAccessibleNodeData(ui::AXNodeData* node_data) override {
node_data->AddIntAttribute(ui::AX_ATTR_CHILD_TREE_ID, id_);
@@ -70,6 +80,25 @@ void DispatchFocusChange(arc::mojom::AccessibilityNodeInfoData* node_data) {
accessibility_manager->OnViewFocusedInArc(bounds_in_screen);
}
+arc::mojom::AccessibilityFilterType GetFilterType() {
+ chromeos::AccessibilityManager* accessibility_manager =
+ chromeos::AccessibilityManager::Get();
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ chromeos::switches::kEnableChromeVoxArcSupport))
Luis Héctor Chávez 2017/04/21 15:20:07 nit: you cannot elide braces on this block since t
David Tseng 2017/04/25 18:29:48 Done (though note that this seems somewhat ambiguo
+ return arc::mojom::AccessibilityFilterType::ALL;
+
+ if (!accessibility_manager)
+ return arc::mojom::AccessibilityFilterType::OFF;
+
+ if (accessibility_manager->IsSpokenFeedbackEnabled())
+ return arc::mojom::AccessibilityFilterType::WHITELISTED_PACKAGE_NAME;
+
+ if (accessibility_manager->IsFocusHighlightEnabled())
+ return arc::mojom::AccessibilityFilterType::FOCUS;
+
+ return arc::mojom::AccessibilityFilterType::OFF;
+}
+
} // namespace
namespace arc {
@@ -90,19 +119,21 @@ void ArcAccessibilityHelperBridge::OnInstanceReady() {
DCHECK(instance);
instance->Init(binding_.CreateInterfacePtrAndBind());
- chromeos::AccessibilityManager* accessibility_manager =
- chromeos::AccessibilityManager::Get();
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kEnableChromeVoxArcSupport)) {
- instance->SetFilter(arc::mojom::AccessibilityFilterType::ALL);
- if (!tree_source_) {
- tree_source_.reset(new AXTreeSourceArc(tree_id()));
- focus_stealer_.reset(new FocusStealer(tree_source_->tree_id()));
- exo::WMHelper::GetInstance()->AddActivationObserver(this);
- }
- } else if (accessibility_manager &&
- accessibility_manager->IsFocusHighlightEnabled()) {
- instance->SetFilter(arc::mojom::AccessibilityFilterType::FOCUS);
+ arc::mojom::AccessibilityFilterType filter_type = GetFilterType();
+ instance->SetFilter(filter_type);
+
+ switch (filter_type) {
+ case arc::mojom::AccessibilityFilterType::ALL:
Luis Héctor Chávez 2017/04/21 15:20:07 Consider adding // fallthrough on the cases wher
David Tseng 2017/04/25 18:29:48 Acknowledged.
+ case arc::mojom::AccessibilityFilterType::WHITELISTED_PACKAGE_NAME:
+ if (!tree_source_) {
+ tree_source_.reset(new AXTreeSourceArc(tree_id()));
+ focus_stealer_.reset(new FocusStealer(tree_source_->tree_id()));
+ exo::WMHelper::GetInstance()->AddActivationObserver(this);
+ }
+ break;
+ case arc::mojom::AccessibilityFilterType::FOCUS:
+ case arc::mojom::AccessibilityFilterType::OFF:
+ break;
hidehiko 2017/04/21 06:27:02 nit: how about commenting // Do nothing. to expli
David Tseng 2017/04/25 18:29:48 Acknowledged.
}
}
@@ -115,6 +146,15 @@ void ArcAccessibilityHelperBridge::OnAccessibilityEventDeprecated(
void ArcAccessibilityHelperBridge::OnAccessibilityEvent(
mojom::AccessibilityEventDataPtr event_data) {
+ arc::mojom::AccessibilityFilterType filter_type = GetFilterType();
+
+ if (!tree_source_ &&
yawano 2017/04/21 04:26:36 How about to write this function as switch (filte
David Tseng 2017/04/25 18:29:48 Acknowledged.
+ (filter_type == arc::mojom::AccessibilityFilterType::ALL ||
+ filter_type ==
+ arc::mojom::AccessibilityFilterType::WHITELISTED_PACKAGE_NAME)) {
+ tree_source_.reset(new AXTreeSourceArc(tree_id()));
+ }
+
if (tree_source_) {
tree_source_->NotifyAccessibilityEvent(event_data.get());
return;
@@ -127,10 +167,16 @@ void ArcAccessibilityHelperBridge::OnAccessibilityEvent(
DispatchFocusChange(event_data.get()->nodeData[0].get());
}
+void ArcAccessibilityHelperBridge::OnAccessibilityTreeDestroyed() {
+ tree_source_.reset(nullptr);
hidehiko 2017/04/21 06:27:02 nit: s/reset(nullptr)/reset()/
David Tseng 2017/04/25 18:29:48 Acknowledged.
+ if (focus_stealer_->parent())
+ focus_stealer_->parent()->RemoveChildView(focus_stealer_.get());
+}
+
void ArcAccessibilityHelperBridge::OnWindowActivated(
aura::Window* gained_active,
aura::Window* lost_active) {
- if (gained_active == lost_active || !tree_source_)
+ if (gained_active == lost_active)
return;
exo::Surface* active_surface = GetArcSurface(gained_active);
@@ -142,8 +188,7 @@ void ArcAccessibilityHelperBridge::OnWindowActivated(
views::Widget* widget = views::Widget::GetWidgetForNativeView(lost_active);
if (widget && widget->GetContentsView()) {
views::View* view = widget->GetContentsView();
- view->RemoveChildView(focus_stealer_.get());
- view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+ focus_stealer_->StopStealing();
}
}
@@ -155,8 +200,7 @@ void ArcAccessibilityHelperBridge::OnWindowActivated(
views::View* view = widget->GetContentsView();
if (!view->Contains(focus_stealer_.get()))
view->AddChildView(focus_stealer_.get());
- focus_stealer_->RequestFocus();
- view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+ focus_stealer_->StartStealing();
}
}

Powered by Google App Engine
This is Rietveld 408576698