| Index: content/browser/renderer_host/render_widget_host_view_android.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| index 7aa1ef1d6cd6c4e299354cbb3aab5464cf0089ba..df51f54e0f291fe4f39da4ebada65d57a180f288 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -72,6 +72,8 @@
|
| #include "third_party/skia/include/core/SkCanvas.h"
|
| #include "ui/base/android/window_android.h"
|
| #include "ui/base/android/window_android_compositor.h"
|
| +#include "ui/base/ime/android/cursor_anchor_info_builder.h"
|
| +#include "ui/base/ime/android/cursor_anchor_info_controller.h"
|
| #include "ui/events/gesture_detection/gesture_provider_config_helper.h"
|
| #include "ui/events/gesture_detection/motion_event.h"
|
| #include "ui/gfx/android/device_display_info.h"
|
| @@ -333,6 +335,8 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
|
| is_showing_(!widget_host->is_hidden()),
|
| content_view_core_(NULL),
|
| ime_adapter_android_(this),
|
| + cursor_anchor_info_controller_(
|
| + ui::CursorAnchorInfoController::Create(this)),
|
| cached_background_color_(SK_ColorWHITE),
|
| last_output_surface_id_(kUndefinedOutputSurfaceId),
|
| gesture_provider_(CreateGestureProviderConfig(), this),
|
| @@ -708,6 +712,15 @@ long RenderWidgetHostViewAndroid::GetNativeImeAdapter() {
|
| return reinterpret_cast<intptr_t>(&ime_adapter_android_);
|
| }
|
|
|
| +bool RenderWidgetHostViewAndroid::RequestCursorUpdates(
|
| + uint32 cursor_update_mode) {
|
| + if (!cursor_anchor_info_controller_)
|
| + return false;
|
| +
|
| + return cursor_anchor_info_controller_->OnRequestCursorUpdates(
|
| + cursor_update_mode);
|
| +}
|
| +
|
| void RenderWidgetHostViewAndroid::OnTextInputStateChanged(
|
| const ViewHostMsg_TextInputState_Params& params) {
|
| if (selection_controller_) {
|
| @@ -735,6 +748,13 @@ void RenderWidgetHostViewAndroid::OnTextInputStateChanged(
|
| params.value, params.selection_start, params.selection_end,
|
| params.composition_start, params.composition_end,
|
| params.show_ime_if_needed, params.is_non_ime_change);
|
| +
|
| + if (cursor_anchor_info_controller_) {
|
| + cursor_anchor_info_controller_->OnTextInputStateChanged(
|
| + base::UTF8ToUTF16(params.value),
|
| + gfx::Range(params.selection_start, params.selection_end),
|
| + gfx::Range(params.composition_start, params.composition_end));
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor(
|
| @@ -840,11 +860,16 @@ void RenderWidgetHostViewAndroid::ImeCancelComposition() {
|
| void RenderWidgetHostViewAndroid::ImeCompositionRangeChanged(
|
| const gfx::Range& range,
|
| const std::vector<gfx::Rect>& character_bounds) {
|
| - // TODO(yukawa): Implement this.
|
| + if (cursor_anchor_info_controller_) {
|
| + cursor_anchor_info_controller_->OnCompositionRangeChanged(range,
|
| + character_bounds);
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) {
|
| ime_adapter_android_.FocusedNodeChanged(is_editable_node);
|
| + if (cursor_anchor_info_controller_)
|
| + cursor_anchor_info_controller_->OnFocusedNodeChanged(is_editable_node);
|
| if (selection_controller_)
|
| selection_controller_->OnSelectionEditable(is_editable_node);
|
| }
|
| @@ -1022,6 +1047,11 @@ void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
|
| SendReturnedDelegatedResources(last_output_surface_id_);
|
| }
|
|
|
| +void RenderWidgetHostViewAndroid::SendCursorAnchorInfo(
|
| + ui::CursorAnchorInfoBuilder* builder) {
|
| + ime_adapter_android_.UpdateCursorAnchorInfo(builder->Build());
|
| +}
|
| +
|
| void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
|
| RemoveLayers();
|
| frame_provider_ = NULL;
|
| @@ -1346,6 +1376,11 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
|
| web_contents_impl->media_web_contents_observer()->OnFrameInfoUpdated();
|
| }
|
| #endif // defined(VIDEO_HOLE)
|
| +
|
| + if (cursor_anchor_info_controller_) {
|
| + cursor_anchor_info_controller_->OnFrameMetadataUpdated(
|
| + frame_metadata, content_view_core_->GetLocationOnScreen());
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int route_id) {
|
|
|