diff --git a/packages/flutter_inappwebview/CHANGELOG.md b/packages/flutter_inappwebview/CHANGELOG.md index 2879c40c0..e5573960c 100644 --- a/packages/flutter_inappwebview/CHANGELOG.md +++ b/packages/flutter_inappwebview/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * Follow the analysis options of the frontend plugin. +* Use wrapper API. ## 0.2.0 diff --git a/packages/flutter_inappwebview/tizen/inc/ftpw_flutter_inappwebview.h b/packages/flutter_inappwebview/tizen/inc/ftpw_flutter_inappwebview.h new file mode 100644 index 000000000..b2d88b19c --- /dev/null +++ b/packages/flutter_inappwebview/tizen/inc/ftpw_flutter_inappwebview.h @@ -0,0 +1,99 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef FLUTTER_TIZEN_PLUGINS_WRAPPER_FLUTTER_INAPPWEBVIEW_H_ +#define FLUTTER_TIZEN_PLUGINS_WRAPPER_FLUTTER_INAPPWEBVIEW_H_ + +typedef enum { + EWK_TOUCH_START, + EWK_TOUCH_MOVE, + EWK_TOUCH_END +} Ewk_Touch_Event_Type; + +typedef struct _Ewk_Touch_Point Ewk_Touch_Point; + +typedef enum { + EWK_MOUSE_BUTTON_LEFT = 1, + EWK_MOUSE_BUTTON_MIDDLE = 2, + EWK_MOUSE_BUTTON_RIGHT = 3 +} Ewk_Mouse_Button_Type; + +struct _Ewk_Touch_Point { + int id; + int x; + int y; + int state; +}; + +typedef unsigned char (*Ewk_View_JavaScript_Alert_Callback)( + void *o, const char *alert_text, void *user_data); +typedef unsigned char (*Ewk_View_JavaScript_Confirm_Callback)( + void *o, const char *message, void *user_data); +typedef unsigned char (*Ewk_View_JavaScript_Prompt_Callback)( + void *o, const char *message, const char *default_value, void *user_data); + +typedef enum { + EWK_CONSOLE_MESSAGE_LEVEL_NULL, + EWK_CONSOLE_MESSAGE_LEVEL_LOG, + EWK_CONSOLE_MESSAGE_LEVEL_WARNING, + EWK_CONSOLE_MESSAGE_LEVEL_ERROR, + EWK_CONSOLE_MESSAGE_LEVEL_DEBUG, + EWK_CONSOLE_MESSAGE_LEVEL_INFO, +} Ewk_Console_Message_Level; + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned char ftpw_flutter_inappwebview_ewk_view_bg_color_set(void *obj, int r, + int g, int b, + int a); +unsigned char ftpw_flutter_inappwebview_ewk_view_touch_events_enabled_set( + void *view, unsigned char enabled); +unsigned char ftpw_flutter_inappwebview_ewk_view_feed_touch_event( + void *obj, Ewk_Touch_Event_Type type, const void *points, + const void *modifiers); +unsigned char ftpw_flutter_inappwebview_ewk_view_mouse_events_enabled_set( + void *view, unsigned char enabled); +unsigned char ftpw_flutter_inappwebview_ewk_view_feed_mouse_down( + void *obj, Ewk_Mouse_Button_Type button, int x, int y); +unsigned char ftpw_flutter_inappwebview_ewk_view_feed_mouse_up( + void *obj, Ewk_Mouse_Button_Type button, int x, int y); +unsigned char ftpw_flutter_inappwebview_ewk_view_feed_mouse_wheel( + void *obj, unsigned char y_direction, int step, int x, int y); +unsigned char ftpw_flutter_inappwebview_ewk_view_send_key_event( + void *obj, void *key_event, unsigned char is_press); +void ftpw_flutter_inappwebview_ewk_view_offscreen_rendering_enabled_set( + void *obj, unsigned char enabled); +void ftpw_flutter_inappwebview_ewk_view_ime_window_set(void *obj, void *window); +unsigned char ftpw_flutter_inappwebview_ewk_view_key_events_enabled_set( + void *obj, unsigned char enabled); +unsigned char ftpw_flutter_inappwebview_ewk_view_set_support_video_hole( + void *obj, void *window, unsigned char enabled, unsigned char is_supported); +void ftpw_flutter_inappwebview_ewk_view_javascript_alert_callback_set( + void *o, Ewk_View_JavaScript_Alert_Callback callback, void *user_data); +void ftpw_flutter_inappwebview_ewk_view_javascript_confirm_callback_set( + void *o, Ewk_View_JavaScript_Confirm_Callback callback, void *user_data); +void ftpw_flutter_inappwebview_ewk_view_javascript_prompt_callback_set( + void *o, Ewk_View_JavaScript_Prompt_Callback callback, void *user_data); +void ftpw_flutter_inappwebview_ewk_view_javascript_alert_reply(void *o); +void ftpw_flutter_inappwebview_ewk_view_javascript_confirm_reply( + void *o, unsigned char result); +void ftpw_flutter_inappwebview_ewk_view_javascript_prompt_reply( + void *o, const char *result); +void ftpw_flutter_inappwebview_ewk_set_arguments(int argc, char **argv); +void ftpw_flutter_inappwebview_ewk_settings_ime_panel_enabled_set( + void *settings, unsigned char enabled); +void ftpw_flutter_inappwebview_ewk_settings_force_zoom_set( + void *settings, unsigned char enable); +Ewk_Console_Message_Level +ftpw_flutter_inappwebview_ewk_console_message_level_get( + const void *message); +const char *ftpw_flutter_inappwebview_ewk_console_message_text_get( + const void *message); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/packages/flutter_inappwebview/tizen/lib/aarch64/libftpw_flutter_inappwebview.so b/packages/flutter_inappwebview/tizen/lib/aarch64/libftpw_flutter_inappwebview.so new file mode 100755 index 000000000..e28d03c56 Binary files /dev/null and b/packages/flutter_inappwebview/tizen/lib/aarch64/libftpw_flutter_inappwebview.so differ diff --git a/packages/flutter_inappwebview/tizen/lib/armel/libftpw_flutter_inappwebview.so b/packages/flutter_inappwebview/tizen/lib/armel/libftpw_flutter_inappwebview.so new file mode 100755 index 000000000..e98fd79a7 Binary files /dev/null and b/packages/flutter_inappwebview/tizen/lib/armel/libftpw_flutter_inappwebview.so differ diff --git a/packages/flutter_inappwebview/tizen/lib/i586/libftpw_flutter_inappwebview.so b/packages/flutter_inappwebview/tizen/lib/i586/libftpw_flutter_inappwebview.so new file mode 100755 index 000000000..1b9172733 Binary files /dev/null and b/packages/flutter_inappwebview/tizen/lib/i586/libftpw_flutter_inappwebview.so differ diff --git a/packages/flutter_inappwebview/tizen/lib/x86_64/libftpw_flutter_inappwebview.so b/packages/flutter_inappwebview/tizen/lib/x86_64/libftpw_flutter_inappwebview.so new file mode 100755 index 000000000..05fd95533 Binary files /dev/null and b/packages/flutter_inappwebview/tizen/lib/x86_64/libftpw_flutter_inappwebview.so differ diff --git a/packages/flutter_inappwebview/tizen/project_def.prop b/packages/flutter_inappwebview/tizen/project_def.prop index c09310f67..df6623c8e 100644 --- a/packages/flutter_inappwebview/tizen/project_def.prop +++ b/packages/flutter_inappwebview/tizen/project_def.prop @@ -18,3 +18,7 @@ USER_CPP_UNDEFS = USER_INC_DIRS = inc src USER_INC_FILES = USER_CPP_INC_FILES = + +# User libraries +USER_LIB_DIRS += lib/${BUILD_ARCH} +USER_LIBS += ftpw_flutter_inappwebview diff --git a/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.cc b/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.cc deleted file mode 100644 index 8f3fb1a62..000000000 --- a/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.cc +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ewk_internal_api_binding.h" - -#include - -#include "log.h" - -namespace { - -template -T ResolveEwkSymbol(void* handle, const char* symbol) { - dlerror(); - void* value = dlsym(handle, symbol); - const char* error = dlerror(); - if (error || !value) { - LOG_ERROR("Failed to resolve EWK symbol %s: %s", symbol, - error ? error : "not found"); - return nullptr; - } - return reinterpret_cast(value); -} - -} // namespace - -EwkInternalApiBinding::EwkInternalApiBinding() { - handle_ = dlopen("libchromium-ewk.so", RTLD_LAZY); - if (!handle_) { - const char* error = dlerror(); - LOG_ERROR("Failed to open libchromium-ewk.so: %s", - error ? error : "unknown error"); - } -} - -EwkInternalApiBinding::~EwkInternalApiBinding() { - if (handle_) { - dlclose(handle_); - } -} - -bool EwkInternalApiBinding::Initialize() { - if (!handle_) { - LOG_ERROR( - "EWK internal API binding was initialized without a library handle."); - return false; - } - - // ewk_view - view.SetBackgroundColor = ResolveEwkSymbol( - handle_, "ewk_view_bg_color_set"); - view.TouchEventsEnabledSet = - ResolveEwkSymbol( - handle_, "ewk_view_touch_events_enabled_set"); - view.FeedTouchEvent = ResolveEwkSymbol( - handle_, "ewk_view_feed_touch_event"); - view.MouseEventsEnabledSet = - ResolveEwkSymbol( - handle_, "ewk_view_mouse_events_enabled_set"); - view.FeedMouseDown = ResolveEwkSymbol( - handle_, "ewk_view_feed_mouse_down"); - view.FeedMouseUp = ResolveEwkSymbol( - handle_, "ewk_view_feed_mouse_up"); - view.FeedMouseWheel = ResolveEwkSymbol( - handle_, "ewk_view_feed_mouse_wheel"); - view.SendKeyEvent = ResolveEwkSymbol( - handle_, "ewk_view_send_key_event"); - view.OffscreenRenderingEnabledSet = - ResolveEwkSymbol( - handle_, "ewk_view_offscreen_rendering_enabled_set"); - view.ImeWindowSet = ResolveEwkSymbol( - handle_, "ewk_view_ime_window_set"); - view.KeyEventsEnabledSet = ResolveEwkSymbol( - handle_, "ewk_view_key_events_enabled_set"); - view.SupportVideoHoleSet = ResolveEwkSymbol( - handle_, "ewk_view_set_support_video_hole"); - - view.OnJavaScriptAlert = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_alert_callback_set"); - view.OnJavaScriptConfirm = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_confirm_callback_set"); - view.OnJavaScriptPrompt = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_prompt_callback_set"); - - view.JavaScriptAlertReply = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_alert_reply"); - view.JavaScriptConfirmReply = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_confirm_reply"); - view.JavaScriptPromptReply = - ResolveEwkSymbol( - handle_, "ewk_view_javascript_prompt_reply"); - - // ewk_main - main.SetArguments = - ResolveEwkSymbol(handle_, "ewk_set_arguments"); - - // ewk_settings - settings.ImePanelEnabledSet = - ResolveEwkSymbol( - handle_, "ewk_settings_ime_panel_enabled_set"); - settings.ForceZoomSet = ResolveEwkSymbol( - handle_, "ewk_settings_force_zoom_set"); - - // ewk_console_message - console_message.LevelGet = ResolveEwkSymbol( - handle_, "ewk_console_message_level_get"); - console_message.TextGet = ResolveEwkSymbol( - handle_, "ewk_console_message_text_get"); - - return view.SetBackgroundColor && view.TouchEventsEnabledSet && - view.FeedTouchEvent && view.MouseEventsEnabledSet && - view.FeedMouseDown && view.FeedMouseUp && view.FeedMouseWheel && - view.SendKeyEvent && view.OffscreenRenderingEnabledSet && - view.ImeWindowSet && view.KeyEventsEnabledSet && - view.SupportVideoHoleSet && view.OnJavaScriptAlert && - view.OnJavaScriptConfirm && view.OnJavaScriptPrompt && - view.JavaScriptAlertReply && view.JavaScriptConfirmReply && - view.JavaScriptPromptReply && main.SetArguments && - settings.ImePanelEnabledSet && settings.ForceZoomSet && - console_message.LevelGet && console_message.TextGet; -} diff --git a/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.h b/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.h deleted file mode 100644 index 8d92fcdd4..000000000 --- a/packages/flutter_inappwebview/tizen/src/ewk_internal_api_binding.h +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ -#define FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ - -#include - -typedef enum { - EWK_TOUCH_START, - EWK_TOUCH_MOVE, - EWK_TOUCH_END, - EWK_TOUCH_CANCEL -} Ewk_Touch_Event_Type; - -typedef struct _Ewk_Touch_Point Ewk_Touch_Point; - -typedef enum { - EWK_MOUSE_BUTTON_LEFT = 1, - EWK_MOUSE_BUTTON_MIDDLE = 2, - EWK_MOUSE_BUTTON_RIGHT = 3 -} Ewk_Mouse_Button_Type; - -struct _Ewk_Touch_Point { - int id; - int x; - int y; - Evas_Touch_Point_State state; -}; - -typedef Eina_Bool (*Ewk_View_JavaScript_Alert_Callback)(Evas_Object* o, - const char* alert_text, - void* user_data); -typedef Eina_Bool (*Ewk_View_JavaScript_Confirm_Callback)(Evas_Object* o, - const char* message, - void* user_data); -typedef Eina_Bool (*Ewk_View_JavaScript_Prompt_Callback)( - Evas_Object* o, const char* message, const char* default_value, - void* user_data); - -typedef Eina_Bool (*EwkViewBgColorSetFnPtr)(Evas_Object* obj, int r, int g, - int b, int a); -typedef Eina_Bool (*EwkViewTouchEventsEnabledSetFnPtr)(Evas_Object* view, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewFeedTouchEventFnPtr)(Evas_Object* obj, - Ewk_Touch_Event_Type type, - const Eina_List* points, - const Evas_Modifier* modifiers); -typedef Eina_Bool (*EwkViewMouseEventsEnabledSetFnPtr)(Evas_Object* view, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewFeedMouseDownFnPtr)(Evas_Object* obj, - Ewk_Mouse_Button_Type button, - int x, int y); -typedef Eina_Bool (*EwkViewFeedMouseUpFnPtr)(Evas_Object* obj, - Ewk_Mouse_Button_Type button, - int x, int y); -typedef Eina_Bool (*EwkViewFeedMouseWheelFnPtr)(Evas_Object* obj, - Eina_Bool y_direction, int step, - int x, int y); -typedef Eina_Bool (*EwkViewSendKeyEventFnPtr)(Evas_Object* obj, void* key_event, - Eina_Bool is_press); -typedef void (*EwkViewOffscreenRenderingEnabledSetFnPtr)(Evas_Object* obj, - Eina_Bool enabled); -typedef void (*EwkViewImeWindowSetFnPtr)(Evas_Object* obj, void* window); -typedef Eina_Bool (*EwkViewKeyEventsEnabledSetFnPtr)(Evas_Object* obj, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewSupportVideoHoleSetFnPtr)(Evas_Object* obj, - void* window, - Eina_Bool enabled, - Eina_Bool is_supported); -typedef void (*EwkViewJavaScriptAlertCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Alert_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptConfirmCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Confirm_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptPromptCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Prompt_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptAlertReplyFnPtr)(Evas_Object* o); -typedef void (*EwkViewJavaScriptConfirmReplyFnPtr)(Evas_Object* o, - Eina_Bool result); -typedef void (*EwkViewJavaScriptPromptReplyFnPtr)(Evas_Object* o, - const char* result); - -typedef struct { - EwkViewBgColorSetFnPtr SetBackgroundColor = nullptr; - EwkViewTouchEventsEnabledSetFnPtr TouchEventsEnabledSet = nullptr; - EwkViewFeedTouchEventFnPtr FeedTouchEvent = nullptr; - EwkViewMouseEventsEnabledSetFnPtr MouseEventsEnabledSet = nullptr; - EwkViewFeedMouseDownFnPtr FeedMouseDown = nullptr; - EwkViewFeedMouseUpFnPtr FeedMouseUp = nullptr; - EwkViewFeedMouseWheelFnPtr FeedMouseWheel = nullptr; - EwkViewSendKeyEventFnPtr SendKeyEvent = nullptr; - EwkViewOffscreenRenderingEnabledSetFnPtr OffscreenRenderingEnabledSet = - nullptr; - EwkViewImeWindowSetFnPtr ImeWindowSet = nullptr; - EwkViewKeyEventsEnabledSetFnPtr KeyEventsEnabledSet = nullptr; - EwkViewSupportVideoHoleSetFnPtr SupportVideoHoleSet = nullptr; - EwkViewJavaScriptAlertCallbackSetFnPtr OnJavaScriptAlert = nullptr; - EwkViewJavaScriptConfirmCallbackSetFnPtr OnJavaScriptConfirm = nullptr; - EwkViewJavaScriptPromptCallbackSetFnPtr OnJavaScriptPrompt = nullptr; - EwkViewJavaScriptAlertReplyFnPtr JavaScriptAlertReply = nullptr; - EwkViewJavaScriptConfirmReplyFnPtr JavaScriptConfirmReply = nullptr; - EwkViewJavaScriptPromptReplyFnPtr JavaScriptPromptReply = nullptr; - -} EwkViewProcTable; - -typedef void (*EwkSetArgumentsFnPtr)(int argc, char** argv); - -typedef struct { - EwkSetArgumentsFnPtr SetArguments = nullptr; -} EwkMainProcTable; - -typedef struct Ewk_Settings Ewk_Settings; -typedef void (*EwkSettingsImePanelEnabledSetFnPtr)(Ewk_Settings* settings, - Eina_Bool enabled); -typedef void (*EwkSettingsForceZoomSetFnPtr)(Ewk_Settings* settings, - Eina_Bool enable); - -typedef struct { - EwkSettingsImePanelEnabledSetFnPtr ImePanelEnabledSet = nullptr; - EwkSettingsForceZoomSetFnPtr ForceZoomSet = nullptr; -} EwkSettingsProcTable; - -typedef struct _Ewk_Console_Message Ewk_Console_Message; - -typedef enum { - EWK_CONSOLE_MESSAGE_LEVEL_NULL, - EWK_CONSOLE_MESSAGE_LEVEL_LOG, - EWK_CONSOLE_MESSAGE_LEVEL_WARNING, - EWK_CONSOLE_MESSAGE_LEVEL_ERROR, - EWK_CONSOLE_MESSAGE_LEVEL_DEBUG, - EWK_CONSOLE_MESSAGE_LEVEL_INFO, -} Ewk_Console_Message_Level; - -typedef Ewk_Console_Message_Level (*EwkConsoleMessageLevelGetFnPtr)( - const Ewk_Console_Message* message); -typedef Eina_Stringshare* (*EwkConsoleMessageTextGetFnPtr)( - const Ewk_Console_Message* message); - -typedef struct { - EwkConsoleMessageLevelGetFnPtr LevelGet = nullptr; - EwkConsoleMessageTextGetFnPtr TextGet = nullptr; -} EwkConsoleMessageProcTable; - -class EwkInternalApiBinding { - public: - static EwkInternalApiBinding& GetInstance() { - static EwkInternalApiBinding instance = EwkInternalApiBinding(); - return instance; - } - - ~EwkInternalApiBinding(); - - EwkInternalApiBinding(const EwkInternalApiBinding&) = delete; - EwkInternalApiBinding& operator=(const EwkInternalApiBinding&) = delete; - - bool Initialize(); - - EwkViewProcTable view; - EwkMainProcTable main; - EwkSettingsProcTable settings; - EwkConsoleMessageProcTable console_message; - - private: - EwkInternalApiBinding(); - - void* handle_ = nullptr; -}; - -#endif // FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ diff --git a/packages/flutter_inappwebview/tizen/src/webview.cc b/packages/flutter_inappwebview/tizen/src/webview.cc index 655e28bff..bf3008f07 100644 --- a/packages/flutter_inappwebview/tizen/src/webview.cc +++ b/packages/flutter_inappwebview/tizen/src/webview.cc @@ -274,11 +274,6 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int view_id, height_(height), window_(window), lifetime_(std::make_shared()) { - if (!EwkInternalApiBinding::GetInstance().Initialize()) { - LOG_ERROR("Failed to initialize EWK internal APIs."); - return; - } - tbm_pool_ = std::make_unique(width, height); texture_variant_ = @@ -406,16 +401,12 @@ void WebView::Dispose() { &WebView::OnUrlChange); evas_object_smart_callback_del(webview_instance_, "title,changed", &WebView::OnTitleChange); - auto& ewk_view = EwkInternalApiBinding::GetInstance().view; - if (ewk_view.OnJavaScriptAlert) { - ewk_view.OnJavaScriptAlert(webview_instance_, nullptr, nullptr); - } - if (ewk_view.OnJavaScriptConfirm) { - ewk_view.OnJavaScriptConfirm(webview_instance_, nullptr, nullptr); - } - if (ewk_view.OnJavaScriptPrompt) { - ewk_view.OnJavaScriptPrompt(webview_instance_, nullptr, nullptr); - } + ftpw_flutter_inappwebview_ewk_view_javascript_alert_callback_set( + webview_instance_, nullptr, nullptr); + ftpw_flutter_inappwebview_ewk_view_javascript_confirm_callback_set( + webview_instance_, nullptr, nullptr); + ftpw_flutter_inappwebview_ewk_view_javascript_prompt_callback_set( + webview_instance_, nullptr, nullptr); evas_object_del(webview_instance_); webview_instance_ = nullptr; } @@ -485,7 +476,7 @@ void WebView::SendTouchEvent(int event_type, double x, double y) { point->state = state; points = eina_list_append(points, point); - EwkInternalApiBinding::GetInstance().view.FeedTouchEvent( + ftpw_flutter_inappwebview_ewk_view_feed_touch_event( webview_instance_, mouse_event_type, points, 0); eina_list_free(points); delete point; @@ -511,15 +502,15 @@ void WebView::SendMouseEvent(int event_type, int button_type, double x, if (event_type == 0) { // down event mouse_button_type_ = mouse_button_type; - EwkInternalApiBinding::GetInstance().view.FeedMouseDown( + ftpw_flutter_inappwebview_ewk_view_feed_mouse_down( webview_instance_, mouse_button_type_, px, py); } else if (event_type == 1) { if (dy != 0) { - EwkInternalApiBinding::GetInstance().view.FeedMouseWheel( + ftpw_flutter_inappwebview_ewk_view_feed_mouse_wheel( webview_instance_, true, dy > 0 ? 1 : -1, px, py); } } else if (event_type == 2) { // up event - EwkInternalApiBinding::GetInstance().view.FeedMouseUp( + ftpw_flutter_inappwebview_ewk_view_feed_mouse_up( webview_instance_, mouse_button_type_, px, py); mouse_button_type_ = mouse_button_type; } else { @@ -551,14 +542,14 @@ bool WebView::SendKey(const char* key, const char* string, const char* compose, Evas_Event_Key_Down down_event = {}; down_event.key = key; down_event.string = string; - EwkInternalApiBinding::GetInstance().view.SendKeyEvent( + ftpw_flutter_inappwebview_ewk_view_send_key_event( webview_instance_, &down_event, is_down); } else { Evas_Event_Key_Up up_event = {}; up_event.key = key; up_event.string = string; - EwkInternalApiBinding::GetInstance().view.SendKeyEvent(webview_instance_, - &up_event, is_down); + ftpw_flutter_inappwebview_ewk_view_send_key_event( + webview_instance_, &up_event, is_down); } return true; } @@ -577,8 +568,7 @@ bool WebView::InitWebView() { const_cast("--no-zygote"), }; int chromium_argc = sizeof(chromium_argv) / sizeof(chromium_argv[0]); - EwkInternalApiBinding::GetInstance().main.SetArguments(chromium_argc, - chromium_argv); + ftpw_flutter_inappwebview_ewk_set_arguments(chromium_argc, chromium_argv); }); // ewk_init()/ewk_shutdown() are called once per process by @@ -601,7 +591,7 @@ bool WebView::InitWebView() { } ecore_evas_focus_set(ecore_evas_, true); ewk_view_focus_set(webview_instance_, true); - EwkInternalApiBinding::GetInstance().view.OffscreenRenderingEnabledSet( + ftpw_flutter_inappwebview_ewk_view_offscreen_rendering_enabled_set( webview_instance_, true); Ewk_Context* context = ewk_view_context_get(webview_instance_); @@ -617,35 +607,34 @@ bool WebView::InitWebView() { LOG_WARN("Unable to access the EWK context; skipping cookie/cache setup."); } - EwkInternalApiBinding::GetInstance().settings.ImePanelEnabledSet( + ftpw_flutter_inappwebview_ewk_settings_ime_panel_enabled_set( ewk_view_settings_get(webview_instance_), true); - EwkInternalApiBinding::GetInstance().settings.ForceZoomSet( + ftpw_flutter_inappwebview_ewk_settings_force_zoom_set( ewk_view_settings_get(webview_instance_), true); - EwkInternalApiBinding::GetInstance().view.ImeWindowSet(webview_instance_, - window_); - EwkInternalApiBinding::GetInstance().view.KeyEventsEnabledSet( + ftpw_flutter_inappwebview_ewk_view_ime_window_set(webview_instance_, window_); + ftpw_flutter_inappwebview_ewk_view_key_events_enabled_set( webview_instance_, true); #ifdef WEBVIEW_TIZEN_TOUCH_EVENTS_ENABLED - EwkInternalApiBinding::GetInstance().view.TouchEventsEnabledSet( + ftpw_flutter_inappwebview_ewk_view_touch_events_enabled_set( webview_instance_, true); - EwkInternalApiBinding::GetInstance().view.MouseEventsEnabledSet( + ftpw_flutter_inappwebview_ewk_view_mouse_events_enabled_set( webview_instance_, false); #else - EwkInternalApiBinding::GetInstance().view.TouchEventsEnabledSet( + ftpw_flutter_inappwebview_ewk_view_touch_events_enabled_set( webview_instance_, false); - EwkInternalApiBinding::GetInstance().view.MouseEventsEnabledSet( + ftpw_flutter_inappwebview_ewk_view_mouse_events_enabled_set( webview_instance_, true); #endif - EwkInternalApiBinding::GetInstance().view.OnJavaScriptAlert( + ftpw_flutter_inappwebview_ewk_view_javascript_alert_callback_set( webview_instance_, &WebView::OnJavaScriptAlertDialog, this); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptConfirm( + ftpw_flutter_inappwebview_ewk_view_javascript_confirm_callback_set( webview_instance_, &WebView::OnJavaScriptConfirmDialog, this); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptPrompt( + ftpw_flutter_inappwebview_ewk_view_javascript_prompt_callback_set( webview_instance_, &WebView::OnJavaScriptPromptDialog, this); #ifdef TV_PROFILE - EwkInternalApiBinding::GetInstance().view.SupportVideoHoleSet( + ftpw_flutter_inappwebview_ewk_view_set_support_video_hole( webview_instance_, window_, true, false); #endif @@ -676,7 +665,7 @@ bool WebView::InitWebView() { template void WebView::SetBackgroundColor(const T& color) { - EwkInternalApiBinding::GetInstance().view.SetBackgroundColor( + ftpw_flutter_inappwebview_ewk_view_bg_color_set( webview_instance_, color >> 16 & 0xff, color >> 8 & 0xff, color & 0xff, color >> 24 & 0xff); } @@ -689,7 +678,7 @@ void WebView::ApplySettings(const flutter::EncodableMap& settings) { } if (GetValueFromEncodableMap(settings, "supportZoom", &bool_value)) { - EwkInternalApiBinding::GetInstance().settings.ForceZoomSet( + ftpw_flutter_inappwebview_ewk_settings_force_zoom_set( ewk_view_settings_get(webview_instance_), bool_value); } @@ -1044,13 +1033,13 @@ void WebView::HandleWebViewMethodCall(const FlMethodCall& method_call, result->Error("Invalid argument", "No settings provided."); } } else if (method_name == "javaScriptAlertReply") { - EwkInternalApiBinding::GetInstance().view.JavaScriptAlertReply( + ftpw_flutter_inappwebview_ewk_view_javascript_alert_reply( webview_instance_); result->Success(); } else if (method_name == "javaScriptConfirmReply") { const auto* value = std::get_if(arguments); if (value) { - EwkInternalApiBinding::GetInstance().view.JavaScriptConfirmReply( + ftpw_flutter_inappwebview_ewk_view_javascript_confirm_reply( webview_instance_, *value); result->Success(); } else { @@ -1060,7 +1049,7 @@ void WebView::HandleWebViewMethodCall(const FlMethodCall& method_call, // A null argument signals that the prompt was cancelled; pass nullptr to // EWK so the JavaScript prompt() call resolves to null. const auto* value = std::get_if(arguments); - EwkInternalApiBinding::GetInstance().view.JavaScriptPromptReply( + ftpw_flutter_inappwebview_ewk_view_javascript_prompt_reply( webview_instance_, value ? value->c_str() : nullptr); result->Success(); } else { @@ -1170,17 +1159,17 @@ void WebView::OnLoadError(void* data, Evas_Object* obj, void* event_info) { } void WebView::OnConsoleMessage(void* data, Evas_Object* obj, void* event_info) { - Ewk_Console_Message* message = static_cast(event_info); Ewk_Console_Message_Level log_level = - EwkInternalApiBinding::GetInstance().console_message.LevelGet(message); - std::string text = - EwkInternalApiBinding::GetInstance().console_message.TextGet(message); + ftpw_flutter_inappwebview_ewk_console_message_level_get(event_info); + const char* text = + ftpw_flutter_inappwebview_ewk_console_message_text_get(event_info); WebView* webview = static_cast(data); if (webview->webview_channel_) { flutter::EncodableMap args = { {flutter::EncodableValue("messageLevel"), flutter::EncodableValue(ConvertLogLevel(log_level))}, - {flutter::EncodableValue("message"), flutter::EncodableValue(text)}, + {flutter::EncodableValue("message"), + flutter::EncodableValue(text ? text : "")}, }; webview->webview_channel_->InvokeMethod( "onConsoleMessage", std::make_unique(args)); @@ -1269,8 +1258,8 @@ void WebView::OnEvaluateJavaScript(Evas_Object* obj, const char* result_value, delete result; } -Eina_Bool WebView::OnJavaScriptAlertDialog(Evas_Object* o, const char* message, - void* data) { +Eina_Bool WebView::OnJavaScriptAlertDialog(void* o, const char* message, + void* data) { WebView* webview = static_cast(data); flutter::EncodableMap args = { {flutter::EncodableValue("message"), @@ -1283,8 +1272,8 @@ Eina_Bool WebView::OnJavaScriptAlertDialog(Evas_Object* o, const char* message, return true; } -Eina_Bool WebView::OnJavaScriptConfirmDialog(Evas_Object* o, - const char* message, void* data) { +Eina_Bool WebView::OnJavaScriptConfirmDialog(void* o, const char* message, + void* data) { WebView* webview = static_cast(data); flutter::EncodableMap args = { {flutter::EncodableValue("message"), @@ -1297,9 +1286,9 @@ Eina_Bool WebView::OnJavaScriptConfirmDialog(Evas_Object* o, return true; } -Eina_Bool WebView::OnJavaScriptPromptDialog(Evas_Object* o, const char* message, - const char* default_text, - void* data) { +Eina_Bool WebView::OnJavaScriptPromptDialog(void* o, const char* message, + const char* default_text, + void* data) { WebView* webview = static_cast(data); flutter::EncodableMap args = { {flutter::EncodableValue("message"), diff --git a/packages/flutter_inappwebview/tizen/src/webview.h b/packages/flutter_inappwebview/tizen/src/webview.h index 864a6824d..bd5f60e94 100644 --- a/packages/flutter_inappwebview/tizen/src/webview.h +++ b/packages/flutter_inappwebview/tizen/src/webview.h @@ -22,7 +22,7 @@ #include #include -#include "ewk_internal_api_binding.h" +#include "ftpw_flutter_inappwebview.h" typedef flutter::MethodCall FlMethodCall; typedef flutter::MethodResult FlMethodResult; @@ -107,13 +107,13 @@ class WebView : public PlatformView { static void OnTitleChange(void* data, Evas_Object* obj, void* event_info); static void OnEvaluateJavaScript(Evas_Object* obj, const char* result_value, void* user_data); - static Eina_Bool OnJavaScriptAlertDialog(Evas_Object* o, const char* message, + static Eina_Bool OnJavaScriptAlertDialog(void* o, const char* message, + void* data); + static Eina_Bool OnJavaScriptConfirmDialog(void* o, const char* message, void* data); - static Eina_Bool OnJavaScriptConfirmDialog(Evas_Object* o, - const char* message, void* data); - static Eina_Bool OnJavaScriptPromptDialog(Evas_Object* o, const char* message, - const char* default_text, - void* data); + static Eina_Bool OnJavaScriptPromptDialog(void* o, const char* message, + const char* default_text, + void* data); void SendTouchEvent(int type, double x, double y); void SendMouseEvent(int type, int button, double x, double y, double dx,