Commit aa303f2d authored by Yuki Awano's avatar Yuki Awano Committed by Commit Bot

Fix TalkBack fallback keyboard shortcut

- Update window properties and detach ax child tree when user switches
  back to TalkBack.

  ]. Confirm that TalkBack works well.

Bug: 881695
Test: Open any android app with spoken feedback and press Search+A then
Change-Id: I2b5db2d77e49e674e98c1b3cfbb18b2567d69388
Reviewed-on: https://chromium-review.googlesource.com/1212210Reviewed-by: default avatarMitsuru Oshima <oshima@chromium.org>
Reviewed-by: default avatarDavid Tseng <dtseng@chromium.org>
Commit-Queue: Yuki Awano <yawano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#590136}
parent efe76940
......@@ -159,20 +159,43 @@ void ArcAccessibilityHelperBridge::SetNativeChromeVoxArcSupport(bool enabled) {
if (task_id == kNoTaskId)
return;
std::unique_ptr<aura::WindowTracker> window_tracker =
std::make_unique<aura::WindowTracker>();
window_tracker->Add(window);
auto* instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->accessibility_helper(),
SetNativeChromeVoxArcSupportForFocusedWindow);
instance->SetNativeChromeVoxArcSupportForFocusedWindow(
enabled, base::BindOnce(&ArcAccessibilityHelperBridge::
OnSetNativeChromeVoxArcSupportProcessed,
base::Unretained(this), enabled));
base::Unretained(this), std::move(window_tracker),
enabled));
}
void ArcAccessibilityHelperBridge::OnSetNativeChromeVoxArcSupportProcessed(
std::unique_ptr<aura::WindowTracker> window_tracker,
bool enabled,
bool processed) {
if (!enabled)
task_id_to_tree_.clear();
if (!processed || window_tracker->windows().size() != 1)
return;
aura::Window* window = window_tracker->Pop();
int32_t task_id = GetTaskId(window);
DCHECK_NE(task_id, kNoTaskId);
if (!enabled) {
task_id_to_tree_.erase(task_id);
exo::Surface* surface = exo::ShellSurfaceBase::GetMainSurface(window);
if (surface) {
views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
static_cast<exo::ShellSurfaceBase*>(widget->widget_delegate())
->SetChildAxTreeId(kInvalidTreeId);
}
}
UpdateWindowProperties(window);
}
void ArcAccessibilityHelperBridge::Shutdown() {
......@@ -264,8 +287,7 @@ void ArcAccessibilityHelperBridge::OnAccessibilityEvent(
if (surface) {
views::Widget* widget =
views::Widget::GetWidgetForNativeWindow(active_window);
static_cast<exo::ShellSurfaceBase*>(
widget->widget_delegate()->GetContentsView())
static_cast<exo::ShellSurfaceBase*>(widget->widget_delegate())
->SetChildAxTreeId(tree_data.tree_id);
}
}
......
......@@ -18,6 +18,7 @@
#include "components/arc/connection_observer.h"
#include "components/keyed_service/core/keyed_service.h"
#include "ui/accessibility/ax_host_delegate.h"
#include "ui/aura/window_tracker.h"
#include "ui/wm/public/activation_change_observer.h"
class Profile;
......@@ -56,7 +57,10 @@ class ArcAccessibilityHelperBridge
void SetNativeChromeVoxArcSupport(bool enabled);
// Receives the result of setting native ChromeVox Arc support.
void OnSetNativeChromeVoxArcSupportProcessed(bool enabled, bool processed);
void OnSetNativeChromeVoxArcSupportProcessed(
std::unique_ptr<aura::WindowTracker> window_tracker,
bool enabled,
bool processed);
// KeyedService overrides.
void Shutdown() override;
......
......@@ -502,10 +502,6 @@ void ShellSurfaceBase::SetStartupId(const char* startup_id) {
}
void ShellSurfaceBase::SetChildAxTreeId(int32_t child_ax_tree_id) {
// We don't expect that child ax tree id is changed once it's set.
DCHECK_EQ(child_ax_tree_id_, kInvalidChildAxTreeId);
DCHECK_NE(child_ax_tree_id, kInvalidChildAxTreeId);
child_ax_tree_id_ = child_ax_tree_id;
this->NotifyAccessibilityEvent(ax::mojom::Event::kChildrenChanged, false);
......
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