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 eb6c6adc4e33f9d274d944d6e14830186410ecef..d9eb40649f42558f113610667132e73adb36b861 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -71,6 +71,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" |
@@ -350,6 +352,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), |
@@ -717,6 +721,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_) { |
@@ -744,6 +757,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( |
@@ -849,11 +869,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); |
} |
@@ -1036,6 +1061,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; |
@@ -1366,6 +1396,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) { |