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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 643193003: Support InputMethodManager#updateCursorAnchorInfo for Android 5.0 (C++ version) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Send ImeCompositionRangeChanged only when necessary Created 5 years, 11 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: 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) {

Powered by Google App Engine
This is Rietveld 408576698