From 8ca01438b78cb10974492d9f307173103206872f Mon Sep 17 00:00:00 2001 From: "huayong.xu" Date: Mon, 28 Nov 2022 19:24:08 +0800 Subject: [PATCH] Add webview API for url,change event. --- .../src/internal/Interop/Interop.WebView.cs | 3 ++ src/Tizen.NUI/src/internal/WebView.cs | 34 ++++++++++++++++++ .../src/internal/WebViewUrlChangedEventArgs.cs | 40 ++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100755 src/Tizen.NUI/src/internal/WebViewUrlChangedEventArgs.cs diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs index 088266c..7e852ab 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs @@ -129,6 +129,9 @@ namespace Tizen.NUI [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterScrollEdgeReachedCallback")] public static extern void RegisterScrollEdgeReachedCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterUrlChangedCallback")] + public static extern void RegisterUrlChangedCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterNavigationPolicyDecidedCallback")] public static extern void RegisterNavigationPolicyDecidedCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); diff --git a/src/Tizen.NUI/src/internal/WebView.cs b/src/Tizen.NUI/src/internal/WebView.cs index 236ffe3..0894b1b 100755 --- a/src/Tizen.NUI/src/internal/WebView.cs +++ b/src/Tizen.NUI/src/internal/WebView.cs @@ -40,6 +40,9 @@ namespace Tizen.NUI private delegate void WebViewScrollEdgeReachedCallback(int edge); [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void WebViewUrlChangedCallbackDelegate(string pageUrl); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void WebViewPolicyDecidedCallback(IntPtr maker); private EventHandler pageLoadStartedEventHandler; @@ -54,6 +57,9 @@ namespace Tizen.NUI private EventHandler scrollEdgeReachedEventHandler; private WebViewScrollEdgeReachedCallback scrollEdgeReachedCallback; + private EventHandler urlChangedEventHandler; + private WebViewUrlChangedCallbackDelegate urlChangedCallback; + private EventHandler navigationPolicyDecidedEventHandler; private WebViewPolicyDecidedCallback navigationPolicyDecidedCallback; @@ -162,6 +168,11 @@ namespace Tizen.NUI scrollEdgeReachedEventHandler?.Invoke(this, new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge)); } + private void OnUrlChanged(string pageUrl) + { + urlChangedEventHandler?.Invoke(this, new WebViewUrlChangedEventArgs(pageUrl)); + } + private void OnNavigationPolicyDecided(IntPtr maker) { navigationPolicyDecidedEventHandler?.Invoke(this, new WebViewPolicyDecidedEventArgs(new WebPolicyDecisionMaker(maker, true))); @@ -612,6 +623,29 @@ namespace Tizen.NUI } /// + /// Event for the UrlChanged signal which can be used to subscribe or unsubscribe the event handler.
+ /// This signal is emitted when url is changed.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler UrlChanged + { + add + { + if (urlChangedEventHandler == null) + { + urlChangedCallback = OnUrlChanged; + IntPtr ip = Marshal.GetFunctionPointerForDelegate(urlChangedCallback); + Interop.WebView.RegisterUrlChangedCallback(SwigCPtr, new HandleRef(this, ip)); + } + urlChangedEventHandler += value; + } + remove + { + urlChangedEventHandler -= value; + } + } + + /// /// Event for the NavigationPolicyDecided signal which can be used to subscribe or unsubscribe the event handler.
/// This signal is emitted when response policy would be decided.
///
diff --git a/src/Tizen.NUI/src/internal/WebViewUrlChangedEventArgs.cs b/src/Tizen.NUI/src/internal/WebViewUrlChangedEventArgs.cs new file mode 100755 index 0000000..af44631 --- /dev/null +++ b/src/Tizen.NUI/src/internal/WebViewUrlChangedEventArgs.cs @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +using System; +using System.ComponentModel; + +namespace Tizen.NUI +{ + /// + /// Event arguments that passed via the WebView.UrlChanged. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class WebViewUrlChangedEventArgs : EventArgs + { + internal WebViewUrlChangedEventArgs(string url) + { + NewPageUrl = url; + } + + /// + /// The URL of new web page. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public string NewPageUrl { get; } + } +} -- 2.7.4