Home | History | Annotate | Download | only in renderer_host
      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