diff --git a/packages/webview_flutter/example/tizen/shared/res/input.html b/packages/webview_flutter/example/tizen/shared/res/input.html new file mode 100644 index 000000000..f9c9613ff --- /dev/null +++ b/packages/webview_flutter/example/tizen/shared/res/input.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/packages/webview_flutter/lib/webview_flutter_tizen.dart b/packages/webview_flutter/lib/webview_flutter_tizen.dart index 26a276708..dafa1dfb0 100644 --- a/packages/webview_flutter/lib/webview_flutter_tizen.dart +++ b/packages/webview_flutter/lib/webview_flutter_tizen.dart @@ -78,12 +78,10 @@ class TizenViewController extends PlatformViewController { int _textureId; - @override int get textureId => _textureId; Size _size; - @override Future setSize(Size size) async { assert(_state != _TizenViewState.disposed, 'trying to size a disposed Tizen View. View id: $viewId'); @@ -103,7 +101,6 @@ class TizenViewController extends PlatformViewController { }); } - @override Future _sendCreateMessage() async { assert(!_size.isEmpty, 'trying to create $TizenViewController without setting a valid size.'); @@ -128,7 +125,6 @@ class TizenViewController extends PlatformViewController { await SystemChannels.platform_views.invokeMethod('create', args); } - @override Future _sendDisposeMessage() { return SystemChannels.platform_views .invokeMethod('dispose', { @@ -205,8 +201,8 @@ class TizenViewController extends PlatformViewController { } await SystemChannels.platform_views .invokeMethod('touch', { - "id": viewId, - "event": [ + 'id': viewId, + 'event': [ eventType, // int, pointer event type event.buttons, // int, mouse button type (left, right, middle) event.localPosition.dx, // double, global position x @@ -222,6 +218,7 @@ class TizenViewController extends PlatformViewController { if (_state != _TizenViewState.created) { return Future.value(); } + // print('clearFocus : $viewId'); return SystemChannels.platform_views .invokeMethod('clearFocus', viewId); } @@ -628,6 +625,7 @@ class _TizenWebViewState extends State { @override void didUpdateWidget(TizenWebView_ oldWidget) { + // print('webview: didUpdateWidget()'); super.didUpdateWidget(oldWidget); final TextDirection newLayoutDirection = _findLayoutDirection(); @@ -688,6 +686,7 @@ class _TizenWebViewState extends State { }); return; } + // print('_onFocusChange - viewId : $_id'); SystemChannels.textInput .invokeMethod( 'TextInput.setPlatformViewClient', diff --git a/packages/webview_flutter/tizen/lib/liblightweight-web-engine.so b/packages/webview_flutter/tizen/lib/liblightweight-web-engine.so new file mode 100644 index 000000000..6ea9ad44b Binary files /dev/null and b/packages/webview_flutter/tizen/lib/liblightweight-web-engine.so differ diff --git a/packages/webview_flutter/tizen/src/webview.cc b/packages/webview_flutter/tizen/src/webview.cc index 645d6d4e9..e41ba7d60 100644 --- a/packages/webview_flutter/tizen/src/webview.cc +++ b/packages/webview_flutter/tizen/src/webview.cc @@ -435,6 +435,31 @@ void WebView::DispatchKeyUpEvent(Ecore_Event_Key* keyEvent) { p); } +void WebView::SetSoftwareKeyboardContext(Ecore_IMF_Context* context) { + webViewInstance_->RegisterOnShowSoftwareKeyboardIfPossibleHandler( + [context](LWE::WebContainer* v) { + LOG_DEBUG("WebView - Show Keyboard()\n"); + if (!context) { + LOG_ERROR("Ecore_IMF_Context NULL\n"); + return; + } + ecore_imf_context_input_panel_show(context); + ecore_imf_context_focus_in(context); + }); + + webViewInstance_->RegisterOnHideSoftwareKeyboardIfPossibleHandler( + [context](LWE::WebContainer*) { + LOG_INFO("WebView - Hide Keyboard()\n"); + if (!context) { + LOG_INFO("Ecore_IMF_Context NULL\n"); + return; + } + ecore_imf_context_reset(context); + ecore_imf_context_focus_out(context); + ecore_imf_context_input_panel_hide(context); + }); +} + void WebView::ClearFocus() { LOG_DEBUG("WebView::clearFocus \n"); } void WebView::SetDirection(int direction) { diff --git a/packages/webview_flutter/tizen/src/webview.h b/packages/webview_flutter/tizen/src/webview.h index 8e592ab5e..12fe001bf 100644 --- a/packages/webview_flutter/tizen/src/webview.h +++ b/packages/webview_flutter/tizen/src/webview.h @@ -11,6 +11,8 @@ namespace LWE { class WebContainer; } +class TextInputChannel; + class WebView : public PlatformView { public: WebView(flutter::PluginRegistrar* registrar, int viewId, @@ -28,6 +30,8 @@ class WebView : public PlatformView { virtual void DispatchKeyDownEvent(Ecore_Event_Key* key) override; virtual void DispatchKeyUpEvent(Ecore_Event_Key* key) override; + virtual void SetSoftwareKeyboardContext(Ecore_IMF_Context* context) override; + private: void HandleMethodCall( const flutter::MethodCall& method_call,