Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / ime_adapter_android.h
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 modifiers,
45                              int unicode_char);
46   void SetComposingText(JNIEnv*,
47                         jobject obj,
48                         jobject text,
49                         jstring text_str,
50                         int new_cursor_pos);
51   void CommitText(JNIEnv*, jobject, jstring text_str);
52   void FinishComposingText(JNIEnv* env, jobject);
53   void AttachImeAdapter(JNIEnv*, jobject java_object);
54   void SetEditableSelectionOffsets(JNIEnv*, jobject, int start, int end);
55   void SetComposingRegion(JNIEnv*, jobject, int start, int end);
56   void DeleteSurroundingText(JNIEnv*, jobject, int before, int after);
57   void Unselect(JNIEnv*, jobject);
58   void SelectAll(JNIEnv*, jobject);
59   void Cut(JNIEnv*, jobject);
60   void Copy(JNIEnv*, jobject);
61   void Paste(JNIEnv*, jobject);
62   void ResetImeAdapter(JNIEnv*, jobject);
63
64   // Called from native -> java
65   void CancelComposition();
66   void FocusedNodeChanged(bool is_editable_node);
67
68  private:
69   RenderWidgetHostImpl* GetRenderWidgetHostImpl();
70   RenderFrameHost* GetFocusedFrame();
71   WebContents* GetWebContents();
72
73   RenderWidgetHostViewAndroid* rwhva_;
74   JavaObjectWeakGlobalRef java_ime_adapter_;
75 };
76
77 bool RegisterImeAdapter(JNIEnv* env);
78
79 }  // namespace content
80
81 #endif  // CONTENT_BROWSER_RENDERER_HOST_IME_ADAPTER_ANDROID_H_