1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_IME_ADAPTER_ANDROID_H_ 6 #define CONTENT_BROWSER_RENDERER_HOST_IME_ADAPTER_ANDROID_H_ 7 8 #include <jni.h> 9 10 #include "base/android/jni_weak_ref.h" 11 12 namespace content { 13 14 class RenderFrameHost; 15 class RenderWidgetHostImpl; 16 class RenderWidgetHostViewAndroid; 17 class WebContents; 18 struct NativeWebKeyboardEvent; 19 20 // This class is in charge of dispatching key events from the java side 21 // and forward to renderer along with input method results via 22 // corresponding host view. 23 // Ownership of these objects remains on the native side (see 24 // RenderWidgetHostViewAndroid). 25 class ImeAdapterAndroid { 26 public: 27 explicit ImeAdapterAndroid(RenderWidgetHostViewAndroid* rwhva); 28 ~ImeAdapterAndroid(); 29 30 // Called from java -> native 31 // The java side is responsible to translate android KeyEvent various enums 32 // and values into the corresponding blink::WebInputEvent. 33 bool SendKeyEvent(JNIEnv* env, jobject, 34 jobject original_key_event, 35 int action, int meta_state, 36 long event_time, int key_code, 37 bool is_system_key, int unicode_text); 38 // |event_type| is a value of WebInputEvent::Type. 39 bool SendSyntheticKeyEvent(JNIEnv*, 40 jobject, 41 int event_type, 42 long timestamp_ms, 43 int native_key_code, 44 int unicode_char); 45 void SetComposingText(JNIEnv*, 46 jobject obj, 47 jobject text, 48 jstring text_str, 49 int new_cursor_pos); 50 void CommitText(JNIEnv*, jobject, jstring text_str); 51 void FinishComposingText(JNIEnv* env, jobject); 52 void AttachImeAdapter(JNIEnv*, jobject java_object); 53 void SetEditableSelectionOffsets(JNIEnv*, jobject, int start, int end); 54 void SetComposingRegion(JNIEnv*, jobject, int start, int end); 55 void DeleteSurroundingText(JNIEnv*, jobject, int before, int after); 56 void Unselect(JNIEnv*, jobject); 57 void SelectAll(JNIEnv*, jobject); 58 void Cut(JNIEnv*, jobject); 59 void Copy(JNIEnv*, jobject); 60 void Paste(JNIEnv*, jobject); 61 void ResetImeAdapter(JNIEnv*, jobject); 62 63 // Called from native -> java 64 void CancelComposition(); 65 void FocusedNodeChanged(bool is_editable_node); 66 67 private: 68 RenderWidgetHostImpl* GetRenderWidgetHostImpl(); 69 RenderFrameHost* GetFocusedFrame(); 70 WebContents* GetWebContents(); 71 72 RenderWidgetHostViewAndroid* rwhva_; 73 JavaObjectWeakGlobalRef java_ime_adapter_; 74 }; 75 76 bool RegisterImeAdapter(JNIEnv* env); 77 78 } // namespace content 79 80 #endif // CONTENT_BROWSER_RENDERER_HOST_IME_ADAPTER_ANDROID_H_ 81