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) { |