From e548eb14f80cf2cd03018900e6c38a83e3890b0a Mon Sep 17 00:00:00 2001 From: "dongsug.song" Date: Fri, 5 Nov 2021 10:47:55 +0900 Subject: [PATCH] [NUI] Fix some crash when NUI.Samples' running on Ubuntu --- .../Samples/AccessibilityManagerSample.cs | 7 +- .../Tizen.NUI.Samples/Samples/DaliDemo/DaliDemo.cs | 40 +++++++++- .../Tizen.NUI.Samples/Samples/DimTest.cs | 4 +- .../Samples/RemoveAllChildrenTest.cs | 27 +++++++ .../Samples/RiveAnimationFollowTouch.cs | 9 ++- .../Samples/RiveAnimationRollInOut.cs | 5 +- .../Tizen.NUI.Samples/Samples/RiveAnimationTest.cs | 22 +++--- .../Samples/RiveAnimationUniverse.cs | 7 +- .../Tizen.NUI.Samples/Samples/RiveMusicApp.cs | 6 +- .../Tizen.NUI.Samples/Samples/RiveMusicBoxApp.cs | 6 +- .../Tizen.NUI.Samples/Samples/SwitchSample.cs | 28 +++---- .../Tizen.NUI.Samples/Samples/VideoViewTest.cs | 26 +++++-- .../Tizen.NUI.Samples/ShowErrorPage.cs | 88 ++++++++++++++++++++++ 13 files changed, 219 insertions(+), 56 deletions(-) create mode 100755 test/Tizen.NUI.Samples/Tizen.NUI.Samples/ShowErrorPage.cs diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/AccessibilityManagerSample.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/AccessibilityManagerSample.cs index d319436..1cee8b2 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/AccessibilityManagerSample.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/AccessibilityManagerSample.cs @@ -24,6 +24,7 @@ namespace Tizen.NUI.Samples const int mContents = mRow * mColumn; Size2D windowSize; + TableView table; public void Activate() { @@ -32,7 +33,7 @@ namespace Tizen.NUI.Samples windowSize = window.Size; // Create Table - TableView table = new TableView(mRow, mColumn) + table = new TableView(mRow, mColumn) { PositionUsesPivotPoint = true, PivotPoint = PivotPoint.Center, @@ -105,6 +106,8 @@ namespace Tizen.NUI.Samples public void Deactivate() { + AccessibilityManager.Instance.FocusedViewActivated -= OnFocusedView; + if(table) { table.Unparent(); } } } -} \ No newline at end of file +} diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DaliDemo/DaliDemo.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DaliDemo/DaliDemo.cs index e2d2cc8..86d9f89 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DaliDemo/DaliDemo.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DaliDemo/DaliDemo.cs @@ -72,11 +72,43 @@ namespace Tizen.NUI.Samples if (null != example) { DeleteDaliDemo(); - - example.Activate(); + int exceptNum = 0; + string exceptionMessage = "Unknown!"; + try + { + example.Activate(); + } + catch (Exception e) + { + if (e is global::System.EntryPointNotFoundException) + { + Tizen.Log.Fatal("NUI", $"@@ ERROR! No dali-csharp-binding! Exception={e.Message} \n"); + exceptNum = 1; + exceptionMessage = e.Message; + } + else if (e is global::System.ArgumentException) + { + Tizen.Log.Fatal("NUI", $"@@ ERROR! this comes when VideoView test on Ubuntu! Exception={e.Message} \n"); + exceptNum = 2; + exceptionMessage = e.Message; + } + } + switch (exceptNum) + { + case 0: + default: + break; + case 1: + case 2: + example.Deactivate(); + var errorPage = assembly?.CreateInstance("Tizen.NUI.Samples.ShowErrorPage") as ShowErrorPage; + errorPage.Activate(); + errorPage.ShowExcpetionText(exceptionMessage); + example = errorPage; + break; + } + curExample = example; } - - curExample = example; } private void ExitSample() diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DimTest.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DimTest.cs index 3370786..992d6a1 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DimTest.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DimTest.cs @@ -65,7 +65,7 @@ namespace Tizen.NUI.Samples public void Activate() { - Assert.IsFalse(true, "TDD test, Exception throw"); + //Assert.IsFalse(true, "TDD test, Exception throw"); win = Window.Instance; win.BackgroundColor = Color.Green; @@ -201,4 +201,4 @@ namespace Tizen.NUI.Samples dimView.Unparent(); } } -} \ No newline at end of file +} diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RemoveAllChildrenTest.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RemoveAllChildrenTest.cs index 7ae671b..9d5b9b4 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RemoveAllChildrenTest.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RemoveAllChildrenTest.cs @@ -17,6 +17,33 @@ namespace Tizen.NUI.Samples } public void Deactivate() { + window.KeyEvent -= OnKeyEvent; + if (t1) + { + t1.Unparent(); + t1.Dispose(); + } + if (t2) + { + t2.Unparent(); + t2.Dispose(); + } + if (t3) + { + t3.Unparent(); + t3.Dispose(); + } + if (t4) + { + t4.Unparent(); + t4.Dispose(); + } + if (scroll) + { + scroll.RemoveAllChildren(true); + scroll.Unparent(); + scroll.Dispose(); + } } private TextLabel t1, t2, t3, t4; diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationFollowTouch.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationFollowTouch.cs index a314f18..2a9921e 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationFollowTouch.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationFollowTouch.cs @@ -45,11 +45,11 @@ namespace Tizen.NUI.Samples defaultLayer.Add(playButton); } - private void OnRiveWindowTouchEvent(object source, Window.TouchEventArgs e) + private void OnRiveWindowTouchEvent(object source, Window.TouchEventArgs e) { Vector2 lp = e.Touch.GetLocalPosition(0); Vector2 sp = e.Touch.GetScreenPosition(0); - float scale = (1000.0f /720.0f); + float scale = (1000.0f / 720.0f); // Set root and spark node position rav.SetNodePosition("root", new Position(lp.X * scale, lp.Y * scale)); @@ -57,8 +57,9 @@ namespace Tizen.NUI.Samples } public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(playButton); + window.TouchEvent -= OnRiveWindowTouchEvent; + if (rav) { defaultLayer.Remove(rav); } + if (playButton) { defaultLayer.Remove(playButton); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationRollInOut.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationRollInOut.cs index 913f06a..f1ffb94 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationRollInOut.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationRollInOut.cs @@ -75,8 +75,9 @@ namespace Tizen.NUI.Samples } public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(playButton); + window.TouchEvent -= OnRiveWindowTouchEvent; + if (rav) { defaultLayer.Remove(rav); } + if (playButton) { defaultLayer.Remove(playButton); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationTest.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationTest.cs index 2ff2359..fcb5c49 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationTest.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationTest.cs @@ -153,17 +153,17 @@ namespace Tizen.NUI.Samples } public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(playButton); - defaultLayer.Remove(stopButton); - defaultLayer.Remove(bounceButton); - defaultLayer.Remove(brokeButton); - defaultLayer.Remove(fillButton); - defaultLayer.Remove(strokeButton); - defaultLayer.Remove(opacityButton); - defaultLayer.Remove(scaleButton); - defaultLayer.Remove(rotationButton); - defaultLayer.Remove(positionButton); + if (rav) { defaultLayer.Remove(rav); } + if (playButton) { defaultLayer.Remove(playButton); } + if (stopButton) { defaultLayer.Remove(stopButton); } + if (bounceButton) { defaultLayer.Remove(bounceButton); } + if (brokeButton) { defaultLayer.Remove(brokeButton); } + if (fillButton) { defaultLayer.Remove(fillButton); } + if (strokeButton) { defaultLayer.Remove(strokeButton); } + if (opacityButton) { defaultLayer.Remove(opacityButton); } + if (scaleButton) { defaultLayer.Remove(scaleButton); } + if (rotationButton) { defaultLayer.Remove(rotationButton); } + if (positionButton) { defaultLayer.Remove(positionButton); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationUniverse.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationUniverse.cs index b542c48..ca05409 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationUniverse.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveAnimationUniverse.cs @@ -355,9 +355,10 @@ namespace Tizen.NUI.Samples public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(scroll); - defaultLayer.Remove(header); + window.TouchEvent -= OnRiveWindowTouchEvent; + if (rav) { defaultLayer.Remove(rav); } + if (scroll) { defaultLayer.Remove(scroll); } + if (header) { defaultLayer.Remove(header); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicApp.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicApp.cs index 7cdeaf7..bd8e7ea 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicApp.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicApp.cs @@ -58,9 +58,9 @@ namespace Tizen.NUI.Samples } public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(playButton); - defaultLayer.Remove(stopButton); + if (rav) { defaultLayer.Remove(rav); } + if (playButton) { defaultLayer.Remove(playButton); } + if (stopButton) { defaultLayer.Remove(stopButton); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicBoxApp.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicBoxApp.cs index fbe845c..7509274 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicBoxApp.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/RiveMusicBoxApp.cs @@ -55,9 +55,9 @@ namespace Tizen.NUI.Samples } public void Deactivate() { - defaultLayer.Remove(rav); - defaultLayer.Remove(playButton); - defaultLayer.Remove(stopButton); + if (rav) { defaultLayer.Remove(rav); } + if (playButton) { defaultLayer.Remove(playButton); } + if (stopButton) { defaultLayer.Remove(stopButton); } } } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/SwitchSample.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/SwitchSample.cs index 61b7472..cad4b99 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/SwitchSample.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/SwitchSample.cs @@ -323,52 +323,52 @@ namespace Tizen.NUI.Samples int num = 4; for (int i = 0; i < num; i++) { - utilitySwitch[i].Dispose(); + utilitySwitch[i]?.Dispose(); utilitySwitch[i] = null; - familySwitch[i].Dispose(); + familySwitch[i]?.Dispose(); familySwitch[i] = null; - foodSwitch[i].Dispose(); + foodSwitch[i]?.Dispose(); foodSwitch[i] = null; - kitchenSwitch[i].Dispose(); + kitchenSwitch[i]?.Dispose(); kitchenSwitch[i] = null; - modeText[i].Dispose(); + modeText[i]?.Dispose(); modeText[i] = null; - utilitySwitch2[i].Dispose(); + utilitySwitch2[i]?.Dispose(); utilitySwitch2[i] = null; - familySwitch2[i].Dispose(); + familySwitch2[i]?.Dispose(); familySwitch2[i] = null; - foodSwitch2[i].Dispose(); + foodSwitch2[i]?.Dispose(); foodSwitch2[i] = null; - kitchenSwitch2[i].Dispose(); + kitchenSwitch2[i]?.Dispose(); kitchenSwitch2[i] = null; - modeText2[i].Dispose(); + modeText2[i]?.Dispose(); modeText2[i] = null; } - createText[0].Dispose(); + createText[0]?.Dispose(); createText[0] = null; - createText[1].Dispose(); + createText[1]?.Dispose(); createText[1] = null; for (int j = 0; j < 3; j++) { if (parentView[j] != null) { - parentView[j].Dispose(); + parentView[j]?.Dispose(); parentView[j] = null; } } NUIApplication.GetDefaultWindow().Remove(root); - root.Dispose(); + root?.Dispose(); root = null; } } diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VideoViewTest.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VideoViewTest.cs index 52ec4a2..569b910 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VideoViewTest.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VideoViewTest.cs @@ -1,6 +1,7 @@  using global::System; using Tizen.NUI.BaseComponents; +using System.Runtime.InteropServices; namespace Tizen.NUI.Samples { @@ -23,11 +24,11 @@ namespace Tizen.NUI.Samples } } - Window win; - myPlayer player; + Window win = null; + myPlayer player = null; string resourcePath; const string tag = "NUITEST"; - View dummy; + View dummy = null; public void Activate() { win = NUIApplication.GetDefaultWindow(); @@ -53,9 +54,8 @@ namespace Tizen.NUI.Samples tlog.Fatal(tag, $"Deactivate()!"); - dummy.Unparent(); - - videoView.Unparent(); + if (dummy) { dummy.Unparent(); } + if (videoView) { videoView.Unparent(); } // currently it is crashed when Dispose() is called. need to check. //videoView.Dispose(); @@ -125,8 +125,18 @@ namespace Tizen.NUI.Samples videoView.PivotPoint = PivotPoint.Center; win.Add(videoView); - var playerHandle = new SafeNativePlayerHandle(videoView); - player = new myPlayer(playerHandle.DangerousGetHandle()); + try + { + var playerHandle = videoView.NativeHandle; + player = new myPlayer(playerHandle.DangerousGetHandle()); + } + catch( Exception e) + { + if (e is global::System.ArgumentException) + { + Tizen.Log.Fatal("NUI", $"[ERROR] could not get NativePlayerHandle!"); + } + } if (player != null) { player.Start(); diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/ShowErrorPage.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/ShowErrorPage.cs new file mode 100755 index 0000000..0907976 --- /dev/null +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/ShowErrorPage.cs @@ -0,0 +1,88 @@ + +using global::System; +using Tizen.NUI; +using Tizen.NUI.BaseComponents; +using Tizen.NUI.Components; + +namespace Tizen.NUI.Samples +{ + public class ShowErrorPage : IExample + { + View root; + TextLabel title, msg; + Button goback; + public void Activate() + { + var win = NUIApplication.GetDefaultWindow(); + var winSize = win.Size; + root = new View() + { + PositionUsesPivotPoint = true, + ParentOrigin = NUI.ParentOrigin.Center, + PivotPoint = NUI.PivotPoint.Center, + Size = winSize, + BackgroundColor = Color.BlueViolet, + Layout = new LinearLayout() + { + LinearOrientation = LinearLayout.Orientation.Vertical, + Padding = new Extents(30, 30, 30, 30), + }, + }; + win.Add(root); + title = new TextLabel() + { + BackgroundColor = Color.Beige, + WidthSpecification = LayoutParamPolicies.MatchParent, + HeightSpecification = LayoutParamPolicies.WrapContent, + PointSize = 15, + MultiLine = true, + Text = "Error, please check the exception below!", + Padding = new Extents(10, 10, 10, 10), + }; + root.Add(title); + + msg = new TextLabel() + { + BackgroundColor = Color.LightCoral, + WidthSpecification = LayoutParamPolicies.MatchParent, + HeightSpecification = winSize.Height / 2, + PointSize = 19, + MultiLine = true, + }; + root.Add(msg); + + goback = new Button() + { + BackgroundColor = Color.HotPink, + Text = "Please go back by keyboard \"back\" button", + WidthSpecification = LayoutParamPolicies.MatchParent, + HeightSpecification = LayoutParamPolicies.WrapContent, + }; + root.Add(goback); + } + + public void Deactivate() + { + root?.Unparent(); + + goback?.Unparent(); + goback?.Dispose(); + + msg?.Unparent(); + msg?.Dispose(); + + title?.Unparent(); + title?.Dispose(); + + root?.Dispose(); + } + + public void ShowExcpetionText(string message) + { + if (msg) + { + msg.Text = message; + } + } + } +} -- 2.7.4