[NUI] Modify NUI Seamless animation bug (#2334) (#2341)
authorhuiyueun <35286162+huiyueun@users.noreply.github.com>
Tue, 8 Dec 2020 03:35:36 +0000 (12:35 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Tue, 8 Dec 2020 06:23:12 +0000 (15:23 +0900)
* [NUI] Modify NUI Seamless animation bug

Signed-off-by: huiyu.eun <huiyu.eun@samsung.com>
* [NUI] Modify build warning of seamless

Signed-off-by: huiyu.eun <huiyu.eun@samsung.com>
* Update DefaultFrameBroker.cs

* Update TransitionAnimations.cs

* Update DefaultFrameBroker.cs

* Update SeamlessBackward.cs

* Update SeamlessForward.cs

* Update TransitionOptions.cs

* Update NUIBrokerSample.cs

* Update DefaultFrameBroker.cs

Signed-off-by: huiyu.eun <huiyu.eun@samsung.com>
45 files changed:
src/Tizen.NUI/src/internal/FrameBroker/DefaultFrameBroker.cs
src/Tizen.NUI/src/internal/FrameBroker/FrameBrokerBase.cs
src/Tizen.NUI/src/internal/FrameBroker/FrameBrokerBaseErrorFactory.cs
src/Tizen.NUI/src/internal/FrameBroker/FrameData.cs
src/Tizen.NUI/src/internal/FrameProvider/FrameProvider.cs
src/Tizen.NUI/src/internal/FrameProvider/FrameProviderErrorFactory.cs
src/Tizen.NUI/src/public/TransitionAnimations/TransitionAnimations.cs
src/Tizen.NUI/src/public/TransitionOptions/TransitionOptions.cs
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/DefaultView.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.csproj [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/ObjectAnimationManager.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessBackward.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessForward.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/DelegateCommand.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/MainViewModel.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/XamlPage.xaml.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/add.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/arrow-89-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/bar-chart-5-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/clock-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/emart.png [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg1.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg15.png [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg6.png [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/layout/XamlPage.xaml [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/pic_1.jpg [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/play-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/profile.jpg [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/video-play-64.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/shared/res/NUIBrokerSample.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/tizen-manifest.xml [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.csproj [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/XamlPage.xaml.cs [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/add.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/arrow-89-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/bar-chart-5-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/clock-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/layout/XamlPage.xaml [new file with mode: 0755]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/pic_1.jpg [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/play-128.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/profile.jpg [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/shared/res/NUIMusicPlayer.png [new file with mode: 0644]
test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/tizen-manifest.xml [new file with mode: 0755]

index d6b036a008f3572b5d15a62d0ade36f1e023f14a..41a0e1d220c0d15a89eda53d30cede05061ae658 100755 (executable)
@@ -28,10 +28,15 @@ namespace Tizen.NUI
         private ImageView providerImage;
         private bool isAnimating;
 
-        public delegate void AnimationEventHandler();
+        public delegate void AnimationEventHandler(bool direction);
         internal event AnimationEventHandler AnimationInitialized;
         internal event AnimationEventHandler AnimationFinished;
 
+        internal View mainView;
+        private bool direction;
+
+        internal Animation animation;
+
         internal DefaultFrameBroker(Window window) : base(window)
         {
             this.window = window;
@@ -40,16 +45,17 @@ namespace Tizen.NUI
 
         protected override void OnFrameResumed(FrameData frame)
         {
+            base.OnFrameResumed(frame);
+
+            direction = frame.DirectionForward;
+
             if (isAnimating)
             {
                 return;
             }
             isAnimating = true;
-            base.OnFrameResumed(frame);
-            if (AnimationInitialized != null)
-            {
-                AnimationInitialized();
-            }
+
+            AnimationInitialized?.Invoke(frame.DirectionForward);
 
             if (frame.DirectionForward)
             {
@@ -63,20 +69,60 @@ namespace Tizen.NUI
             StartAnimation();
         }
 
-        private void PlayAnimateTo(FrameData frame, TransitionAnimation animation)
+        protected override void OnFramePaused()
         {
-            if (animation)
+            base.OnFramePaused();
+            animation?.Stop();
+
+            ResetImage();
+
+            isAnimating = false;
+        }
+
+        private void PlayAnimateTo(FrameData frame, TransitionAnimation transition)
+        {
+            if (transition != null)
             {
-                providerImage = frame.Image;
-                providerImage.PositionUsesPivotPoint = true;
-                providerImage.PivotPoint = animation.GetDefaultPivotPoint();
-                providerImage.ParentOrigin = animation.GetDefaultParentOrigin();
-                providerImage.Position = animation.GetDefaultPosition();
-                providerImage.Size = animation.GetDefaultSize();
+                //ResetImage();
+                if (!providerImage)
+                {
+                    providerImage = new ImageView(transition.DefaultImageStyle);
+                    providerImage.ParentOrigin = transition.DefaultImageStyle.ParentOrigin;
+                    providerImage.PivotPoint = transition.DefaultImageStyle.PivotPoint;
+                    providerImage.PositionUsesPivotPoint = true;
+                    providerImage.AddRenderer(GetRenderer(frame));
+                    if (mainView)
+                    {
+                        mainView.Add(providerImage);
+                        providerImage.LowerToBottom();
+                    }
+                    else
+                    {
+                        window.Add(providerImage);
+                    }
+                }
+                else
+                {
+                    providerImage.ApplyStyle(transition.DefaultImageStyle.Clone());
+                }
 
-                window.Add(providerImage);
+                providerImage.Show();
+                int propertyCount = transition.AnimationDataList.Count;
+                animation = new Animation(transition.DurationMilliSeconds+80);
+                animation.Properties = new string[propertyCount];
+                animation.DestValue = new string[propertyCount];
+                animation.StartTime = new int[propertyCount];
+                animation.EndTime = new int[propertyCount];
 
+                for (int i = 0; i < propertyCount; i++)
+                {
+                    animation.Properties[i] = transition.AnimationDataList[i].Property;
+                    animation.DestValue[i] = transition.AnimationDataList[i].DestinationValue;
+                    animation.StartTime[i] = 80+transition.AnimationDataList[i].StartTime;
+                    animation.EndTime[i] = 80+transition.AnimationDataList[i].EndTime;
+                }
                 animation.PlayAnimateTo(providerImage);
+                animation.Finished += Ani_Finished;
             }
             else
             {
@@ -95,7 +141,6 @@ namespace Tizen.NUI
             set
             {
                 forwardAnimation = value;
-                forwardAnimation.Finished += Ani_Finished;
             }
         }
 
@@ -109,25 +154,25 @@ namespace Tizen.NUI
             set
             {
                 backwardAnimation = value;
-                backwardAnimation.Finished += Ani_Finished;
             }
         }
 
         private void Ani_Finished(object sender, EventArgs e)
         {
-            if (AnimationFinished != null)
-            {
-                AnimationFinished();
-            }
+            FinishAnimation();
 
+            AnimationFinished?.Invoke(direction);
+        }
+
+        private void ResetImage()
+        {
             if (providerImage != null)
             {
-                providerImage.Unparent();
-                providerImage.Dispose();
-                providerImage = null;
+                providerImage.Hide();
+                //providerImage.Unparent();
+                //providerImage.Dispose();
+                //providerImage = null;
             }
-            FinishAnimation();
-            isAnimating = false;
         }
     }
 }
index 5604e34cf8a5c3b505cac15fd8cd9c1b70525834..2689e1cfdbab73ad5521d988c448e84e2f14606b 100755 (executable)
@@ -17,6 +17,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Runtime.InteropServices;
 using System.Threading.Tasks;
 using Tizen.Applications;
 using Tizen.Applications.Exceptions;
@@ -28,13 +29,16 @@ namespace Tizen.NUI
     /// </summary>
     internal abstract class FrameBrokerBase : IDisposable
     {
-        private string LogTag = "NUI";
-        private readonly SafeFrameBrokerHandle _handle;
-        private Dictionary<int, Interop.FrameBroker.AppControlResultCallback> _resultCallbackMaps = new Dictionary<int, Interop.FrameBroker.AppControlResultCallback>();
-        private int _resultId = 0;
-        private Interop.FrameBroker.FrameContextLifecycleCallbacks _callbacks;
-        private IntPtr _context = IntPtr.Zero;
-        private bool _disposed = false;
+        private string logTag = "NUI";
+        private readonly SafeFrameBrokerHandle handle;
+        private Dictionary<int, Interop.FrameBroker.AppControlResultCallback> resultCallbackMaps = new Dictionary<int, Interop.FrameBroker.AppControlResultCallback>();
+        private int resultId = 0;
+        private Interop.FrameBroker.FrameContextLifecycleCallbacks callbacks;
+        private IntPtr context = IntPtr.Zero;
+        private bool disposed = false;
+
+        private Renderer renderer;
+        private TextureSet textureSet;
 
         /// <summary>
         /// Initializes the FrameBroker class.
@@ -53,14 +57,14 @@ namespace Tizen.NUI
                 throw FrameBrokerBaseErrorFactory.GetException(Interop.FrameBroker.ErrorCode.InvalidParameter, "Invalid parameter");
             }
 
-            _callbacks.OnCreate = new Interop.FrameBroker.FrameContextCreateCallback(OnCreateNative);
-            _callbacks.OnResume = new Interop.FrameBroker.FrameContextResumeCallback(OnResumeNavie);
-            _callbacks.OnPause = new Interop.FrameBroker.FrameContextPauseCallback(OnPauseNative);
-            _callbacks.OnDestroy = new Interop.FrameBroker.FrameContextDestroyCallback(OnDestroyNative);
-            _callbacks.OnError = new Interop.FrameBroker.FrameContextErrorCallback(OnErrorNative);
-            _callbacks.OnUpdate = new Interop.FrameBroker.FrameContextUpdateCallback(OnUpdateNative);
+            callbacks.OnCreate = new Interop.FrameBroker.FrameContextCreateCallback(OnCreateNative);
+            callbacks.OnResume = new Interop.FrameBroker.FrameContextResumeCallback(OnResumeNavie);
+            callbacks.OnPause = new Interop.FrameBroker.FrameContextPauseCallback(OnPauseNative);
+            callbacks.OnDestroy = new Interop.FrameBroker.FrameContextDestroyCallback(OnDestroyNative);
+            callbacks.OnError = new Interop.FrameBroker.FrameContextErrorCallback(OnErrorNative);
+            callbacks.OnUpdate = new Interop.FrameBroker.FrameContextUpdateCallback(OnUpdateNative);
 
-            err = Interop.FrameBroker.Create(window.GetNativeWindowHandler(), ref _callbacks, IntPtr.Zero, out _handle);
+            err = Interop.FrameBroker.Create(window.GetNativeWindowHandler(), ref callbacks, IntPtr.Zero, out handle);
             if (err != Interop.FrameBroker.ErrorCode.None)
             {
                 throw FrameBrokerBaseErrorFactory.GetException(err, "Failed to create frame broker handle");
@@ -95,24 +99,24 @@ namespace Tizen.NUI
             var task = new TaskCompletionSource<FrameBrokerBaseResult>();
             int requestId = 0;
 
-            lock (_resultCallbackMaps)
+            lock (resultCallbackMaps)
             {
-                requestId = _resultId++;
-                _resultCallbackMaps[requestId] = (handle, result, userData) =>
+                requestId = resultId++;
+                resultCallbackMaps[requestId] = (handle, result, userData) =>
                 {
                     task.SetResult((FrameBrokerBaseResult)result);
-                    lock (_resultCallbackMaps)
+                    lock (resultCallbackMaps)
                     {
-                        _resultCallbackMaps.Remove((int)userData);
+                        resultCallbackMaps.Remove((int)userData);
                     }
                 };
             }
 
             Interop.FrameBroker.ErrorCode err;
             if (toProvider)
-                err = Interop.FrameBroker.SendLaunchRequestToProvider(_handle, appControl.SafeAppControlHandle, _resultCallbackMaps[requestId], null, (IntPtr)requestId);
+                err = Interop.FrameBroker.SendLaunchRequestToProvider(handle, appControl.SafeAppControlHandle, resultCallbackMaps[requestId], null, (IntPtr)requestId);
             else
-                err = Interop.FrameBroker.SendLaunchRequest(_handle, appControl.SafeAppControlHandle, _resultCallbackMaps[requestId], null, (IntPtr)requestId);
+                err = Interop.FrameBroker.SendLaunchRequest(handle, appControl.SafeAppControlHandle, resultCallbackMaps[requestId], null, (IntPtr)requestId);
 
             if (err != Interop.FrameBroker.ErrorCode.None)
             {
@@ -129,7 +133,7 @@ namespace Tizen.NUI
         /// <exception cref="InvalidOperationException">Thrown when failed because of system error.</exception>
         internal void StartAnimation()
         {
-            Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.StartAnimation(_context);
+            Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.StartAnimation(context);
             if (err != Interop.FrameBroker.ErrorCode.None)
             {
                 throw FrameBrokerBaseErrorFactory.GetException(err, "Failed to notify that the animation is started");
@@ -143,7 +147,7 @@ namespace Tizen.NUI
         /// <exception cref="InvalidOperationException">Thrown when failed because of system error.</exception>
         internal void FinishAnimation()
         {
-            Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.FinishAnimation(_context);
+            Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.FinishAnimation(context);
             if (err != Interop.FrameBroker.ErrorCode.None)
             {
                 throw FrameBrokerBaseErrorFactory.GetException(err, "Failed to notify that the animation is finished");
@@ -156,7 +160,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFrameCreated()
         {
-            Log.Warn(LogTag, "The OnFrameCreated() is not implemented");
+            Log.Warn(logTag, "The OnFrameCreated() is not implemented");
         }
 
         /// <summary>
@@ -171,7 +175,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFrameResumed(FrameData frame)
         {
-            Log.Warn(LogTag, "The OnFrameResumed() is not implemented");
+            Log.Warn(logTag, "The OnFrameResumed() is not implemented");
         }
 
         /// <summary>
@@ -181,7 +185,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFrameUpdated(FrameData frame)
         {
-            Log.Warn(LogTag, "The OnFrameUpdated() is not implemented");
+            Log.Warn(logTag, "The OnFrameUpdated() is not implemented");
         }
 
         /// <summary>
@@ -190,7 +194,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFramePaused()
         {
-            Log.Warn(LogTag, "The OnFramePaused() is not implemented");
+            Log.Warn(logTag, "The OnFramePaused() is not implemented");
         }
 
         /// <summary>
@@ -199,7 +203,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFrameDestroyed()
         {
-            Log.Warn(LogTag, "The OnFrameDestroyed() is not implemented");
+            Log.Warn(logTag, "The OnFrameDestroyed() is not implemented");
         }
 
         /// <summary>
@@ -209,12 +213,12 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void OnFrameErred(FrameError error)
         {
-            Log.Warn(LogTag, "The OnFrameErred() is not implemented");
+            Log.Warn(logTag, "The OnFrameErred() is not implemented");
         }
 
         private void OnCreateNative(IntPtr context, IntPtr userData)
         {
-            _context = context;
+            this.context = context;
             OnFrameCreated();
         }
 
@@ -230,13 +234,13 @@ namespace Tizen.NUI
 
         private void OnDestroyNative(IntPtr context, IntPtr userData)
         {
-            _context = IntPtr.Zero;
+            context = IntPtr.Zero;
             OnFrameDestroyed();
         }
 
         private void OnErrorNative(IntPtr context, int error, IntPtr userData)
         {
-            _context = IntPtr.Zero;
+            context = IntPtr.Zero;
             OnFrameErred((FrameError)error);
         }
 
@@ -245,13 +249,136 @@ namespace Tizen.NUI
             OnFrameUpdated(new FrameData(frame));
         }
 
+
+        private Shader CreateShader()
+        {
+            string vertex_shader =
+                "attribute mediump vec2 aPosition;\n" +
+                "varying mediump vec2 vTexCoord;\n" +
+                "uniform highp mat4 uMvpMatrix;\n" +
+                "uniform mediump vec3 uSize;\n" +
+                "varying mediump vec2 sTexCoordRect;\n" +
+                "void main()\n" +
+                "{\n" +
+                "gl_Position = uMvpMatrix * vec4(aPosition * uSize.xy, 0.0, 1.0);\n" +
+                "vTexCoord = aPosition + vec2(0.5);\n" +
+                "}\n";
+
+            string fragment_shader =
+                "#extension GL_OES_EGL_image_external:require\n" +
+                "uniform lowp vec4 uColor;\n" +
+                "varying mediump vec2 vTexCoord;\n" +
+                "uniform samplerExternalOES sTexture;\n" +
+                "void main()\n" +
+                "{\n" +
+                "gl_FragColor = texture2D(sTexture, vTexCoord) * uColor;\n" +
+                "}\n";
+
+            return new Shader(vertex_shader, fragment_shader);
+        }
+
+        [StructLayout(LayoutKind.Sequential)]
+        private struct Vec2
+        {
+            float x;
+            float y;
+            public Vec2(float xIn, float yIn)
+            {
+                x = xIn;
+                y = yIn;
+            }
+        }
+
+        private struct TexturedQuadVertex
+        {
+            public Vec2 position;
+        };
+
+        private IntPtr RectangleDataPtr()
+        {
+            TexturedQuadVertex vertex1 = new TexturedQuadVertex();
+            TexturedQuadVertex vertex2 = new TexturedQuadVertex();
+            TexturedQuadVertex vertex3 = new TexturedQuadVertex();
+            TexturedQuadVertex vertex4 = new TexturedQuadVertex();
+            vertex1.position = new Vec2(-0.5f, -0.5f);
+            vertex2.position = new Vec2(-0.5f, 0.5f);
+            vertex3.position = new Vec2(0.5f, -0.5f);
+            vertex4.position = new Vec2(0.5f, 0.5f);
+
+            TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { vertex1, vertex2, vertex3, vertex4 };
+
+            int lenght = Marshal.SizeOf(vertex1);
+            IntPtr pA = Marshal.AllocHGlobal(lenght * 4);
+
+            for (int i = 0; i < 4; i++)
+            {
+                Marshal.StructureToPtr(texturedQuadVertexData[i], pA + i * lenght, true);
+            }
+
+            return pA;
+        }
+
+        private Geometry CreateQuadGeometry()
+        {
+            /* Create Property buffer */
+            PropertyValue value = new PropertyValue((int)PropertyType.Vector2);
+            PropertyMap vertexFormat = new PropertyMap();
+            PropertyBuffer vertexBuffer = new PropertyBuffer(vertexFormat);
+
+            vertexFormat.Add("aPosition", value);
+            vertexBuffer.SetData(RectangleDataPtr(), 4);
+
+            Geometry geometry = new Geometry();
+            geometry.AddVertexBuffer(vertexBuffer);
+            geometry.SetType(Geometry.Type.TRIANGLE_STRIP);
+
+            value.Dispose();
+            vertexFormat.Dispose();
+            vertexBuffer.Dispose();
+
+            return geometry;
+        }
+
+        internal Renderer GetRenderer(FrameData data)
+        {
+            Geometry geometry = CreateQuadGeometry();
+            Shader shader = CreateShader();
+            Texture texture = null;
+            renderer = new Renderer(geometry, shader);
+            textureSet = new TextureSet();
+
+            switch (data.Type)
+            {
+                case FrameData.FrameType.RemoteSurfaceTbmSurface:
+                    if (data.TbmSurface == null)
+                    {
+                        geometry.Dispose();
+                        shader.Dispose();
+                        return null;
+                    }
+                    texture = new Texture(data.TbmSurface);
+                    textureSet.SetTexture(0, texture);
+                    renderer.SetTextures(textureSet);
+                    break;
+                default:
+                    break;
+            }
+
+            texture.Dispose();
+            geometry.Dispose();
+            shader.Dispose();
+            return renderer;
+        }
+
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void Dispose(bool disposing)
         {
-            if (!_disposed)
+            if (!disposed)
             {
-                _handle.Dispose();
-                _disposed = true;
+                handle.Dispose();
+                renderer?.Dispose();
+                textureSet?.Dispose();
+                disposed = true;
             }
         }
 
index 83a1959d55d95ee3ae852dc122de8e473872b38d..4cddddfb386ed2469a94cb51dd8d48d7a84b24d8 100755 (executable)
@@ -22,11 +22,11 @@ namespace Tizen.NUI
 {
     internal static class FrameBrokerBaseErrorFactory
     {
-        private static string LogTag = "Tizen.NUI";
+        private static string logTag = "NUI";
 
         internal static Exception GetException(Interop.FrameBroker.ErrorCode err, string message, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
         {
-            Log.Error(LogTag, memberName + "@" + filePath + "(" + lineNumber + ") " + message);
+            Log.Error(logTag, memberName + "(" + lineNumber + ") " + message);
             switch (err)
             {
                 case Interop.FrameBroker.ErrorCode.InvalidParameter:
index 7dad750d08d78d641ae47f2a6f807d6fd6ac4d77..b7b1ee3a9e5e99cd6929336c47f4fcc6f15032e3 100755 (executable)
@@ -27,135 +27,14 @@ namespace Tizen.NUI
     /// </summary>
     internal class FrameData
     {
-        private const string LogTag = "NUI";
-        private readonly IntPtr _frame;
-        private int _fd = -1;
-        private uint _size = 0;
-        private ImageView _image = null;
-
-        private Renderer renderer;
-        private TextureSet textureSet;
+        private const string logTag = "NUI";
+        private readonly IntPtr frame;
+        private int fd = -1;
+        private uint size = 0;
 
         internal FrameData(IntPtr frame)
         {
-            _frame = frame;
-        }
-
-        private Shader CreateShader()
-        {
-            string vertex_shader =
-                "attribute mediump vec2 aPosition;\n" +
-                "varying mediump vec2 vTexCoord;\n" +
-                "uniform highp mat4 uMvpMatrix;\n" +
-                "uniform mediump vec3 uSize;\n" +
-                "varying mediump vec2 sTexCoordRect;\n" +
-                "void main()\n" +
-                "{\n" +
-                "gl_Position = uMvpMatrix * vec4(aPosition * uSize.xy, 0.0, 1.0);\n" +
-                "vTexCoord = aPosition + vec2(0.5);\n" +
-                "}\n";
-
-            string fragment_shader =
-                "#extension GL_OES_EGL_image_external:require\n" +
-                "uniform lowp vec4 uColor;\n" +
-                "varying mediump vec2 vTexCoord;\n" +
-                "uniform samplerExternalOES sTexture;\n" +
-                "void main()\n" +
-                "{\n" +
-                "gl_FragColor = texture2D(sTexture, vTexCoord) * uColor;\n" +
-                "}\n";
-
-            return new Shader(vertex_shader, fragment_shader);
-        }
-
-        [StructLayout(LayoutKind.Sequential)]
-        private struct Vec2
-        {
-            float x;
-            float y;
-            public Vec2(float xIn, float yIn)
-            {
-                x = xIn;
-                y = yIn;
-            }
-        }
-
-        private struct TexturedQuadVertex
-        {
-            public Vec2 position;
-        };
-
-        private IntPtr RectangleDataPtr()
-        {
-            TexturedQuadVertex vertex1 = new TexturedQuadVertex();
-            TexturedQuadVertex vertex2 = new TexturedQuadVertex();
-            TexturedQuadVertex vertex3 = new TexturedQuadVertex();
-            TexturedQuadVertex vertex4 = new TexturedQuadVertex();
-            vertex1.position = new Vec2(-0.5f, -0.5f);
-            vertex2.position = new Vec2(-0.5f, 0.5f);
-            vertex3.position = new Vec2(0.5f, -0.5f);
-            vertex4.position = new Vec2(0.5f, 0.5f);
-
-            TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { vertex1, vertex2, vertex3, vertex4 };
-
-            int lenght = Marshal.SizeOf(vertex1);
-            IntPtr pA = Marshal.AllocHGlobal(lenght * 4);
-
-            for (int i = 0; i < 4; i++)
-            {
-                Marshal.StructureToPtr(texturedQuadVertexData[i], pA + i * lenght, true);
-            }
-
-            return pA;
-        }
-
-        private Geometry CreateQuadGeometry()
-        {
-            /* Create Property buffer */
-            PropertyMap vertexFormat = new PropertyMap();
-            vertexFormat.Add("aPosition", new PropertyValue((int)PropertyType.Vector2));
-
-            PropertyBuffer vertexBuffer = new PropertyBuffer(vertexFormat);
-            vertexBuffer.SetData(RectangleDataPtr(), 4);
-
-
-            Geometry geometry = new Geometry();
-            geometry.AddVertexBuffer(vertexBuffer);
-            geometry.SetType(Geometry.Type.TRIANGLE_STRIP);
-
-            return geometry;
-        }
-
-        /// <summary>
-        /// Gets the image view.
-        /// </summary>
-        internal ImageView Image
-        {
-            get
-            {
-                if (_image == null)
-                {
-                    _image = new ImageView();
-                    renderer = new Renderer(CreateQuadGeometry(), CreateShader());
-                    textureSet = new TextureSet();
-                }
-                switch (Type)
-                {
-                    case FrameType.RemoteSurfaceTbmSurface:
-                        if (TbmSurface == null)
-                        {
-                            return null;
-                        }
-                        textureSet.SetTexture(0, new Texture(TbmSurface));
-                        renderer.SetTextures(textureSet);
-                        _image.AddRenderer(renderer);
-                        break;
-                    default:
-                        break;
-                }
-
-                return _image;
-            }
+            this.frame = frame;
         }
 
         /// <summary>
@@ -166,10 +45,10 @@ namespace Tizen.NUI
             get
             {
                 Interop.FrameBroker.FrameDirection direction = Interop.FrameBroker.FrameDirection.Backward + 1;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetDirection(_frame, out direction);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetDirection(frame, out direction);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get direction");
+                    Log.Error(logTag, "Failed to get direction");
                 }
                 return (direction == Interop.FrameBroker.FrameDirection.Forward);
             }
@@ -183,10 +62,10 @@ namespace Tizen.NUI
             get
             {
                 SafeBundleHandle safeBundle;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetExtraData(_frame, out safeBundle);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetExtraData(frame, out safeBundle);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get extra data");
+                    Log.Error(logTag, "Failed to get extra data");
                     return null;
                 }
                 return new Bundle(safeBundle);
@@ -246,11 +125,11 @@ namespace Tizen.NUI
             get
             {
                 IntPtr tbmSurface = IntPtr.Zero;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetTbmSurface(_frame, out tbmSurface);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetTbmSurface(frame, out tbmSurface);
 
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get tbm surface");
+                    Log.Error(logTag, "Failed to get tbm surface");
                 }
                 return tbmSurface;
             }
@@ -263,15 +142,15 @@ namespace Tizen.NUI
         {
             get
             {
-                if (_fd != -1)
-                    return _fd;
+                if (fd != -1)
+                    return fd;
 
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetImageFile(_frame, out _fd, out _size);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetImageFile(frame, out fd, out size);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get fd of image file");
+                    Log.Error(logTag, "Failed to get fd of image file");
                 }
-                return _fd;
+                return fd;
             }
         }
 
@@ -282,15 +161,15 @@ namespace Tizen.NUI
         {
             get
             {
-                if (_size != 0)
-                    return _size;
+                if (size != 0)
+                    return size;
 
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetImageFile(_frame, out _fd, out _size);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetImageFile(frame, out fd, out size);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get size of image file");
+                    Log.Error(logTag, "Failed to get size of image file");
                 }
-                return _size;
+                return size;
             }
         }
 
@@ -302,10 +181,10 @@ namespace Tizen.NUI
             get
             {
                 string filePath = string.Empty;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetFilePath(_frame, out filePath);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetFilePath(frame, out filePath);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get file path");
+                    Log.Error(logTag, "Failed to get file path");
                 }
                 return filePath;
             }
@@ -319,10 +198,10 @@ namespace Tizen.NUI
             get
             {
                 string fileGroup = string.Empty;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetFileGroup(_frame, out fileGroup);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetFileGroup(frame, out fileGroup);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get file group");
+                    Log.Error(logTag, "Failed to get file group");
                 }
                 return fileGroup;
             }
@@ -336,10 +215,10 @@ namespace Tizen.NUI
             get
             {
                 Interop.FrameBroker.FrameType type = Interop.FrameBroker.FrameType.SplashScreenImage + 1;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetType(_frame, out type);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetType(frame, out type);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get frame type");
+                    Log.Error(logTag, "Failed to get frame type");
                 }
                 return (FrameType)type;
             }
@@ -353,10 +232,10 @@ namespace Tizen.NUI
             get
             {
                 int x = -1;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetPositionX(_frame, out x);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetPositionX(frame, out x);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get position X");
+                    Log.Error(logTag, "Failed to get position X");
                 }
                 return x;
             }
@@ -370,10 +249,10 @@ namespace Tizen.NUI
             get
             {
                 int y = -1;
-                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetPositionY(_frame, out y);
+                Interop.FrameBroker.ErrorCode err = Interop.FrameBroker.GetPositionY(frame, out y);
                 if (err != Interop.FrameBroker.ErrorCode.None)
                 {
-                    Log.Error(LogTag, "Failed to get position Y");
+                    Log.Error(logTag, "Failed to get position Y");
                 }
                 return y;
             }
index 41c4f36d970b6ab67e1cc71638dfda60edd007da..83c350cf4b4129a771641a9fb7db3a515dc9620e 100755 (executable)
@@ -26,10 +26,10 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     internal class FrameProvider : IDisposable
     {
-        private string LogTag = "NUI";
-        private readonly SafeFrameProviderHandle _handle;
-        private Interop.FrameProvider.FrameProviderEventCallbacks _callbacks;
-        private bool _disposed = false;
+        private string logTag = "NUI";
+        private readonly SafeFrameProviderHandle handle;
+        private Interop.FrameProvider.FrameProviderEventCallbacks callbacks;
+        private bool disposed = false;
 
 
         /// <summary>
@@ -50,10 +50,10 @@ namespace Tizen.NUI
                 throw FrameProviderErrorFactory.GetException(Interop.FrameProvider.ErrorCode.InvalidParameter, "Invalid parameter");
             }
 
-            _callbacks.OnShow = new Interop.FrameProvider.ShowCallback(OnShowNative);
-            _callbacks.OnHide = new Interop.FrameProvider.HideCallback(OnHideNative);
+            callbacks.OnShow = new Interop.FrameProvider.ShowCallback(OnShowNative);
+            callbacks.OnHide = new Interop.FrameProvider.HideCallback(OnHideNative);
 
-            err = Interop.FrameProvider.Create(window.GetNativeWindowHandler(), ref _callbacks, IntPtr.Zero, out _handle);
+            err = Interop.FrameProvider.Create(window.GetNativeWindowHandler(), ref callbacks, IntPtr.Zero, out handle);
             if (err != Interop.FrameProvider.ErrorCode.None)
             {
                 throw FrameProviderErrorFactory.GetException(err, "Failed to create frame provider handle");
@@ -76,13 +76,13 @@ namespace Tizen.NUI
 
         private void OnShowNative(IntPtr handle, IntPtr userData)
         {
-            Log.Debug(LogTag, "OnShowNative()");
+            Log.Debug(logTag, "OnShowNative()");
             Shown?.Invoke(this, EventArgs.Empty);
         }
 
         private void OnHideNative(IntPtr handle, IntPtr userdata)
         {
-            Log.Debug(LogTag, "OnHideNative()");
+            Log.Debug(logTag, "OnHideNative()");
             Hidden?.Invoke(this, EventArgs.Empty);
         }
 
@@ -93,7 +93,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         internal void NotifyShowStatus(Bundle extraData)
         {
-            Interop.FrameProvider.ErrorCode err = Interop.FrameProvider.NotifyShowStatus(_handle, extraData.SafeBundleHandle);
+            Interop.FrameProvider.ErrorCode err = Interop.FrameProvider.NotifyShowStatus(handle, extraData.SafeBundleHandle);
             if (err != Interop.FrameProvider.ErrorCode.None)
             {
                 throw FrameProviderErrorFactory.GetException(err, "Failed to notify show status");
@@ -107,7 +107,7 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         internal void NotifyHideStatus(Bundle extraData)
         {
-            Interop.FrameProvider.ErrorCode err = Interop.FrameProvider.NotifyHideStatus(_handle, extraData.SafeBundleHandle);
+            Interop.FrameProvider.ErrorCode err = Interop.FrameProvider.NotifyHideStatus(handle, extraData.SafeBundleHandle);
             if (err != Interop.FrameProvider.ErrorCode.None)
             {
                 throw FrameProviderErrorFactory.GetException(err, "Failed to notify hide status");
@@ -117,10 +117,10 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual void Dispose(bool disposing)
         {
-            if (!_disposed)
+            if (!disposed)
             {
-                _handle.Dispose();
-                _disposed = true;
+                handle.Dispose();
+                disposed = true;
             }
         }
 
@@ -128,7 +128,6 @@ namespace Tizen.NUI
         public void Dispose()
         {
             Dispose(true);
-
         }
     }
 }
index 26a967f6a52d527ce2fd5b9af508faec4960cb1b..bb9b9d077d1c5a3e754a8ddd58dfab1617596b07 100755 (executable)
@@ -21,11 +21,11 @@ namespace Tizen.NUI
 {
     internal static class FrameProviderErrorFactory
     {
-        private static string LogTag = "Tizen.NUI";
+        private static string logTag = "NUI";
 
         internal static Exception GetException(Interop.FrameProvider.ErrorCode err, string message, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
         {
-            Log.Error(LogTag, memberName + "@" + filePath + "(" + lineNumber + ") " + message);
+            Log.Error(logTag, memberName + "(" + lineNumber + ") " + message);
             switch (err)
             {
                 case Interop.FrameProvider.ErrorCode.InvalidParameter:
index 0b2da5bc2ef0e8b34387e304b4850ead5352d15b..f2799d590b89d5137040ce7df19460658c41f4bc 100755 (executable)
@@ -3,60 +3,139 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Text;
 using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
 
 namespace Tizen.NUI
 {
+    /// <summary>
+    /// Data of animation data for transition
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class TransitionAnimationData
+    {
+        /// <summary>
+        /// start time of animation
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public int StartTime { get; set; }
+
+        /// <summary>
+        /// end time of animation
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public int EndTime { get; set; }
+
+        /// <summary>
+        /// property of animation
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Property { get; set; }
+
+        /// <summary>
+        /// destination value of animation
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string DestinationValue { get; set; }
+    }
+
     /// <summary>
     /// Transition animation effect
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public class TransitionAnimation : Animation
+    public class TransitionAnimation
     {
+        private ImageViewStyle defaultImageStyle;
+        private List<TransitionAnimationData> animationDataList;
+        
+
         /// <summary>
         /// Create an instance of Transition.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public TransitionAnimation(int durationMilliSeconds) : base(durationMilliSeconds)
+        public TransitionAnimation(int durationMilliSeconds)
         {
-
+            DurationMilliSeconds = durationMilliSeconds;
+            if (animationDataList == null)
+            {
+                animationDataList = new List<TransitionAnimationData>();
+            }
         }
 
         /// <summary>
-        /// Return default size of main view.
+        /// total time of animation.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public virtual Size GetDefaultSize()
+        public int DurationMilliSeconds { get; set; }
+
+        /// <summary>
+        /// Default style of animate image view.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public List<TransitionAnimationData> AnimationDataList
         {
-            return new Size(0, 0);
+            get
+            {
+                return animationDataList;
+            }
         }
 
+
         /// <summary>
-        /// Return default position of main view.
+        /// Add data of transition animation
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public virtual Position GetDefaultPosition()
+        public void AddAnimationData(TransitionAnimationData data)
         {
-            return new Position(0, 0);
+            if (data == null)
+            {
+                throw new ArgumentNullException(nameof(data));
+            }
+
+            animationDataList?.Add(data);
         }
 
         /// <summary>
-        /// Return default position of main view.
+        /// Remove data of transition animation
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public virtual Position GetDefaultParentOrigin()
+        public void RemoveAnimationData(TransitionAnimationData data)
         {
-            return ParentOrigin.Center;
+            animationDataList?.Remove(data);
         }
 
         /// <summary>
-        /// Return default position of main view.
+        /// Clear data list of transition animation
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public virtual Position GetDefaultPivotPoint()
+        public void ClearAnimationData()
         {
-            return PivotPoint.Center;
+            animationDataList?.Clear();
         }
 
+        /// <summary>
+        /// Setting default style of ImageView
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public ImageViewStyle DefaultImageStyle
+        {
+            get
+            {
+                if (defaultImageStyle == null)
+                {
+                    defaultImageStyle = new ImageViewStyle();
+                    defaultImageStyle.Size = new Size(0, 0);
+                    defaultImageStyle.Position = new Position(0, 0);
+                    defaultImageStyle.ParentOrigin = ParentOrigin.Center;
+                    defaultImageStyle.PivotPoint = PivotPoint.Center;
+                    defaultImageStyle.PositionUsesPivotPoint = true;
+                }
+                return defaultImageStyle;
+            }
+            set
+            {
+                defaultImageStyle = value;
+            }
+        }
     }
 
     /// <summary>
@@ -73,38 +152,18 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         public SlideIn(int durationMilliSeconds) : base(durationMilliSeconds)
         {
-            Properties = new string[1];
-            DestValue = new string[1];
-            StartTime = new int[1];
-            EndTime = new int[1];
-
-            StartTime[0] = 0;
-            EndTime[0] = durationMilliSeconds;
-
-            Properties[0] = "PositionX";
-            DestValue[0] = "0";
-
             defaultInitValue = -Window.Instance.GetWindowSize().Width;
-        }
 
-        /// <summary>
-        /// Return default position of main view.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public override Position GetDefaultPosition()
-        {
-            return new Position(defaultInitValue, 0);
-        }
+            DefaultImageStyle.Position = new Position(defaultInitValue, 0);
+            DefaultImageStyle.Size = Window.Instance.GetWindowSize();
 
-        /// <summary>
-        /// Return default size of main view.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public override Size GetDefaultSize()
-        {
-            return Window.Instance.GetWindowSize();
+            TransitionAnimationData data = new TransitionAnimationData();
+            data.StartTime = 0;
+            data.EndTime = durationMilliSeconds;
+            data.Property = "PositionX";
+            data.DestinationValue = "0";
+            AddAnimationData(data);
         }
-
     }
 
 
@@ -122,37 +181,17 @@ namespace Tizen.NUI
         [EditorBrowsable(EditorBrowsableState.Never)]
         public SlideOut(int durationMilliSeconds) : base(durationMilliSeconds)
         {
-            Properties = new string[1];
-            DestValue = new string[1];
-            StartTime = new int[1];
-            EndTime = new int[1];
-
-            StartTime[0] = 0;
-            EndTime[0] = durationMilliSeconds;
-
-            Properties[0] = "PositionX";
-
-            DestValue[0] = Window.Instance.GetWindowSize().Width.ToString();
-
             defaultInitValue = 0;
-        }
 
-        /// <summary>
-        /// Return default position of main view.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public override Position GetDefaultPosition()
-        {
-            return new Position(defaultInitValue, 0);
-        }
+            DefaultImageStyle.Position = new Position(defaultInitValue, 0);
+            DefaultImageStyle.Size = Window.Instance.GetWindowSize();
 
-        /// <summary>
-        /// Return default size of main view.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public override Size GetDefaultSize()
-        {
-            return Window.Instance.GetWindowSize();
+            TransitionAnimationData data = new TransitionAnimationData();
+            data.StartTime = 0;
+            data.EndTime = durationMilliSeconds;
+            data.Property = "PositionX";
+            data.DestinationValue = Window.Instance.GetWindowSize().Width.ToString();
+            AddAnimationData(data);
         }
     }
 }
index bc2a077f4457cd05029ee127cb13bb19a2db86d2..4a8b9751030c52d8f6f64bca0401b60489ac0c0e 100755 (executable)
@@ -19,6 +19,7 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Text;
 using Tizen.Applications;
+using Tizen.NUI.BaseComponents;
 
 namespace Tizen.NUI
 {
@@ -28,11 +29,13 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class TransitionOptions : IDisposable
     {
+        private bool disposed = false;
         private FrameProvider frameProvider;
         private DefaultFrameBroker frameBroker;
 
         private bool enableTransition = false;
         private Window mainWindow;
+        private View animatedTarget;
         private string sharedId;
 
         /// <summary>
@@ -45,6 +48,23 @@ namespace Tizen.NUI
             mainWindow = window;
         }
 
+
+        /// <summary>
+        /// Set animated view of seamless animation.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public View AnimatedTarget
+        {
+            get
+            {
+                return animatedTarget;
+            }
+            set
+            {
+                animatedTarget = value;
+            }
+        }
+
         /// <summary>
         /// Gets or sets transition enable
         /// </summary>
@@ -61,6 +81,7 @@ namespace Tizen.NUI
                 if (value)
                 {
                     frameBroker = new DefaultFrameBroker(mainWindow);
+                    frameBroker.mainView = animatedTarget;
                     frameBroker.AnimationInitialized += FrameBroker_TransitionAnimationInitialized;
                     frameBroker.AnimationFinished += FrameBroker_TransitionAnimationFinished;
                     EnableProvider();
@@ -135,40 +156,28 @@ namespace Tizen.NUI
         /// Emits the event when the animation is started.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler AnimationInitialized;
+        public delegate void AnimationEventHandler(bool direction);
 
         /// <summary>
-        /// Emits the event when the animation is finished.
+        /// Emits the event when the animation is started.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler AnimationFinished;
-
+        public event AnimationEventHandler AnimationInitialized;
 
         /// <summary>
-        /// Dispose for IDisposable pattern
+        /// Emits the event when the animation is finished.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public void Dispose()
-        {
-            if (frameBroker != null)
-            {
-                frameBroker.Dispose();
-            }
-
-            if (frameProvider != null)
-            {
-                frameProvider.Dispose();
-            }
-        }
+        public event AnimationEventHandler AnimationFinished;
 
-        private void FrameBroker_TransitionAnimationFinished()
+        private void FrameBroker_TransitionAnimationFinished(bool direction)
         {
-            AnimationFinished?.Invoke(this, EventArgs.Empty);
+            AnimationFinished?.Invoke(direction);
         }
 
-        private void FrameBroker_TransitionAnimationInitialized()
+        private void FrameBroker_TransitionAnimationInitialized(bool direction)
         {
-            AnimationInitialized?.Invoke(this, EventArgs.Empty);
+            AnimationInitialized?.Invoke(direction);
         }
 
         /// <summary>
@@ -190,6 +199,8 @@ namespace Tizen.NUI
             frameProvider?.NotifyShowStatus(bundle);
 
             CallerScreenShown?.Invoke(this, e);
+            bundle.Dispose();
+            bundle = null;
         }
 
         private void FrameProvider_Hidden(object sender, EventArgs e)
@@ -199,11 +210,40 @@ namespace Tizen.NUI
             frameProvider?.NotifyHideStatus(bundle);
 
             CallerScreenHidden?.Invoke(this, e);
+            bundle.Dispose();
+            bundle = null;
         }
 
         internal void SendLaunchRequest(AppControl appControl)
         {
             this.frameBroker.SendLaunchRequest(appControl, true);
         }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!disposed)
+            {
+                if (frameBroker != null)
+                {
+                    frameBroker.Dispose();
+                }
+
+                if (frameProvider != null)
+                {
+                    frameProvider.Dispose();
+                }
+                disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Dispose for IDisposable pattern
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+        }
     }
 }
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/DefaultView.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/DefaultView.cs
new file mode 100755 (executable)
index 0000000..81f80b0
--- /dev/null
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace NUIBrokerSample
+{
+    public class DefaultView : View
+    {
+        public DefaultView()
+        {
+            PositionUsesPivotPoint = true;
+            ParentOrigin = Tizen.NUI.ParentOrigin.TopCenter;
+            PivotPoint = Tizen.NUI.PivotPoint.Center;
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.cs
new file mode 100755 (executable)
index 0000000..72f1926
--- /dev/null
@@ -0,0 +1,86 @@
+using System;
+using Tizen.Applications;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace NUIBrokerSample
+{
+    public class Program : NUIApplication
+    {
+        private Window window;
+        private View animationView;
+        private ObjectAnimationManager objectAnimationManager;
+
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            window = GetDefaultWindow();
+            window.KeyEvent += OnKeyEvent;
+
+            var xamlPage = CreateXamlPage();
+            animationView = xamlPage.AnimationView;
+            window.Add(xamlPage);
+
+            EnableAppTransition(true);
+
+            //Animating by default transition
+            //EnableAppTransition(false);
+
+            objectAnimationManager = new ObjectAnimationManager(xamlPage);
+        }
+
+        private XamlPage CreateXamlPage()
+        {
+            var page = new XamlPage(this);
+            page.PositionUsesPivotPoint = true;
+            page.ParentOrigin = ParentOrigin.TopLeft;
+            page.PivotPoint = PivotPoint.TopLeft;
+            page.BackgroundColor = new Color(0.9f, 0.9f, 0.9f, 1.0f);
+            page.Size = new Size(window.WindowSize.Width, window.WindowSize.Height, 0);
+
+            return page;
+        }
+
+        private void EnableAppTransition(bool isCustomAnimation = true)
+        {
+            TransitionOptions = new TransitionOptions(window);
+            TransitionOptions.AnimatedTarget = animationView;
+            TransitionOptions.EnableTransition = true;
+
+            if (isCustomAnimation)
+            {
+                //Set Custom Animation
+                TransitionOptions.ForwardAnimation = new SeamlessForward(400);
+                TransitionOptions.BackwardAnimation = new SeamlessBackward(400);
+                TransitionOptions.AnimationInitialized += TransitionOptions_AnimationInitialized;
+            }
+            else
+            {
+                //Set Default Animation
+                TransitionOptions.ForwardAnimation = new SlideIn(600);
+                TransitionOptions.BackwardAnimation = new SlideOut(600);
+            }
+
+        }
+
+        private void TransitionOptions_AnimationInitialized(bool direction)
+        {
+            objectAnimationManager.StartIconAnimationByDirection(direction);
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
+            {
+                Exit();
+            }
+        }
+
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            app.Run(args);
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.csproj b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/NUIBrokerSample.csproj
new file mode 100755 (executable)
index 0000000..b9e4e70
--- /dev/null
@@ -0,0 +1,40 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+      <AssemblyName>NUIBrokerSample</AssemblyName>
+    <DebugType>embedded</DebugType>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Folder Include="lib\" />
+  </ItemGroup>
+
+    <ItemGroup>
+    <EmbeddedResource Include="res\layout\XamlPage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+    </EmbeddedResource>
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NUI.XamlBuild" Version="1.0.10" />
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\src\Tizen.NUI\Tizen.NUI.csproj" />
+  </ItemGroup>
+
+  <PropertyGroup>
+    <NeedInjection>True</NeedInjection>
+  </PropertyGroup>
+
+</Project>
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/ObjectAnimationManager.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/ObjectAnimationManager.cs
new file mode 100755 (executable)
index 0000000..8277ff2
--- /dev/null
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.NUI;
+
+namespace NUIBrokerSample
+{
+    class ObjectAnimationManager
+    {
+        private XamlPage xamlPage;
+        private Position defaultPosition = new Position(0, 0);
+
+        public ObjectAnimationManager(XamlPage xamlPage)
+        {
+            this.xamlPage = xamlPage;
+        }
+        
+        public void StartIconAnimationByDirection(bool direction)
+        {
+            if(direction)
+            {
+                xamlPage.mainView.Hide();
+                xamlPage.picture.Hide();
+                defaultPosition = xamlPage.mainViewModel.MainPosition;
+
+                Animation ani = new Animation(500);
+                ani.DefaultAlphaFunction = GetSineInOut80();
+                ani.AnimateTo(xamlPage.IconView, "Position", new Position(0, 150));
+                ani.AnimateTo(xamlPage.AddView, "Position", new Position(30, 180));
+
+                ani.AnimateTo(xamlPage.IconView, "Scale", new Vector3(1.3f, 1.3f, 1.3f));
+                ani.AnimateTo(xamlPage.AddView, "Scale", new Vector3(0.5f, 0.5f, 0.5f));
+
+                ani.AnimateTo(xamlPage.MainProfileText, "Position", new Position(0, 220));
+
+                ani.AnimateTo(xamlPage.AnimationView, "Size", new Size(Window.Instance.WindowSize));
+                ani.AnimateTo(xamlPage.AnimationView, "Position", new Position(0, 0));
+
+                ani.AnimateTo(xamlPage.cinematicText, "Position", new Position(0, 320));
+
+                ani.Play();
+
+            }
+            else
+            {
+                int startTime = 200;
+                int endTime = 400;
+                xamlPage.mainView.Show();
+                xamlPage.picture.Show();
+
+                Animation ani = new Animation(endTime);
+                ani.DefaultAlphaFunction = GetSineInOut80();
+                ani.AnimateTo(xamlPage.IconView, "Position", new Position(-160, 80), startTime, endTime);
+                ani.AnimateTo(xamlPage.AddView, "Position", new Position(160, 80), startTime, endTime);
+
+                ani.AnimateTo(xamlPage.IconView, "Scale", new Vector3(1.0f, 1.0f, 1.0f), startTime, endTime);
+                ani.AnimateTo(xamlPage.AddView, "Scale", new Vector3(1.0f, 1.0f, 1.0f), startTime, endTime);
+
+                ani.AnimateTo(xamlPage.MainProfileText, "Position", new Position(0, 60), startTime, endTime);
+
+                ani.AnimateTo(xamlPage.AnimationView, "Size", new Size(470, 600), startTime, endTime);
+                ani.AnimateTo(xamlPage.AnimationView, "Position", defaultPosition);
+
+                ani.AnimateTo(xamlPage.cinematicText, "Position", new Position(0, 150));
+
+                ani.Play();
+
+            }
+        }
+
+
+        private AlphaFunction GetSineInOut80()
+        {
+            return new AlphaFunction(new Vector2(0.45f, 0.43f), new Vector2(0.41f, 1.0f));
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessBackward.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessBackward.cs
new file mode 100755 (executable)
index 0000000..87257ce
--- /dev/null
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.NUI;
+
+namespace NUIBrokerSample
+{
+    class SeamlessBackward : TransitionAnimation
+    {
+        string[] properties = { "SizeWidth", "SizeHeight" };
+        string[] destinationValue = { "470", "600" };
+
+        public SeamlessBackward(int durationMilliSeconds) : base(durationMilliSeconds)
+        {
+            DefaultImageStyle.Size = new Size(Window.Instance.WindowSize);
+            DefaultImageStyle.Position = new Position(0, 0);
+            DefaultImageStyle.ParentOrigin = ParentOrigin.TopCenter;
+            DefaultImageStyle.PivotPoint = PivotPoint.TopCenter;
+
+            int idx = 0;
+            foreach (string property in properties)
+            {
+                TransitionAnimationData data = new TransitionAnimationData();
+                data.StartTime = 0;
+                data.EndTime = durationMilliSeconds;
+                data.Property = property;
+                data.DestinationValue = destinationValue[idx++];
+                AddAnimationData(data);
+            }
+        }
+    }
+}
+
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessForward.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/SeamlessAnimation/SeamlessForward.cs
new file mode 100755 (executable)
index 0000000..2fea346
--- /dev/null
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace NUIBrokerSample
+{
+    class SeamlessForward : TransitionAnimation
+    {
+        private string[] properties = { "SizeWidth", "SizeHeight", "PositionX", "PositionY", "Opacity" };
+        private string[] destinationValue = { "1080", "1920", "0", "0", "1" };
+
+        public SeamlessForward(int durationMilliSeconds) : base(durationMilliSeconds)
+        {
+            DefaultImageStyle.Size = new Size(470, 600);
+            DefaultImageStyle.Position = new Position(0, 0);
+            DefaultImageStyle.ParentOrigin = ParentOrigin.TopCenter;
+            DefaultImageStyle.PivotPoint = PivotPoint.TopCenter;
+
+            int idx = 0;
+            foreach (string property in properties)
+            {
+                TransitionAnimationData data = new TransitionAnimationData();
+                data.StartTime = 0;
+                data.EndTime = durationMilliSeconds;
+                data.Property = property;
+                data.DestinationValue = destinationValue[idx++];
+                AddAnimationData(data);
+            }
+        }
+    }
+}
+
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/DelegateCommand.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/DelegateCommand.cs
new file mode 100755 (executable)
index 0000000..5230333
--- /dev/null
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace NUIBrokerSample
+{
+    class DelegateCommand : ICommand
+    {
+        private readonly Func<bool> canExecute;
+        private readonly Action execute;
+
+        /// <summary>
+        /// Initializes a new instance of the DelegateCommand class.
+        /// </summary>
+        /// <param name="execute">indicate an execute function</param>
+        public DelegateCommand(Action execute) : this(execute, null)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the DelegateCommand class.
+        /// </summary>
+        /// <param name="execute">execute function </param>
+        /// <param name="canExecute">can execute function</param>
+        public DelegateCommand(Action execute, Func<bool> canExecute)
+        {
+            this.execute = execute;
+            this.canExecute = canExecute;
+        }
+        /// <summary>
+        /// can executes event handler
+        /// </summary>
+        public event EventHandler CanExecuteChanged;
+
+        /// <summary>
+        /// implement of icommand can execute method
+        /// </summary>
+        /// <param name="o">parameter by default of icomand interface</param>
+        /// <returns>can execute or not</returns>
+        public bool CanExecute(object o)
+        {
+            if (this.canExecute == null)
+            {
+                return true;
+            }
+            return this.canExecute();
+        }
+
+        /// <summary>
+        /// implement of icommand interface execute method
+        /// </summary>
+        /// <param name="o">parameter by default of icomand interface</param>
+        public void Execute(object o)
+        {
+            this.execute();
+        }
+
+        /// <summary>
+        /// raise ca excute changed when property changed
+        /// </summary>
+        public void RaiseCanExecuteChanged()
+        {
+            if (this.CanExecuteChanged != null)
+            {
+                this.CanExecuteChanged(this, EventArgs.Empty);
+            }
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/MainViewModel.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/ViewModel/MainViewModel.cs
new file mode 100755 (executable)
index 0000000..fcb58c3
--- /dev/null
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using Tizen.NUI;
+
+namespace NUIBrokerSample
+{
+    public class MainViewModel : INotifyPropertyChanged
+    {
+        private Position2D mainPosition;
+
+        public MainViewModel()
+        {
+            mainPosition = new Position2D(-50, 500);
+        }
+
+        public Position2D MainPosition
+        {
+            get
+            {
+                return mainPosition;
+            }
+            set
+            {
+                mainPosition = value;
+                PageContents = string.Format($"Move {mainPosition.X}, {mainPosition.Y}");
+                OnPropertyChanged("MainPosition");
+            }
+        }
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected void OnPropertyChanged(string propertyName)
+        {
+            if(PropertyChanged != null)
+            {
+                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+            }
+        }
+
+        private ICommand minusCommand;
+        public ICommand MinusCommand
+        {
+            get { return (this.minusCommand) ?? (this.minusCommand = new DelegateCommand(Minus)); }
+        }
+
+        private void Minus()
+        {
+        }
+
+
+        private ICommand plusCommand;
+        public ICommand PlusCommand
+        {
+            get { return (this.plusCommand) ?? (this.plusCommand = new DelegateCommand(Plus)); }
+        }
+
+        private void Plus()
+        {
+        }
+
+        private string pageContent;
+        public string PageContents
+        {
+            get
+            {
+                return pageContent;
+            }
+            set
+            {
+                pageContent = value;
+                OnPropertyChanged("PageContents");
+            }
+        }
+
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/XamlPage.xaml.cs b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/XamlPage.xaml.cs
new file mode 100755 (executable)
index 0000000..2a93fe7
--- /dev/null
@@ -0,0 +1,104 @@
+using System;
+using Tizen.Applications;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace NUIBrokerSample
+{
+    public partial class XamlPage : View
+    {
+        private const int TOUCH_AREA = 5;
+        private const string TARGET_APPLICATION = "org.tizen.example.NUIMusicPlayer";
+        private const string EMART_APPLICATION = "org.tizen.example.ScrollingTransition";
+
+        private NUIApplication application;
+        private Animation startAni;
+
+        private Position downPosition = new Position(0, 0);
+        private Position movePosition = new Position(0, 0);
+        public XamlPage(NUIApplication application)
+        {
+            this.application = application;
+            InitializeComponent();
+        }
+
+        private bool OnViewTouchEvent2(object source, TouchEventArgs e)
+        {
+            PointStateType type = e.Touch.GetState(0);
+            Vector2 vector = e.Touch.GetScreenPosition(0);
+            switch (type)
+            {
+                case PointStateType.Down:
+                    downPosition = movePosition = new Position(vector);
+                    PlayScaleDownAnimation(mainView);
+                    PlayScaleDownAnimation(source as View);
+                    break;
+                case PointStateType.Motion:
+                    var currentPosition = new Position(vector);
+                    MoveMainScreen(new Position(mainViewModel.MainPosition) + (currentPosition - movePosition));
+                    movePosition = currentPosition;
+                    break;
+                case PointStateType.Up:
+                    if (isTouchArea(AbsPosition(new Position(vector) - downPosition)))
+                    {
+                        LaunchApplication(TARGET_APPLICATION);
+                    }
+
+                    PlayScaleUpAnimation(mainView);
+                    PlayScaleUpAnimation(source as View);
+                    break;
+            }
+            return false;
+        }
+
+        private void LaunchApplication(string opr)
+        {
+            AppControl appControl = new AppControl();
+            appControl.ApplicationId = opr;
+            application.SendLaunchRequest(appControl);
+        }
+
+        private Position AbsPosition(Position2D position)
+        {
+            return new Position(Math.Abs(position.X), Math.Abs(position.Y));
+        }
+
+        private bool isTouchArea(Position2D position)
+        {
+            return (position.X < TOUCH_AREA && position.Y < TOUCH_AREA);
+        }
+
+        private void MoveMainScreen(Position position)
+        {
+            mainViewModel.MainPosition = position;
+        }
+
+        private void PlayScaleDownAnimation(View view)
+        {
+            //ClearAnimation();
+            Animation startAni = new Animation(150);
+            startAni.AnimateTo(view, "Scale", new Vector3(0.9f, 0.9f, 1.0f));
+            startAni.Play();
+        }
+
+        private void PlayScaleUpAnimation(View view)
+        {
+            //ClearAnimation();
+            Animation startAni = new Animation(150);
+            startAni.AnimateTo(view, "Scale", new Vector3(1.0f, 1.0f, 1.0f));
+            startAni.Play();
+        }
+
+        private void ClearAnimation()
+        {
+            if (startAni != null)
+            {
+                startAni.Stop();
+                startAni.Clear();
+                startAni.Dispose();
+                startAni = null;
+            }
+        }
+
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/add.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/add.png
new file mode 100644 (file)
index 0000000..a1a0565
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/add.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/arrow-89-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/arrow-89-128.png
new file mode 100644 (file)
index 0000000..416f17e
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/arrow-89-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/bar-chart-5-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/bar-chart-5-128.png
new file mode 100644 (file)
index 0000000..e07bb9d
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/bar-chart-5-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/clock-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/clock-128.png
new file mode 100644 (file)
index 0000000..896a52d
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/clock-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/emart.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/emart.png
new file mode 100755 (executable)
index 0000000..8ab7ad4
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/emart.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg1.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg1.png
new file mode 100644 (file)
index 0000000..8661a76
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg1.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg15.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg15.png
new file mode 100755 (executable)
index 0000000..8fcf950
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg15.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg6.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg6.png
new file mode 100755 (executable)
index 0000000..3cd27f8
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/familyboard_setting_bg6.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/layout/XamlPage.xaml b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/layout/XamlPage.xaml
new file mode 100755 (executable)
index 0000000..10214bf
--- /dev/null
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<View x:Class="NUIBrokerSample.XamlPage"
+  xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+  xmlns:b="clr-namespace:Tizen.NUI;assembly=Tizen.NUI"
+  xmlns:local="clr-namespace:NUIBrokerSample">
+    <View.XamlResources>
+        <ResourceDictionary>
+            <x:String x:Key="bgPath">
+                "*Resource*/familyboard_setting_bg1.png"
+            </x:String>
+            <x:String x:Key="mainImage">
+                "*Resource*/pic_1.jpg"
+            </x:String>
+            <x:String x:Key="chartIcon">
+                "*Resource*/bar-chart-5-128.png"
+            </x:String>
+            <x:String x:Key="clockIcon">
+                "*Resource*/clock-128.png"
+            </x:String>
+            <x:String x:Key="playIcon">
+                "*Resource*/play-128.png"
+            </x:String>
+            <x:String x:Key="profileIcon">
+                "*Resource*/profile.jpg"
+            </x:String>
+            <x:String x:Key="addIcon">
+                "*Resource*/add.png"
+            </x:String>
+            <x:String x:Key="mainText">
+                "Beautiful, dreamy and dramtic&#x0a; instrumental neo classical piano scores&#x0a; from movies and tv series.&#x0a;"
+            </x:String>
+            <b:Color x:Key="grayColor" R="0.3" G="0.3" B="0.3" A="1.0"></b:Color>
+            <x:String x:Key="whiteMainTextColor">
+                "0.95, 0.95, 0.95, 1.0"
+            </x:String>
+            <x:String x:Key="whiteSubTextColor">
+                "0.7, 0.7, 0.7, 1.0"
+            </x:String>
+            <Size2D x:Key="popupSize" Width="470" Height="600">
+            </Size2D>
+            <x:Single x:Key="point1">12.0</x:Single>
+            <x:Single x:Key="point2">24.0</x:Single>
+        </ResourceDictionary>
+    </View.XamlResources>
+
+    <View.BindingContext>
+        <local:MainViewModel x:Name="mainViewModel"/>
+    </View.BindingContext>
+
+    <ImageView ResourceUrl="*Resource*/familyboard_setting_bg6.png" 
+               WidthResizePolicy="FillToParent" 
+               HeightResizePolicy="FillToParent"/>
+    
+    <View x:Name="mainView"
+          PositionUsesPivotPoint="True" 
+          ParentOrigin="TopCenter" 
+          PivotPoint="TopCenter" 
+          BackgroundColor="Black"  
+          Position2D="{Binding MainPosition}"  
+          Size2D="{StaticResource popupSize}" 
+          CornerRadius="10" >
+
+        <ImageView x:Name="picture"
+                   PositionUsesPivotPoint="True" 
+                   ParentOrigin="BottomCenter" 
+                   PivotPoint="BottomCenter" 
+                   ResourceUrl="*Resource*/pic_1.jpg" 
+                   Size2D="360,360"/>
+        <TextLabel PositionUsesPivotPoint="True" 
+                   ParentOrigin="Center" 
+                   PivotPoint="Center" 
+                   MultiLine="True" 
+                   HorizontalAlignment="Center"
+                   TextColor="0.6, 0.6, 0.6, 1.0" 
+                   PointSize="14"
+                   Position2D="0,-30" 
+                   WidthResizePolicy="FillToParent"
+                   Text="{StaticResource mainText}" />
+
+        <TextLabel x:Name="cinematicText" 
+                   PositionUsesPivotPoint="True" 
+                   ParentOrigin="TopCenter" 
+                   PivotPoint="Center" 
+                   Text="Cinematic Piano" 
+                   HorizontalAlignment="Center" 
+                   VerticalAlignment="Top" 
+                   TextColor="0.95, 0.95, 0.95, 1.0" 
+                   PointSize="20" 
+                   Position2D="0,150" 
+                   WidthResizePolicy="FillToParent">
+            <TextLabel.FontStyle>
+                <PropertyMap>
+                    <KeyValue Key="weight" Value="bold" />
+                </PropertyMap>
+            </TextLabel.FontStyle>
+        </TextLabel>
+
+        <TextLabel PositionUsesPivotPoint="True" 
+                   ParentOrigin="TopCenter" 
+                   PivotPoint="Center" 
+                   Text="9,465&#x0a;" 
+                   HorizontalAlignment="Center" 
+                   VerticalAlignment="Top" 
+                   TextColor="0.3, 0.3, 0.3, 1.0"
+                   PointSize="{StaticResource point1}" 
+                   Position2D="-35,198" 
+                   WidthResizePolicy="FillToParent"/>
+        <ImageView ParentOrigin="TopCenter" 
+                   ResourceUrl="*Resource*/bar-chart-5-128.png" 
+                   Color="0.3, 0.3, 0.3, 1.0" 
+                   Position2D="-85,190" 
+                   Size2D="15,15"/>
+
+        <TextLabel PositionUsesPivotPoint="True" 
+                   ParentOrigin="TopCenter" 
+                   PivotPoint="Center" 
+                   Text="5h 35m&#x0a;" 
+                   HorizontalAlignment="Center" 
+                   VerticalAlignment="Top" 
+                   TextColor="0.3, 0.3, 0.3, 1.0" 
+                   PointSize="{StaticResource point1}" 
+                   Position2D="65,198" 
+                   WidthResizePolicy="FillToParent"/>
+        <ImageView ParentOrigin="TopCenter" 
+                   ResourceUrl="*Resource*/clock-128.png" 
+                   Color="0.3, 0.3, 0.3, 1.0" 
+                   Position2D="10,190" 
+                   Size2D="15,15"/>
+
+        <View PositionUsesPivotPoint="True" 
+              ParentOrigin="BottomCenter" 
+              PivotPoint="Center" 
+              BackgroundColor="White" 
+              Position2D="0,-40" 
+              Size2D="52,52" 
+              CornerRadius="26">
+            <ImageView PositionUsesPivotPoint="True" 
+                       ParentOrigin="Center" 
+                       PivotPoint="Center" 
+                       ResourceUrl="*Resource*/play-128.png" 
+                       Color="Black" 
+                       Size2D="20,20"/>
+        </View>
+    </View>
+
+    <View x:Name="AnimationView"
+          Position2D="{Binding MainPosition}" 
+          Size2D="{StaticResource popupSize}"
+          TouchEvent="OnViewTouchEvent2"
+          PositionUsesPivotPoint="True" 
+          ParentOrigin="TopCenter" 
+          PivotPoint="TopCenter" >
+        <View x:Name="IconView" 
+              PositionUsesPivotPoint="True" 
+              ParentOrigin="TopCenter" 
+              PivotPoint="Center" 
+              BackgroundColor="White" 
+              Position2D="-160,80" 
+              Size2D="76,76" 
+              CornerRadius="38">
+            <View PositionUsesPivotPoint="True" 
+                  ParentOrigin="Center" 
+                  PivotPoint="Center" 
+                  BackgroundColor="Black" 
+                  Size2D="76,76" 
+                  CornerRadius="37">
+                <ImageView PositionUsesPivotPoint="True" 
+                           ParentOrigin="Center" 
+                           PivotPoint="Center" 
+                           ResourceUrl="*Resource*/profile.jpg" 
+                           Size2D="62,62"
+                           CornerRadius="31"/>
+            </View>
+        </View>
+
+        <TextLabel x:Name="MainProfileText" 
+                   Text="PIANO DAILY" 
+                   PositionUsesPivotPoint="True" 
+                   ParentOrigin="TopCenter" 
+                   PivotPoint="Center" 
+                   HorizontalAlignment="Center" 
+                   VerticalAlignment="Top" 
+                   TextColor="0.95,0.95,0.95,1.0" 
+                   PointSize="{StaticResource point1}" 
+                   Position2D="0,60" 
+                   WidthResizePolicy="FillToParent">
+            <TextLabel.FontStyle>
+                <PropertyMap>
+                    <KeyValue Key="weight" Value="bold" />
+                </PropertyMap>
+            </TextLabel.FontStyle>
+        </TextLabel>
+        <TextLabel Text="July 2020" 
+                   PositionUsesPivotPoint="True" 
+                   ParentOrigin="TopCenter" 
+                   PivotPoint="Center" 
+                   HorizontalAlignment="Center" 
+                   VerticalAlignment="Top" 
+                   TextColor="0.70,0.70,0.70,1.0" 
+                   PointSize="{StaticResource point1}" 
+                   Position2D="0,90" 
+                   WidthResizePolicy="FillToParent"/>
+        <View x:Name="AddView" 
+              PositionUsesPivotPoint="True" 
+              ParentOrigin="TopCenter" 
+              PivotPoint="Center" 
+              BackgroundColor="White" 
+              Position2D="160, 80" 
+              Size2D="60, 60" 
+              CornerRadius="30">
+            <ImageView PositionUsesPivotPoint="True" 
+                       ParentOrigin="Center" 
+                       PivotPoint="Center" 
+                       ResourceUrl="*Resource*/add.png" 
+                       Size2D="15, 15"/>
+        </View>
+    </View>
+
+</View>
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/pic_1.jpg b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/pic_1.jpg
new file mode 100644 (file)
index 0000000..455228e
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/pic_1.jpg differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/play-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/play-128.png
new file mode 100644 (file)
index 0000000..0b594b9
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/play-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/profile.jpg b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/profile.jpg
new file mode 100644 (file)
index 0000000..b173740
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/profile.jpg differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/video-play-64.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/video-play-64.png
new file mode 100644 (file)
index 0000000..481adf3
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/res/video-play-64.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/shared/res/NUIBrokerSample.png b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/shared/res/NUIBrokerSample.png
new file mode 100644 (file)
index 0000000..9f3cb98
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/shared/res/NUIBrokerSample.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/tizen-manifest.xml b/test/Tizen.NUI.Seamless.Xaml/NUIBrokerSample/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..0fc9acb
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.example.NUIBrokerSample" version="1.0.0" api-version="6" xmlns="http://tizen.org/ns/packages">
+    <profile name="common" />
+    <ui-application appid="org.tizen.example.NUIBrokerSample" exec="NUIBrokerSample.dll" multiple="false" nodisplay="false" taskmanage="true" type="dotnet-nui" launch_mode="single">
+        <label>NUIBrokerSample</label>
+        <icon>NUIBrokerSample.png</icon>
+        <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+        <splash-screens />
+    </ui-application>
+    <shortcut-list />
+    <privileges>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+    </privileges>
+    <dependencies />
+    <provides-appdefined-privileges />
+</manifest>
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.cs b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.cs
new file mode 100755 (executable)
index 0000000..7906740
--- /dev/null
@@ -0,0 +1,73 @@
+using System;
+using Tizen.Applications;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace NUIMusicPlayer
+{
+    public class Program : NUIApplication
+    {
+        private Window window;
+        private XamlPage page;
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            window = GetDefaultWindow();
+            window.KeyEvent += OnKeyEvent;
+
+            page = new XamlPage();
+            page.PositionUsesPivotPoint = true;
+            page.ParentOrigin = ParentOrigin.TopLeft;
+            page.PivotPoint = PivotPoint.TopLeft;
+            page.BackgroundColor = Color.Black;
+            page.Size = window.WindowSize;
+            window.Add(page);
+
+            TransitionOptions = new TransitionOptions(window);
+            TransitionOptions.EnableTransition = true;
+            TransitionOptions.CallerScreenHidden += TransitionOptions_CallerScreenHidden;
+            TransitionOptions.CallerScreenShown += TransitionOptions_CallerScreenShown;
+        }
+
+        private void TransitionOptions_CallerScreenShown(object sender, EventArgs e)
+        {
+            page.ShowInitObject();
+        }
+
+        private void TransitionOptions_CallerScreenHidden(object sender, EventArgs e)
+        {
+            page.HideInitObject();
+        }
+
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
+        {
+            base.OnAppControlReceived(e);
+            window.Activate();
+        }
+
+        protected override void OnResume()
+        {
+            base.OnResume();
+        }
+
+        protected override void OnPause()
+        {
+            base.OnPause();
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
+            {
+                window.Lower();
+                //window.Hide();
+            }
+        }
+
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            app.Run(args);
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.csproj b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/NUIMusicPlayer.csproj
new file mode 100755 (executable)
index 0000000..81512ee
--- /dev/null
@@ -0,0 +1,41 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+      <AssemblyName>NUIMusicPlayer</AssemblyName>
+    <DebugType>embedded</DebugType>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Folder Include="lib\" />
+    <Folder Include="res\" />
+  </ItemGroup>
+
+    <ItemGroup>
+    <EmbeddedResource Include="res\layout\XamlPage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+    </EmbeddedResource>
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NUI.XamlBuild" Version="1.0.10" />
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.0.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\src\Tizen.NUI\Tizen.NUI.csproj" />
+  </ItemGroup>
+
+  <PropertyGroup>
+    <NeedInjection>True</NeedInjection>
+  </PropertyGroup>
+
+</Project>
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/XamlPage.xaml.cs b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/XamlPage.xaml.cs
new file mode 100755 (executable)
index 0000000..b984232
--- /dev/null
@@ -0,0 +1,43 @@
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace NUIMusicPlayer
+{
+    public partial class XamlPage : View
+    {
+        public XamlPage()
+        {
+            InitializeComponent();
+
+            HideInitObject();
+        }
+
+        private bool OnBackTouchEvent(object source, View.TouchEventArgs e)
+        {
+            if (e.Touch.GetState(0) == PointStateType.Up)
+            {
+                Window.Instance.Hide();
+            }
+            return false;
+        }
+
+        public void ShowInitObject()
+        {
+            profileContainer.Opacity = 1.0f;
+            addContainer.Opacity = 1.0f;
+            profileText1.Opacity = 1.0f;
+            profileText2.Opacity = 1.0f;
+            cinematicText.Show();
+        }
+
+        public void HideInitObject()
+        {
+            profileContainer.Opacity = 0.0f;
+            addContainer.Opacity = 0.0f;
+            profileText1.Opacity = 0.0f;
+            profileText2.Opacity = 0.0f;
+            cinematicText.Hide();
+        }
+    }
+}
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/add.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/add.png
new file mode 100644 (file)
index 0000000..a1a0565
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/add.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/arrow-89-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/arrow-89-128.png
new file mode 100644 (file)
index 0000000..416f17e
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/arrow-89-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/bar-chart-5-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/bar-chart-5-128.png
new file mode 100644 (file)
index 0000000..e07bb9d
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/bar-chart-5-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/clock-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/clock-128.png
new file mode 100644 (file)
index 0000000..896a52d
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/clock-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/layout/XamlPage.xaml b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/layout/XamlPage.xaml
new file mode 100755 (executable)
index 0000000..068d828
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<View x:Class="NUIMusicPlayer.XamlPage"
+  xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
+
+    <View x:Name="profileContainer" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" BackgroundColor="White" Position2D="0,150" Size2D="96,96" CornerRadius="48" Opacity="0">
+        <View x:Name="profileContainer_inner" PositionUsesPivotPoint="True" ParentOrigin="Center" PivotPoint="Center" BackgroundColor="Black" Size2D="94,94" CornerRadius="47">
+            <ImageView x:Name="profileImage" PositionUsesPivotPoint="True" ParentOrigin="Center" PivotPoint="Center" ResourceUrl="*Resource*/profile.jpg" Size2D="80,80" CornerRadius="40"/>
+        </View>
+    </View>
+
+    <View x:Name="addContainer" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" BackgroundColor="White" Position2D="33,183" Size2D="40,40" CornerRadius="20" Opacity="0">
+        <ImageView x:Name="addIcon" PositionUsesPivotPoint="True" ParentOrigin="Center" PivotPoint="Center" ResourceUrl="*Resource*/add.png" Size2D="16,16"/>
+    </View>
+    <ImageView x:Name="backBtn" PositionUsesPivotPoint="True" ParentOrigin="BottomLeft" PivotPoint="Center" ResourceUrl="*Resource*/arrow-89-128.png" Position2D="50,-60" Size2D="40,40" TouchEvent="OnBackTouchEvent"/>
+
+    <TextLabel x:Name="profileText1" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="PIANO DAILY" HorizontalAlignment="Center" VerticalAlignment="Top" TextColor="0.95,0.95,0.95,1.0" PointSize="20" Position2D="0,220" WidthResizePolicy="FillToParent" Opacity="0"/>
+    <TextLabel x:Name="profileText2" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="July 2020" HorizontalAlignment="Center" VerticalAlignment="Top" TextColor="0.70,0.70,0.70,1.0" PointSize="13" Position2D="0,243" WidthResizePolicy="FillToParent" Opacity="0"/>
+
+    <TextLabel x:Name="info1" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="9,465&#x0a;" HorizontalAlignment="Center" VerticalAlignment="Top" TextColor="0.3, 0.3, 0.3, 1.0" PointSize="20" Position2D="-65,400" WidthResizePolicy="FillToParent"/>
+    <ImageView x:Name="info1Icon" ParentOrigin="TopCenter" ResourceUrl="*Resource*/bar-chart-5-128.png" Color="0.3, 0.3, 0.3, 1.0" Position2D="-125,392" Size2D="18,18"/>
+
+    <TextLabel x:Name="info2" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="5h 35m&#x0a;" HorizontalAlignment="Center" VerticalAlignment="Top" TextColor="0.3, 0.3, 0.3, 1.0" PointSize="20" Position2D="65,400" WidthResizePolicy="FillToParent"/>
+    <ImageView x:Name="info2Icon" ParentOrigin="TopCenter" ResourceUrl="*Resource*/clock-128.png" Color="0.3, 0.3, 0.3, 1.0" Position2D="-2,392" Size2D="18,18"/>
+
+    <TextLabel  x:Name="cinematicText" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="Cinematic Piano" HorizontalAlignment="Center" VerticalAlignment="Top" TextColor="0.95, 0.95, 0.95, 1.0" PointSize="70" Position2D="0,320" WidthResizePolicy="FillToParent">
+        <TextLabel.FontStyle>
+            <PropertyMap>
+                <KeyValue Key="weight" Value="bold" />
+            </PropertyMap>
+        </TextLabel.FontStyle>
+    </TextLabel>
+
+    <ImageView x:Name="imgView" PositionUsesPivotPoint="True" ParentOrigin="BottomCenter" PivotPoint="BottomCenter" ResourceUrl="*Resource*/pic_1.jpg" Size2D="850,850"/>
+
+    <TextLabel x:Name="contents" PositionUsesPivotPoint="True" ParentOrigin="TopCenter" PivotPoint="Center" Text="Beautiful, dreamy and dramtic&#x0a; instrumental neo classical piano scores&#x0a; from movies and tv series.&#x0a;" MultiLine="True" HorizontalAlignment="Center"
+               VerticalAlignment="Top" TextColor="0.4, 0.4, 0.4, 1.0" PointSize="30" Position2D="0,500" WidthResizePolicy="FillToParent"/>
+
+    <View x:Name="playBtn" PositionUsesPivotPoint="True" ParentOrigin="BottomCenter" PivotPoint="Center" BackgroundColor="White" Position2D="0,-70" Size2D="88,88" CornerRadius="44">
+        <ImageView x:Name="playIcon" PositionUsesPivotPoint="True" ParentOrigin="Center" PivotPoint="Center" ResourceUrl="*Resource*/play-128.png" Color="Black" Size2D="26,26"/>
+    </View>
+
+</View>
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/pic_1.jpg b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/pic_1.jpg
new file mode 100644 (file)
index 0000000..455228e
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/pic_1.jpg differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/play-128.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/play-128.png
new file mode 100644 (file)
index 0000000..0b594b9
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/play-128.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/profile.jpg b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/profile.jpg
new file mode 100644 (file)
index 0000000..b173740
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/res/profile.jpg differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/shared/res/NUIMusicPlayer.png b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/shared/res/NUIMusicPlayer.png
new file mode 100644 (file)
index 0000000..9f3cb98
Binary files /dev/null and b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/shared/res/NUIMusicPlayer.png differ
diff --git a/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/tizen-manifest.xml b/test/Tizen.NUI.Seamless.Xaml/NUIMusicPlayer/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..cb8f2b2
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="6" package="org.tizen.example.NUIMusicPlayer" version="1.0.0">
+  <profile name="common" />
+  <ui-application appid="org.tizen.example.NUIMusicPlayer"
+                                       exec="NUIMusicPlayer.dll"
+                                       type="dotnet-nui"
+                                       multiple="false"
+                                       taskmanage="true"
+                                       nodisplay="false"
+                                       launch_mode="single"
+                                       >
+    <label>NUIMusicPlayer</label>
+    <icon>NUIMusicPlayer.png</icon>
+    <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+  </ui-application>
+</manifest>