Merge "[Multimedia] Updated the doc-comments to fix the grammar errors." preview1-00197
authorcoderhyme <jhyo.kim@samsung.com>
Wed, 13 Sep 2017 04:26:49 +0000 (04:26 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Wed, 13 Sep 2017 04:26:49 +0000 (04:26 +0000)
252 files changed:
build.sh
build/build.dummy.csproj
build/build.proj
build/common.props
build/dependencies.props [deleted file]
pkg/PlatformFileList.txt
pkg/Tizen.NET.Private.nuspec
pkg/Tizen.NET.nuspec
src/ElmSharp.Wearable/ElmSharp.Wearable.csproj
src/ElmSharp.Wearable/ElmSharp.Wearable/RotaryEventManager.cs [new file with mode: 0644]
src/ElmSharp.Wearable/Interop/Interop.Eext.Rotary.cs
src/ElmSharp/ElmSharp.csproj
src/ElmSharp/ElmSharp/EvasKeyEventArgs.cs
src/ElmSharp/ElmSharp/EvasMap.cs
src/ElmSharp/ElmSharp/GenGrid.cs [changed mode: 0755->0644]
src/ElmSharp/ElmSharp/GenItem.cs [changed mode: 0755->0644]
src/ElmSharp/ElmSharp/SmartEvent.cs [changed mode: 0755->0644]
src/ElmSharp/ElmSharp/Toolbar.cs
src/Tizen.Account.AccountManager/Tizen.Account.AccountManager.csproj
src/Tizen.Account.FidoClient/Tizen.Account.FidoClient.csproj
src/Tizen.Account.OAuth2/Tizen.Account.OAuth2.csproj
src/Tizen.Account.SyncManager/Interop/Interop.Libraries.cs
src/Tizen.Account.SyncManager/Tizen.Account.SyncManager.csproj
src/Tizen.Account.SyncManager/Tizen.Account.SyncManager/Enumerations.cs
src/Tizen.Account.SyncManager/Tizen.Account.SyncManager/SyncAdapter.cs
src/Tizen.Account.SyncManager/Tizen.Account.SyncManager/SyncClient.cs
src/Tizen.Account.SyncManager/Tizen.Account.SyncManager/SyncJobData.cs
src/Tizen.Applications.Alarm/Tizen.Applications.Alarm.csproj
src/Tizen.Applications.AttachPanel/Tizen.Applications.AttachPanel.csproj
src/Tizen.Applications.Badge/Tizen.Applications.Badge.csproj
src/Tizen.Applications.Common/Tizen.Applications.Common.csproj
src/Tizen.Applications.DataControl/Tizen.Applications.DataControl.csproj
src/Tizen.Applications.MessagePort/Tizen.Applications.MessagePort.csproj
src/Tizen.Applications.Notification/Tizen.Applications.Notification.csproj
src/Tizen.Applications.NotificationEventListener/Tizen.Applications.NotificationEventListener.csproj
src/Tizen.Applications.PackageManager/Tizen.Applications.PackageManager.csproj
src/Tizen.Applications.PackageManager/Tizen.Applications/PackageCertificate.cs
src/Tizen.Applications.Preference/Tizen.Applications.Preference.csproj
src/Tizen.Applications.RemoteView/Tizen.Applications.RemoteView.csproj
src/Tizen.Applications.Service/Tizen.Applications.Service.csproj
src/Tizen.Applications.Shortcut/Tizen.Applications.Shortcut.csproj
src/Tizen.Applications.Shortcut/Tizen.Applications.ShortcutEvent/HomeShortcutAddedInfo.cs
src/Tizen.Applications.Shortcut/Tizen.Applications.ShortcutEvent/ShortcutAddedInfo.cs
src/Tizen.Applications.Shortcut/Tizen.Applications.ShortcutEvent/ShortcutDeletedInfo.cs
src/Tizen.Applications.Shortcut/Tizen.Applications.ShortcutEvent/ShortcutTemplate.cs
src/Tizen.Applications.Shortcut/Tizen.Applications.ShortcutEvent/WidgetShortcutAddedInfo.cs
src/Tizen.Applications.ToastMessage/Tizen.Applications.ToastMessage.csproj
src/Tizen.Applications.UI/Tizen.Applications.UI.csproj
src/Tizen.Applications.WatchApplication/Tizen.Applications.WatchApplication.csproj
src/Tizen.Applications.WidgetApplication/Tizen.Applications.WidgetApplication.csproj
src/Tizen.Applications.WidgetControl/Tizen.Applications.WidgetControl.csproj
src/Tizen.CallManager/Tizen.CallManager.csproj
src/Tizen.Content.Download/Tizen.Content.Download.csproj
src/Tizen.Content.MediaContent/Tizen.Content.MediaContent.csproj
src/Tizen.Content.MediaContent/Tizen.Content.MediaContent/MediaDatabase.cs
src/Tizen.Content.MimeType/Tizen.Content.MimeType.csproj
src/Tizen.Context/Tizen.Context.csproj
src/Tizen.Convergence/Tizen.Convergence.csproj
src/Tizen.Location.Geofence/Tizen.Location.Geofence.csproj
src/Tizen.Location/Tizen.Location.csproj
src/Tizen.Location/Tizen.Location/GpsSatellite.cs
src/Tizen.Location/Tizen.Location/Locator.cs
src/Tizen.Location/Tizen.Location/SettingChangedEventArgs.cs
src/Tizen.Log/Tizen.Log.csproj
src/Tizen.Maps/Tizen.Maps.csproj
src/Tizen.Messaging.Push/Tizen.Messaging.Push.csproj
src/Tizen.Messaging/Tizen.Messaging.csproj
src/Tizen.Multimedia.AudioIO/Tizen.Multimedia.AudioIO.csproj
src/Tizen.Multimedia.Camera/Camera/Camera.cs
src/Tizen.Multimedia.Camera/Camera/CameraCapabilities.cs
src/Tizen.Multimedia.Camera/Camera/CameraCapturingEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraDeviceStateChangedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraDisplaySettings.cs
src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs
src/Tizen.Multimedia.Camera/Camera/CameraErrorOccurredEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraFocusStateChangedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraInterruptedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraSettings.cs
src/Tizen.Multimedia.Camera/Camera/CameraStateChangedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/EncodedPlane.cs
src/Tizen.Multimedia.Camera/Camera/FaceDetectedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/FaceDetectionData.cs
src/Tizen.Multimedia.Camera/Camera/HdrCaptureProgressEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/Location.cs
src/Tizen.Multimedia.Camera/Camera/MediaPacketPreviewEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/PreviewEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/PreviewFrame.cs
src/Tizen.Multimedia.Camera/Camera/SinglePlane.cs
src/Tizen.Multimedia.Camera/Camera/StillImage.cs
src/Tizen.Multimedia.Camera/Tizen.Multimedia.Camera.csproj
src/Tizen.Multimedia.MediaCodec/Tizen.Multimedia.MediaCodec.csproj
src/Tizen.Multimedia.MediaPlayer/Tizen.Multimedia.MediaPlayer.csproj
src/Tizen.Multimedia.Metadata/Tizen.Multimedia.Metadata.csproj
src/Tizen.Multimedia.Radio/Tizen.Multimedia.Radio.csproj
src/Tizen.Multimedia.Recorder/Tizen.Multimedia.Recorder.csproj
src/Tizen.Multimedia.Remoting/Interop/Interop.MediaControllerServer.cs
src/Tizen.Multimedia.Remoting/MediaController/MediaControlServer.cs
src/Tizen.Multimedia.Remoting/Tizen.Multimedia.Remoting.csproj
src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Capabilities.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Events.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Settings.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.cs
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Capabilities.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Events.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.cs
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderAudioOptions.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderBufferConsumedEventArgs.cs [moved from src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecordingBufferConsumedEventArgs.cs with 67% similarity]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderEnums.cs
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderError.cs [moved from src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderErrorFactory.cs with 58% similarity]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderErrorOccurredEventArgs.cs [moved from src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecordingLimitReachedEventArgs.cs with 60% similarity]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderNotifiedEventArgs.cs [deleted file]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderOptions.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderStateChangedEventArgs.cs [moved from src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecordingErrorOccurredEventArgs.cs with 50% similarity]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoOptions.cs [new file with mode: 0644]
src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoResolution.cs [deleted file]
src/Tizen.Multimedia.StreamRecorder/Tizen.Multimedia.StreamRecorder.csproj
src/Tizen.Multimedia.Util/Tizen.Multimedia.Util.csproj
src/Tizen.Multimedia.Vision/MediaVision/BarcodeDetectionConfiguration.cs
src/Tizen.Multimedia.Vision/MediaVision/BarcodeGenerationConfiguration.cs
src/Tizen.Multimedia.Vision/MediaVision/FaceRecognitionConfiguration.cs
src/Tizen.Multimedia.Vision/MediaVision/FaceRecognitionModel.cs
src/Tizen.Multimedia.Vision/MediaVision/FaceTrackingModel.cs
src/Tizen.Multimedia.Vision/MediaVision/ImageFillConfiguration.cs
src/Tizen.Multimedia.Vision/MediaVision/ImageObject.cs
src/Tizen.Multimedia.Vision/MediaVision/ImageTrackingModel.cs
src/Tizen.Multimedia.Vision/Tizen.Multimedia.Vision.csproj
src/Tizen.Multimedia/Tizen.Multimedia.csproj
src/Tizen.NUI/Tizen.NUI.csproj
src/Tizen.NUI/src/internal/AppSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Application.cs
src/Tizen.NUI/src/internal/FriendAssembly.cs
src/Tizen.NUI/src/internal/ManualPINVOKE.cs
src/Tizen.NUI/src/internal/NDalicPINVOKE.cs
src/Tizen.NUI/src/internal/NUICoreBackend.cs
src/Tizen.NUI/src/internal/NUIWidgetCoreBackend.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/SWIGTYPE_p_bundle.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/SWIGTYPE_p_f_p_Dali__BaseObject_p_Dali__ConnectionTrackerInterface.cs [moved from src/Tizen.NUI/src/internal/SWIGTYPE_p_f_p_Dali__BaseObject_p_Dali__ConnectionTrackerInterface_r_q_const__std__string_p_Dali__FunctorDelegate__bool.cs with 100% similarity]
src/Tizen.NUI/src/internal/TouchPoint.cs
src/Tizen.NUI/src/internal/ViewWrapperImpl.cs
src/Tizen.NUI/src/internal/WidgetApplication.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WidgetInstanceCreateSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WidgetInstancePauseOrResumeSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WidgetInstanceResizeSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WidgetInstanceTerminateSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WidgetInstanceUpdateSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/dotnetcore/AddedException.cs [deleted file]
src/Tizen.NUI/src/internal/dotnetcore/HandleRef.cs [deleted file]
src/Tizen.NUI/src/public/Animation.cs
src/Tizen.NUI/src/public/BaseComponents/Scrollable.cs
src/Tizen.NUI/src/public/BaseComponents/TextEditor.cs
src/Tizen.NUI/src/public/BaseComponents/TextField.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs
src/Tizen.NUI/src/public/BaseComponents/VideoView.cs
src/Tizen.NUI/src/public/BaseComponents/View.cs
src/Tizen.NUI/src/public/BaseComponents/VisualView.cs
src/Tizen.NUI/src/public/BaseHandle.cs
src/Tizen.NUI/src/public/Container.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/FocusManager.cs
src/Tizen.NUI/src/public/ImfManager.cs
src/Tizen.NUI/src/public/Layer.cs
src/Tizen.NUI/src/public/NUIApplication.cs
src/Tizen.NUI/src/public/NUIWidgetApplication.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/StyleManager.cs
src/Tizen.NUI/src/public/TTSPlayer.cs
src/Tizen.NUI/src/public/Timer.cs
src/Tizen.NUI/src/public/UIComponents/Button.cs
src/Tizen.NUI/src/public/UIComponents/Popup.cs
src/Tizen.NUI/src/public/UIComponents/ProgressBar.cs
src/Tizen.NUI/src/public/UIComponents/ScrollBar.cs
src/Tizen.NUI/src/public/UIComponents/ScrollView.cs
src/Tizen.NUI/src/public/UIComponents/Slider.cs
src/Tizen.NUI/src/public/VisualMaps.cs
src/Tizen.NUI/src/public/Widget.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/WidgetData.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/Window.cs
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth.csproj
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth/BluetoothAdapter.cs
src/Tizen.Network.Bluetooth/Tizen.Network.Bluetooth/BluetoothAdapterImpl.cs
src/Tizen.Network.Connection/Tizen.Network.Connection.csproj
src/Tizen.Network.Connection/Tizen.Network.Connection/CellularProfile.cs
src/Tizen.Network.Connection/Tizen.Network.Connection/ConnectionManager.cs
src/Tizen.Network.Connection/Tizen.Network.Connection/IAddressInformation.cs
src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity.csproj
src/Tizen.Network.IoTConnectivity/Tizen.Network.IoTConnectivity/IoTConnectivityClientManager.cs
src/Tizen.Network.Mtp/Tizen.Network.Mtp.csproj
src/Tizen.Network.Nfc/Tizen.Network.Nfc.csproj
src/Tizen.Network.Nsd/Tizen.Network.Nsd.csproj
src/Tizen.Network.Nsd/Tizen.Network.Nsd/DnssdBrowser.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/DnssdService.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/INsdBrowser.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/INsdService.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/NamespaceDoc.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/SsdpBrowser.cs
src/Tizen.Network.Nsd/Tizen.Network.Nsd/SsdpService.cs
src/Tizen.Network.Smartcard/Tizen.Network.Smartcard.csproj
src/Tizen.Network.WiFi/Tizen.Network.WiFi.csproj
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetwork.cs
src/Tizen.Network.WiFiDirect/Tizen.Network.WiFiDirect.csproj
src/Tizen.PhonenumberUtils/Tizen.PhonenumberUtils.csproj
src/Tizen.Pims.Calendar/Tizen.Pims.Calendar.csproj
src/Tizen.Pims.Calendar/Tizen.Pims.Calendar/CalendarDatabase.cs
src/Tizen.Pims.Calendar/Tizen.Pims.Calendar/DBChangedEventArgs.cs [new file with mode: 0644]
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts.csproj
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts.sln [changed mode: 0755->0644]
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts/ContactsDatabase.cs
src/Tizen.Security.SecureRepository/Tizen.Security.SecureRepository.csproj
src/Tizen.Security.TEEC/Tizen.Security.TEEC.csproj
src/Tizen.Security/Tizen.Security.csproj
src/Tizen.Sensor/Interop/Interop.Sensor.cs
src/Tizen.Sensor/Tizen.Sensor.csproj
src/Tizen.Sensor/Tizen.Sensor/Plugins/HeartRateMonitor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/Pedometer.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/SleepMonitor.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/StationaryActivityDetector.cs
src/Tizen.Sensor/Tizen.Sensor/Plugins/WalkingActivityDetector.cs
src/Tizen.System.Feedback/Tizen.System.Feedback.csproj
src/Tizen.System.Information/Tizen.System.Information.csproj
src/Tizen.System.MediaKey/Tizen.System.MediaKey.csproj
src/Tizen.System.PlatformConfig/Tizen.System.PlatformConfig.csproj
src/Tizen.System.Storage/Tizen.System.Storage.csproj
src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.csproj
src/Tizen.System/Device/Battery.cs
src/Tizen.System/Device/Led.cs
src/Tizen.System/Tizen.System.csproj
src/Tizen.Tapi/Tizen.Tapi.csproj
src/Tizen.Telephony/Tizen.Telephony.csproj
src/Tizen.Tracer/Tizen.Tracer.csproj
src/Tizen.Tracer/Tizen/Tracer.cs
src/Tizen.Uix.InputMethod/Tizen.Uix.InputMethod.csproj
src/Tizen.Uix.InputMethodManager/Tizen.Uix.InputMethodManager.csproj
src/Tizen.Uix.Stt/Tizen.Uix.Stt.csproj
src/Tizen.Uix.SttEngine/Tizen.Uix.SttEngine.csproj
src/Tizen.Uix.Tts/Tizen.Uix.Tts.csproj
src/Tizen.Uix.TtsEngine/Tizen.Uix.TtsEngine.csproj
src/Tizen.Uix.VoiceControl/Tizen.Uix.VoiceControl.csproj
src/Tizen.WebView/Tizen.WebView.csproj
src/Tizen.WebView/Tizen.WebView/Chromium.cs
src/Tizen.WebView/Tizen.WebView/Context.cs
src/Tizen.WebView/Tizen.WebView/CookieManager.cs
src/Tizen.WebView/Tizen.WebView/Settings.cs
src/Tizen.WebView/Tizen.WebView/SmartCallbackLoadErrorArgs.cs
src/Tizen/Tizen.csproj
test/ElmSharp.Test/ElmSharp.Test.csproj [changed mode: 0644->0755]
test/ElmSharp.Wearable.Test/ElmSharp.Wearable.Test.csproj
test/ElmSharp.Wearable.Test/TC/CircleTool.cs [new file with mode: 0644]
test/ElmSharp.Wearable.Test/TC/RotaryEvent1.cs [new file with mode: 0644]
test/ElmSharp.Wearable.Test/TC/RotaryEvent2.cs [new file with mode: 0644]
test/ElmSharp.Wearable.Test/TC/RotaryEvent3.cs [new file with mode: 0644]
tools/module.csproj.template
tools/retry.sh [new file with mode: 0755]
tools/timeout.sh [new file with mode: 0755]

index 7adf108..359af21 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -7,9 +7,15 @@ SCRIPT_DIR=$(dirname $SCRIPT_FILE)
 OUTDIR=$SCRIPT_DIR/Artifacts
 
 NUGET_CMD="mono $SCRIPT_DIR/tools/NuGet.exe"
-MSBUILD_CMD="dotnet msbuild"
 
-RUN_BUILD="$MSBUILD_CMD $SCRIPT_DIR/build/build.proj"
+RETRY_CMD="$SCRIPT_DIR/tools/retry.sh"
+TIMEOUT_CMD="$SCRIPT_DIR/tools/timeout.sh"
+
+DOTNET_CMD="$RETRY_CMD $TIMEOUT_CMD 600 dotnet"
+
+RUN_BUILD="$DOTNET_CMD msbuild $SCRIPT_DIR/build/build.proj"
+RUN_BUILD_DUMMY="$DOTNET_CMD build $SCRIPT_DIR/build/build.dummy.csproj"
+
 
 usage() {
   echo "Usage: $0 [options] [args]"
@@ -59,7 +65,7 @@ cmd_dummy_build() {
   if [ -d /nuget ]; then
     NUGET_SOURCE_OPT="/p:RestoreSources=/nuget"
   fi
-  $RUN_BUILD /t:builddummy $NUGET_SOURCE_OPT
+  $RUN_BUILD_DUMMY $NUGET_SOURCE_OPT
 }
 
 OPTS=`getopt -o hcbfpd --long help,clean,build,full,pack,dummy -n 'build' -- "$@"`
index 264b527..47e3934 100644 (file)
@@ -6,10 +6,9 @@
   <Import Project="$(MSBuildThisFileDirectory)version.props" />
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
     <GenerateDependencyFile>false</GenerateDependencyFile>
     <DummyAssemblyVersion>$(VersionPrefix)</DummyAssemblyVersion>
-    <BaseIntermediateOutputPath>$(OutputBaseDir)obj\</BaseIntermediateOutputPath>
     <OutDir>$(OutputDummyDir)</OutDir>
   </PropertyGroup>
 
@@ -36,7 +35,7 @@
   <Target Name="CopyFilesToOutputDirectory" />
 
   <!-- Target for preparing reference lib directory -->
-  <Target Name="Prepare">
+  <Target Name="Prepare" DependsOnTargets="ResolveAssemblyReferences">
     <ItemGroup>
       <ReferencePath Include="@(TizenAssemblies)" />
     </ItemGroup>
   </Target>
 
   <Target Name="AfterBuild" DependsOnTargets="Prepare;GenerateDummy">
+    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
   </Target>
 
 </Project>
index dc1f4bf..58e76f8 100644 (file)
@@ -5,7 +5,6 @@
   <!-- Common Properties -->
   <PropertyGroup>
     <PublicModuleListFile>$(PackageSrcDir)PublicModuleList.txt</PublicModuleListFile>
-    <DummyBuildProject>$(MSBuildThisFileDirectory)build.dummy.csproj</DummyBuildProject>
   </PropertyGroup>
 
   <!-- Build Properties -->
 
   </Target>
 
-  <!--
-    Target : BuildDummy
-    ===================
-    Build dummy assemblies using GenAPI
-  -->
-  <Target Name="BuildDummy">
-
-    <MSBuild Projects="$(DummyBuildProject)"
-             Properties="Configuration=$(Configuration);RestoreSources=$(RestoreSources)"
-             Targets="Restore;Rebuild" />
-
-  </Target>
-
 </Project>
index 3df5a74..563ffc1 100644 (file)
@@ -15,6 +15,4 @@
 
   <Import Project="$(MSBuildThisFileDirectory)version.props" />
 
-  <Import Project="$(MSBuildThisFileDirectory)dependencies.props" />
-
 </Project>
diff --git a/build/dependencies.props b/build/dependencies.props
deleted file mode 100644 (file)
index cbab6eb..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<Project>
-
-  <PropertyGroup>
-    <SystemPackageVersion>4.3.0</SystemPackageVersion>
-  </PropertyGroup>
-
-</Project>
\ No newline at end of file
index cee39bb..5026b09 100644 (file)
@@ -69,7 +69,7 @@ Tizen.Sensor.dll                                   #common #mobile #mobile-emul
 Tizen.System.dll                                   #common #mobile #mobile-emul #tv #ivi #wearable
 Tizen.System.Feedback.dll                          #common #mobile #mobile-emul #tv #ivi #wearable
 Tizen.System.Information.dll                       #common #mobile #mobile-emul #tv #ivi #wearable
-Tizen.System.MediaKey.dll                          #common #mobile #mobile-emul #ivi #wearable
+Tizen.System.MediaKey.dll                          #common #mobile #mobile-emul #tv #ivi #wearable
 Tizen.System.PlatformConfig.dll                    #common #mobile #mobile-emul #tv #ivi #wearable
 Tizen.System.Storage.dll                           #common #mobile #mobile-emul #tv #ivi #wearable
 Tizen.System.SystemSettings.dll                    #common #mobile #mobile-emul #tv #ivi #wearable
index e364410..0c31525 100644 (file)
 
     <file src="pkg\build\**" target="build" />
 
-    <file src="Artifacts\bin\public\*.dll"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\public\*.pdb"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\public\*.xml"  target="lib\netstandard1.6" />
+    <file src="Artifacts\bin\public\*.dll"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\public\*.pdb"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\public\*.xml"  target="lib\netstandard2.0" />
 
-    <file src="Artifacts\bin\platform\*.dll"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\platform\*.pdb"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\platform\*.xml"  target="lib\netstandard1.6" />
+    <file src="Artifacts\bin\platform\*.dll"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\platform\*.pdb"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\platform\*.xml"  target="lib\netstandard2.0" />
 
   </files>
 </package>
index 24b9ce1..18f462b 100644 (file)
@@ -20,9 +20,9 @@
         Please edit pkg/PublicModuleList.txt,
         if want to add modules to Tizen.NET package.
     -->
-    <file src="Artifacts\bin\public\*.dll"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\public\*.pdb"  target="lib\netstandard1.6" />
-    <file src="Artifacts\bin\public\*.xml"  target="lib\netstandard1.6" />
+    <file src="Artifacts\bin\public\*.dll"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\public\*.pdb"  target="lib\netstandard2.0" />
+    <file src="Artifacts\bin\public\*.xml"  target="lib\netstandard2.0" />
 
   </files>
 </package>
index fb34d39..da8d3f6 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/ElmSharp.Wearable/ElmSharp.Wearable/RotaryEventManager.cs b/src/ElmSharp.Wearable/ElmSharp.Wearable/RotaryEventManager.cs
new file mode 100644 (file)
index 0000000..d7fb66b
--- /dev/null
@@ -0,0 +1,174 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace ElmSharp.Wearable
+{
+    /// <summary>
+    /// RotaryEventManager serve functions for global Rotary event like Galaxy Gear.
+    /// </summary>
+    public static class RotaryEventManager
+    {
+        static Dictionary<RotaryEventHandler, Interop.Eext.Eext_Rotary_Handler_Cb> s_rotaryEventHandlers = new Dictionary<RotaryEventHandler, Interop.Eext.Eext_Rotary_Handler_Cb>();
+
+        /// <summary>
+        /// Rotated will triggered when rotatable device like Galaxy Gear Bezel is rotated.
+        /// </summary>
+        public static event RotaryEventHandler Rotated
+        {
+            add
+            {
+                if (s_rotaryEventHandlers.ContainsKey(value)) return;
+
+                Interop.Eext.Eext_Rotary_Handler_Cb cb = (data, infoPtr) =>
+                {
+                    var info = Interop.Eext.FromIntPtr(infoPtr);
+                    value.Invoke(new RotaryEventArgs
+                    {
+                        IsClockwise = info.Direction == Interop.Eext.Eext_Rotary_Event_Direction.Clockwise,
+                        Timestamp = info.TimeStamp
+                    });
+                    return true;
+                };
+                Interop.Eext.eext_rotary_event_handler_add(cb, IntPtr.Zero);
+                s_rotaryEventHandlers[value] = cb;
+            }
+
+            remove
+            {
+                Interop.Eext.Eext_Rotary_Handler_Cb cb;
+                if (s_rotaryEventHandlers.TryGetValue(value, out cb))
+                {
+                    Interop.Eext.eext_rotary_event_handler_del(cb);
+                    s_rotaryEventHandlers.Remove(value);
+                }
+            }
+        }
+    }
+
+
+    /// <summary>
+    /// RotaryEventManager serve extension functions for Rotary event to EvasObject on device like Galaxy Gear.
+    /// </summary>
+    public static class EvasObjectExtensions
+    {
+        static Dictionary<EvasObject, RotaryEventHandler> s_rotaryObjectEventHandlers = new Dictionary<EvasObject, RotaryEventHandler>();
+        static Dictionary<EvasObject, Interop.Eext.Eext_Rotary_Event_Cb> s_rotaryObjectEventMap = new Dictionary<EvasObject, Interop.Eext.Eext_Rotary_Event_Cb>();
+
+        /// <summary>
+        /// Add a handler for Rotary event on specific EvasObject.
+        /// </summary>
+        /// <param name="obj">Target EvasObject</param>
+        /// <param name="handler">Event handler for Rotary event</param>
+        public static void AddRotaryEventHandler(this EvasObject obj, RotaryEventHandler handler)
+        {
+            EnableRotaryEventHandler(obj);
+
+            if (s_rotaryObjectEventHandlers.ContainsKey(obj))
+            {
+                s_rotaryObjectEventHandlers[obj] += handler;
+            }
+            else
+            {
+                s_rotaryObjectEventHandlers[obj] = handler;
+            }
+        }
+
+        /// <summary>
+        /// Remove a handler on specific EvasObject for Rotary event.
+        /// </summary>
+        /// <param name="obj">Target EvasObject</param>
+        /// <param name="handler">Event handler for Rotary event</param>
+        public static void RemoveRotaryEventHandler(this EvasObject obj, RotaryEventHandler handler)
+        {
+            if (s_rotaryObjectEventHandlers.ContainsKey(obj))
+            {
+                s_rotaryObjectEventHandlers[obj] -= handler;
+                if (s_rotaryObjectEventHandlers[obj] == null)
+                {
+                    DisableRotaryEventHandler(obj, false);
+                    s_rotaryObjectEventHandlers.Remove(obj);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Activate this object can take Rotary event.
+        /// </summary>
+        /// <param name="obj">Target object</param>
+        public static void Activate(this EvasObject obj)
+        {
+            Interop.Eext.eext_rotary_object_event_activated_set(obj, true);
+        }
+
+        /// <summary>
+        /// Deactivate this object is blocked from Rotary event.
+        /// </summary>
+        /// <param name="obj">Target object</param>
+        public static void Deactivate(this EvasObject obj)
+        {
+            Interop.Eext.eext_rotary_object_event_activated_set(obj, false);
+        }
+
+        static void EnableRotaryEventHandler(EvasObject obj)
+        {
+            if (!s_rotaryObjectEventMap.ContainsKey(obj))
+            {
+                Interop.Eext.Eext_Rotary_Event_Cb cb = (d, o, i) =>
+                {
+                    RotaryEventHandler events;
+                    if (s_rotaryObjectEventHandlers.TryGetValue(obj, out events))
+                    {
+                        var info = Interop.Eext.FromIntPtr(i);
+                        events?.Invoke(new RotaryEventArgs
+                        {
+                            IsClockwise = info.Direction == Interop.Eext.Eext_Rotary_Event_Direction.Clockwise,
+                            Timestamp = info.TimeStamp
+                        });
+                    }
+                    return true;
+                };
+                Interop.Eext.eext_rotary_object_event_callback_add(obj, cb, IntPtr.Zero);
+                s_rotaryObjectEventMap[obj] = cb;
+                obj.Deleted += (s, e) => DisableRotaryEventHandler(obj, true);
+            }
+        }
+
+        static void DisableRotaryEventHandler(EvasObject obj, bool removeHandler)
+        {
+            Interop.Eext.Eext_Rotary_Event_Cb cb;
+            if (s_rotaryObjectEventMap.TryGetValue(obj, out cb))
+            {
+                Interop.Eext.eext_rotary_object_event_callback_del(obj, cb);
+                s_rotaryObjectEventMap.Remove(obj);
+            }
+            if (removeHandler && s_rotaryObjectEventHandlers.ContainsKey(obj))
+            {
+                s_rotaryObjectEventHandlers.Remove(obj);
+            }
+        }
+    }
+
+    /// <summary>
+    /// Handler for Rotary event
+    /// </summary>
+    /// <param name="args">Rotary event information</param>
+    public delegate void RotaryEventHandler(RotaryEventArgs args);
+
+    /// <summary>
+    /// RotaryEventArgs serve information for triggered rotary event.
+    /// </summary>
+    public class RotaryEventArgs : EventArgs
+    {
+        /// <summary>
+        /// IsClockwise is true when Rotary device rotated clockwise direction or false on counter clockwise.
+        /// </summary>
+        public bool IsClockwise { get; set; }
+
+        /// <summary>
+        /// Timestamp of rotary event
+        /// </summary>
+        public uint Timestamp { get; set; }
+    }
+}
index 5348d39..aa004b1 100644 (file)
@@ -19,10 +19,50 @@ using System.Runtime.InteropServices;
 
 internal static partial class Interop
 {
-
     internal static partial class Eext
     {
+        const short EEXT_CALLBACK_PRIORITY_AFTER = 100;
+        const short EEXT_CALLBACK_PRIORITY_BEFORE = -100;
+        const short EEXT_CALLBACK_PRIORITY_DEFAULT = 0;
+
+        internal delegate bool Eext_Rotary_Event_Cb(IntPtr data, IntPtr obj, IntPtr info);
+        internal delegate bool Eext_Rotary_Handler_Cb(IntPtr data, IntPtr info);
+
+        internal enum Eext_Rotary_Event_Direction
+        {
+            Clockwise,
+            CounterClockwise
+        }
+
+        [StructLayout(LayoutKind.Sequential)]
+        internal struct Eext_Rotary_Event_Info
+        {
+            public Eext_Rotary_Event_Direction Direction;
+            public uint TimeStamp;
+        }
+
+        internal static Eext_Rotary_Event_Info FromIntPtr(IntPtr infoPtr)
+        {
+            var info = Marshal.PtrToStructure<Eext_Rotary_Event_Info>(infoPtr);
+            return info;
+        }
+
         [DllImport(Libraries.Eext)]
         internal static extern IntPtr eext_rotary_object_event_activated_set(IntPtr circleObject, bool activated);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_rotary_object_event_callback_add(IntPtr obj, Eext_Rotary_Event_Cb func, IntPtr data);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_rotary_object_event_callback_priority_add(IntPtr obj, short priority, Eext_Rotary_Event_Cb func, IntPtr data);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern IntPtr eext_rotary_object_event_callback_del(IntPtr obj, Eext_Rotary_Event_Cb func);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern bool eext_rotary_event_handler_add(Eext_Rotary_Handler_Cb func, IntPtr data);
+
+        [DllImport(Libraries.Eext)]
+        internal static extern IntPtr eext_rotary_event_handler_del(Eext_Rotary_Handler_Cb func);
     }
 }
\ No newline at end of file
index e73da10..dbdcea4 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
 </Project>
index 8955904..378a7e9 100644 (file)
@@ -26,8 +26,6 @@ namespace ElmSharp
     {
         IntPtr _nativeEventInfo;
 
-        EvasEventFlag _eventFlags;
-
         /// <summary>
         /// BackButton name in Platform
         /// </summary>
index cdf1410..13fa2ee 100755 (executable)
@@ -123,7 +123,7 @@ namespace ElmSharp
         /// <param name="dz">The amount of degrees from 0.0 to 360.0 to rotate around Z axis</param>
         /// <param name="cx">The rotation's center horizontal position</param>
         /// <param name="cy">The rotation's center vertical position</param>
-        /// <param name="cz">The rotation's center vertical position</param>
+        /// <param name="cz">The rotation's center depth position</param>
         public void Rotate3D(double dx, double dy, double dz, int cx, int cy, int cz)
         {
             Interop.Evas.evas_map_util_3d_rotate(_evasMap, dx, dy, dz, cx, cy, cz);
old mode 100755 (executable)
new mode 100644 (file)
index fc1f3fc..9616008
@@ -242,7 +242,7 @@ namespace ElmSharp
         }
 
         /// <summary>
-        /// Gets or sets the gengrid select mode by <see cref="GenGridSelectionMode"/>.
+        /// Gets or sets the gengrid select mode by <see cref="GenItemSelectionMode"/>.
         /// </summary>
         public GenItemSelectionMode SelectionMode
         {
old mode 100755 (executable)
new mode 100644 (file)
index 90b3325..ca50c53
@@ -71,9 +71,6 @@ namespace ElmSharp
         /// </summary>
         public GenItemClass ItemClass { get; protected set; }
 
-        /// <summary>
-        /// It's a abstract property. It's implemented by <see cref="GenGridItem.TooltipContent"/> and <see cref="GenListItem.TooltipContent"/>.
-        /// </summary>
         public GetTooltipContentDelegate TooltipContentDelegate
         {
             get
@@ -87,6 +84,9 @@ namespace ElmSharp
             }
         }
 
+        /// <summary>
+        /// It's a abstract property.
+        /// </summary>
         public abstract GenItemSelectionMode SelectionMode { get; set; }
 
         public abstract string Cursor { get; set; }
@@ -129,4 +129,4 @@ namespace ElmSharp
 
         protected abstract void UpdateTooltipDelegate();
     }
-}
\ No newline at end of file
+}
old mode 100755 (executable)
new mode 100644 (file)
index 6edbb7a..f413f82
@@ -161,7 +161,6 @@ namespace ElmSharp
     /// This way, you can extend EvasObject's own <see cref="EvasObjectEvent"/>.
     /// They are defined by an event string, which identifies them uniquely.
     /// </summary>
-    /// <typeparam name="TEventArgs">The parameter for the event.</typeparam>
     public class SmartEvent : IInvalidatable
     {
         private SmartEvent<EventArgs> _smartEvent;
index 0370594..644a43c 100644 (file)
@@ -394,7 +394,6 @@ namespace ElmSharp
         /// <param name="label">The label of the item</param>
         /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
         /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
-        /// <seealso cref="InsertAfter(ToolbarItem, string)"/>
         public ToolbarItem InsertAfter(ToolbarItem after, string label, string icon)
         {
             ToolbarItem item = new ToolbarItem(label, icon);
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 837e50b..a1d3410 100755 (executable)
@@ -17,7 +17,7 @@
 internal static partial class Interop
 {
     /// <summary>
-    /// Wrapper class for maintaining names of dependent native libraries.
+    /// The Wrapper class for maintaining names of dependent native libraries.
     /// </summary>
     internal static partial class Libraries
     {
index 8e139d2..af9c378 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 4befba6..7bfb265 100755 (executable)
@@ -19,64 +19,64 @@ using System;
 namespace Tizen.Account.SyncManager
 {
        /// <summary>
-       /// Enumeration for the Sync option
+       /// Enumeration for the sync option.
        /// </summary>
     [Flags]
     public enum SyncOption
     {
         /// <summary>
-        /// Sync job will be operated normally
+        /// The sync job will be operated normally.
         /// </summary>
         None = 0,
 
         /// <summary>
-        /// Sync job will be operated as soon as possible
+        /// The sync job will be operated as soon as possible.
         /// </summary>
         Expedited = 0X01,
 
         /// <summary>
-        /// Sync job will not be performed again when it fails
+        /// The sync job will not be performed again when it fails.
         /// </summary>
         NoRetry = 0X02,
     }
 
        /// <summary>
-       /// Enumeration for the Sync period
+       /// Enumeration for the sync period.
        /// </summary>
     public enum SyncPeriod
     {
         /// <summary>
-        /// Sync within 30 minutes
+        /// Sync within 30 minutes.
         /// </summary>
         ThirtyMin = 0,
 
         /// <summary>
-        /// Sync within 1 hour
+        /// Sync within 1 hour.
         /// </summary>
         OneHour,
 
         /// <summary>
-        /// Sync within 2 hours
+        /// Sync within 2 hours.
         /// </summary>
         TwoHours,
 
         /// <summary>
-        /// Sync within 3 hours
+        /// Sync within 3 hours.
         /// </summary>
         ThreeHours,
 
         /// <summary>
-        /// Sync within 6 hours
+        /// Sync within 6 hours.
         /// </summary>
         SixHours,
 
         /// <summary>
-        /// Sync within 12 hours
+        /// Sync within 12 hours.
         /// </summary>
         TwelveHours,
 
         /// <summary>
-        /// Sync within 1 day
+        /// Sync within 1 day.
         /// </summary>
         OneDay,
     }
index 8a59593..4a25dee 100755 (executable)
@@ -21,7 +21,7 @@ using Tizen.Account.AccountManager;
 namespace Tizen.Account.SyncManager
 {
     /// <summary>
-    /// The class contains the delegates to be called upon scheduling a sync operation
+    /// This class contains the delegates to be called upon scheduling a sync operation.
     /// </summary>
     public class SyncAdapter
     {
@@ -29,23 +29,23 @@ namespace Tizen.Account.SyncManager
         Interop.Adapter.SyncAdapterCancelSyncCallback _cancelSyncCallback;
 
         /// <summary>
-        /// Callback function for Sync Adapter's start sync request
+        /// The callback function for the sync adapter's start sync request.
         /// </summary>
         /// <param name="syncParameters"> The sync job parameters corresponding to the sync request. </param>
-        /// <returns> true if sync operation is success, @c false otherwise. </returns>
+        /// <returns> true if the sync operation is success, @c false otherwise. </returns>
         public delegate bool StartSyncCallback(SyncJobData syncParameters);
 
         /// <summary>
-        /// Callback function for Sync Adapter's cancel sync request.
+        /// The callback function for the sync adapter's cancel sync request.
         /// </summary>
         /// <param name="syncParameters"> The sync job parameters corresponding to the sync request. </param>
         public delegate void CancelSyncCallback(SyncJobData syncParameters);
 
         /// <summary>
-        /// Sets client (Sync Adapter) callback functions
+        /// Sets the client (sync adapter) callback functions.
         /// </summary>
-        /// <param name="startSyncCb"> A callback function to be called by Sync Manager for performing sync operation. </param>
-        /// <param name="cancelSyncCb"> A callback function to be called by Sync Manager for cancelling sync operation. </param>
+        /// <param name="startSyncCb"> A callback function to be called by the sync manager for performing the sync operation. </param>
+        /// <param name="cancelSyncCb"> A callback function to be called by the sync manager for cancelling the sync operation. </param>
         /// <exception cref="ArgumentNullException"> Thrown when any of the arguments are null. </exception>
         /// <exception cref="InvalidOperationException"> Thrown when the application calling this API cannot be a sync adapter. </exception>
         public void SetSyncEventCallbacks(StartSyncCallback startSyncCb, CancelSyncCallback cancelSyncCb)
@@ -98,7 +98,7 @@ namespace Tizen.Account.SyncManager
         }
 
         /// <summary>
-        /// Unsets client (Sync Adapter) callback functions
+        /// Unsets the client (sync adapter) callback functions.
         /// </summary>
         /// <exception cref="System.Exception"> Thrown when sync manager internal error occurs. </exception>
         public void UnsetSyncEventCallbacks()
index 4c82b85..f86747b 100755 (executable)
@@ -23,25 +23,25 @@ namespace Tizen.Account.SyncManager
 {
     /// <summary>
     /// The SyncClient APIs for managing the sync operations. Applications will call these APIs to schedule their sync operations.
-    /// Sync service maintains sync requests from all the applications and invokes their respective callback methods to perform account synchronization operations.
+    /// The sync service maintains sync requests from all the applications and invokes their respective callback methods to perform account synchronization operations.
     /// </summary>
     public static class SyncClient
     {
         /// <summary>
-        /// The constructor
+        /// The constructor.
         /// </summary>
         static SyncClient()
         {
         }
 
         /// <summary>
-        /// Requests Sync Manager to perform one time sync operation
+        /// Requests the sync manager to perform one time sync operation.
         /// </summary>
-        /// <param name="request"> Sync job information of the sync job request. </param>
-        /// <param name="syncOptions"> sync options determine an way to operate sync job and can be used as ORing. </param>
+        /// <param name="request"> The sync job information of the sync job request. </param>
+        /// <param name="syncOptions"> Sync options determine a way to operate the sync job and can be used as ORing. </param>
         /// <exception cref="ArgumentNullException"> Thrown when any of the arugments are null. </exception>
-        /// <exception cref="InvalidOperationException"> Thrown when the application calling this api doesn't have a sync adapter. </exception>
-        /// <returns> A unique value which can manage sync jobs. The number of sync job id is limited as less than a hundred. </returns>
+        /// <exception cref="InvalidOperationException"> Thrown when the application calling this API doesn't have a sync adapter. </exception>
+        /// <returns> An unique value which can manage sync jobs. The number of sync job ID is limite as it is less than hundred. </returns>
         public static int RequestOnDemandSyncJob(SyncJobData request, SyncOption syncOptions)
         {
             if (request == null || request.SyncJobName == null)
@@ -63,16 +63,16 @@ namespace Tizen.Account.SyncManager
         }
 
         /// <summary>
-        /// Requests Sync Manager to perform periodic sync operations
+        /// Requests the sync manager to perform periodic sync operations.
         /// </summary>
-        /// <param name="request"> Sync job information of the sync job request. </param>
-        /// <param name="period"> Determines time interval of periodic sync. The periodic sync operation can be triggered in that interval, but it does not guarantee exact time. The minimum value is 30 minutes. </param>
-        /// <param name="syncOptions"> sync options determine an way to operate sync job and can be used as ORing. </param>
+        /// <param name="request"> The sync job information of the sync job request. </param>
+        /// <param name="period"> Determines the time interval of the periodic sync. The periodic sync operation can be triggered in that interval, but it does not guarantee the exact time. The minimum value is 30 minutes. </param>
+        /// <param name="syncOptions"> Sync options determine a way to operate the sync job and can be used as ORing. </param>
         /// <privilege>http://tizen.org/privilege/alarm.set</privilege>
-        /// <exception cref="UnauthorizedAccessException"> In case of privilege not defined. </exception>
+        /// <exception cref="UnauthorizedAccessException"> In case of privilege not defined. </exception>
         /// <exception cref="ArgumentNullException"> Thrown when any of the arguments are null. </exception>
         /// <exception cref="InvalidOperationException"> Thrown when the application calling this API doesn't have a sync adapter. </exception>
-        /// <returns> A unique value which can manage sync jobs. The number of sync job id is limited as less than a hundred. </returns>
+        /// <returns> A unique value which can manage sync jobs. The number of sync job IDs is limited as it is less than hundred. </returns>
         public static int AddPeriodicSyncJob(SyncJobData request, SyncPeriod period, SyncOption syncOptions)
         {
             if (request == null || request.SyncJobName == null)
@@ -94,16 +94,16 @@ namespace Tizen.Account.SyncManager
         }
 
         /// <summary>
-        /// Requests Sync Manager to perform sync operations whenever corresponding DB changed
+        /// Requests the sync manager to perform sync operations whenever the corresponding DB is changed.
         /// </summary>
-        /// <param name="request"> Sync job information of the sync job request. </param>
-        /// <param name="syncOptions"> sync options determine an way to operate sync job and can be used as ORing. </param>
+        /// <param name="request"> The sync job information of the sync job request. </param>
+        /// <param name="syncOptions"> Sync options determine a way to operate the sync job and can be used as ORing. </param>
         /// <privilege>http://tizen.org/privilege/calendar.read</privilege>
         /// <privilege>http://tizen.org/privilege/contact.read</privilege>
-        /// <exception cref="UnauthorizedAccessException"> In case of privilege not defined. </exception>
+        /// <exception cref="UnauthorizedAccessException"> In case of a privilege is not defined. </exception>
         /// <exception cref="ArgumentNullException"> Thrown when any of the arguments are null. </exception>
         /// <exception cref="InvalidOperationException"> Thrown when the application calling this API doesn't have a sync adapter. </exception>
-        /// <returns> A unique value which can manage sync jobs. The number of sync job id is limited as less than a hundred. </returns>
+        /// <returns> A unique value which can manage sync jobs. The number of sync job IDs is limited as it is less than hundred. </returns>
         public static int AddDataChangeSyncJob(SyncJobData request, SyncOption syncOptions)
         {
             if (request == null || request.SyncJobName == null)
@@ -125,7 +125,7 @@ namespace Tizen.Account.SyncManager
         }
 
         /// <summary>
-        /// Get all the sync jobs registered with the sync manager
+        /// Gets all the sync jobs registered with the sync manager.
         /// </summary>
         /// <returns>
         /// Returns the list of SyncJobData corresponding to sync requests.
@@ -160,9 +160,9 @@ namespace Tizen.Account.SyncManager
         }
 
         /// <summary>
-        /// Requests Sync Manager to remove corresponding sync job job based on id
+        /// Requests the sync manager to remove the corresponding sync job based on the ID.
         /// </summary>
-        /// <param name="id"> A unique value of each sync job, it can be used to search specific sync job and remove it. </param>
+        /// <param name="id"> A unique value of each sync job, it can be used to search specific sync job and remove it. </param>
         /// <exception cref="ArgumentException"> Thrown if the input arugments is invalid. </exception>
         public static void RemoveSyncJob(int id)
         {
index 51c2039..e9f88da 100755 (executable)
@@ -20,70 +20,70 @@ using Tizen.Account.AccountManager;
 namespace Tizen.Account.SyncManager
 {
     /// <summary>
-    /// Class represents information about a sync job request
+    /// This class represents information about the sync job request.
     /// </summary>
     public class SyncJobData
     {
         /// <summary>
-        /// Represents calendar capability
+        /// Represents the calendar capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about calendar database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the calendar database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string CalendarCapability = "http://tizen.org/sync/capability/calendar";
 
         /// <summary>
-        /// Represents contact capability
+        /// Represents the contact capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about contact database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the contact database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string ContactCapability = "http://tizen.org/sync/capability/contact";
 
         /// <summary>
-        /// Represents image capability
+        /// Represents the image capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about image database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the image database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string ImageCapability = "http://tizen.org/sync/capability/image";
 
         /// <summary>
-        /// Represents video capability
+        /// Represents the video capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about video database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the video database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string VideoCapability = "http://tizen.org/sync/capability/video";
 
         /// <summary>
-        /// Represents sound capability
+        /// Represents the sound capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about sound database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the sound database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string SoundCapability = "http://tizen.org/sync/capability/sound";
 
         /// <summary>
-        /// Represents music capability
+        /// Represents the music capability.
         /// </summary>
         /// <remarks>
-        /// If you want to receive notification about music database change, assign it to SyncJobName property of SyncJobData object.
+        /// If you want to receive notification about the music database change, assign it to the SyncJobName property of the SyncJobData object.
         /// </remarks>
         public const string MusicCapability = "http://tizen.org/sync/capability/music";
 
         /// <summary>
-        /// The account instance on which sync operation was requested or @c null in the case of accountless sync operation
+        /// The account instance on which the sync operation was requested or @c null in the case of the accountless sync operation.
         /// </summary>
         public AccountManager.Account Account { get; set; }
 
         /// <summary>
-        /// User data which contains additional information related registered sync job
+        /// User data which contains an additional information related to the registered sync job.
         /// </summary>
         public Bundle UserData { get; set; }
 
         /// <summary>
-        /// A string representing a sync job which has been operated or capability setting to operate data change sync job
+        /// A string representing a sync job which has been operated or capability setting to operate the data change sync job.
         /// </summary>
         public string SyncJobName { get; set; }
     }
index f4fddda..9c3d059 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 82cc77f..020b2cb 100644 (file)
@@ -1,16 +1,11 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
     <ProjectReference Include="..\Tizen.Applications.Common\Tizen.Applications.Common.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <PackageReference Include="System.Diagnostics.Process" Version="$(SystemPackageVersion)" PrivateAssets="All" />
-    <PackageReference Include="System.Threading.Thread" Version="$(SystemPackageVersion)" PrivateAssets="All" />
-  </ItemGroup>
-
 </Project>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 2e9a979..264db10 100755 (executable)
@@ -81,8 +81,8 @@ namespace Tizen.Applications
             certificates.Add(CertificateType.Distributor, new PackageCertificate(distRootCertificate, distIntermediateCertificate, distSignerCertificate));
 
             string dist2RootCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
-            string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
-            string dist2SignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
+            string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2IntermediateCertificate);
+            string dist2SignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2SignerCertificate);
             certificates.Add(CertificateType.Distributor2, new PackageCertificate(dist2RootCertificate, dist2IntermediateCertificate, dist2SignerCertificate));
 
             return certificates;
index 11cd4a8..7f4584f 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index b1c6a54..f47359d 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index fe6ff34..1407501 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index d421fd3..91038a1 100755 (executable)
@@ -24,11 +24,11 @@ namespace Tizen.Applications.Shortcut
         /// <summary>
         /// Gets the name of application.
         /// </summary>
-        public string AppId { get; internal set; } = string.Empty;
+        public string AppId { get; internal set; }
 
         /// <summary>
         /// Gets the specific information for creating a new shortcut.
         /// </summary>
-        public string Uri { get; internal set; } = string.Empty;
+        public string Uri { get; internal set; }
     }
 }
\ No newline at end of file
index 9a0756a..889e3cb 100755 (executable)
@@ -24,12 +24,12 @@ namespace Tizen.Applications.Shortcut
         /// <summary>
         /// Gets the name of the created shortcut icon.
         /// </summary>
-        public string ShortcutName { get; internal set; } = string.Empty;
+        public string ShortcutName { get; internal set; }
 
         /// <summary>
         /// Gets the absolute path of an icon file for this shortcut.
         /// </summary>
-        public string IconPath { get; internal set; } = string.Empty;
+        public string IconPath { get; internal set; }
 
         /// <summary>
         /// Gets a value indicating whether to allow or not to allow duplication.
index 6164dcb..73786f9 100755 (executable)
@@ -24,11 +24,11 @@ namespace Tizen.Applications.Shortcut
         /// <summary>
         /// Gets the name of package.
         /// </summary>
-        public string AppId { get; internal set; } = string.Empty;
+        public string AppId { get; internal set; }
 
         /// <summary>
         /// Gets the name of the created shortcut icon.
         /// </summary>
-        public string ShortcutName { get; internal set; } = string.Empty;
+        public string ShortcutName { get; internal set; }
     }
 }
\ No newline at end of file
index 73b8167..05fcb99 100755 (executable)
@@ -24,26 +24,26 @@ namespace Tizen.Applications.Shortcut
         /// <summary>
         /// Gets the Application ID.
         /// </summary>
-        public string AppId { get; internal set; } = string.Empty;
+        public string AppId { get; internal set; }
 
         /// <summary>
         /// Gets the name of the created shortcut icon.
         /// </summary>
-        public string ShortcutName { get; internal set; } = string.Empty;
+        public string ShortcutName { get; internal set; }
 
         /// <summary>
         /// Gets the absolute path of an icon file for this shortcut.
         /// </summary>
-        public string IconPath { get; internal set; } = string.Empty;
+        public string IconPath { get; internal set; }
 
         /// <summary>
         /// Gets the user data. A property of shortcut element in manifest file.
         /// </summary>
-        public string ExtraKey { get; internal set; } = string.Empty;
+        public string ExtraKey { get; internal set; }
 
         /// <summary>
         /// Gets the user data. A property of shortcut element in manifest file.
         /// </summary>
-        public string ExtraData { get; internal set; } = string.Empty;
+        public string ExtraData { get; internal set; }
     }
 }
\ No newline at end of file
index b0b5a6c..eed1e4f 100755 (executable)
@@ -24,7 +24,7 @@ namespace Tizen.Applications.Shortcut
         /// <summary>
         /// Gets the Widget ID.
         /// </summary>
-        public string WidgetId { get; internal set; } = string.Empty;
+        public string WidgetId { get; internal set; }
 
         /// <summary>
         /// Gets the size of widget.
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 4136f6c..e56b74e 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 4136f6c..e56b74e 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8ab0f70..020b2cb 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 836f096..fbac841 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index c8676f7..8474364 100644 (file)
@@ -356,10 +356,9 @@ namespace Tizen.Content.MediaContent
         {
             var tcs = new TaskCompletionSource<bool>();
 
-            using (var cbKeeper = ObjectKeeper.Get(GetScanCompletedCallback(tcs)))
+            using (var cbKeeper = ObjectKeeper.Get(GetScanCompletedCallback(tcs, cancellationToken)))
             using (RegisterCancellationAction(tcs, folderPath, cancellationToken))
             {
-
                 Interop.Content.ScanFolder(folderPath, recursive, cbKeeper.Target)
                     .ThrowIfError("Failed to scan");
 
@@ -367,13 +366,21 @@ namespace Tizen.Content.MediaContent
             }
         }
 
-        private static Interop.Content.MediaScanCompletedCallback GetScanCompletedCallback(TaskCompletionSource<bool> tcs)
+        private static Interop.Content.MediaScanCompletedCallback GetScanCompletedCallback(TaskCompletionSource<bool> tcs,
+            CancellationToken cancellationToken)
         {
             return (scanResult, _) =>
             {
                 if (scanResult == MediaContentError.None)
                 {
-                    tcs.TrySetResult(true);
+                    if (cancellationToken.IsCancellationRequested)
+                    {
+                        tcs.TrySetCanceled();
+                    }
+                    else
+                    {
+                        tcs.TrySetResult(true);
+                    }
                 }
                 else
                 {
@@ -398,7 +405,6 @@ namespace Tizen.Content.MediaContent
                 }
 
                 Interop.Content.CancelScanFolder(folderPath).ThrowIfError("Failed to cancel scanning");
-                tcs.TrySetCanceled();
             });
         }
 
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index d870c96..d2c35aa 100755 (executable)
@@ -68,7 +68,7 @@ namespace Tizen.Location
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public string Nmea
         {
@@ -100,7 +100,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public int ActiveCount
         {
@@ -132,7 +132,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public int InViewCount
         {
@@ -164,7 +164,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public IList<SatelliteInformation> Satellites
         {
@@ -233,7 +233,7 @@ namespace Tizen.Location
         /// <since_tizen> 3 </since_tizen>
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public event EventHandler<SatelliteStatusChangedEventArgs> SatelliteStatusUpdated
         {
@@ -327,21 +327,18 @@ namespace Tizen.Location
         /// The azimuth information of the satellite.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="azimuth"> The azimuth value of the satellite in degrees.</param>
         public uint Azimuth { get; private set; }
 
         /// <summary>
         /// The elevation information of the satellite.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="azimuth"> The azimuth value of the satellite in degrees.</param>
         public uint Elevation { get; private set; }
 
         /// <summary>
         /// The PRN of the satellite.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="azimuth"> The azimuth value of the satellite in degrees.</param>
         public uint Prn { get; private set; }
 
         /// <summary>
index 137e161..9a72fff 100755 (executable)
@@ -266,7 +266,7 @@ namespace Tizen.Location
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <privilege>http://tizen.org/privilege/location</privilege>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public bool EnableMock
         {
@@ -317,7 +317,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public void Start()
         {
@@ -371,7 +371,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public void SetMockLocation(Location location)
         {
@@ -400,7 +400,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public void ClearMock()
         {
@@ -422,7 +422,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public Task<Location> GetLocationAsync(int timeout)
         {
@@ -468,7 +468,7 @@ namespace Tizen.Location
         /// <privilege>http://tizen.org/privilege/location</privilege>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the location.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the location.</exception>
         /// <exception cref="NotSupportedException">Thrown when the location is not supported.</exception>
         public Location GetLocation()
         {
index c191ce3..36e8c93 100755 (executable)
@@ -24,7 +24,7 @@ namespace Tizen.Location
         /// The class constructor for the SettingChangedEventArgs class.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="method">The positioing method used for the location information.</param>
+        /// <param name="type">The positioing method used for the location information.</param>
         /// <param name="enable">The status of the method.</param>
         public SettingChangedEventArgs(LocationType type, bool enable)
         {
index e73da10..dbdcea4 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
 </Project>
index 3bd4eaf..ae92048 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="System.ComponentModel" Version="$(SystemPackageVersion)" />
-  </ItemGroup>
-
-  <ItemGroup>
     <None Update="res\maps_marker_pin_48.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 4a1bf65..58477cf 100755 (executable)
@@ -33,10 +33,10 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// The camera class provides methods to capture photos and support setting up notifications
-    /// for state changes of capturing, previewing, focusing, information about resolution and binary format
-    /// and functions for picture manipulations like sepia negative and many more.
-    /// It also notifies you when a significant picture parameter changes e.g. focus.
+    /// This camera class provides methods to capture photos and supports setting up notifications
+    /// for state changes of capturing, previewing, focusing, and informing about the resolution and the binary format,
+    /// and functions for picture manipulations like sepia, negative, and many more.
+    /// It also notifies you when a significant picture parameter changes, (For example, focus).
     /// </summary>
     public class Camera : IDisposable, IDisplayable<CameraError>
     {
@@ -45,10 +45,10 @@ namespace Tizen.Multimedia
         private CameraState _state = CameraState.None;
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Camera"/> Class.
+        /// Initializes a new instance of the <see cref="Camera"/> class.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="device">The camera device to access</param>
+        /// <param name="device">The camera device to access.</param>
         public Camera(CameraDevice device)
         {
             CameraErrorFactory.ThrowIfError(Native.Create(device, out _handle),
@@ -81,7 +81,7 @@ namespace Tizen.Multimedia
 
         #region Dispose support
         /// <summary>
-        /// Releases the unmanaged resources used by the Camera.
+        /// Releases the unmanaged resources used by the camera.
         /// </summary>
         /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
         protected virtual void Dispose(bool disposing)
@@ -104,7 +104,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Releases all resources used by the Camera.
+        /// Releases all resources used by the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public void Dispose()
@@ -147,48 +147,48 @@ namespace Tizen.Multimedia
 
         #region EventHandlers
         /// <summary>
-        /// Event that occurs when the camera interrupt is started by policy.
+        /// An event that occurs when the camera interrupt is started by the policy.
         /// </summary>
         public event EventHandler<CameraInterruptStartedEventArgs> InterruptStarted;
         private Native.InterruptStartedCallback _interruptStartedCallback;
 
         /// <summary>
-        /// Event that occurs when an camera is interrupted by policy.
+        /// An event that occurs when an camera is interrupted by the policy.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<CameraInterruptedEventArgs> Interrupted;
         private Native.InterruptedCallback _interruptedCallback;
 
         /// <summary>
-        /// Event that occurs when there is an asynchronous error.
+        /// An event that occurs when there is an asynchronous error.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<CameraErrorOccurredEventArgs> ErrorOccurred;
         private Native.ErrorCallback _errorCallback;
 
         /// <summary>
-        /// Event that occurs when the auto focus state is changed.
+        /// An event that occurs when the auto focus state is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<CameraFocusStateChangedEventArgs> FocusStateChanged;
         private Native.FocusStateChangedCallback _focusStateChangedCallback;
 
         /// <summary>
-        /// Event that occurs when a face is detected in preview frame.
+        /// An event that occurs when a face is detected in the preview frame.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<FaceDetectedEventArgs> FaceDetected;
         private Native.FaceDetectedCallback _faceDetectedCallback;
 
         /// <summary>
-        /// Event that occurs during capture of image.
+        /// An event that occurs during capture of an image.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<CameraCapturingEventArgs> Capturing;
         private Native.CapturingCallback _capturingCallback;
 
         /// <summary>
-        /// Event that occurs after the capture of the image.
+        /// An event that occurs after the capture of the image.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<EventArgs> CaptureCompleted;
@@ -199,8 +199,8 @@ namespace Tizen.Multimedia
         private object _hdrCaptureProgressEventLock = new object();
 
         /// <summary>
-        /// Event that occurs when there is change in HDR capture progress.
-        /// Check whether <see cref="CameraCapabilities.IsHdrCaptureSupported"/> is supported or not before add this EventHandler.
+        /// An event that occurs when there is a change in the HDR capture progress.
+        /// Checks whether the <see cref="CameraCapabilities.IsHdrCaptureSupported"/> is supported or not before adding this EventHandler.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="NotSupportedException">In case of HDR feature is not supported.</exception>
@@ -234,7 +234,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Event that occurs when camera state is changed.
+        /// An event that occurs when the camera state is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<CameraStateChangedEventArgs> StateChanged;
@@ -246,7 +246,7 @@ namespace Tizen.Multimedia
         private static int _deviceStateCallbackId;
 
         /// <summary>
-        /// Event that occurs after the <see cref="CameraDeviceState"/> is changed.
+        /// An event that occurs after the <see cref="CameraDeviceState"/> is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
@@ -285,8 +285,8 @@ namespace Tizen.Multimedia
         private event EventHandler<PreviewEventArgs> _preview;
         private object _previewEventLock = new object();
         /// <summary>
-        /// Event that occurs once per frame when previewing.
-        /// Preview callback is registered when user add callback explicitly to avoid useless P/Invoke.
+        /// An event that occurs once per frame when previewing.
+        /// Preview callback is registered when an user adds a callback explicitly to avoid useless P/Invoke.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<PreviewEventArgs> Preview
@@ -323,8 +323,8 @@ namespace Tizen.Multimedia
         private object _mediaPacketPreviewEventLock = new object();
 
         /// <summary>
-        /// Event that occurs once per frame when previewing.
-        /// Preview callback is registered when user add callback explicitly to avoid useless P/Invoke.
+        /// An event that occurs once per frame when previewing.
+        /// Preview callback is registered when an user adds a callback explicitly to avoid useless P/Invoke.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public event EventHandler<MediaPacketPreviewEventArgs> MediaPacketPreview
@@ -359,7 +359,7 @@ namespace Tizen.Multimedia
 
         #region Properties
         /// <summary>
-        /// Get/Set the various camera settings.
+        /// Gets or sets the various camera settings.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraSettings Settings { get; }
@@ -401,12 +401,12 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// This must be set before StartPreview() method.
-        /// In Custom ROI display mode, DisplayRoiArea property must be set before calling this method.
+        /// This must be set before the StartPreview() method.
+        /// In custom ROI display mode, DisplayRoiArea property must be set before calling this method.
         /// </remarks>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public Display Display
         {
@@ -452,8 +452,8 @@ namespace Tizen.Multimedia
         /// Gets the state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value> None, Created, Preview, Capturing, Captured </value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value> None, Created, Preview, Capturing, Captured.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraState State
         {
             get
@@ -469,14 +469,14 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The hint for display reuse.
+        /// The hint for the display reuse.
         /// If the hint is set to true, the display will be reused when the camera device is changed with
-        /// ChangeDevice method.
+        /// the ChangeDevice method.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="InvalidOperationException">Invalid state.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="InvalidOperationException">An invalid state.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public bool DisplayReuseHint
         {
             get
@@ -499,11 +499,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the facing direction of camera module.
+        /// Gets the facing direction of the camera module.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraFacingDirection"/> that specifies the facing direction of camera device.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraFacingDirection"/> that specifies the facing direction of the camera device.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraFacingDirection Direction
         {
             get
@@ -523,7 +523,7 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         /// <value>This returns 2, if the device supports primary and secondary cameras.
         /// Otherwise 1, if the device only supports primary camera.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int CameraCount
         {
             get
@@ -552,8 +552,8 @@ namespace Tizen.Multimedia
         /// </remarks>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
-        /// <exception cref="NotSupportedException">In case of ChangeDevice feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="NotSupportedException">In case of the ChangeDevice feature is not supported.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void ChangeDevice(CameraDevice device)
         {
             ValidateState(CameraState.Created);
@@ -567,8 +567,8 @@ namespace Tizen.Multimedia
         /// Gets the device state.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="device">The device to get state.</param>
-        /// <returns>Returns the state of camera device</returns>
+        /// <param name="device">The device to get the state.</param>
+        /// <returns>Returns the state of the camera device.</returns>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
@@ -586,8 +586,8 @@ namespace Tizen.Multimedia
         /// Gets the flash state.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="device">The device to get state.</param>
-        /// <returns>Returns the flash state of camera device</returns>
+        /// <param name="device">The device to get the state.</param>
+        /// <returns>Returns the flash state of the camera device.</returns>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
@@ -607,7 +607,7 @@ namespace Tizen.Multimedia
         /// If needed set fps <see cref="CameraSettings.PreviewFps"/>, preview resolution
         /// <see cref="CameraSettings.PreviewResolution"/>, or preview format <see cref="CameraSettings.PreviewPixelFormat"/>
         /// before using this method.
-        /// The camera must be in the <see cref="CameraState.Created"/> or <see cref="CameraState.Captured"/> state.
+        /// The camera must be in the <see cref="CameraState.Created"/> or the <see cref="CameraState.Captured"/> state.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <privilege>
@@ -615,7 +615,7 @@ namespace Tizen.Multimedia
         /// </privilege>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StartPreview()
         {
@@ -638,7 +638,7 @@ namespace Tizen.Multimedia
         /// </privilege>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StopPreview()
         {
@@ -661,13 +661,13 @@ namespace Tizen.Multimedia
         /// http://tizen.org/privilege/camera
         /// </privilege>
         /// <remarks>
-        /// This function causes the transition of the camera state from Capturing to Captured
+        /// This function causes the transition of the camera state from capturing to captured
         /// automatically and the corresponding EventHandlers will be invoked.
-        /// The preview should be restarted by calling <see cref="StartPreview"/> method after capture is completed.
+        /// The preview should be restarted by calling the <see cref="StartPreview"/> method after capture is completed.
         /// </remarks>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StartCapture()
         {
@@ -694,16 +694,16 @@ namespace Tizen.Multimedia
         /// <param name="cancellationToken">The cancellation token to cancel capturing.</param>
         /// <seealso cref="CancellationToken"/>
         /// <remarks>
-        /// If this is not supported zero shutter lag occurs. The capture resolution could be
+        /// If this is not supported, zero shutter lag occurs. The capture resolution could be
         /// changed to the preview resolution. This function causes the transition of the camera state
-        /// from Capturing to Captured automatically and the corresponding Eventhandlers will be invoked.
-        /// Each captured image will be delivered through Eventhandler set using <see cref="Capturing"/> event.
-        /// The preview should be restarted by calling <see cref="StartPreview"/> method after capture is completed.
+        /// from capturing to captured automatically and the corresponding Eventhandlers will be invoked.
+        /// Each captured image will be delivered through Eventhandler set using the <see cref="Capturing"/> event.
+        /// The preview should be restarted by calling the <see cref="StartPreview"/> method after capture is completed.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StartCapture(int count, int interval, CancellationToken cancellationToken)
         {
@@ -738,10 +738,10 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Starts camera auto-focusing, asynchronously.
-        /// The camera must be in the <see cref="CameraState.Preview"/> or <see cref="CameraState.Captured"/> state.
+        /// The camera must be in the <see cref="CameraState.Preview"/> or the <see cref="CameraState.Captured"/> state.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="continuous">Continuous auto focus</param>
+        /// <param name="continuous">Continuous auto focus.</param>
         /// <privilege>
         /// http://tizen.org/privilege/camera
         /// </privilege>
@@ -751,7 +751,7 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StartFocusing(bool continuous)
         {
@@ -763,7 +763,7 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Stops camera auto focusing.
-        /// The camera must be in the <see cref="CameraState.Preview"/> or <see cref="CameraState.Captured"/> state.
+        /// The camera must be in the <see cref="CameraState.Preview"/> or the <see cref="CameraState.Captured"/> state.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <privilege>
@@ -771,7 +771,7 @@ namespace Tizen.Multimedia
         /// </privilege>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StopFocusing()
         {
@@ -791,12 +791,12 @@ namespace Tizen.Multimedia
         /// </privilege>
         /// <remarks>
         /// This should be called after <see cref="StartPreview"/> is started.
-        /// The Eventhandler set using <see cref="FaceDetected"/> invoked when the face is detected in preview frame.
-        /// Internally it starts continuous focus and focusing on the detected face.
+        /// The Eventhandler set using <see cref="FaceDetected"/> is invoked when the face is detected in the preview frame.
+        /// Internally, it starts continuously focus and focusing on the detected face.
         /// </remarks>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StartFaceDetection()
         {
@@ -828,7 +828,7 @@ namespace Tizen.Multimedia
         /// </privilege>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         /// <exception cref="UnauthorizedAccessException">In case of access to the resources cannot be granted.</exception>
         public void StopFaceDetection()
         {
index d55b6a2..1c00021 100755 (executable)
@@ -82,92 +82,92 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Gets the face detection feature's supported state.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsFaceDetectionSupported { get; }
 
         /// <summary>
         /// Gets the media packet preview callback feature's supported state.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsMediaPacketPreviewCallbackSupported { get; }
 
         /// <summary>
         /// Gets the zero shutter lag feature's supported state.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsZeroShutterLagSupported { get; }
 
         /// <summary>
-        /// Gets continuous capture feature's supported state.
-        /// true if supported, otherwise false.
+        /// Gets the continuous capture feature's supported state.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsContinuousCaptureSupported { get; }
 
         /// <summary>
-        /// Gets the support state of HDR capture.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the HDR capture.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsHdrCaptureSupported { get; }
 
         /// <summary>
         /// Gets the support state of the anti-shake feature.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsAntiShakeSupported { get; }
 
         /// <summary>
         /// Gets the support state of the video stabilization feature.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsVideoStabilizationSupported { get; }
 
         /// <summary>
         /// Gets the support state of auto contrast feature.
-        /// true if supported, otherwise false.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsAutoContrastSupported { get; }
 
         /// <summary>
-        /// Gets the support state of brightness feature.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the brightness feature.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsBrigtnessSupported { get; }
 
         /// <summary>
-        /// Gets the support state of exposure feature.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the exposure feature.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsExposureSupported { get; }
 
         /// <summary>
-        /// Gets the support state of zoom feature.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the zoom feature.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsZoomSupported { get; }
 
         /// <summary>
-        /// Gets the support state of pan feature.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the pan feature.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsPanSupported { get; }
 
         /// <summary>
-        /// Gets the support state of tilt feature.
-        /// true if supported, otherwise false.
+        /// Gets the support state of the tilt feature.
         /// </summary>
+        /// <value>true if supported, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         public bool IsTiltSupported { get; }
 
@@ -177,9 +177,8 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         /// <returns>
         /// It returns a list containing all the supported preview resolutions.
-        /// by recorder.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<Size> SupportedPreviewResolutions
         {
             get
@@ -200,7 +199,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported capture resolutions.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<Size> SupportedCaptureResolutions
         {
             get
@@ -221,7 +220,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraPixelFormat"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraPixelFormat> SupportedCapturePixelFormats
         {
             get
@@ -242,7 +241,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraPixelFormat"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraPixelFormat> SupportedPreviewPixelFormats
         {
             get
@@ -263,7 +262,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraFps"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraFps> SupportedPreviewFps
         {
             get
@@ -286,7 +285,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraFps"/> by resolution.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraFps> GetSupportedPreviewFpsByResolution(int width, int height)
         {
             return GetSupportedPreviewFpsByResolutions(width, height);
@@ -300,7 +299,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraFps"/> by resolution.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraFps> GetSupportedPreviewFpsByResolution(Size size)
         {
             return GetSupportedPreviewFpsByResolutions(size.Width, size.Height);
@@ -313,7 +312,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraAutoFocusMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraAutoFocusMode> SupportedAutoFocusModes
         {
             get
@@ -334,7 +333,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraExposureMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraExposureMode> SupportedExposureModes
         {
             get
@@ -349,13 +348,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves all the Iso level supported by the camera.
+        /// Retrieves all the ISO levels supported by the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraIsoLevel"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraIsoLevel> SupportedIsoLevels
         {
             get
@@ -376,7 +375,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraTheaterMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraTheaterMode> SupportedTheaterModes
         {
             get
@@ -391,13 +390,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves all the whitebalance modes supported by the camera.
+        /// Retrieves all the white balance modes supported by the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraWhiteBalance"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraWhiteBalance> SupportedWhiteBalances
         {
             get
@@ -418,7 +417,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraFlashMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraFlashMode> SupportedFlashModes
         {
             get
@@ -439,7 +438,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraSceneMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraSceneMode> SupportedSceneModes
         {
             get
@@ -460,7 +459,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraEffectMode"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraEffectMode> SupportedEffects
         {
             get
@@ -475,13 +474,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves all the stream rotation supported by the camera.
+        /// Retrieves all the stream rotations supported by the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>
         /// An IEnumerable containing all the supported <see cref="Rotation"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<Rotation> SupportedStreamRotations
         {
             get
@@ -502,7 +501,7 @@ namespace Tizen.Multimedia
         /// <returns>
         /// It returns a list containing all the supported <see cref="Flips"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<Flips> SupportedStreamFlips
         {
             get
@@ -517,13 +516,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves all the ptz types by the camera.
+        /// Retrieves all the PTZ types by the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>
         /// It returns a list containing all the supported <see cref="CameraPtzType"/>.
         /// </returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public IEnumerable<CameraPtzType> SupportedPtzTypes
         {
             get
index 584b529..4b92096 100755 (executable)
@@ -37,7 +37,7 @@ namespace Tizen.Multimedia
         public StillImage MainImage { get; }
 
         /// <summary>
-        /// The image data of the postview.
+        /// The image data of the post view.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public StillImage PostView { get; }
index 32353f1..2270436 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
+    /// An extended EventArgs class which contains details about the previous and the current state
     /// of the camera when its state is changed.
     /// </summary>
     public class CameraDeviceStateChangedEventArgs : EventArgs
@@ -31,13 +31,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Camera device type.
+        /// The camera device type.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraDevice Device { get; }
 
         /// <summary>
-        /// Current state of the camera device.
+        /// The current state of the camera device.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraDeviceState State { get; }
index 8fcad37..eeddd87 100755 (executable)
@@ -21,8 +21,8 @@ namespace Tizen.Multimedia
 {
     /// <summary>
     /// The CameraDisplay class allows you to manage display for the camera.
-    /// It allows to set and get various display properties such as
-    /// rotation, display visibility and display mode.
+    /// It allows to set and get various display properties, such as
+    /// rotation, display visibility, and display mode.
     /// </summary>
     public class CameraDisplaySettings
     {
@@ -42,7 +42,7 @@ namespace Tizen.Multimedia
         /// </remarks>
         /// <value>A <see cref="CameraDisplayMode"/> that specifies the display mode.</value>
         /// <exception cref="InvalidOperationException">Display type is incorrect.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         public CameraDisplayMode Mode
         {
             get
@@ -63,14 +63,14 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// The display visibility.
-        /// True if camera display visible, otherwise false.
         /// </summary>
+        /// <value>true if camera display is visible, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
         /// This property is meaningful only in overlay or EVAS surface display type.
         /// </remarks>
         /// <exception cref="InvalidOperationException">Display type is incorrect.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         public bool Visible
         {
             get
@@ -95,9 +95,9 @@ namespace Tizen.Multimedia
         /// <remarks>
         /// This property is meaningful only in overlay or EVAS surface display type.
         /// </remarks>
-        /// <value>A <see cref="Rotation"/> that specifies the rotation of camera device.</value>
+        /// <value>A <see cref="Rotation"/> that specifies the rotation of the camera device.</value>
         /// <exception cref="InvalidOperationException">Display type is incorrect.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         public Rotation Rotation
         {
             get
@@ -124,9 +124,9 @@ namespace Tizen.Multimedia
         /// <remarks>
         /// This property is meaningful only in overlay or EVAS surface display type.
         /// </remarks>
-        /// <value>A <see cref="Flips"/> that specifies camera flip type.</value>
+        /// <value>A <see cref="Flips"/> that specifies the camera flip type.</value>
         /// <exception cref="InvalidOperationException">Display type is incorrect.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         public Flips Flip
         {
             get
@@ -154,7 +154,7 @@ namespace Tizen.Multimedia
         /// This property is meaningful only in overlay or EVAS surface display type.
         /// </remarks>
         /// <exception cref="InvalidOperationException">Display type is incorrect.</exception>
-        /// <exception cref="ObjectDisposedException" > The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException" > The camera already has been disposed of.</exception>
         public Rectangle RoiArea
         {
             get
index 65dce11..8a5e898 100644 (file)
@@ -19,23 +19,23 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Enumeration for Camera device.
+    /// Enumeration for the camera device.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraDevice
     {
         /// <summary>
-        /// Rear Camera device.
+        /// The rear camera device.
         /// </summary>
         Rear,
         /// <summary>
-        /// Front Camera device.
+        /// The front camera device.
         /// </summary>
         Front
     }
 
     /// <summary>
-    /// Enumeration for Camera device state.
+    /// Enumeration for the camera device state.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraDeviceState
@@ -49,13 +49,13 @@ namespace Tizen.Multimedia
         /// </summary>
         Opened,
         /// <summary>
-        /// Now previewing or capturing or is being used for video recording.
+        /// Now previewing or capturing or is being used for the video recording.
         /// </summary>
         Working
     }
 
     /// <summary>
-    /// Enumeration for the facing direction of camera module .
+    /// Enumeration for the facing direction of camera module.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraFacingDirection
@@ -65,7 +65,7 @@ namespace Tizen.Multimedia
         /// </summary>
         Rear,
         /// <summary>
-        /// Front direction
+        /// Front direction.
         /// </summary>
         Front
     }
@@ -77,11 +77,11 @@ namespace Tizen.Multimedia
     public enum CameraFlashState
     {
         /// <summary>
-        /// Flash is not used now through camera API.
+        /// Flash is not used now through the camera API.
         /// </summary>
         NotUsed,
         /// <summary>
-        /// Flash is used now through camera API.
+        /// Flash is used now through the camera API.
         /// </summary>
         Used
     }
@@ -97,11 +97,11 @@ namespace Tizen.Multimedia
         /// </summary>
         Released,
         /// <summary>
-        /// Focus in progress
+        /// Focus in progress.
         /// </summary>
         Ongoing,
         /// <summary>
-        /// Focus succeeded
+        /// Focus succeeded.
         /// </summary>
         Focused,
         /// <summary>
@@ -125,7 +125,7 @@ namespace Tizen.Multimedia
         /// </summary>
         Nv12,
         /// <summary>
-        /// NV12 Tiled pixel format.
+        /// NV12 tiled pixel format.
         /// </summary>
         Nv12t,
         /// <summary>
@@ -193,11 +193,11 @@ namespace Tizen.Multimedia
         /// </summary>
         None,
         /// <summary>
-        /// Security policy
+        /// Security policy.
         /// </summary>
         Security = 4,
         /// <summary>
-        /// Resource conflict
+        /// Resource conflict.
         /// </summary>
         ResourceConflict
     }
@@ -231,25 +231,25 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for the auto focus mode.
+    /// Enumeration for the auto-focus mode.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraAutoFocusMode
     {
         /// <summary>
-        /// auto-focus is not set.
+        /// Auto-focus is not set.
         /// </summary>
         None,
         /// <summary>
-        /// auto-focus in the normal mode.
+        /// Auto-focus is in the normal mode.
         /// </summary>
         Normal,
         /// <summary>
-        /// auto-focus in the macro mode(close distance).
+        /// Auto-focus is in the macro mode (close distance).
         /// </summary>
         Macro,
         /// <summary>
-        /// auto-focus in the full mode(all range scan, limited by device spec).
+        /// Auto-focus is in the full mode (all range scan, limited by device spec).
         /// </summary>
         Full
     }
@@ -349,7 +349,7 @@ namespace Tizen.Multimedia
         /// </summary>
         VintageWarm,
         /// <summary>
-        /// Vintage cold    .
+        /// Vintage cold.
         /// </summary>
         VintageCold,
         /// <summary>
@@ -361,27 +361,27 @@ namespace Tizen.Multimedia
         /// </summary>
         Cartoon,
         /// <summary>
-        /// Selective color - Red.
+        /// Selective color - red.
         /// </summary>
         SelectiveRed,
         /// <summary>
-        /// Selective color - Green.
+        /// Selective color - green.
         /// </summary>
         SelectiveGreen,
         /// <summary>
-        /// Selective color - Blue.
+        /// Selective color - blue.
         /// </summary>
         SelectiveBlue,
         /// <summary>
-        /// Selective color - Yellow.
+        /// Selective color - yellow.
         /// </summary>
         SelectiveYellow,
         /// <summary>
-        /// Selective color - Red and Yellow.
+        /// Selective color - red and yellow.
         /// </summary>
         SelectiveRedYellow,
         /// <summary>
-        /// Other Graphic effects.
+        /// Other graphic effects.
         /// </summary>
         OtherGraphics
     }
@@ -455,73 +455,73 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for preview FPS.
+    /// Enumeration for the preview fps.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraFps
     {
         /// <summary>
-        /// Auto FPS.
+        /// Auto fps.
         /// </summary>
         Auto = 0,
         /// <summary>
-        /// 7 FPS.
+        /// 7 fps.
         /// </summary>
         Fps7 = 7,
         /// <summary>
-        /// 8 FPS.
+        /// 8 fps.
         /// </summary>
         Fps8 = 8,
         /// <summary>
-        /// 15 FPS.
+        /// 15 fps.
         /// </summary>
         Fps15 = 15,
         /// <summary>
-        /// 20 FPS.
+        /// 20 fps.
         /// </summary>
         Fps20 = 20,
         /// <summary>
-        /// 24 FPS.
+        /// 24 fps.
         /// </summary>
         Fps24 = 24,
         /// <summary>
-        /// 25 FPS.
+        /// 25 fps.
         /// </summary>
         Fps25 = 25,
         /// <summary>
-        /// 30 FPS.
+        /// 30 fps.
         /// </summary>
         Fps30 = 30,
         /// <summary>
-        /// 60 FPS.
+        /// 60 fps.
         /// </summary>
         Fps60 = 60,
         /// <summary>
-        /// 90 FPS.
+        /// 90 fps.
         /// </summary>
         Fps90 = 90,
         /// <summary>
-        /// 120 FPS.
+        /// 120 fps.
         /// </summary>
         Fps120 = 120
     }
 
     /// <summary>
-    /// Enumeration for HDR capture mode.
+    /// Enumeration for the HDR capture mode.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraHdrMode
     {
         /// <summary>
-        /// Disable HDR capture.
+        /// Disable the HDR capture.
         /// </summary>
         Disable,
         /// <summary>
-        /// Enable HDR capture.
+        /// Enable the HDR capture.
         /// </summary>
         Enable,
         /// <summary>
-        /// Enable HDR capture and keep original image data.
+        /// Enable the HDR capture mode and keep original image data.
         /// </summary>
         KeepOriginal
     }
@@ -567,7 +567,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for PTZ(Pan Tilt Zoom) movement type.
+    /// Enumeration for the PTZ(Pan Tilt Zoom) movement type.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraPtzMoveType
@@ -577,13 +577,13 @@ namespace Tizen.Multimedia
         /// </summary>
         Absoulute,
         /// <summary>
-        /// Move a specific distance from the current position.
+        /// Move to a specific distance from the current position.
         /// </summary>
         Relative
     }
 
     /// <summary>
-    /// Enumeration for PTZ(Pan Tilt Zoom) type.
+    /// Enumeration for the PTZ(Pan Tilt Zoom) type.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraPtzType
@@ -621,11 +621,11 @@ namespace Tizen.Multimedia
         /// </summary>
         Sports,
         /// <summary>
-        /// Party &amp; Indoor.
+        /// Party and indoor.
         /// </summary>
         PartyAndIndoor,
         /// <summary>
-        /// Beach &amp; Indoor.
+        /// Beach and indoor.
         /// </summary>
         BeachAndIndoor,
         /// <summary>
@@ -633,7 +633,7 @@ namespace Tizen.Multimedia
         /// </summary>
         Sunset,
         /// <summary>
-        /// Dusk &amp; Dawn.
+        /// Dusk and dawn.
         /// </summary>
         DuskAndDawn,
         /// <summary>
@@ -677,35 +677,35 @@ namespace Tizen.Multimedia
     public enum CameraTagOrientation
     {
         /// <summary>
-        /// Row #0 is at the top, Column #0 is to the left.
+        /// Row #0 is at the top, column #0 is to the left.
         /// </summary>
         TopLeft = 1,
         /// <summary>
-        /// Row #0 is at the top, Column #0 is to the right.
+        /// Row #0 is at the top, column #0 is to the right.
         /// </summary>
         TopRight = 2,
         /// <summary>
-        /// Row #0 is at the bottom, Column #0 is to the right.
+        /// Row #0 is at the bottom, column #0 is to the right.
         /// </summary>
         BottomRight = 3,
         /// <summary>
-        /// Row #0 is at the bottom, Column #0 is to the left.
+        /// Row #0 is at the bottom, column #0 is to the left.
         /// </summary>
         BottomLeft = 4,
         /// <summary>
-        /// Row #0 is at the left, Column #0 is to the top.
+        /// Row #0 is at the left, column #0 is to the top.
         /// </summary>
         LeftTop = 5,
         /// <summary>
-        /// Row #0 is at the right, Column #0 is to the top.
+        /// Row #0 is at the right, column #0 is to the top.
         /// </summary>
         RightTop = 6,
         /// <summary>
-        /// Row #0 is at the right, Column #0 is to the bottom.
+        /// Row #0 is at the right, column #0 is to the bottom.
         /// </summary>
         RightBottom = 7,
         /// <summary>
-        /// Row #0 is at the left, Column #0 is to the bottom.
+        /// Row #0 is at the left, column #0 is to the bottom.
         /// </summary>
         LeftBottom = 8
     }
@@ -717,21 +717,21 @@ namespace Tizen.Multimedia
     public enum CameraTheaterMode
     {
         /// <summary>
-        /// Disable theater mode - External display shows same image as device display.
+        /// Disable the theater mode - the external display shows same image as the device display.
         /// </summary>
         Disable,
         /// <summary>
-        /// Clone mode - Preview image is displayed on external display with full screen mode. Also preview image is shown by the UI on device display.
+        /// Clone the mode - the preview image is displayed on an external display with full screen mode. Also, the preview image is shown by the UI on the device display.
         /// </summary>
         Clone,
         /// <summary>
-        /// Enable theater mode - Preview image is displayed on external display with full screen mode, but preview image is not shown on device display.
+        /// Enable the theater mode - the preview image is displayed on an external display with full screen mode, but the preview image is not shown on the device display.
         /// </summary>
         Enable
     }
 
     /// <summary>
-    ///Enumeration for the white balance levels of the camera.
+    /// Enumeration for the white balance levels of the camera.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraWhiteBalance
@@ -789,7 +789,7 @@ namespace Tizen.Multimedia
         /// </summary>
         LetterBox,
         /// <summary>
-        /// Origin size.
+        /// Original size.
         /// </summary>
         OriginSize,
         /// <summary>
@@ -811,7 +811,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for camera failure error.
+    /// Enumeration for the camera failure error.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum CameraErrorCode
@@ -835,7 +835,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for Image datatype.
+    /// Enumeration for the image datatype.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
     public enum PlaneType
index 883596b..de2032c 100755 (executable)
@@ -19,8 +19,8 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about error status and
-    /// state of the camera when it failed.
+    /// An extended EventArgs class which contains details about the error status and the
+    /// state of the camera when it fails.
     /// </summary>
     public class CameraErrorOccurredEventArgs : EventArgs
     {
index c288d73..9826506 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about focus state of the
-    /// camera.
+    /// An extended EventArgs class which contains details about the focus state of the camera.
     /// </summary>
     public class CameraFocusStateChangedEventArgs : EventArgs
     {
@@ -30,7 +29,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Focus state of the camera.
+        /// The focus state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraFocusState State { get; }
index 4ce158a..664f159 100755 (executable)
@@ -19,8 +19,8 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
-    /// of the camera when its interrupted.
+    /// An extended EventArgs class which contains details about the previous and the current state
+    /// of the camera when it is interrupted.
     /// </summary>
     public class CameraInterruptedEventArgs : EventArgs
     {
@@ -32,13 +32,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Previous state of the camera.
+        /// The previous state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraState Previous { get; }
 
         /// <summary>
-        /// Current state of the camera.
+        /// The current state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraState Current { get; }
index 9d8c2bc..e42ee1f 100755 (executable)
@@ -64,17 +64,17 @@ namespace Tizen.Multimedia
 
         #region Auto Focus
         /// <summary>
-        /// Sets auto focus area.
+        /// Sets the auto focus area.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
         /// <see cref="CameraAutoFocusMode"/> should not be the <see cref="CameraAutoFocusMode.None"/>.
         /// </remarks>
-        /// <param name="x">X position</param>
-        /// <param name="y">Y position</param>
+        /// <param name="x">X position.</param>
+        /// <param name="y">Y position.</param>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void SetAutoFocusArea(int x, int y)
         {
             CameraErrorFactory.ThrowIfError(Native.SetAutoFocusArea(_camera.GetHandle(), x, y),
@@ -82,16 +82,16 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Sets auto focus area.
+        /// Sets the auto focus area.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
         /// <see cref="CameraAutoFocusMode"/> should not be the <see cref="CameraAutoFocusMode.None"/>.
         /// </remarks>
-        /// <param name="pos"><see cref="Point"/> structure including X, Y position</param>
+        /// <param name="pos"><see cref="Point"/> structure including X, Y position.</param>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
         /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void SetAutoFocusArea(Point pos)
         {
             CameraErrorFactory.ThrowIfError(Native.SetAutoFocusArea(_camera.GetHandle(), pos.X, pos.Y),
@@ -102,7 +102,7 @@ namespace Tizen.Multimedia
         /// Clears the auto focus area.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void ClearFocusArea()
         {
             CameraErrorFactory.ThrowIfError(Native.ClearAutoFocusArea(_camera.GetHandle()),
@@ -114,7 +114,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="CameraAutoFocusMode"/> that specifies the auto focus mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraAutoFocusMode AutoFocusMode
         {
             get
@@ -141,7 +141,7 @@ namespace Tizen.Multimedia
         /// The contrast level of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int Contrast
         {
             get
@@ -164,7 +164,7 @@ namespace Tizen.Multimedia
         /// If true auto contrast is enabled, otherwise false.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public bool AutoContrast
         {
             get
@@ -186,7 +186,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the mininum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range ContrastRange
@@ -208,7 +208,7 @@ namespace Tizen.Multimedia
         /// The brightness level of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int Brightness
         {
             get
@@ -231,7 +231,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the minimum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range BrightnessRange
@@ -253,7 +253,7 @@ namespace Tizen.Multimedia
         /// The exposure value.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int Exposure
         {
             get
@@ -276,7 +276,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="CameraExposureMode"/> that specifies the exposure mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraExposureMode ExposureMode
         {
             get
@@ -302,7 +302,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the minimum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range ExposureRange
@@ -322,10 +322,10 @@ namespace Tizen.Multimedia
         #region Zoom
         /// <summary>
         /// The zoom level.
-        /// The range for zoom level is received from ZoomRange property.
+        /// The range for the zoom level is received from the ZoomRange property.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int ZoomLevel
         {
             get
@@ -348,7 +348,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the minimum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range ZoomRange
@@ -366,11 +366,11 @@ namespace Tizen.Multimedia
         #endregion Zoom
 
         /// <summary>
-        /// The whitebalance mode.
+        /// The white balance mode.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="CameraWhiteBalance"/> that specifies the white balance mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraWhiteBalance WhiteBalance
         {
             get
@@ -395,8 +395,8 @@ namespace Tizen.Multimedia
         /// The ISO level.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraIsoLevel"/> that specifies ISO level.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraIsoLevel"/> that specifies the ISO level.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraIsoLevel IsoLevel
         {
             get
@@ -419,10 +419,10 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// The quality of the image.
-        /// The range for image quality is 1 to 100.
+        /// The range for the image quality is 1 to 100.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int ImageQuality
         {
             get
@@ -450,8 +450,8 @@ namespace Tizen.Multimedia
         /// The preview frame rate.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraFps"/> that specifies preview frame rate.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraFps"/> that specifies the preview frame rate.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraFps PreviewFps
         {
             get
@@ -471,11 +471,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the resolution of preview
+        /// Gets or sets the resolution of the preview.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Size PreviewResolution
         {
             get
@@ -498,10 +498,10 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// Depending on the capture resolution aspect ratio and display resolution,
+        /// Depending on the capture resolution aspect ratio and the display resolution,
         /// the recommended preview resolution is determined.
         /// </remarks>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Size RecommendedPreviewResolution
         {
             get
@@ -517,9 +517,9 @@ namespace Tizen.Multimedia
         /// The preview data format.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraPixelFormat"/> that specifies the pixel format of preview data.</value>
+        /// <value>A <see cref="CameraPixelFormat"/> that specifies the pixel format of the preview data.</value>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraPixelFormat PreviewPixelFormat
         {
             get
@@ -542,8 +542,8 @@ namespace Tizen.Multimedia
         /// Resolution of the captured image.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ArgumentException">In case of invalid parameters</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Size CaptureResolution
         {
             get
@@ -569,7 +569,7 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="CameraPixelFormat"/> that specifies the pixel format of captured image.</value>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraPixelFormat CapturePixelFormat
         {
             get
@@ -591,10 +591,10 @@ namespace Tizen.Multimedia
 
         #region Encoded preview
         /// <summary>
-        /// The bit rate of encoded preview.
+        /// The bit rate of the encoded preview.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int EncodedPreviewBitrate
         {
             get
@@ -613,10 +613,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// GOP(Group Of Pictures) interval of encoded preview.
+        /// The GOP(Group Of Pictures) interval of the encoded preview.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int EncodedPreviewGopInterval
         {
             get
@@ -639,12 +639,12 @@ namespace Tizen.Multimedia
         /// The theater mode.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraTheaterMode"/> that specifies theater mode.</value>
+        /// <value>A <see cref="CameraTheaterMode"/> that specifies the theater mode.</value>
         /// <remarks>
         /// If you want to display the preview image on the external display with the full screen mode,
         /// use this property.
         /// </remarks>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraTheaterMode TheaterMode
         {
             get
@@ -667,8 +667,8 @@ namespace Tizen.Multimedia
         /// The camera effect mode.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraEffectMode"/> that specifies effect mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraEffectMode"/> that specifies the effect mode.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraEffectMode Effect
         {
             get
@@ -691,8 +691,8 @@ namespace Tizen.Multimedia
         /// The scene mode.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraSceneMode"/> that specifies scene mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraSceneMode"/> that specifies the scene mode.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraSceneMode SceneMode
         {
             get
@@ -715,8 +715,8 @@ namespace Tizen.Multimedia
         /// The camera's flash mode.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraFlashMode"/> that specifies flash mode.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraFlashMode"/> that specifies the flash mode.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraFlashMode FlashMode
         {
             get
@@ -739,7 +739,7 @@ namespace Tizen.Multimedia
         /// Gets the camera lens orientation angle.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int LensOrientation
         {
             get
@@ -756,7 +756,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="Rotation"/> that specifies the rotation of camera device.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Rotation StreamRotation
         {
             get
@@ -780,8 +780,8 @@ namespace Tizen.Multimedia
         /// The stream flip.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="Flips"/> that specifies camera flip type.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="Flips"/> that specifies the camera flip type.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Flips StreamFlip
         {
             get
@@ -802,16 +802,16 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The mode of HDR(High dynamic range) capture.
+        /// The mode of the HDR(High dynamic range) capture.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A <see cref="CameraHdrMode"/> that specifies the HDR mode.</value>
         /// <remarks>
-        /// Taking multiple pictures at different exposure levels and intelligently stitching them together
+        /// Taking multiple pictures at different exposure levels and intelligently stitching them together,
         /// so that we eventually arrive at a picture that is representative in both dark and bright areas.
-        /// If this attribute is set, then eventhandler set for HdrCaptureProgress event is invoked.
+        /// If this attribute is set, then event handler set for the HdrCaptureProgress event is invoked.
         /// </remarks>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraHdrMode HdrMode
         {
             get
@@ -832,10 +832,10 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// The anti shake feature.
-        /// If true the antishake feature is enabled, otherwise false.
+        /// If true, the antishake feature is enabled, otherwise false.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public bool AntiShake
         {
             get
@@ -854,15 +854,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Enables/Disables the video stabilization feature.
-        /// If true video stabilization is enabled, otherwise false.
+        /// Enables or disables the video stabilization feature.
+        /// If true, video stabilization is enabled, otherwise false.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
         /// If video stabilization is enabled, zero shutter lag is disabled.
         /// This feature is used to record a video.
         /// </remarks>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public bool VideoStabilization
         {
             get
@@ -890,7 +890,7 @@ namespace Tizen.Multimedia
         /// In some countries, this operation is not permitted.
         /// </remarks>
         /// <exception cref="InvalidOperationException">Disabling shutter sound is not permitted.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void DisableShutterSound(bool shutterSound)
         {
             CameraErrorFactory.ThrowIfError(Native.DisableShutterSound(_camera.GetHandle(), shutterSound),
@@ -899,11 +899,11 @@ namespace Tizen.Multimedia
 
         #region PTZ(Pan Tilt Zoom), Pan, Tilt
         /// <summary>
-        /// Sets the type of PTZ(Pan Tilt Zoom). Mechanical or Electronic.
+        /// Sets the type of the PTZ(Pan Tilt Zoom). Mechanical or electronic.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <value>A <see cref="CameraPtzType"/> that specifies the type of PTZ.</value>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <value>A <see cref="CameraPtzType"/> that specifies the type of the PTZ.</value>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraPtzType PtzType
         {
             set
@@ -919,10 +919,10 @@ namespace Tizen.Multimedia
         /// Sets the position to move horizontally.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="type">ptz move type. <seealso cref="CameraPtzMoveType"/></param>
-        /// <param name="panStep">pan step</param>
+        /// <param name="type">The PTZ move type. <seealso cref="CameraPtzMoveType"/>.</param>
+        /// <param name="panStep">The pan step.</param>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void SetPan(CameraPtzMoveType type, int panStep)
         {
             ValidationUtil.ValidateEnum(typeof(CameraPtzMoveType), type, nameof(type));
@@ -934,8 +934,8 @@ namespace Tizen.Multimedia
         /// Gets the current position of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <returns>Returns the camera's horizontal position</returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <returns>Returns the camera's horizontal position.</returns>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int GetPan()
         {
             CameraErrorFactory.ThrowIfError(Native.GetPan(_camera.GetHandle(), out int val),
@@ -948,10 +948,10 @@ namespace Tizen.Multimedia
         /// Sets the position to move vertically.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="type">ptz move type</param>
-        /// <param name="tiltStep">tilt step</param>
+        /// <param name="type">the PTZ move type.</param>
+        /// <param name="tiltStep">The tilt step.</param>
         /// <exception cref="ArgumentException">In case of invalid parameters.</exception>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void SetTilt(CameraPtzMoveType type, int tiltStep)
         {
             ValidationUtil.ValidateEnum(typeof(CameraPtzMoveType), type, nameof(type));
@@ -963,8 +963,8 @@ namespace Tizen.Multimedia
         /// Gets the current position of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <returns>Returns the current vertical position</returns>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <returns>Returns the current vertical position.</returns>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public int GetTilt()
         {
             CameraErrorFactory.ThrowIfError(Native.GetTilt(_camera.GetHandle(), out int val),
@@ -974,11 +974,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets lower limit and upper limit for pan position.
+        /// Gets the lower limit and the upper limit for the pan position.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the minimum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range PanRange
@@ -995,11 +995,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets lower limit and upper limit for tilt position.
+        /// Gets the lower limit and the upper limit for the tilt position.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If min value is greater than the max value, it means this feature is not supported.
+        /// If the minimum value is greater than the maximum value, it means this feature is not supported.
         /// </remarks>
         /// <exception cref="NotSupportedException">In case of this feature is not supported.</exception>
         public Range TiltRange
@@ -1019,10 +1019,10 @@ namespace Tizen.Multimedia
         #region EXIF tag
         /// <summary>
         /// The scene mode.
-        /// true if EXIF tags are enabled in JPEG file, otherwise false.
         /// </summary>
+        /// <value>true if EXIF tags are enabled in the JPEG file, otherwise false.</value>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public bool EnableTag
         {
             get
@@ -1044,7 +1044,7 @@ namespace Tizen.Multimedia
         /// The camera image description in the EXIF tag.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public string ImageDescriptionTag
         {
             get
@@ -1074,7 +1074,7 @@ namespace Tizen.Multimedia
         /// The software information in the EXIF tag.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public string SoftwareTag
         {
             get
@@ -1102,10 +1102,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The geotag(GPS data) in the EXIF tag.
+        /// The geo tag(GPS data) in the EXIF tag.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public Location GeoTag
         {
             get
@@ -1124,10 +1124,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Removes the geotag(GPS data) in the EXIF(Exchangeable image file format) tag.
+        /// Removes the geo tag(GPS data) in the EXIF(EXchangeable Image File format) tag.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public void RemoveGeoTag()
         {
             CameraErrorFactory.ThrowIfError(Native.RemoveGeotag(_camera.GetHandle()),
@@ -1138,7 +1138,7 @@ namespace Tizen.Multimedia
         /// The camera orientation in the tag.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The camera already has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The camera already has been disposed of.</exception>
         public CameraTagOrientation OrientationTag
         {
             get
index 96e2e0c..0839688 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
+    /// An extended EventArgs class which contains details about the previous and the current state
     /// of the camera when its state is changed.
     /// </summary>
     public class CameraStateChangedEventArgs : EventArgs
@@ -32,21 +32,23 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Previous state of the camera.
+        /// Gets the previous state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraState Previous { get; }
 
         /// <summary>
-        /// Current state of the camera.
+        /// Gets the current state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraState Current { get; }
 
         /// <summary>
-        /// true if the state changed by policy such as Resource Conflict or Security, otherwise false
-        /// in normal state change.
+        /// Gets the value indicating whether the state is changed by policy.
         /// </summary>
+        /// <value>
+        /// true if the state changed by policy such as resource conflict or security, otherwise false.
+        /// </value>
         /// <since_tizen> 3 </since_tizen>
         public bool ByPolicy { get; }
     }
index d88e596..f1620fb 100755 (executable)
@@ -20,7 +20,7 @@ using static Interop.Camera;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// The class containing Encoded image data.
+    /// The class containing the encoded image data.
     /// </summary>
     public class EncodedPlane : IPreviewPlane
     {
@@ -31,7 +31,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The buffer containing encoded image data.
+        /// The buffer containing the encoded image data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public byte[] Data { get; }
index 6c5feaa..821a0ad 100755 (executable)
@@ -21,7 +21,7 @@ namespace Tizen.Multimedia
 {
     /// <summary>
     /// An extended EventArgs class which contains details about all the faces detected.
-    /// If user need to remain faces data, user have to copy the data.
+    /// If the user needs to keep the faces data, the user has to copy the data.
     /// </summary>
     public class FaceDetectedEventArgs : EventArgs
     {
@@ -31,7 +31,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// List containing faces of type <see cref="Tizen.Multimedia.FaceDetectionData"/>.
+        /// The list containing faces of type <see cref="Tizen.Multimedia.FaceDetectionData"/>.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public IEnumerable<FaceDetectionData> Faces { get; }
index 53905c7..97b8712 100755 (executable)
@@ -38,7 +38,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The Id of each face.
+        /// The ID of each face.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public int Id { get; }
index ce5db62..61ba45b 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about the hdr capture progress.
+    /// An extended EventArgs class which contains details about the HDR capture progress.
     /// </summary>
     public class HdrCaptureProgressEventArgs : EventArgs
     {
@@ -29,7 +29,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Hdr Capture progress in percent.
+        /// The HDR capture progress in percent.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public int Percent { get; }
index 1733352..71c427a 100644 (file)
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Location class containing GPS data details.
+    /// The location class containing GPS data details.
     /// </summary>
     public class Location
     {
         /// <summary>
-        /// Public constructor.
+        /// The public constructor.
         /// </summary>
-        /// <param name="latitude">Latitude data</param>
-        /// <param name="longitude">Longitude data</param>
-        /// <param name="altitude">Altitude data</param>
+        /// <param name="latitude">The latitude data.</param>
+        /// <param name="longitude">The longitude data.</param>
+        /// <param name="altitude">The altitude data.</param>
         public Location(double latitude, double longitude, double altitude)
         {
             Latitude = latitude;
@@ -35,19 +35,19 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The Latitude data.
+        /// The latitude data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public double Latitude { get; }
 
         /// <summary>
-        /// The Longitude data.
+        /// The longitude data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public double Longitude { get; }
 
         /// <summary>
-        /// The Altitude data.
+        /// The altitude data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public double Altitude { get; }
index 40736c1..3ef9684 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about the Media packet preview frame.
+    /// An extended EventArgs class which contains details about the media packet preview frame.
     /// </summary>
     public class MediaPacketPreviewEventArgs : EventArgs
     {
@@ -29,7 +29,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Media Packet data.
+        /// The media packet data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public MediaPacket Packet { get; }
index fe5d623..28cce51 100755 (executable)
@@ -29,7 +29,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// PreviewData frame.
+        /// The PreviewData frame.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public PreviewFrame Preview { get; }
index e21542d..04962ef 100755 (executable)
@@ -22,7 +22,7 @@ using static Interop.Camera;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// The class containing preview image data.
+    /// The class containing the preview image data.
     /// </summary>
     public class PreviewFrame
     {
@@ -97,19 +97,19 @@ namespace Tizen.Multimedia
         public Size Resolution { get; }
 
         /// <summary>
-        /// The timestamp of preview frame.
+        /// The time stamp of the preview frame.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public uint TimeStamp { get; }
 
         /// <summary>
-        /// The type of preview plane. <see cref="Tizen.Multimedia.PlaneType"/>
+        /// The type of the preview plane. <see cref="Tizen.Multimedia.PlaneType"/>
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public PlaneType PlaneType { get; }
 
         /// <summary>
-        /// The buffer including preview frame.
+        /// The buffer including the preview frame.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public IPreviewPlane Plane { get; }
index 33e64f2..9671090 100755 (executable)
@@ -20,7 +20,7 @@ using static Interop.Camera;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// The class containing image data which has single plane.
+    /// The class containing the image data, which has a single plane.
     /// </summary>
     public class SinglePlane : IPreviewPlane
     {
index 7fb3b69..fabb9eb 100755 (executable)
@@ -64,7 +64,7 @@ namespace Tizen.Multimedia
         public Size Resolution { get; }
 
         /// <summary>
-        /// The buffer containing still image.
+        /// The buffer containing the still image.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public byte[] Data { get; }
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index d9f42fb..8d4fb31 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 4731ceb..bd01a3b 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 6fe514d..abd6e58 100644 (file)
@@ -62,5 +62,14 @@ internal static partial class Interop
 
         [DllImport(Libraries.MediaController, EntryPoint = "mc_server_unset_playback_state_command_received_cb")]
         internal static extern MediaControllerError UnsetPlaybackStateCmdRecvCb(IntPtr handle);
+
+        [DllImport(Libraries.MediaController, EntryPoint = "mc_db_connect")]
+        internal static extern MediaControllerError ConnectDb(out IntPtr dbHandle);
+
+        [DllImport(Libraries.MediaController, EntryPoint = "mc_db_disconnect")]
+        internal static extern MediaControllerError DisconnectDb(IntPtr dbHandle);
+
+        [DllImport(Libraries.MediaController, EntryPoint = "mc_db_check_server_table_exist")]
+        internal static extern MediaControllerError CheckServerExist(IntPtr dbHandle, string appId, out bool value);
     }
 }
index f4fcdf2..c4909bb 100644 (file)
@@ -27,6 +27,7 @@ namespace Tizen.Multimedia.Remoting
     public static class MediaControlServer
     {
         private static IntPtr _handle = IntPtr.Zero;
+        private static bool? _isRunning;
 
         /// <summary>
         /// Gets a value indicating whether the server is running.
@@ -36,53 +37,71 @@ namespace Tizen.Multimedia.Remoting
         /// <seealso cref="Stop"/>
         public static bool IsRunning
         {
-            get => _handle != IntPtr.Zero;
+            get
+            {
+                if (_isRunning.HasValue == false)
+                {
+                    _isRunning = GetRunningState();
+                }
+
+                return _isRunning.Value;
+            }
+        }
+
+        private static bool GetRunningState()
+        {
+            IntPtr handle = IntPtr.Zero;
+            try
+            {
+                Native.ConnectDb(out handle).ThrowIfError("Failed to retrieve the running state.");
+
+                Native.CheckServerExist(handle, Applications.Application.Current.ApplicationInfo.ApplicationId,
+                    out var value).ThrowIfError("Failed to retrieve the running state.");
+
+                return value;
+            }
+            finally
+            {
+                if (handle != IntPtr.Zero)
+                {
+                    Native.DisconnectDb(handle);
+                }
+            }
         }
 
-        private static void ThrowIfNotRunning()
+        private static void EnsureInitializedIfRunning()
         {
+            if (_handle != IntPtr.Zero)
+            {
+                return;
+            }
+
             if (IsRunning == false)
             {
                 throw new InvalidOperationException("The server is not running.");
             }
+
+            Initialize();
         }
 
         private static IntPtr Handle
         {
             get
             {
-                ThrowIfNotRunning();
+                EnsureInitializedIfRunning();
 
                 return _handle;
             }
         }
 
-        /// <summary>
-        /// Starts the media control server.
-        /// </summary>
-        /// <remarks>
-        /// When the server starts, <see cref="MediaControllerManager.ServerStarted"/> will be raised.
-        /// </remarks>
-        /// <privilege>http://tizen.org/privilege/mediacontroller.server</privilege>
-        /// <exception cref="InvalidOperationException">
-        ///     The server has already started.\n
-        ///     -or-\n
-        ///     An internal error occurs.
-        /// </exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege.</exception>
-        /// <seealso cref="MediaControllerManager.ServerStarted"/>
-        public static void Start()
+        private static void Initialize()
         {
-            if (IsRunning)
-            {
-                throw new InvalidOperationException("The server is already running.");
-            }
-
             Native.Create(out _handle).ThrowIfError("Failed to create media controller server.");
 
             try
             {
                 RegisterPlaybackCommandReceivedEvent();
+                _isRunning = true;
             }
             catch
             {
@@ -94,6 +113,21 @@ namespace Tizen.Multimedia.Remoting
         }
 
         /// <summary>
+        /// Starts the media control server.
+        /// </summary>
+        /// <remarks>
+        /// When the server starts, <see cref="MediaControllerManager.ServerStarted"/> will be raised.
+        /// </remarks>
+        /// <privilege>http://tizen.org/privilege/mediacontroller.server</privilege>
+        /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
+        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege.</exception>
+        /// <seealso cref="MediaControllerManager.ServerStarted"/>
+        public static void Start()
+        {
+            Initialize();
+        }
+
+        /// <summary>
         /// Stops the media control server.
         /// </summary>
         /// <remarks>
@@ -107,12 +141,13 @@ namespace Tizen.Multimedia.Remoting
         /// <seealso cref="MediaControllerManager.ServerStopped"/>
         public static void Stop()
         {
-            ThrowIfNotRunning();
+            EnsureInitializedIfRunning();
 
             Native.Destroy(_handle).ThrowIfError("Failed to stop the server.");
 
             _handle = IntPtr.Zero;
             _playbackCommandCallback = null;
+            _isRunning = false;
         }
 
         /// <summary>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Capabilities.cs b/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Capabilities.cs
new file mode 100644 (file)
index 0000000..133674e
--- /dev/null
@@ -0,0 +1,37 @@
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+    internal static partial class StreamRecorder
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool VideoResolutionCallback(int width, int height, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool FileFormatCallback(StreamRecorderFileFormat format, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool AudioEncoderCallback(StreamRecorderAudioCodec codec, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool VideoEncoderCallback(StreamRecorderVideoCodec codec, IntPtr userData);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_file_format")]
+        internal static extern StreamRecorderErrorCode FileFormats(StreamRecorderHandle handle,
+            FileFormatCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_audio_encoder")]
+        internal static extern StreamRecorderErrorCode AudioEncoders(StreamRecorderHandle handle,
+            AudioEncoderCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_encoder")]
+        internal static extern StreamRecorderErrorCode VideoEncoders(StreamRecorderHandle handle,
+            VideoEncoderCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_resolution")]
+        internal static extern StreamRecorderErrorCode VideoResolution(StreamRecorderHandle handle,
+            VideoResolutionCallback callback, IntPtr userData = default(IntPtr));
+    }
+}
diff --git a/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Events.cs b/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Events.cs
new file mode 100644 (file)
index 0000000..e7febae
--- /dev/null
@@ -0,0 +1,61 @@
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+    internal static partial class StreamRecorder
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void RecordingLimitReachedCallback(RecordingLimitType type, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void RecordingStatusCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void NotifiedCallback(int previous, int current,
+            StreamRecorderNotify notify, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void RecorderErrorCallback(StreamRecorderErrorCode error,
+            RecorderState current, IntPtr userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void BufferConsumedCallback(IntPtr buffer, IntPtr userData);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_notify_cb")]
+        internal static extern StreamRecorderErrorCode SetNotifiedCallback(StreamRecorderHandle handle,
+            NotifiedCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_notify_cb")]
+        internal static extern int UnsetNotifiedCallback(StreamRecorderHandle handle);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_status_cb")]
+        internal static extern StreamRecorderErrorCode SetStatusChangedCallback(StreamRecorderHandle handle,
+            RecordingStatusCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_status_cb")]
+        internal static extern int UnsetStatusChangedCallback(StreamRecorderHandle handle);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit_reached_cb")]
+        internal static extern StreamRecorderErrorCode SetLimitReachedCallback(StreamRecorderHandle handle,
+            RecordingLimitReachedCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_limit_reached_cb")]
+        internal static extern int UnsetLimitReachedCallback(StreamRecorderHandle handle);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_error_cb")]
+        internal static extern StreamRecorderErrorCode SetErrorCallback(StreamRecorderHandle handle,
+            RecorderErrorCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_error_cb")]
+        internal static extern int UnsetErrorCallback(StreamRecorderHandle handle);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_buffer_consume_completed_cb")]
+        internal static extern StreamRecorderErrorCode SetBufferConsumedCallback(StreamRecorderHandle handle,
+            BufferConsumedCallback callback, IntPtr userData = default(IntPtr));
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_buffer_consume_completed_cb")]
+        internal static extern int UnsetBufferConsumedCallback(StreamRecorderHandle handle);
+    }
+}
diff --git a/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Settings.cs b/src/Tizen.Multimedia.StreamRecorder/Interop/Interop.StreamRecorder.Settings.cs
new file mode 100644 (file)
index 0000000..a8fabbb
--- /dev/null
@@ -0,0 +1,88 @@
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+    internal static partial class StreamRecorder
+    {
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_filename")]
+        internal static extern StreamRecorderErrorCode SetFileName(StreamRecorderHandle handle, string path);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_filename")]
+        internal static extern int GetFileName(StreamRecorderHandle handle, out IntPtr path);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_file_format")]
+        internal static extern StreamRecorderErrorCode SetFileFormat(StreamRecorderHandle handle,
+            StreamRecorderFileFormat format);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_file_format")]
+        internal static extern int GetFileFormat(StreamRecorderHandle handle, out int format);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder")]
+        internal static extern StreamRecorderErrorCode SetAudioEncoder(StreamRecorderHandle handle,
+            StreamRecorderAudioCodec codec);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder")]
+        internal static extern int GetAudioEncoder(StreamRecorderHandle handle, out int codec);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder")]
+        internal static extern StreamRecorderErrorCode SetVideoEncoder(StreamRecorderHandle handle,
+            StreamRecorderVideoCodec codec);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder")]
+        internal static extern int GetVideoEncoder(StreamRecorderHandle handle, out int codec);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_resolution")]
+        internal static extern StreamRecorderErrorCode SetVideoResolution(StreamRecorderHandle handle,
+            int width, int height);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_resolution")]
+        internal static extern StreamRecorderErrorCode GetVideoResolution(StreamRecorderHandle handle,
+            out int width, out int height);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_framerate")]
+        internal static extern StreamRecorderErrorCode SetVideoFrameRate(StreamRecorderHandle handle, int framerate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_framerate")]
+        internal static extern int GetVideoFramerate(StreamRecorderHandle handle, out int framerate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_source_format")]
+        internal static extern StreamRecorderErrorCode SetVideoSourceFormat(StreamRecorderHandle handle,
+            StreamRecorderVideoFormat format);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_source_format")]
+        internal static extern int GetVideoSourceFormat(StreamRecorderHandle handle, out int format);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit")]
+        internal static extern StreamRecorderErrorCode SetRecordingLimit(StreamRecorderHandle handle,
+            RecordingLimitType type, int limit);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_recording_limit")]
+        internal static extern int GetRecordingLimit(StreamRecorderHandle handle, int type, out int format);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_samplerate")]
+        internal static extern StreamRecorderErrorCode SetAudioSampleRate(StreamRecorderHandle handle, int samplerate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_samplerate")]
+        internal static extern int GetAudioSampleRate(StreamRecorderHandle handle, out int samplerate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder_bitrate")]
+        internal static extern StreamRecorderErrorCode SetAudioEncoderBitrate(StreamRecorderHandle handle, int bitrate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder_bitrate")]
+        internal static extern int GetAudioEncoderBitrate(StreamRecorderHandle handle, out int bitrate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder_bitrate")]
+        internal static extern StreamRecorderErrorCode SetVideoEncoderBitRate(StreamRecorderHandle handle, int bitrate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder_bitrate")]
+        internal static extern int GetVideoEncoderBitrate(StreamRecorderHandle handle, out int bitrate);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_channel")]
+        internal static extern StreamRecorderErrorCode SetAudioChannel(StreamRecorderHandle handle, int channel);
+
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_channel")]
+        internal static extern int GetAudioChannel(StreamRecorderHandle handle, out int channel);
+    }
+}
index dd79eab..e7f061b 100644 (file)
@@ -6,181 +6,72 @@ internal static partial class Interop
 {
     internal static partial class StreamRecorder
     {
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void RecordingLimitReachedCallback(StreamRecordingLimitType type, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void RecordingStatusCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void NotifiedCallback(StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notfication, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void RecorderErrorCallback(StreamRecorderErrorCode error, StreamRecorderState current, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate void BufferConsumedCallback(IntPtr buffer, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate bool VideoResolutionCallback(int width, int height, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate bool FileFormatCallback(StreamRecorderFileFormat format, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate bool AudioEncoderCallback(StreamRecorderAudioCodec codec, IntPtr userData);
-
-        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
-        internal delegate bool VideoEncoderCallback(StreamRecorderVideoCodec codec, IntPtr userData);
-
-        /* begin of method */
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_create")]
-        internal static extern int Create(out IntPtr handle);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_destroy")]
-        internal static extern int Destroy(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Create(out StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_prepare")]
-        internal static extern int Prepare(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Prepare(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unprepare")]
-        internal static extern int Unprepare(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Unprepare(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_start")]
-        internal static extern int Start(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Start(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_pause")]
-        internal static extern int Pause(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Pause(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_commit")]
-        internal static extern int Commit(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Commit(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_cancel")]
-        internal static extern int Cancel(IntPtr handle);
+        internal static extern StreamRecorderErrorCode Cancel(StreamRecorderHandle handle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_push_stream_buffer")]
-        internal static extern int PushStreamBuffer(IntPtr handle, IntPtr/*  media_packet_h */ inbuf);
+        internal static extern StreamRecorderErrorCode PushStreamBuffer(StreamRecorderHandle handle,
+            IntPtr mediaPacketHandle);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_enable_source_buffer")]
-        internal static extern int EnableSourceBuffer(IntPtr handle, int type);
+        internal static extern StreamRecorderErrorCode EnableSourceBuffer(StreamRecorderHandle handle,
+            StreamRecorderSourceType type);
 
         [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_state")]
-        internal static extern int GetState(IntPtr handle, out int state);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_filename")]
-        internal static extern int SetFileName(IntPtr handle, string path);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_filename")]
-        internal static extern int GetFileName(IntPtr handle, out IntPtr path);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_file_format")]
-        internal static extern int SetFileFormat(IntPtr handle, int format);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_file_format")]
-        internal static extern int GetFileFormat(IntPtr handle, out int format);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder")]
-        internal static extern int SetAudioEncoder(IntPtr handle, int codec);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder")]
-        internal static extern int GetAudioEncoder(IntPtr handle, out int codec);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder")]
-        internal static extern int SetVideoEncoder(IntPtr handle, int codec);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder")]
-        internal static extern int GetVideoEncoder(IntPtr handle, out int codec);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_resolution")]
-        internal static extern int SetVideoResolution(IntPtr handle, int width, int height);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_resolution")]
-        internal static extern int GetVideoResolution(IntPtr handle, out int width, out int height);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_framerate")]
-        internal static extern int SetVideoFramerate(IntPtr handle, int framerate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_framerate")]
-        internal static extern int GetVideoFramerate(IntPtr handle, out int framerate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_source_format")]
-        internal static extern int SetVideoSourceFormat(IntPtr handle, int format);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_source_format")]
-        internal static extern int GetVideoSourceFormat(IntPtr handle, out int format);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit")]
-        internal static extern int SetRecordingLimit(IntPtr handle, int type, int limit);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_recording_limit")]
-        internal static extern int GetRecordingLimit(IntPtr handle, int type, out int format);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_samplerate")]
-        internal static extern int SetAudioSampleRate(IntPtr handle, int samplerate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_samplerate")]
-        internal static extern int GetAudioSampleRate(IntPtr handle, out int samplerate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder_bitrate")]
-        internal static extern int SetAudioEncoderBitrate(IntPtr handle, int bitrate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder_bitrate")]
-        internal static extern int GetAudioEncoderBitrate(IntPtr handle, out int bitrate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder_bitrate")]
-        internal static extern int SetVideoEncoderBitrate(IntPtr handle, int bitrate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder_bitrate")]
-        internal static extern int GetVideoEncoderBitrate(IntPtr handle, out int bitrate);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_channel")]
-        internal static extern int SetAudioChannel(IntPtr handle, int channel);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_channel")]
-        internal static extern int GetAudioChannel(IntPtr handle, out int channel);
-        /* End of method */
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_file_format")]
-        internal static extern int FileFormats(IntPtr handle, FileFormatCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_audio_encoder")]
-        internal static extern int AudioEncoders(IntPtr handle, AudioEncoderCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_encoder")]
-        internal static extern int VideoEncoders(IntPtr handle, VideoEncoderCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_resolution")]
-        internal static extern int VideoResolution(IntPtr handle, VideoResolutionCallback callback, IntPtr userData);
-        /* End of foreach method */
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_notify_cb")]
-        internal static extern int SetNotifiedCallback(IntPtr handle, NotifiedCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_notify_cb")]
-        internal static extern int UnsetNotifiedCallback(IntPtr handle);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_status_cb")]
-        internal static extern int SetStatusChangedCallback(IntPtr handle, RecordingStatusCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_status_cb")]
-        internal static extern int UnsetStatusChangedCallback(IntPtr handle);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit_reached_cb")]
-        internal static extern int SetLimitReachedCallback(IntPtr handle, RecordingLimitReachedCallback callback, IntPtr userData);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_limit_reached_cb")]
-        internal static extern int UnsetLimitReachedCallback(IntPtr handle);
-
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_error_cb")]
-        internal static extern int SetErrorCallback(IntPtr handle, RecorderErrorCallback callback, IntPtr userData);
+        internal static extern StreamRecorderErrorCode GetState(StreamRecorderHandle handle, out RecorderState state);
+    }
 
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_error_cb")]
-        internal static extern int UnsetErrorCallback(IntPtr handle);
+    internal class StreamRecorderHandle : SafeHandle
+    {
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_destroy")]
+        private static extern StreamRecorderErrorCode Destroy(IntPtr handle);
 
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_buffer_consume_completed_cb")]
-        internal static extern int SetBufferConsumedCallback(IntPtr handle, BufferConsumedCallback callback, IntPtr userDat);
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_cancel")]
+        private static extern StreamRecorderErrorCode Cancel(IntPtr handle);
 
-        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_buffer_consume_completed_cb")]
-        internal static extern int UnsetBufferConsumedCallback(IntPtr handle);
+        [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unprepare")]
+        private static extern StreamRecorderErrorCode Unprepare(IntPtr handle);
+
+        protected StreamRecorderHandle() : base(IntPtr.Zero, true)
+        {
+        }
+
+        public override bool IsInvalid => handle == IntPtr.Zero;
+
+        protected override bool ReleaseHandle()
+        {
+            try
+            {
+                Cancel(handle).Ignore(StreamRecorderErrorCode.InvalidState).ThrowIfError("Failed to cancel.");
+                Unprepare(handle).Ignore(StreamRecorderErrorCode.InvalidState).ThrowIfError("Failed to unprepare.");
+                Destroy(handle).ThrowIfError("Failed to destory.");
+
+                return true;
+            }
+            catch (Exception e)
+            {
+                Tizen.Log.Debug(GetType().FullName, $"Failed to release native RecorderHandle; {e.Message}");
+
+                return false;
+            }
+        }
     }
 }
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Capabilities.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Capabilities.cs
new file mode 100644 (file)
index 0000000..4ba2137
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+    public partial class StreamRecorder
+    {
+        internal void LoadCapabilities()
+        {
+            _videoCodecs = LoadVideoCodecs(this);
+            _audioCodecs = LoadAudioCodecs(this);
+            _fileFormats = LoadFileFormats(this);
+            _videoResolutions = LoadResolutions(this);
+        }
+
+        private static IEnumerable<RecorderVideoCodec> LoadVideoCodecs(StreamRecorder recorder)
+        {
+            var result = new List<RecorderVideoCodec>();
+            Native.VideoEncoderCallback callback = (codec, _) =>
+            {
+                result.Add(codec.ToRecorderEnum());
+                return true;
+            };
+
+            Native.VideoEncoders(recorder.Handle, callback).ThrowIfError("Failed to get the supported video codecs.");
+
+            return result.AsReadOnly();
+        }
+
+        private static IEnumerable<RecorderAudioCodec> LoadAudioCodecs(StreamRecorder recorder)
+        {
+            var result = new List<RecorderAudioCodec>();
+
+            Native.AudioEncoders(recorder.Handle, (codec, _) =>
+            {
+                result.Add(codec.ToRecorderEnum());
+                return true;
+            }).ThrowIfError("Failed to get the supported audio codecs.");
+
+            return result.AsReadOnly();
+        }
+
+        private static IEnumerable<RecorderFileFormat> LoadFileFormats(StreamRecorder recorder)
+        {
+            var result = new List<RecorderFileFormat>();
+
+            Native.FileFormats(recorder.Handle, (fileFormat, _) =>
+            {
+                result.Add(fileFormat.ToRecorderEnum());
+                return true;
+            }).ThrowIfError("Failed to get the supported file formats.");
+
+            return result.AsReadOnly();
+        }
+
+        private static IEnumerable<Size> LoadResolutions(StreamRecorder recorder)
+        {
+            List<Size> result = new List<Size>();
+
+            Native.VideoResolutionCallback callback = (width, height, _) =>
+            {
+                result.Add(new Size(width, height));
+                return true;
+            };
+
+            Native.VideoResolution(recorder.Handle, callback).
+                ThrowIfError("Failed to get the supported video resolutions.");
+
+            return result.AsReadOnly();
+        }
+
+        private IEnumerable<RecorderFileFormat> _fileFormats;
+
+        /// <summary>
+        /// Gets the file formats that the current device supports.
+        /// </summary>
+        /// <returns>An IEnumerable of <see cref="RecorderFileFormat"/> representing the supported file formats.</returns>
+        public IEnumerable<RecorderFileFormat> GetSupportedFileFormats() => _fileFormats;
+
+        private IEnumerable<RecorderAudioCodec> _audioCodecs;
+
+        /// <summary>
+        /// Gets the audio codecs that the current device supports.
+        /// </summary>
+        /// <returns>An IEnumerable of <see cref="RecorderAudioCodec"/> representing the supported audio codecs.</returns>
+        public IEnumerable<RecorderAudioCodec> GetSupportedAudioCodecs() => _audioCodecs;
+
+        private IEnumerable<RecorderVideoCodec> _videoCodecs;
+
+        /// <summary>
+        /// Gets the video codecs that the current device supports.
+        /// </summary>
+        /// <returns>An IEnumerable of <see cref="RecorderVideoCodec"/> representing the supported video codecs.</returns>
+        public IEnumerable<RecorderVideoCodec> GetSupportedVideoCodecs() => _videoCodecs;
+
+        private IEnumerable<Size> _videoResolutions;
+
+        /// <summary>
+        /// Gets the video resolutions that the current device supports.
+        /// </summary>
+        /// <returns>An IEnumerable of <see cref="Size"/> representing the supported resolutions.</returns>
+        public IEnumerable<Size> GetSupportedVideoResolutions() => _videoResolutions;
+
+        internal void ValidateFileFormat(RecorderFileFormat format)
+        {
+            if (_fileFormats.Contains(format) == false)
+            {
+                throw new NotSupportedException($"{format.ToString()} is not supported.");
+            }
+        }
+
+        internal void ValidateAudioCodec(RecorderAudioCodec codec)
+        {
+            if (_audioCodecs.Contains(codec) == false)
+            {
+                throw new NotSupportedException($"{codec.ToString()} is not supported.");
+            }
+        }
+
+        internal void ValidateVideoCodec(RecorderVideoCodec codec)
+        {
+            if (_videoCodecs.Contains(codec) == false)
+            {
+                throw new NotSupportedException($"{codec.ToString()} is not supported.");
+            }
+        }
+
+        internal void ValidateVideoResolution(Size resolution)
+        {
+            if (_videoResolutions.Contains(resolution) == false)
+            {
+                throw new NotSupportedException($"Resolution({resolution.ToString()}) is not supported.");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Events.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorder.Events.cs
new file mode 100644 (file)
index 0000000..647e3ab
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+    public partial class StreamRecorder
+    {
+        /// <summary>
+        /// Occurs when <see cref="StreamRecorder"/> state is changed.
+        /// </summary>
+        public event EventHandler<StreamRecorderStateChangedEventArgs> StateChanged;
+
+
+        /// <summary>
+        /// Occurs when a buffer had consumed completely.
+        /// </summary>
+        public event EventHandler<StreamRecorderBufferConsumedEventArgs> BufferConsumed;
+
+        /// <summary>
+        /// Occurs when recording status is changed.
+        /// </summary>
+        public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
+
+        /// <summary>
+        /// Occurs when recording limit is reached.
+        /// </summary>
+        public event EventHandler<RecordingLimitReachedEventArgs> RecordingLimitReached;
+
+        /// <summary>
+        /// Occurs when an error occurred during a recorder operation.
+        /// </summary>
+        public event EventHandler<StreamRecorderErrorOccurredEventArgs> ErrorOccurred;
+
+        private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
+        private Native.RecorderErrorCallback _recorderErrorCallback;
+        private Native.RecordingStatusCallback _recordingStatusCallback;
+        private Native.BufferConsumedCallback _bufferConsumedCallback;
+        private Native.NotifiedCallback _notifiedCallback;
+
+        private void RegisterStreamRecorderNotifiedEvent()
+        {
+            _notifiedCallback = (previous, current, notify, _) =>
+            {
+                if (previous == 0)
+                {
+                    return;
+                }
+
+                StateChanged?.Invoke(this, new StreamRecorderStateChangedEventArgs(
+                    (RecorderState)previous, (RecorderState)current));
+            };
+
+            Native.SetNotifiedCallback(_handle, _notifiedCallback).
+                ThrowIfError("Failed to initialize state changed event.");
+        }
+
+        private void RegisterBufferConsumedEvent()
+        {
+            _bufferConsumedCallback = (lockedPacketHandle, _) =>
+            {
+                MediaPacket packet = null;
+
+                // Lock must be disposed here, note that the packet won't be disposed.
+                using (MediaPacket.Lock packetLock =
+                    MediaPacket.Lock.FromHandle(lockedPacketHandle))
+                {
+                    Debug.Assert(packetLock != null);
+
+                    packet = packetLock.MediaPacket;
+                }
+
+                BufferConsumed?.Invoke(this, new StreamRecorderBufferConsumedEventArgs(packet));
+            };
+
+            Native.SetBufferConsumedCallback(_handle, _bufferConsumedCallback).
+                ThrowIfError("Failed to initialize buffer consumed event.");
+        }
+
+        private void RegisterRecordingStatusChangedEvent()
+        {
+            _recordingStatusCallback = (elapsedTime, fileSize, _) =>
+            {
+                RecordingStatusChanged?.Invoke(this, new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize));
+            };
+            Native.SetStatusChangedCallback(_handle, _recordingStatusCallback).
+                ThrowIfError("Failed to initialize status changed event.");
+        }
+
+        private void RegisterRecordingLimitReachedEvent()
+        {
+            _recordingLimitReachedCallback = (type, _) =>
+            {
+                RecordingLimitReached?.Invoke(this, new RecordingLimitReachedEventArgs(type));
+            };
+
+            Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback).
+                ThrowIfError("Failed to initialize limit reached event.");
+        }
+
+        private void RegisterRecordingErrorOccurredEvent()
+        {
+            _recorderErrorCallback = (error, currentState, _) =>
+            {
+                ErrorOccurred?.Invoke(this, new StreamRecorderErrorOccurredEventArgs(
+                    error == StreamRecorderErrorCode.OutOfStorage ?
+                    StreamRecorderError.OutOfStorage : StreamRecorderError.InternalError, currentState));
+            };
+            Native.SetErrorCallback(_handle, _recorderErrorCallback).
+                ThrowIfError("Failed to set error callback");
+        }
+    }
+}
index 91cf1ee..99fd6d8 100644 (file)
  */
 
 using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using Tizen.Internals.Errors;
+using System.Diagnostics;
+using System.Linq;
+using NativeHandle = Interop.StreamRecorderHandle;
 using Native = Interop.StreamRecorder;
 
 namespace Tizen.Multimedia
 {
-    static internal class StreamRecorderLog
-    {
-        internal const string Tag = "Tizen.Multimedia.StreamRecorder";
-    }
-
     /// <summary>
-    /// Provides methods to control stream recorder.
+    /// Provides the ability to record user buffer from application.
     /// </summary>
-    /// <remarks>
-    /// StreamRecorder class provides functions to record raw image frame
-    /// also provides recording start, stop and save the content etc.
-    /// </remarks>
-    public class StreamRecorder : IDisposable
+    /// <seealso cref="Recorder"/>
+    public partial class StreamRecorder : IDisposable
     {
-        private IntPtr _handle;
+        private NativeHandle _handle;
         private bool _disposed = false;
-        /// <summary>
-        /// Occurred when recording is progressing for recording status.
-        /// </summary>
-        private EventHandler<RecordingStatusChangedEventArgs> _recordingStatusChanged;
-        private Native.RecordingStatusCallback _recordingStatusCallback;
-        /// <summary>
-        /// Occurred when recording time or size reach limit.
-        /// </summary>
-        private EventHandler<StreamRecordingLimitReachedEventArgs> _recordingLimitReached;
-        private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
-        /// <summary>
-        /// Occurred when streamrecorder complete to use pushed buffer.
-        /// </summary>
-        private EventHandler<StreamRecordingBufferConsumedEventArgs> _bufferConsumed;
-        private Native.BufferConsumedCallback _bufferConsumedCallback;
-        /// <summary>
-        /// Occurred when streamrecorder state is changed.
-        /// </summary>
-        private EventHandler<StreamRecorderNotifiedEventArgs> _recorderNotified;
-        private Native.NotifiedCallback _notifiedCallback;
-        /// <summary>
-        /// Occurred when error is occured.
-        /// </summary>
-        private EventHandler<StreamRecordingErrorOccurredEventArgs> _recordingErrorOccurred;
-        private Native.RecorderErrorCallback _recorderErrorCallback;
 
-        private List<StreamRecorderFileFormat> _formats;
-        private List<StreamRecorderAudioCodec> _audioCodec;
-        private List<StreamRecorderVideoCodec> _videoCodec;
-        private List<StreamRecorderVideoResolution> _resolutions;
-        StreamRecorderVideoResolution _videoResolution = null;
+        private bool _audioEnabled;
+        private bool _videoEnabled;
+        private StreamRecorderVideoFormat _sourceFormat;
 
         /// <summary>
-        /// Stream recorder constructor.
+        /// Initialize a new instance of the <see cref="StreamRecorder"/> class.
         /// </summary>
+        /// <exception cref="NotSupportedException">The feature is not supported.</exception>
         public StreamRecorder()
         {
-            int ret = Native.Create(out _handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to create stream recorder");
-            }
-            _formats = new List<StreamRecorderFileFormat>();
-            _audioCodec = new List<StreamRecorderAudioCodec>();
-            _videoCodec = new List<StreamRecorderVideoCodec>();
-            _resolutions = new List<StreamRecorderVideoResolution>();
-            _videoResolution = new StreamRecorderVideoResolution(_handle);
-        }
-
-        /// <summary>
-        /// Stream recorder destructor.
-        /// </summary>
-        ~StreamRecorder()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// Event that occurs when streamrecorder state is changed.
-        /// </summary>
-        public event EventHandler<StreamRecorderNotifiedEventArgs> RecorderNotified
-        {
-            add
-            {
-                if (_recorderNotified == null)
-                {
-                    RegisterStreamRecorderNotifiedEvent();
-                }
-                _recorderNotified += value;
-            }
-            remove
-            {
-                _recorderNotified -= value;
-                if (_recorderNotified == null)
-                {
-                    UnregisterStreamRecorderNotifiedEvent();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Event that occurs when buffer had comsumed completely.
-        /// </summary>
-        public event EventHandler<StreamRecordingBufferConsumedEventArgs> BufferConsumed
-        {
-            add
+            try
             {
-                if (_bufferConsumed == null)
-                {
-                    RegisterBufferComsumedEvent();
-                }
-                _bufferConsumed += value;
+                Native.Create(out _handle).ThrowIfError("Failed to create stream recorder.");
             }
-            remove
+            catch (TypeLoadException)
             {
-                _bufferConsumed -= value;
-                if (_bufferConsumed == null)
-                {
-                    UnregisterBufferComsumedEvent();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Event that occurs when recording status changed.
-        /// </summary>
-        public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged
-        {
-            add
-            {
-                if (_recordingStatusChanged == null)
-                {
-                    RegisterRecordingStatusChangedEvent();
-                }
-                _recordingStatusChanged += value;
-            }
-            remove
-            {
-                _recordingStatusChanged -= value;
-                if (_recordingStatusChanged == null)
-                {
-                    UnregisterRecordingStatusChangedEvent();
-                }
+                throw new NotSupportedException("StreamRecorder is not supported.");
             }
-        }
 
-        /// <summary>
-        /// Event that occurs when recording limit is reached.
-        /// </summary>
-        public event EventHandler<StreamRecordingLimitReachedEventArgs> RecordingLimitReached
-        {
-            add
-            {
-                if (_recordingLimitReached == null)
-                {
-                    RegisterRecordingLimitReachedEvent();
-                }
-                _recordingLimitReached += value;
-            }
-            remove
-            {
-                _recordingLimitReached -= value;
-                if (_recordingLimitReached == null)
-                {
-                    UnregisterRecordingLimitReachedEvent();
-                }
-            }
-        }
+            LoadCapabilities();
 
-        /// <summary>
-        /// Event that occurs when an error occured during recorder operation.
-        /// </summary>
-        public event EventHandler<StreamRecordingErrorOccurredEventArgs> RecordingErrorOccurred
-        {
-            add
-            {
-                if (_recordingErrorOccurred == null)
-                {
-                    RegisterRecordingErrorOccurredEvent();
-                }
-                _recordingErrorOccurred += value;
-            }
-            remove
-            {
-                _recordingErrorOccurred -= value;
-                if (_recordingErrorOccurred == null)
-                {
-                    UnregisterRecordingErrorOccurredEvent();
-                }
-            }
+            RegisterStreamRecorderNotifiedEvent();
+            RegisterBufferConsumedEvent();
+            RegisterRecordingStatusChangedEvent();
+            RegisterRecordingErrorOccurredEvent();
+            RegisterRecordingLimitReachedEvent();
         }
 
-        /// <summary>
-        /// The file path to record.
-        /// </summary>
-        /// <remarks>
-        /// If the same file already exists in the file system, then old file
-        /// will be overwritten.
-        /// </remarks>
-        public string FilePath
+        internal NativeHandle Handle
         {
             get
             {
-                IntPtr val;
-                int ret = Native.GetFileName(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
+                if (_disposed)
                 {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get filepath, " + (StreamRecorderError)ret);
+                    throw new ObjectDisposedException(nameof(StreamRecorder));
                 }
-                string result = Marshal.PtrToStringAnsi(val);
-                LibcSupport.Free(val);
-                return result;
-            }
-            set
-            {
-                int ret = Native.SetFileName(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set filepath, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set filepath");
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get the current state of the stream recorder.
-        /// </summary>
-        /// <value> The current state of stream recorder.
-        public StreamRecorderState State
-        {
-            get
-            {
-                int val = 0;
 
-                int ret = Native.GetState(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get stream recorder state, " + (StreamRecorderError)ret);
-                }
-                return (StreamRecorderState)val;
+                return _handle;
             }
         }
 
         /// <summary>
-        /// Get/Set the file format for recording media stream.
+        /// Gets the current state of the stream recorder.
         /// </summary>
-        /// <remarks>
-        /// Must set <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>.
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The format does not valid.</exception>
-        /// <seealso cref="SupportedFileFormats"/>
-        public StreamRecorderFileFormat FileFormat
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+        public RecorderState State
         {
             get
             {
-                int val = 0;
-
-                int ret = Native.GetFileFormat(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get file format, " + (StreamRecorderError)ret);
-                }
-                return (StreamRecorderFileFormat)val;
-            }
-            set
-            {
-                int ret = Native.SetFileFormat(_handle, (int)value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set file format, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret);
-                }
-            }
-        }
+                Native.GetState(Handle, out var val).ThrowIfError("Failed to get the stream recorder state.");
 
-        /// <summary>
-        /// The audio codec for encoding an audio stream.
-        /// </summary>
-        /// <remarks>
-        /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// </remarks>
-        /// <exception cref="ArgumentException">The codec does not valid.</exception>
-        /// <seealso cref="SupportedAudioEncodings"/>
-        public StreamRecorderAudioCodec AudioCodec
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetAudioEncoder(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get audio codec, " + (StreamRecorderError)ret);
-                }
-                return (StreamRecorderAudioCodec)val;
-            }
-            set
-            {
-                int ret = Native.SetAudioEncoder(_handle, (int)value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set audio codec, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret);
-                }
-            }
-        }
-
-        /// <summary>
-        /// The video codec for encoding video stream.
-        /// </summary>
-        /// <remarks>
-        /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// </remarks>
-        /// <exception cref="ArgumentException">The codec does not valid.</exception>
-        /// <seealso cref="SupportedVideoEncodings"/>
-        public StreamRecorderVideoCodec VideoCodec
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetVideoEncoder(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get video codec, " + (StreamRecorderError)ret);
-                }
-                return (StreamRecorderVideoCodec)val;
-            }
-            set
-            {
-                int ret = Native.SetVideoEncoder(_handle, (int)value);
-
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set video codec, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret);
-                }
-            }
-        }
-
-        /// <summary>
-        /// The maximum size of a recording file in KB(kilobytes). If 0, means
-        /// unlimited recording size.
-        /// </summary>
-        /// <remarks>
-        /// After reaching the limitation, the data which is being recorded will
-        /// be discarded and not written to the file.
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to below 0.</exception>
-        /// <seealso cref="StreamRecordingLimitReachedEventArgs"/>
-        public int SizeLimit
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetRecordingLimit(_handle, 1, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get size limit, " + (StreamRecorderError)ret);
-                }
                 return val;
             }
-            set
-            {
-                int ret = Native.SetRecordingLimit(_handle, 1, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set sizelimit, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set size limit");
-                }
-            }
         }
 
-        /// <summary>
-        /// The time limit of a recording file in Seconds. If 0, means unlimited recording
-        /// time.
-        /// </summary>
-        /// <remarks>
-        /// After reaching the limitation, the data which is being recorded will
-        /// be discarded and not written to the file.
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to below 0.</exception>
-        /// <seealso cref="StreamRecordingLimitReachedEventArgs"/>
-        public int TimeLimit
+        private void ValidateState(params RecorderState[] required)
         {
-            get
-            {
-                int val = 0;
+            Debug.Assert(required.Length > 0);
 
-                int ret = Native.GetRecordingLimit(_handle, 0, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get time limit, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
+            var curState = State;
+            if (!required.Contains(curState))
             {
-                int ret = Native.SetRecordingLimit(_handle, 0, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set timelimit, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set time limit");
-                }
+                throw new InvalidOperationException($"The stream recorder is not in a valid state. " +
+                    $"Current State : { curState }, Valid State : { string.Join(", ", required) }.");
             }
         }
 
+        #region Operation methods
         /// <summary>
-        /// The sampling rate of an audio stream in hertz.
+        /// Prepares the stream recorder with the specified options.
         /// </summary>
-        /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to below 0.</exception>
-        public int AudioSampleRate
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetAudioSampleRate(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get audio samplerate, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
-            {
-                int ret = Native.SetAudioSampleRate(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set audio samplerate, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio samplerate");
-                }
-            }
-        }
-
-        /// <summary>
-        /// The bitrate of an audio encoder in bits per second.
-        /// </summary>
-        /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to below 0.</exception>
-        public int AudioBitRate
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetAudioEncoderBitrate(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get audio bitrate, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
-            {
-                int ret = Native.SetAudioEncoderBitrate(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set audio bitrate, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio bitrate");
-                }
-            }
-        }
-
-        /// <summary>
-        /// The bitrate of an video encoder in bits per second.
-        /// </summary>
-        /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to below 0.</exception>
-        public int VideoBitRate
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetVideoEncoderBitrate(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get video bitrate, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
-            {
-                int ret = Native.SetVideoEncoderBitrate(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set video bitrate, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set video bitrate");
-                }
-            }
-        }
-
-        /// <summary>
-        /// The video frame rate for recording media stream.
-        /// </summary>
-        /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// </remarks>
-        /// <exception cref="NotSupportedException">The value set to below 0.</exception>
-        public int VideoFrameRate
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetVideoFramerate(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get video framerate, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
-            {
-                int ret = Native.SetVideoFramerate(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set video framerate, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Get or Set the video source format for recording media stream.
-        /// </summary>
-        /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
-        /// <seealso cref="StreamRecorderVideoSourceFormat"/>
-        public StreamRecorderVideoSourceFormat VideoSourceFormat
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetVideoSourceFormat(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get video framerate, " + (StreamRecorderError)ret);
-                }
-                return (StreamRecorderVideoSourceFormat)val;
-            }
-            set
-            {
-                int ret = Native.SetVideoSourceFormat(_handle, (int)value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set video framerate, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret);
-                }
-            }
-        }
-
-        /// <summary>
-        /// The number of audio channel.
-        /// </summary>
-        /// <remarks>
-        /// The attribute is applied only in Created state.
-        /// For mono recording, set channel to 1.
-        /// For stereo recording, set channel to 2.
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
-        public int AudioChannel
-        {
-            get
-            {
-                int val = 0;
-
-                int ret = Native.GetAudioChannel(_handle, out val);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to get audio channel, " + (StreamRecorderError)ret);
-                }
-                return val;
-            }
-            set
-            {
-                int ret = Native.SetAudioChannel(_handle, value);
-                if ((StreamRecorderError)ret != StreamRecorderError.None)
-                {
-                    Log.Error(StreamRecorderLog.Tag, "Failed to set audio channel, " + (StreamRecorderError)ret);
-                    StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio channel");
-                }
-            }
-        }
-
-        /// <summary>
-        /// Video resolution of the video recording.
-        /// </summary>
-        /// <remarks>
-        /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
-        /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
-        /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
-        /// </remarks>
-        /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
-        /// <seealso cref="SupportedVideoResolutions"/>
-        public StreamRecorderVideoResolution Resolution
+        /// <remarks>The recorder must be <see cref="RecorderState.Idle"/>.</remarks>
+        /// <param name="options">The options for recording.</param>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="ArgumentException">Both <see cref="StreamRecorderOptions.Audio"/> and
+        ///     <see cref="StreamRecorderOptions.Video"/> are null.
+        /// </exception>
+        /// <exception cref="NotSupportedException"><paramref name="options"/> contains a value which is not supported.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+        /// <seealso cref="Unprepare"/>
+        /// <seealso cref="Start"/>
+        /// <seealso cref="StreamRecorderOptions"/>
+        /// <seealso cref="StreamRecorderAudioOptions"/>
+        /// <seealso cref="StreamRecorderVideoOptions"/>
+        public void Prepare(StreamRecorderOptions options)
         {
-            get
+            if (options == null)
             {
-                return _videoResolution;
+                throw new ArgumentNullException(nameof(options));
             }
-        }
 
-        /// <summary>
-        /// Retrieves all the file formats supported by the stream recorder.
-        /// </summary>
-        /// <returns>
-        /// It returns a list containing all the supported file
-        /// formats by Stream recorder.
-        /// </returns>
-        /// <seealso cref="StreamRecorderFileFormat"/>
-        public IEnumerable<StreamRecorderFileFormat> SupportedFileFormats
-        {
-            get
-            {
-                if (_formats.Count == 0)
-                {
-                    Native.FileFormatCallback callback = (StreamRecorderFileFormat format, IntPtr userData) =>
-                    {
-                        _formats.Add(format);
-                        return true;
-                    };
-                    int ret = Native.FileFormats(_handle, callback, IntPtr.Zero);
-                    if (ret != (int)StreamRecorderError.None)
-                    {
-                        StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported fileformats");
-                    }
-                }
-                return _formats;
-            }
-        }
+            ValidateState(RecorderState.Idle);
 
-        /// <summary>
-        /// Retrieves all the audio encoders supported by the recorder.
-        /// </summary>
-        /// <returns>
-        /// It returns a list containing all the supported audio encoders
-        /// by recorder.
-        /// </returns>
-        /// <seealso cref="StreamRecorderAudioCodec"/>
-        public IEnumerable<StreamRecorderAudioCodec> SupportedAudioEncodings
-        {
-            get
-            {
-                if (_audioCodec.Count == 0)
-                {
-                    Native.AudioEncoderCallback callback = (StreamRecorderAudioCodec codec, IntPtr userData) =>
-                    {
-                        _audioCodec.Add(codec);
-                        return true;
-                    };
-                    int ret = Native.AudioEncoders(_handle, callback, IntPtr.Zero);
-                    if (ret != (int)StreamRecorderError.None)
-                    {
-                        StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported audio encoders");
-                    }
-                }
-                return _audioCodec;
-            }
-        }
+            options.Apply(this);
 
-        /// <summary>
-        /// Retrieves all the video encoders supported by the recorder.
-        /// </summary>
-        /// <returns>
-        /// It returns a list containing all the supported video encoders
-        /// by recorder.
-        /// </returns>
-        /// <seealso cref="StreamRecorderVideoCodec"/>
-        public IEnumerable<StreamRecorderVideoCodec> SupportedVideoEncodings
-        {
-            get
-            {
-                if (_videoCodec.Count == 0)
-                {
-                    Native.VideoEncoderCallback callback = (StreamRecorderVideoCodec codec, IntPtr userData) =>
-                    {
-                        _videoCodec.Add(codec);
-                        return true;
-                    };
-                    int ret = Native.VideoEncoders(_handle, callback, IntPtr.Zero);
-                    if (ret != (int)StreamRecorderError.None)
-                    {
-                        StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported video encoders");
-                    }
-                }
-                return _videoCodec;
-            }
-        }
+            Native.Prepare(Handle).ThrowIfError("Failed to prepare stream recorder.");
 
-        /// <summary>
-        /// Retrieves all the video resolutions supported by the recorder.
-        /// </summary>
-        /// <returns>
-        /// It returns videoresolution list containing the width and height of
-        /// different resolutions supported by recorder.
-        /// </returns>
-        /// <seealso cref="StreamRecorderVideoResolution"/>
-        public IEnumerable<StreamRecorderVideoResolution> SupportedVideoResolutions
-        {
-            get
-            {
-                if (_resolutions.Count == 0)
-                {
-                    Native.VideoResolutionCallback callback = (int width, int height, IntPtr userData) =>
-                    {
-                        StreamRecorderVideoResolution temp = new StreamRecorderVideoResolution(width, height);
-                        _resolutions.Add(temp);
-                        return true;
-                    };
-                    int ret = Native.VideoResolution(_handle, callback, IntPtr.Zero);
-                    if (ret != (int)StreamRecorderError.None)
-                    {
-                        StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported video resolutions");
-                    }
-                }
-                return _resolutions;
-            }
-        }
+            _audioEnabled = options.Audio != null;
+            _videoEnabled = options.Video != null;
 
-        /// <summary>
-        /// Prepare the stream recorder.
-        /// </summary>
-        /// <remarks>
-        /// Before calling the function, it is required to set <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>,
-        /// <see cref="StreamRecorderAudioCodec"/>, <see cref="StreamRecorderVideoCodec"/> and <see cref="StreamRecorderFileFormat"/> properties of recorder.
-        /// </remarks>
-        /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
-        /// <seealso cref="Unprepare"/>
-        public void Prepare()
-        {
-            int ret = Native.Prepare(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            if (options.Video != null)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to prepare stream recorder");
+                _sourceFormat = options.Video.SourceFormat;
             }
         }
 
         /// <summary>
-        /// Resets the stream recorder.
+        /// Unprepares the stream recorder.
         /// </summary>
         /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Prepared"/> state by <see cref="Prepare"/>, <see cref="Cancel"/> and <see cref="Commit"/>.
-        /// The StreamRecorder state will be <see cref="StreamRecorderState.Created"/>.
+        /// The recorder state must be <see cref="RecorderState.Ready"/> state by
+        /// <see cref="Prepare(StreamRecorderOptions)"/>, <see cref="Cancel"/> and <see cref="Commit"/>.\n
+        /// The recorder state will be <see cref="RecorderState.Idle"/>.\n
+        /// \n
+        /// It has no effect if the recorder is already in the <see cref="RecorderState.Idle"/> state.
         /// </remarks>
-        /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
         /// <seealso cref="Prepare"/>
         public void Unprepare()
         {
-            int ret = Native.Unprepare(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            if (State == RecorderState.Idle)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to reset the stream recorder");
+                return;
             }
+
+            ValidateState(RecorderState.Ready);
+
+            Native.Unprepare(Handle).ThrowIfError("Failed to reset the stream recorder.");
         }
 
         /// <summary>
-        /// Starts the recording.
+        /// Starts recording.
         /// </summary>
         /// <remarks>
-        /// If file path has been set to an existing file, this file is removed automatically and updated by new one.
-        ///    The filename should be set before this function is invoked.
-        ///    The recorder state must be <see cref="StreamRecorderState.Prepared"/> state by <see cref="Prepare"/> or
-        ///    <see cref="StreamRecorderState.Paused"/> state by <see cref="Pause"/>.
-        ///    The filename shuild be set by <see cref="FilePath"/>
+        ///    The recorder state must be <see cref="RecorderState.Ready"/> state by
+        ///    <see cref="Prepare(StreamRecorderOptions)"/> or
+        ///    <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.\n
+        /// \n
+        /// It has no effect if the recorder is already in the <see cref="RecorderState.Recording"/> state.
         /// </remarks>
-        /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
-        /// <exception cref="UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="UnauthorizedAccessException">The access of the resources can not be granted.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
         /// <seealso cref="Pause"/>
         /// <seealso cref="Commit"/>
         /// <seealso cref="Cancel"/>
-        /// <seealso cref="FilePath"/>
-        /// <seealso cref="FileFormat"/>
         public void Start()
         {
-            int ret = Native.Start(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            if (State == RecorderState.Recording)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to start the stream recorder");
+                return;
             }
+
+            ValidateState(RecorderState.Ready, RecorderState.Paused);
+
+            Native.Start(Handle).ThrowIfError("Failed to start the stream recorder.");
         }
 
         /// <summary>
-        /// Pause the recording.
+        /// Pauses recording.
         /// </summary>
         /// <remarks>
-        /// Recording can be resumed with <see cref="Start"/>.
+        /// Recording can be resumed with <see cref="Start"/>.\n
+        /// \n
+        ///    The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> \n
+        /// \n
+        /// It has no effect if the recorder is already in the <see cref="RecorderState.Paused"/> state.
         /// </remarks>
-        /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
         /// <seealso cref="Start"/>
         /// <seealso cref="Commit"/>
         /// <seealso cref="Cancel"/>
         public void Pause()
         {
-            int ret = Native.Pause(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            if (State == RecorderState.Paused)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to pause the stream recorder");
+                return;
             }
+
+            ValidateState(RecorderState.Recording);
+
+            Native.Pause(Handle).ThrowIfError("Failed to pause the stream recorder.");
         }
 
         /// <summary>
         /// Stops recording and saves the result.
         /// </summary>
         /// <remarks>
-        /// The recorder state must be <see cref="StreamRecorderState.Recording"/> state by <see cref="Start"/> or
-        ///  <see cref="StreamRecorderState.Paused"/> state by <see cref="Pause"/>
-        /// When you want to record audio or video file, you need to add privilege according to rules below additionally.
+        /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> or
+        /// <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.\n
+        /// \n
+        /// The recorder state will be <see cref="RecorderState.Ready"/> after commit.\n
         /// <para>
-        /// http://tizen.org/privilege/mediastorage is needed if input or output path are relevant to media storage.
-        /// http://tizen.org/privilege/externalstorage is needed if input or output path are relevant to external storage.
+        /// http://tizen.org/privilege/mediastorage is needed if the save path are relevant to media storage.
+        /// http://tizen.org/privilege/externalstorage is needed if the save path are relevant to external storage.
         /// </para>
         /// </remarks>
-        /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
-        /// <exception cref="UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
+        /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="UnauthorizedAccessException">The access to the resources can not be granted.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
         /// <seealso cref="Start"/>
         /// <seealso cref="Pause"/>
         public void Commit()
         {
-            int ret = Native.Commit(_handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to save the recorded content");
-            }
+            ValidateState(RecorderState.Paused, RecorderState.Recording);
+
+            Native.Commit(Handle).ThrowIfError("Failed to commit.");
         }
 
         /// <summary>
-        /// Cancels the recording.
-        /// The recording data is discarded and not written in the recording file.
+        /// Cancels recording.
+        /// The recording data is discarded and not written.
         /// </summary>
+        /// <remarks>
+        /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> or
+        /// <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
         /// <seealso cref="Start"/>
         /// <seealso cref="Pause"/>
         public void Cancel()
         {
-            int ret = Native.Cancel(_handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to cancel the recording");
-            }
-        }
-
-        /// <summary>
-        /// Push stream buffer as recording raw data.
-        /// </summary>
-        public void PushBuffer(MediaPacket packet)
-        {
-            IntPtr _packet_h = packet.GetHandle();
+            ValidateState(RecorderState.Paused, RecorderState.Recording);
 
-            Log.Info("Tizen.Multimedia.StreamRecorder", "PUSH stream buffer");
-            int ret = Native.PushStreamBuffer(_handle, _packet_h);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to push buffer");
-            }
-            Log.Info("Tizen.Multimedia.StreamRecorder", "PUSH stream buffer END");
+            Native.Cancel(Handle).ThrowIfError("Failed to cancel recording.");
         }
 
-        /// <summary>
-        /// Set the source type of pushed data.
-        /// </summary>
-        public void EnableSourceBuffer(StreamRecorderSourceType type)
+        private static bool AreVideoTypesMatched(StreamRecorderVideoFormat videoFormat, MediaFormatVideoMimeType mimeType)
         {
-            int ret = Native.EnableSourceBuffer(_handle, (int)type);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Failed to set EnableSourceBuffer");
-            }
+            return (videoFormat == StreamRecorderVideoFormat.Nv12 && mimeType == MediaFormatVideoMimeType.NV12) ||
+                (videoFormat == StreamRecorderVideoFormat.Nv21 && mimeType == MediaFormatVideoMimeType.NV21) ||
+                (videoFormat == StreamRecorderVideoFormat.I420 && mimeType == MediaFormatVideoMimeType.I420);
         }
 
         /// <summary>
-        /// Release any unmanaged resources used by this object.
+        /// Pushes a packet as recording raw data.
         /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        protected virtual void Dispose(bool disposing)
+        /// <param name="packet">An audio or video packet to record.</param>
+        /// <remarks>
+        /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/>.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">
+        ///     The recorder is not in the valid state.\n
+        ///     -or-\n
+        ///     <paramref name="packet"/> is an audio packet but audio recording is not enabled(See <see cref="StreamRecorderOptions.Audio"/>).\n
+        ///     -or-\n
+        ///     <paramref name="packet"/> is a video packet but video recording is not enabled(See <see cref="StreamRecorderOptions.Video"/>).\n
+        ///     -or-\n
+        ///     <paramref name="packet"/> is a video packet but the <see cref="VideoMediaFormat.MimeType"/> does not match the video source format.\n
+        ///     -or-\n
+        ///     An internal error occurs.
+        /// </exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+        /// <see cref="Prepare(StreamRecorderOptions)"/>
+        /// <seealso cref="StreamRecorderOptions.Audio"/>
+        /// <seealso cref="StreamRecorderOptions.Video"/>
+        /// <seealso cref="StreamRecorderVideoOptions.SourceFormat"/>
+        public void PushBuffer(MediaPacket packet)
         {
-            if (!_disposed)
+            if (packet == null)
             {
-                if (disposing)
-                {
-                    // to be used if there are any other disposable objects
-                }
-                if (_handle != IntPtr.Zero)
-                {
-                    Native.Destroy(_handle);
-                    _handle = IntPtr.Zero;
-                }
-                _disposed = true;
+                throw new ArgumentNullException(nameof(packet));
             }
-        }
 
-        private void RegisterStreamRecorderNotifiedEvent()
-        {
-            _notifiedCallback = (StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notify, IntPtr userData) =>
-            {
-                StreamRecorderNotifiedEventArgs eventArgs = new StreamRecorderNotifiedEventArgs(previous, current, notify);
-                _recorderNotified?.Invoke(this, eventArgs);
-            };
-            int ret = Native.SetNotifiedCallback(_handle, _notifiedCallback, IntPtr.Zero);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Setting notify callback failed");
-            }
-        }
+            ValidateState(RecorderState.Recording);
 
-        private void UnregisterStreamRecorderNotifiedEvent()
-        {
-            int ret = Native.UnsetNotifiedCallback(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            switch (packet.Format.Type)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Unsetting notify callback failed");
-            }
-        }
+                case MediaFormatType.Audio:
+                    if (_audioEnabled == false)
+                    {
+                        throw new InvalidOperationException("Audio option is not set.");
+                    }
+                    break;
 
-        private void RegisterBufferComsumedEvent()
-        {
-            _bufferConsumedCallback = (IntPtr buffer, IntPtr userData) =>
-            {
-                StreamRecordingBufferConsumedEventArgs eventArgs = new StreamRecordingBufferConsumedEventArgs(buffer);
-                _bufferConsumed?.Invoke(this, eventArgs);
-            };
-            int ret = Native.SetBufferConsumedCallback(_handle, _bufferConsumedCallback, IntPtr.Zero);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Setting buffer consumed callback failed");
-            }
-        }
+                case MediaFormatType.Video:
+                    if (_videoEnabled == false)
+                    {
+                        throw new InvalidOperationException("Video option is not set.");
+                    }
 
-        private void UnregisterBufferComsumedEvent()
-        {
-            int ret = Native.UnsetBufferConsumedCallback(_handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Unsetting buffer consumed callback failed");
-            }
-        }
+                    if (AreVideoTypesMatched(_sourceFormat, (packet.Format as VideoMediaFormat).MimeType) == false)
+                    {
+                        throw new InvalidOperationException("Video format does not match.");
+                    }
 
-        private void RegisterRecordingStatusChangedEvent()
-        {
-            _recordingStatusCallback = (ulong elapsedTime, ulong fileSize, IntPtr userData) =>
-            {
-                RecordingStatusChangedEventArgs eventArgs = new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize);
-                _recordingStatusChanged?.Invoke(this, eventArgs);
-            };
-            int ret = Native.SetStatusChangedCallback(_handle, _recordingStatusCallback, IntPtr.Zero);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Setting status changed callback failed");
-            }
-        }
+                    break;
 
-        private void UnregisterRecordingStatusChangedEvent()
-        {
-            int ret = Native.UnsetStatusChangedCallback(_handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Unsetting status changed callback failed");
+                default:
+                    throw new ArgumentException("Packet is not valid.");
             }
-        }
 
-        private void RegisterRecordingLimitReachedEvent()
-        {
-            _recordingLimitReachedCallback = (StreamRecordingLimitType type, IntPtr userData) =>
-            {
-                StreamRecordingLimitReachedEventArgs eventArgs = new StreamRecordingLimitReachedEventArgs(type);
-                _recordingLimitReached?.Invoke(this, eventArgs);
-            };
-            int ret = Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback, IntPtr.Zero);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Setting limit reached callback failed");
-            }
+            Native.PushStreamBuffer(Handle, MediaPacket.Lock.Get(packet).GetHandle())
+                .ThrowIfError("Failed to push buffer.");
         }
 
-        private void UnregisterRecordingLimitReachedEvent()
-        {
-            int ret = Native.UnsetLimitReachedCallback(_handle);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Unsetting limit reached callback failed");
-            }
-        }
+        #endregion
 
-        private void RegisterRecordingErrorOccurredEvent()
+        #region Dispose support
+        /// <summary>
+        /// Release any unmanaged resources used by this object.
+        /// </summary>
+        public void Dispose()
         {
-            _recorderErrorCallback = (StreamRecorderErrorCode error, StreamRecorderState current, IntPtr userData) =>
-            {
-                StreamRecordingErrorOccurredEventArgs eventArgs = new StreamRecordingErrorOccurredEventArgs(error, current);
-                _recordingErrorOccurred?.Invoke(this, eventArgs);
-            };
-            int ret = Native.SetErrorCallback(_handle, _recorderErrorCallback, IntPtr.Zero);
-            if (ret != (int)StreamRecorderError.None)
-            {
-                StreamRecorderErrorFactory.ThrowException(ret, "Setting Error callback failed");
-            }
+            Dispose(true);
         }
 
-        private void UnregisterRecordingErrorOccurredEvent()
+        /// <summary>
+        /// Releases the resources used by the StreamRecorder.
+        /// </summary>
+        /// <param name="disposing">
+        /// true to release both managed and unmanaged resources; false to release only unmanaged resources.
+        /// </param>
+        protected virtual void Dispose(bool disposing)
         {
-            int ret = Native.UnsetErrorCallback(_handle);
-            if (ret != (int)StreamRecorderError.None)
+            if (!_disposed)
             {
-                StreamRecorderErrorFactory.ThrowException(ret, "Unsetting Error callback failed");
+                _handle?.Dispose();
+
+                _disposed = true;
             }
         }
+        #endregion
     }
 }
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderAudioOptions.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderAudioOptions.cs
new file mode 100644 (file)
index 0000000..911cf34
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+    /// <summary>
+    /// Specifies the options associated with audio recording.
+    /// </summary>
+    /// <seealso cref="StreamRecorder"/>
+    /// <seealso cref="StreamRecorderOptions"/>
+    /// <seealso cref="StreamRecorderVideoOptions"/>
+    public class StreamRecorderAudioOptions
+    {
+        private const int DefaultSampleRate = 0;
+        private const int DefaultBitRate = 128000;
+        private const int DefaultChannels = 2;
+
+        /// <summary>
+        /// Initialize a new instance of the <see cref="StreamRecorderAudioOptions"/> class with the specified codec.
+        /// </summary>
+        /// <param name="codec">The <see cref="RecorderAudioCodec"/> for encoding audio stream.</param>
+        /// <remarks>
+        /// <see cref="SampleRate"/>, <see cref="BitRate"/> and <see cref="Channels"/> will be set as default.
+        /// </remarks>
+        /// <exception cref="ArgumentException"><paramref name="codec"/> is not valid.</exception>
+        public StreamRecorderAudioOptions(RecorderAudioCodec codec) :
+            this(codec, DefaultSampleRate, DefaultBitRate, DefaultChannels)
+        {
+        }
+
+        /// <summary>
+        /// Initialize a new instance of the <see cref="StreamRecorderAudioOptions"/> class with the specified
+        /// codec, sample rate, bit rate and channel value.
+        /// </summary>
+        /// <param name="codec">The <see cref="RecorderAudioCodec"/> for encoding audio stream.</param>
+        /// <param name="sampleRate">The sample rate for encoding audio stream.</param>
+        /// <param name="bitRate">The bit rate for encoding audio stream.</param>
+        /// <param name="channels">The number of channels for encoding audio stream.</param>
+        /// <exception cref="ArgumentException"><paramref name="codec"/> is not valid.</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     <paramref name="sampleRate"/> is less than zero.\n
+        ///     -or-\n
+        ///     <paramref name="bitRate"/> is less than or equal to zero.\n
+        ///     -or-\n
+        ///     <paramref name="channels"/> is less than or equal to zero.
+        /// </exception>
+        public StreamRecorderAudioOptions(RecorderAudioCodec codec, int sampleRate, int bitRate, int channels)
+        {
+            Codec = codec;
+            SampleRate = sampleRate;
+            BitRate = bitRate;
+            Channels = channels;
+        }
+
+        private RecorderAudioCodec _codec;
+
+        /// <summary>
+        /// Gets or sets the audio codec for encoding an audio stream.
+        /// </summary>
+        /// <value>The codec for audio stream recording.</value>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <seealso cref="StreamRecorder.GetSupportedAudioCodecs"/>
+        public RecorderAudioCodec Codec
+        {
+            get => _codec;
+            set
+            {
+                ValidationUtil.ValidateEnum(typeof(RecorderAudioCodec), value, nameof(value));
+
+                _codec = value;
+            }
+        }
+
+        private int _sampleRate;
+
+        /// <summary>
+        /// Gets or sets the sampling rate of the audio stream in hertz.
+        /// </summary>
+        /// <remarks>If the value is zero, the sample rate will be decided based on input buffers.</remarks>
+        /// <value>The sample rate value for stream recorder. The default is zero.</value>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+        public int SampleRate
+        {
+            get => _sampleRate;
+            set
+            {
+                if (value < 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Sample rate can't be less than or equal to zero.");
+                }
+
+                _sampleRate = value;
+            }
+        }
+
+        private int _bitRate;
+
+        /// <summary>
+        /// Gets or sets the bit rate of the audio encoder in bits per second.
+        /// </summary>
+        /// <value>The bit rate value for audio stream recording. The default is 128000.</value>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+        public int BitRate
+        {
+            get => _bitRate;
+            set
+            {
+                if (value <= 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Bit rate can't be less than or equal to zero.");
+                }
+
+                _bitRate = value;
+            }
+        }
+
+        private int _channels;
+
+        /// <summary>
+        /// Gets or sets the number of audio channels.
+        /// </summary>
+        /// <value>The number of audio channels for audio stream recording. The default is 2.</value>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+        public int Channels
+        {
+            get => _channels;
+            set
+            {
+                if (value <= 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Channels can't be less than or equal to zero.");
+                }
+
+                _channels = value;
+            }
+        }
+
+        internal void Apply(StreamRecorder recorder)
+        {
+            recorder.ValidateAudioCodec(Codec);
+
+            Native.SetAudioEncoder(recorder.Handle, Codec.ToStreamRecorderEnum()).
+                ThrowIfError("Failed to set audio codec.");
+
+            Native.SetAudioSampleRate(recorder.Handle, SampleRate).
+                ThrowIfError("Failed to set audio sample rate.");
+
+            Native.SetAudioEncoderBitrate(recorder.Handle, BitRate).
+                ThrowIfError("Failed to set audio bit rate.");
+
+            Native.SetAudioChannel(recorder.Handle, Channels).
+                ThrowIfError("Failed to set audio channels.");
+        }
+    }
+
+}
@@ -18,25 +18,20 @@ using System;
 
 namespace Tizen.Multimedia
 {
+
     /// <summary>
-    /// An extended EventArgs.
+    /// Provides data for the <see cref="StreamRecorder.BufferConsumed"/> event.
     /// </summary>
-    public class StreamRecordingBufferConsumedEventArgs : EventArgs
+    public class StreamRecorderBufferConsumedEventArgs : EventArgs
     {
-        private IntPtr _buffer = IntPtr.Zero;
-
-        internal StreamRecordingBufferConsumedEventArgs(IntPtr buffer)
+        internal StreamRecorderBufferConsumedEventArgs(MediaPacket packet)
         {
-            _buffer = buffer;
+            Packet = packet;
         }
 
         /// <summary>
-        /// Consumed buffer.
+        /// Gets the packet that has consumed.
         /// </summary>
-        public IntPtr Buffer {
-            get {
-                return _buffer;
-            }
-        }
+        public MediaPacket Packet { get; }
     }
 }
index 58b6511..041d0f0 100644 (file)
  * limitations under the License.
  */
 
+using System;
+using System.Diagnostics;
+
 namespace Tizen.Multimedia
 {
+
+    /// <summary>
+    /// Specifies errors for <see cref="StreamRecorder"/>/
+    /// </summary>
+    public enum StreamRecorderError
+    {
+        /// <summary>
+        /// Internal error.
+        /// </summary>
+        InternalError = StreamRecorderErrorCode.InvalidOperation,
+        /// <summary>
+        /// Out of storage.
+        /// </summary>
+        OutOfStorage = StreamRecorderErrorCode.OutOfStorage
+    }
+
+    /// <summary>
+    /// Specifies the video source formats for <see cref="StreamRecorder"/>.
+    /// </summary>
+    public enum StreamRecorderVideoFormat
+    {
+        /// <summary>
+        /// Nv12 format.
+        /// </summary>
+        Nv12,
+        /// <summary>
+        /// Nv21 format.
+        /// </summary>
+        Nv21,
+        /// <summary>
+        /// I420 format.
+        /// </summary>
+        I420
+    }
+
+    #region Internal enums
+
     /// <summary>
     /// Enumeration for Audio Codec.
     /// </summary>
-    public enum StreamRecorderAudioCodec
+    internal enum StreamRecorderAudioCodec
     {
         /// <summary>
         /// AMR codec.
@@ -38,7 +78,7 @@ namespace Tizen.Multimedia
     /// <summary>
     /// Enumeration for the file container format.
     /// </summary>
-    public enum StreamRecorderFileFormat
+    internal enum StreamRecorderFileFormat
     {
         /// <summary>
         /// 3GP file format.
@@ -65,64 +105,22 @@ namespace Tizen.Multimedia
     /// <summary>
     /// Enumeration for the recorder notify type.
     /// </summary>
-    public enum StreamRecorderNotify
+    internal enum StreamRecorderNotify
     {
         /// <summary>
         /// None.
         /// </summary>
         None = 0,
         /// <summary>
-        /// State changed noti.
+        /// State changed.
         /// </summary>
         StateChanged
     }
 
     /// <summary>
-    /// Enumeration for the recording limit type.
-    /// </summary>
-    public enum StreamRecordingLimitType
-    {
-        /// <summary>
-        /// Time limit in seconds of recording file
-        /// </summary>
-        Time,
-        /// <summary>
-        /// Size limit in KB(KiloBytes) of recording file.
-        /// </summary>
-        Size
-    }
-
-    /// <summary>
-    /// Enumeration for stream recorder states.
-    /// </summary>
-    public enum StreamRecorderState
-    {
-        /// <summary>
-        /// Stream recorder is not created.
-        /// </summary>
-        None,
-        /// <summary>
-        /// Stream recorder is created, but not prepared.
-        /// </summary>
-        Created,
-        /// <summary>
-        /// Stream recorder is ready to record.
-        /// </summary>
-        Prepared,
-        /// <summary>
-        /// Stream recorder is recording pushed packet.
-        /// </summary>
-        Recording,
-        /// <summary>
-        /// Stream recorder is paused.
-        /// </summary>
-        Paused
-    }
-
-    /// <summary>
     /// Enumeration for video codec.
     /// </summary>
-    public enum StreamRecorderVideoCodec
+    internal enum StreamRecorderVideoCodec
     {
         /// <summary>
         /// H263 codec.
@@ -137,7 +135,7 @@ namespace Tizen.Multimedia
     /// <summary>
     /// Enumeration for source type.
     /// </summary>
-    public enum StreamRecorderSourceType
+    internal enum StreamRecorderSourceType
     {
         /// <summary>
         /// Video source
@@ -153,45 +151,122 @@ namespace Tizen.Multimedia
         VideoAudio
     }
 
-    /// <summary>
-    /// Enumeration for video source format.
-    /// </summary>
-    public enum StreamRecorderVideoSourceFormat
+    internal static class StreamRecorderEnumExtensions
     {
-        /// <summary>
-        /// Nv12 Video source format
-        /// </summary>
-        Nv12,
-        /// <summary>
-        /// Nv21 video source format
-        /// </summary>
-        Nv21,
-        /// <summary>
-        /// I420 video source format
-        /// </summary>
-        I420
-    }
+        internal static RecorderVideoCodec ToRecorderEnum(this StreamRecorderVideoCodec value)
+        {
+            switch (value)
+            {
+                case StreamRecorderVideoCodec.H263:
+                    return RecorderVideoCodec.H263;
 
-    /// <summary>
-    /// Enumeration for stream recorder failure error.
-    /// </summary>
-    public enum StreamRecorderErrorCode
-    {
-        /// <summary>
-        /// Sucessful.
-        /// </summary>
-        None = StreamRecorderError.None,
-        /// <summary>
-        /// Internal error.
-        /// </summary>
-        InvalidParameter = StreamRecorderError.InvalidParameter,
-        /// <summary>
-        /// Internal error.
-        /// </summary>
-        InvalidOperation = StreamRecorderError.InvalidOperation,
-        /// <summary>
-        /// Out of memory.
-        /// </summary>
-        OutOfMemory = StreamRecorderError.OutOfMemory
+                case StreamRecorderVideoCodec.Mpeg4:
+                    return RecorderVideoCodec.Mpeg4;
+            }
+
+            Debug.Fail("Unknown video codec value.");
+            return 0;
+        }
+
+        internal static StreamRecorderVideoCodec ToStreamRecorderEnum(this RecorderVideoCodec value)
+        {
+            switch (value)
+            {
+                case RecorderVideoCodec.H263:
+                    return StreamRecorderVideoCodec.H263;
+
+                case RecorderVideoCodec.Mpeg4:
+                    return StreamRecorderVideoCodec.Mpeg4;
+            }
+
+            throw new NotSupportedException($"{value.ToString()} is not supported.");
+        }
+
+
+        internal static RecorderAudioCodec ToRecorderEnum(this StreamRecorderAudioCodec value)
+        {
+            switch (value)
+            {
+                case StreamRecorderAudioCodec.Aac:
+                    return RecorderAudioCodec.Aac;
+
+                case StreamRecorderAudioCodec.Amr:
+                    return RecorderAudioCodec.Amr;
+
+                case StreamRecorderAudioCodec.Pcm:
+                    return RecorderAudioCodec.Pcm;
+            }
+
+            Debug.Fail("Unknown audio codec value.");
+            return 0;
+        }
+
+
+        internal static StreamRecorderAudioCodec ToStreamRecorderEnum(this RecorderAudioCodec value)
+        {
+            switch (value)
+            {
+                case RecorderAudioCodec.Aac:
+                    return StreamRecorderAudioCodec.Aac;
+
+                case RecorderAudioCodec.Amr:
+                    return StreamRecorderAudioCodec.Amr;
+
+                case RecorderAudioCodec.Pcm:
+                    return StreamRecorderAudioCodec.Pcm;
+            }
+
+            throw new NotSupportedException($"{value.ToString()} is not supported.");
+        }
+
+
+        internal static RecorderFileFormat ToRecorderEnum(this StreamRecorderFileFormat value)
+        {
+            switch (value)
+            {
+                case StreamRecorderFileFormat.ThreeGp:
+                    return RecorderFileFormat.ThreeGp;
+
+                case StreamRecorderFileFormat.Mp4:
+                    return RecorderFileFormat.Mp4;
+
+                case StreamRecorderFileFormat.Amr:
+                    return RecorderFileFormat.Amr;
+
+                case StreamRecorderFileFormat.Adts:
+                    return RecorderFileFormat.Adts;
+
+                case StreamRecorderFileFormat.Wav:
+                    return RecorderFileFormat.Wav;
+            }
+
+            Debug.Fail("Unknown file format value.");
+            return 0;
+        }
+
+
+        internal static StreamRecorderFileFormat ToStreamRecorderEnum(this RecorderFileFormat value)
+        {
+            switch (value)
+            {
+                case RecorderFileFormat.ThreeGp:
+                    return StreamRecorderFileFormat.ThreeGp;
+
+                case RecorderFileFormat.Mp4:
+                    return StreamRecorderFileFormat.Mp4;
+
+                case RecorderFileFormat.Amr:
+                    return StreamRecorderFileFormat.Amr;
+
+                case RecorderFileFormat.Adts:
+                    return StreamRecorderFileFormat.Adts;
+
+                case RecorderFileFormat.Wav:
+                    return StreamRecorderFileFormat.Wav;
+            }
+
+            throw new NotSupportedException($"{value.ToString()} is not supported.");
+        }
     }
+    #endregion
 }
  */
 
 using System;
+using System.IO;
 using Tizen.Internals.Errors;
 
 namespace Tizen.Multimedia
 {
-    internal enum StreamRecorderError
+    internal enum StreamRecorderErrorCode
     {
         None = ErrorCode.None,
         InvalidParameter = ErrorCode.InvalidParameter,
@@ -32,29 +33,40 @@ namespace Tizen.Multimedia
         NotSupported = ErrorCode.NotSupported,
     }
 
-    internal static class StreamRecorderErrorFactory
+    internal static class StreamRecorderErrorExtensions
     {
-        internal static void ThrowException(int errorCode, string errorMessage = null, string paramName = null)
+        internal static StreamRecorderErrorCode Ignore(this StreamRecorderErrorCode errorCode, StreamRecorderErrorCode ignore)
         {
-            StreamRecorderError err = (StreamRecorderError)errorCode;
-            if (string.IsNullOrEmpty(errorMessage))
+            return (ignore == errorCode) ? StreamRecorderErrorCode.None : errorCode;
+        }
+
+        internal static void ThrowIfError(this StreamRecorderErrorCode err, string errorMessage)
+        {
+            if (err == StreamRecorderErrorCode.None)
             {
-                errorMessage = err.ToString();
+                return;
             }
-            switch ((StreamRecorderError)errorCode)
+
+            switch (err)
             {
-                case StreamRecorderError.InvalidParameter:
-                    throw new ArgumentException(errorMessage, paramName);
-                case StreamRecorderError.OutOfMemory:
+                case StreamRecorderErrorCode.InvalidParameter:
+                    throw new ArgumentException(errorMessage);
+
+                case StreamRecorderErrorCode.OutOfMemory:
                     throw new OutOfMemoryException(errorMessage);
-                case StreamRecorderError.PermissionDenied:
+
+                case StreamRecorderErrorCode.PermissionDenied:
                     throw new UnauthorizedAccessException(errorMessage);
-                case StreamRecorderError.NotSupported:
+
+                case StreamRecorderErrorCode.NotSupported:
                     throw new NotSupportedException(errorMessage);
-                case StreamRecorderError.InvalidState:
-                case StreamRecorderError.InvalidOperation:
-                case StreamRecorderError.OutOfStorage:
+
+                case StreamRecorderErrorCode.InvalidState:
+                case StreamRecorderErrorCode.InvalidOperation:
                     throw new InvalidOperationException(errorMessage);
+
+                case StreamRecorderErrorCode.OutOfStorage:
+                    throw new IOException(errorMessage);
             }
         }
     }
@@ -19,24 +19,25 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class containing details about the recording limit.
+    /// Provides data for the <see cref="StreamRecorder.ErrorOccurred"/> event.
     /// </summary>
-    public class StreamRecordingLimitReachedEventArgs : EventArgs
+    public class StreamRecorderErrorOccurredEventArgs : EventArgs
     {
-        private StreamRecordingLimitType _type = StreamRecordingLimitType.Size;
-
-        internal StreamRecordingLimitReachedEventArgs(StreamRecordingLimitType type)
+        internal StreamRecorderErrorOccurredEventArgs(StreamRecorderError error, RecorderState state)
         {
-            _type = type;
+            Error = error;
+            State = state;
         }
 
         /// <summary>
-        /// The limitation type.
+        /// Gets the error code.
         /// </summary>
-        public StreamRecordingLimitType Type {
-            get {
-                return _type;
-            }
-        }
+        public StreamRecorderError Error { get; }
+
+        /// <summary>
+        /// Gets the state of the recorder.
+        /// </summary>
+        public RecorderState State { get; }
+
     }
 }
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderNotifiedEventArgs.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderNotifiedEventArgs.cs
deleted file mode 100644 (file)
index 0ac92f7..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace Tizen.Multimedia
-{
-    /// <summary>
-    /// An extended Eventargs class which contains interrupted policy details, previous and current
-    /// state of the recorder.
-    /// </summary>
-    public class StreamRecorderNotifiedEventArgs : EventArgs
-    {
-        private StreamRecorderState _previous = StreamRecorderState.None;
-        private StreamRecorderState _current = StreamRecorderState.None;
-        private StreamRecorderNotify _notify = StreamRecorderNotify.None;
-
-        internal StreamRecorderNotifiedEventArgs(StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notify)
-        {
-            _previous = previous;
-            _current = current;
-            _notify = notify;
-        }
-
-        /// <summary>
-        /// The previous state of the stream recorder.
-        /// </summary>
-        public StreamRecorderState Previous {
-            get {
-                return _previous;
-            }
-        }
-
-        /// <summary>
-        /// The current state of the stream recorder.
-        /// </summary>
-        public StreamRecorderState Current {
-            get {
-                return _current;
-            }
-        }
-
-        /// <summary>
-        /// The notify of the event.
-        /// </summary>
-        public StreamRecorderNotify Notify {
-            get {
-                return _notify;
-            }
-        }
-    }
-}
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderOptions.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderOptions.cs
new file mode 100644 (file)
index 0000000..49d9098
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+    /// <summary>
+    /// Specifies the options associated with <see cref="StreamRecorder"/>.
+    /// </summary>
+    /// <seealso cref="StreamRecorder"/>
+    /// <seealso cref="StreamRecorder.Prepare(StreamRecorderOptions)"/>
+    /// <seealso cref="StreamRecorderAudioOptions"/>
+    /// <seealso cref="StreamRecorderVideoOptions"/>
+    public class StreamRecorderOptions
+    {
+        /// <summary>
+        /// Initialize a new instance of the <see cref="StreamRecorderOptions"/> class with the specified
+        /// save path and file format.
+        /// </summary>
+        /// <param name="savePath">The path that the recording result is saved.</param>
+        /// <param name="fileFormat">The file format of output file.</param>
+        /// <exception cref="ArgumentNullException"><paramref name="savePath"/>is null.</exception>
+        /// <exception cref="ArgumentException">
+        ///     <paramref name="savePath"/>is an empty string.\n
+        ///     -or-\n
+        ///     <paramref name="fileFormat"/> is not valid.
+        /// </exception>
+        public StreamRecorderOptions(string savePath, RecorderFileFormat fileFormat)
+        {
+            SavePath = savePath;
+            FileFormat = fileFormat;
+        }
+
+        private string _savePath;
+
+        /// <summary>
+        /// Gets or sets the file path to record.
+        /// </summary>
+        /// <remarks>
+        /// If the same file already exists in the file system, then old file will be overwritten.
+        /// </remarks>
+        /// <exception cref="ArgumentNullException"><paramref name="value"/>is null.</exception>
+        /// <exception cref="ArgumentException"><paramref name="value"/>is an empty string.</exception>
+        public string SavePath
+        {
+            get => _savePath;
+            set
+            {
+                if (value == null)
+                {
+                    throw new ArgumentNullException(nameof(value));
+                }
+
+                if (string.IsNullOrWhiteSpace(value))
+                {
+                    throw new ArgumentException("Path can't be an empty string.", nameof(value));
+                }
+
+                _savePath = value;
+            }
+        }
+
+        private RecorderFileFormat _fileFormat;
+
+        /// <summary>
+        /// Gets or sets the file format for recording media stream.
+        /// </summary>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <seealso cref="StreamRecorder.GetSupportedFileFormats"/>
+        public RecorderFileFormat FileFormat
+        {
+            get => _fileFormat;
+            set
+            {
+                ValidationUtil.ValidateEnum(typeof(RecorderFileFormat), value, nameof(value));
+
+                _fileFormat = value;
+            }
+        }
+
+        private int _timeLimit;
+
+        /// <summary>
+        /// Gets or sets the time limit of recording.
+        /// </summary>
+        /// <value>
+        /// The maximum time of recording in seconds, or 0 for unlimited time.
+        /// </value>
+        /// <remarks>
+        /// After reaching the limitation, the data which is being recorded will
+        /// be discarded and not written to the file.
+        /// The recorder state must be <see cref="RecorderState.Idle"/> state.
+        /// </remarks>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+        /// <seealso cref="StreamRecorder.RecordingLimitReached"/>
+        /// <seealso cref="SizeLimit"/>
+        public int TimeLimit
+        {
+            get => _timeLimit;
+            set
+            {
+                if (value < 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Time limit can't be less than zero.");
+                }
+
+                _timeLimit = value;
+            }
+        }
+
+        private int _sizeLimit;
+
+        /// <summary>
+        /// Gets or sets the maximum size of a recording file.
+        /// </summary>
+        /// <value>
+        /// The maximum size of a recording file in kilobytes, or 0 for unlimited size.
+        /// </value>
+        /// <remarks>
+        /// After reaching the limitation, the data which is being recorded will
+        /// be discarded and not written to the file.
+        /// </remarks>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+        /// <seealso cref="StreamRecorder.RecordingLimitReached"/>
+        /// <seealso cref="TimeLimit"/>
+        public int SizeLimit
+        {
+            get => _sizeLimit;
+            set
+            {
+                if (value < 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Size limit can't be less than zero.");
+                }
+
+                _sizeLimit = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the options for audio recording.
+        /// </summary>
+        /// <remarks>
+        /// <see cref="Audio"/> or <see cref="Video"/> must be set for recording.
+        /// </remarks>
+        /// <seealso cref="Video"/>
+        public StreamRecorderAudioOptions Audio { get; set; }
+
+        /// <summary>
+        /// Gets or sets the options for video recording.
+        /// </summary>
+        /// <remarks>
+        /// <see cref="Audio"/> or <see cref="Video"/> must be set for recording.
+        /// </remarks>
+        /// <seealso cref="Audio"/>
+        public StreamRecorderVideoOptions Video { get; set; }
+
+        private StreamRecorderSourceType GetSourceType()
+        {
+            Debug.Assert(Audio != null || Video != null);
+
+            if (Audio != null && Video != null)
+            {
+                return StreamRecorderSourceType.VideoAudio;
+            }
+
+            return Audio != null ? StreamRecorderSourceType.Audio : StreamRecorderSourceType.Video;
+        }
+
+        internal void Apply(StreamRecorder recorder)
+        {
+            if (Audio == null && Video == null)
+            {
+                throw new ArgumentException("Both Audio and Video are not set.");
+            }
+
+            Native.EnableSourceBuffer(recorder.Handle, GetSourceType()).ThrowIfError("Failed to apply options.");
+
+            Native.SetFileName(recorder.Handle, SavePath).ThrowIfError("Failed to set save path.");
+
+            recorder.ValidateFileFormat(FileFormat);
+            Native.SetFileFormat(recorder.Handle, FileFormat.ToStreamRecorderEnum())
+                .ThrowIfError("Failed to set file format.");
+
+            Native.SetRecordingLimit(recorder.Handle, RecordingLimitType.Size, SizeLimit).
+                ThrowIfError("Failed to set size limit.");
+
+            Native.SetRecordingLimit(recorder.Handle, RecordingLimitType.Time, TimeLimit).
+                ThrowIfError("Failed to set time limit.");
+
+            Audio?.Apply(recorder);
+
+            Video?.Apply(recorder);
+        }
+    }
+}
@@ -19,37 +19,24 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about error status and
-    /// state of the recorder when it failed.
+    /// Provides data for the <see cref="StreamRecorder.StateChanged"/> event.
     /// </summary>
-    public class StreamRecordingErrorOccurredEventArgs : EventArgs
+    public class StreamRecorderStateChangedEventArgs : EventArgs
     {
-        private StreamRecorderErrorCode _error = StreamRecorderErrorCode.InvalidOperation;
-        private StreamRecorderState _state = StreamRecorderState.None;
-
-        internal StreamRecordingErrorOccurredEventArgs(StreamRecorderErrorCode error, StreamRecorderState state)
+        internal StreamRecorderStateChangedEventArgs(RecorderState previous, RecorderState current)
         {
-            _error = error;
-            _state = state;
+            Previous = previous;
+            Current = current;
         }
 
         /// <summary>
-        /// The error code.
+        /// Gets the previous state of the stream recorder.
         /// </summary>
-        public StreamRecorderErrorCode Error {
-            get {
-                return _error;
-            }
-        }
+        public RecorderState Previous { get; }
 
         /// <summary>
-        /// The state of the recorder.
+        /// Gets the current state of the stream recorder.
         /// </summary>
-        public StreamRecorderState State {
-            get {
-                return _state;
-            }
-        }
-
+        public RecorderState Current { get; }
     }
 }
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoOptions.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoOptions.cs
new file mode 100644 (file)
index 0000000..3460532
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+    /// <summary>
+    /// Specifies the options associated with video recording.
+    /// </summary>
+    /// <seealso cref="StreamRecorder"/>
+    /// <seealso cref="StreamRecorderOptions"/>
+    /// <seealso cref="StreamRecorderAudioOptions"/>
+    public class StreamRecorderVideoOptions
+    {
+        private const int DefaultBitRate = 0;
+
+        /// <summary>
+        /// Initialize a new instance of the <see cref="StreamRecorderVideoOptions"/> class with the specified
+        /// codec, resolution, source format and frame rate.
+        /// </summary>
+        /// <param name="codec">The <see cref="RecorderVideoCodec"/> for encoding video stream.</param>
+        /// <param name="resolution">The resolution of video recording.</param>
+        /// <param name="sourceFormat">The format of source stream.</param>
+        /// <param name="frameRate">The frame rate for encoding video stream.</param>
+        /// <remarks>
+        /// <see cref="BitRate"/> will be set as default.
+        /// </remarks>
+        /// <exception cref="ArgumentException">
+        ///     <paramref name="codec"/> is not valid.\n
+        ///     -or-\n
+        ///     <paramref name="sourceFormat"/> is not valid.\n
+        /// </exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+        ///     -or-\n
+        ///     <paramref name="frameRate"/> is less than or equal to zero.\n
+        /// </exception>
+        public StreamRecorderVideoOptions(RecorderVideoCodec codec, Size resolution,
+            StreamRecorderVideoFormat sourceFormat, int frameRate) :
+            this(codec, resolution, sourceFormat, frameRate, DefaultBitRate)
+        {
+        }
+
+        /// <summary>
+        /// Initialize a new instance of the <see cref="StreamRecorderVideoOptions"/> class with the specified
+        /// codec, resolution, source format, frame rate and bit rate.
+        /// </summary>
+        /// <param name="codec">The <see cref="RecorderVideoCodec"/> for encoding video stream.</param>
+        /// <param name="resolution">The resolution of video recording.</param>
+        /// <param name="sourceFormat">The format of source stream.</param>
+        /// <param name="frameRate">The frame rate for encoding video stream.</param>
+        /// <param name="bitRate">The bit rate for encoding video stream.</param>
+        /// <exception cref="ArgumentException">
+        ///     <paramref name="codec"/> is not valid.\n
+        ///     -or-\n
+        ///     <paramref name="sourceFormat"/> is not valid.\n
+        /// </exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+        ///     -or-\n
+        ///     <paramref name="frameRate"/> is less than or equal to zero.\n
+        ///     -or-\n
+        ///     <paramref name="bitRate"/> is less than zero.
+        /// </exception>
+        public StreamRecorderVideoOptions(RecorderVideoCodec codec, Size resolution,
+            StreamRecorderVideoFormat sourceFormat, int frameRate, int bitRate)
+        {
+            Codec = codec;
+            Resolution = resolution;
+            SourceFormat = sourceFormat;
+            FrameRate = frameRate;
+            BitRate = bitRate;
+        }
+
+        private RecorderVideoCodec _codec;
+
+        /// <summary>
+        /// Gets or sets the video codec for encoding video stream.
+        /// </summary>
+        /// <value>The codec for video stream recording.</value>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <seealso cref="StreamRecorder.GetSupportedVideoCodecs"/>
+        public RecorderVideoCodec Codec
+        {
+            get => _codec;
+            set
+            {
+                ValidationUtil.ValidateEnum(typeof(RecorderVideoCodec), value, nameof(value));
+
+                _codec = value;
+            }
+        }
+
+        private Size _resolution;
+
+        /// <summary>
+        /// Gets or sets the resolution of the video recording.
+        /// </summary>
+        /// <value>The output resolution for video stream recording.</value>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     Width or height of <paramref name="value"/> is less than or equal to zero.
+        /// </exception>
+        /// <seealso cref="StreamRecorder.GetSupportedVideoResolutions"/>
+        public Size Resolution
+        {
+            get => _resolution;
+            set
+            {
+                if (value.Width <= 0 || value.Height <= 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Resolution can't be less than or equal to zero.");
+                }
+
+                _resolution = value;
+            }
+        }
+
+        private int _frameRate;
+
+        /// <summary>
+        /// Gets or sets the frame rate for recording media stream.
+        /// </summary>
+        /// <value>The frame rate value for video stream recording.</value>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+        public int FrameRate
+        {
+            get => _frameRate;
+            set
+            {
+                if (value <= 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Frame rate can't be less than or equal to zero.");
+                }
+                _frameRate = value;
+            }
+        }
+
+        private StreamRecorderVideoFormat _sourceFormat;
+
+        /// <summary>
+        /// Gets or sets the video source format for recording media stream.
+        /// </summary>
+        /// <value>The source format of buffers for video stream recording.</value>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+        public StreamRecorderVideoFormat SourceFormat
+        {
+            get => _sourceFormat;
+            set
+            {
+                ValidationUtil.ValidateEnum(typeof(StreamRecorderVideoFormat), value, nameof(value));
+
+                _sourceFormat = value;
+            }
+        }
+
+        private int _bitRate;
+
+        /// <summary>
+        /// The bit rate of the video encoder in bits per second.
+        /// </summary>
+        /// <value>The bit rate value for video stream recording. The default is 0.</value>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+        public int BitRate
+        {
+            get => _bitRate;
+            set
+            {
+                if (value < 0)
+                {
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Bit rate can't be less than or equal to zero.");
+                }
+                _bitRate = value;
+            }
+        }
+
+        internal void Apply(StreamRecorder recorder)
+        {
+            recorder.ValidateVideoCodec(Codec);
+
+            Native.SetVideoEncoder(recorder.Handle, Codec.ToStreamRecorderEnum()).
+                ThrowIfError("Failed to set video codec.");
+
+            recorder.ValidateVideoResolution(Resolution);
+
+            Native.SetVideoResolution(recorder.Handle, Resolution.Width, Resolution.Height).
+                ThrowIfError("Failed to set video resolution.");
+
+            Native.SetVideoFrameRate(recorder.Handle, FrameRate).
+                ThrowIfError("Failed to set video frame rate.");
+
+            Native.SetVideoEncoderBitRate(recorder.Handle, BitRate).
+                ThrowIfError("Failed to set video bit rate.");
+
+            Native.SetVideoSourceFormat(recorder.Handle, SourceFormat).
+                ThrowIfError("Failed to set video source format.");
+        }
+    }
+
+}
diff --git a/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoResolution.cs b/src/Tizen.Multimedia.StreamRecorder/StreamRecorder/StreamRecorderVideoResolution.cs
deleted file mode 100644 (file)
index 8523098..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using Native = Interop.StreamRecorder;
-
-namespace Tizen.Multimedia
-{
-    /// <summary>
-    /// Resolution for stream recorder.
-    /// </summary>
-    public class StreamRecorderVideoResolution
-    {
-        private int _width, _height;
-        private bool _interopFlag;
-        internal IntPtr _Handle;
-
-        internal StreamRecorderVideoResolution(IntPtr handle)
-        {
-            _Handle = handle;
-            _interopFlag = true;
-            int ret = Native.GetVideoResolution(_Handle, out _width, out _height);
-            StreamRecorderError err = (StreamRecorderError)ret;
-            Log.Info(StreamRecorderLog.Tag, "width " + _width + " height " + _height + "return " + err.ToString());
-        }
-
-        internal StreamRecorderVideoResolution(int width, int height)
-        {
-            _interopFlag = false;
-            _width = width;
-            _height = height;
-        }
-
-        /// <summary>
-        /// The video width.
-        /// </summary>
-        /// <value>The width.</value>
-        public int Width {
-            get {
-                if(_interopFlag == true)
-                    Native.GetVideoResolution(_Handle, out _width, out _height);
-                return _width;
-            }
-            set {
-                _width = value;
-                if(_interopFlag == true) {
-                    int ret = Native.SetVideoResolution(_Handle, _width, _height);
-                    StreamRecorderError err = (StreamRecorderError)ret;
-                    Log.Info(StreamRecorderLog.Tag, " set width " + _width + " height " + _height + "set return " + err.ToString());
-                }
-            }
-        }
-
-        /// <summary>
-        /// The video height.
-        /// </summary>
-        /// <value>The height.</value>
-        public int Height {
-            get {
-                if(_interopFlag == true)
-                    Native.GetVideoResolution(_Handle, out _width, out _height);
-                return _height;
-            }
-            set {
-                _height = value;
-                if(_interopFlag == true) {
-                    int ret = Native.SetVideoResolution(_Handle, _width, _height);
-                    StreamRecorderError err = (StreamRecorderError)ret;
-                    Log.Info(StreamRecorderLog.Tag, " set width " + _width + " height " + _height + "set return " + err.ToString());
-                }
-            }
-        }
-    }
-}
index 82dec4d..9b8e9e6 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index b80cda7..633c983 100755 (executable)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+using System;
+
 namespace Tizen.Multimedia.Vision
 {
     /// <summary>
@@ -28,7 +30,7 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Initializes a new instance of the <see cref="BarcodeDetectionConfiguration"/> class.
         /// </summary>
-        /// <exception cref="System.NotSupportedException">The feature is not supported.</exception>
+        /// <exception cref="NotSupportedException">The feature is not supported.</exception>
         /// <since_tizen> 3 </since_tizen>
         public BarcodeDetectionConfiguration() : base("barcode_detection")
         {
@@ -37,8 +39,8 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Gets or sets the target of the barcode detection.
         /// </summary>
-        /// <exception cref="System.ArgumentException"><paramref name="value"/> is not valid.</exception>
-        /// <exception cref="System.ObjectDisposedException">The <see cref="BarcodeDetectionConfiguration"/> already has been disposed of.</exception>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="BarcodeDetectionConfiguration"/> already has been disposed of.</exception>
         /// <since_tizen> 3 </since_tizen>
         public BarcodeDetectionTarget Target
         {
index a12adea..edfbc50 100755 (executable)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+using System;
 using Tizen.Common;
 
 namespace Tizen.Multimedia.Vision
@@ -32,7 +33,7 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Initializes a new instance of the <see cref="BarcodeGenerationConfiguration"/> class.
         /// </summary>
-        /// <exception cref="System.NotSupportedException">The feature is not supported.</exception>
+        /// <exception cref="NotSupportedException">The feature is not supported.</exception>
         /// <since_tizen> 3 </since_tizen>
         public BarcodeGenerationConfiguration() : base("barcode_generation")
         {
@@ -41,7 +42,7 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Gets or sets the text visibility of the barcode to be generated.
         /// </summary>
-        /// <exception cref="System.ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="BarcodeGenerationConfiguration"/> already has been disposed of.</exception>
         /// <since_tizen> 3 </since_tizen>
         public Visibility TextVisibility
index 632ac6b..87c2618 100755 (executable)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+using System;
+
 namespace Tizen.Multimedia.Vision
 {
     /// <summary>
@@ -27,7 +29,7 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Initializes a new instance of the <see cref="FaceRecognitionConfiguration"/> class.
         /// </summary>
-        /// <exception cref="System.NotSupportedException">The feature is not supported.</exception>
+        /// <exception cref="NotSupportedException">The feature is not supported.</exception>
         /// <since_tizen> 3 </since_tizen>
         public FaceRecognitionConfiguration() : base("face_recognition")
         {
@@ -37,7 +39,7 @@ namespace Tizen.Multimedia.Vision
         /// Gets or sets the method used for face recognition model learning.
         /// Default value is <see cref="FaceRecognitionModelType.Lbph"/>.
         /// </summary>
-        /// <exception cref="System.ArgumentException"><paramref name="value"/> is not valid.</exception>
+        /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
         /// <since_tizen> 3 </since_tizen>
         public FaceRecognitionModelType ModelType
         {
index 69b2956..20b727b 100755 (executable)
@@ -44,7 +44,7 @@ namespace Tizen.Multimedia.Vision
         /// Initializes a new instance of the <see cref="FaceRecognitionModel"/> class with the specified path.
         /// </summary>
         /// <remarks>
-        /// Models saved by <see cref="Save()"/> can be loaded.
+        /// Models saved by <see cref="Save(string)"/> can be loaded.
         /// </remarks>
         /// <param name="modelPath">Path to the model to load.</param>
         /// <exception cref="ArgumentNullException"><paramref name="modelPath"/> is null.</exception>
index 793a5d2..6653921 100755 (executable)
@@ -43,7 +43,7 @@ namespace Tizen.Multimedia.Vision
         /// Initializes a new instance of the <see cref="FaceTrackingModel"/> class with the specified path.
         /// </summary>
         /// <remarks>
-        /// Models saved by <see cref="Save()"/> can be loaded.
+        /// Models saved by <see cref="Save(string)"/> can be loaded.
         /// </remarks>
         /// <param name="modelPath">Path to the model to load.</param>
         /// <exception cref="ArgumentNullException"><paramref name="modelPath"/> is null.</exception>
@@ -54,7 +54,7 @@ namespace Tizen.Multimedia.Vision
         ///     <paramref name="modelPath"/> is not supported format.
         /// </exception>
         /// <exception cref="UnauthorizedAccessException">No permission to access the specified file.</exception>
-        /// <seealso cref="Save()"/>
+        /// <seealso cref="Save(string)"/>
         /// <since_tizen> 3 </since_tizen>
         public FaceTrackingModel(string modelPath)
         {
index ab4a38d..2eabbb5 100755 (executable)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+using System;
+
 namespace Tizen.Multimedia.Vision
 {
     /// <summary>
@@ -40,7 +42,7 @@ namespace Tizen.Multimedia.Vision
         /// <summary>
         /// Initializes a new instance of the <see cref="ImageFillConfiguration"/> class.
         /// </summary>
-        /// <exception cref="System.NotSupportedException">The feature is not supported.</exception>
+        /// <exception cref="NotSupportedException">The feature is not supported.</exception>
         /// <since_tizen> 3 </since_tizen>
         public ImageFillConfiguration() : base("image_recognition")
         {
index c8d2c70..ab0b6d9 100755 (executable)
@@ -43,7 +43,7 @@ namespace Tizen.Multimedia.Vision
         /// Initializes a new instance of the <see cref="ImageObject"/> class from the specified file.
         /// </summary>
         /// <remarks>
-        /// ImageObject has been saved by <see cref="Save()"/> can be loaded.
+        /// ImageObject has been saved by <see cref="Save(string)"/> can be loaded.
         /// </remarks>
         /// <param name="path">Path to the image object to load.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
index 056b3ec..a3b9bec 100755 (executable)
@@ -43,7 +43,7 @@ namespace Tizen.Multimedia.Vision
         /// Initializes a new instance of the <see cref="ImageTrackingModel"/> class with the specified path.
         /// </summary>
         /// <remarks>
-        /// Model saved by <see cref="Save()"/> can be loaded.
+        /// Model saved by <see cref="Save(string)"/> can be loaded.
         /// </remarks>
         /// <param name="modelPath">Path to the model to load.</param>
         /// <exception cref="ArgumentNullException"><paramref name="modelPath"/> is null.</exception>
@@ -54,7 +54,7 @@ namespace Tizen.Multimedia.Vision
         ///     <paramref name="modelPath"/> is not supported format.
         /// </exception>
         /// <exception cref="UnauthorizedAccessException">No permission to access the specified file.</exception>
-        /// <seealso cref="Save()"/>
+        /// <seealso cref="Save(string)"/>
         /// <since_tizen> 3 </since_tizen>
         public ImageTrackingModel(string modelPath)
         {
index dec532e..ec9bff7 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index fd0854a..3b5598e 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 53c7e3d..22cb378 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
     <DefineConstants>$(DefineConstants);DEBUG_ON</DefineConstants>
   </PropertyGroup>
 
     <ProjectReference Include="..\Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <PackageReference Include="System.Reflection.TypeExtensions" Version="$(SystemPackageVersion)" PrivateAssets="All" />
-  </ItemGroup>
-
   <Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
     <ItemGroup>
       <ReferencePath Condition="'%(FileName)' == 'Tizen.System.SystemSettings'">
diff --git a/src/Tizen.NUI/src/internal/AppSignalType.cs b/src/Tizen.NUI/src/internal/AppSignalType.cs
new file mode 100755 (executable)
index 0000000..2ff2a0a
--- /dev/null
@@ -0,0 +1,141 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    internal class AppSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal AppSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AppSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~AppSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_AppSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.AppSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.AppSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.AppSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.AppSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetApplication arg)
+        {
+            NDalicManualPINVOKE.AppSignalType_Emit(swigCPtr, WidgetApplication.getCPtr(arg));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public AppSignalType() : this(NDalicManualPINVOKE.new_AppSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+    }
+}
index 91b60e4..ac6d54d 100755 (executable)
@@ -334,6 +334,61 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_applicationInitEventCallbackDelegate != null)
+            {
+                this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
+            }
+
+            if (_applicationTerminateEventCallbackDelegate != null)
+            {
+                this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
+            }
+
+            if (_applicationPauseEventCallbackDelegate != null)
+            {
+                this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
+            }
+
+            if (_applicationResumeEventCallbackDelegate != null)
+            {
+                this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
+            }
+
+            if (_applicationResetEventCallbackDelegate != null)
+            {
+                this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
+            }
+
+            if (_applicationResizeEventCallbackDelegate != null)
+            {
+                this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
+            }
+
+            if (_applicationLanguageChangedEventCallbackDelegate != null)
+            {
+                this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
+            }
+
+            if (_applicationRegionChangedEventCallbackDelegate != null)
+            {
+                this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
+            }
+
+            if (_applicationBatteryLowEventCallbackDelegate != null)
+            {
+                this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
+            }
+
+            if (_applicationMemoryLowEventCallbackDelegate != null)
+            {
+                this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
+            }
+
+            if (_applicationAppControlEventCallbackDelegate != null)
+            {
+                this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -1079,8 +1134,27 @@ namespace Tizen.NUI
             return ret;
         }
 
-        //Removed from v0.2.33
-        /*public bool AddIdle(System.Delegate func)
+
+        public static Application NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode)
+        {
+            NUILog.Debug(" NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode) is called! ");
+
+            Application ret = New(args, stylesheet, (Application.WindowMode)windowMode);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+            // we've got an application now connect the signals
+            ret.SetupDelegates();
+            // set the singleton
+            _instance = ret;
+            return _instance;
+        }
+
+        /// <summary>
+        /// Ensures that the function passed in is called from the main loop when it is idle.
+        /// </summary>
+        /// <param name="func">The function to call</param>
+        /// <returns>true if added successfully, false otherwise</returns>
+        public bool AddIdle(System.Delegate func)
         {
             System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
             System.IntPtr ip2 = NDalicManualPINVOKE.MakeCallback(new System.Runtime.InteropServices.HandleRef(this, ip));
@@ -1089,9 +1163,7 @@ namespace Tizen.NUI
 
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             return ret;
-        }*/
-
-
+        }
 
         /**
         * Outer::outer_method(int)
@@ -1132,6 +1204,17 @@ namespace Tizen.NUI
             return ret;
         }
 
+        public static Application New(string[] args, string stylesheet, Application.WindowMode windowMode)
+        {
+            NUILog.Debug("New(string[] args) is called!");
+            int argc = args.Length;
+            string argvStr = string.Join(" ", args);
+
+            Application ret = new Application(NDalicPINVOKE.Application_New__MANUAL_4(argc, argvStr, stylesheet, (int)windowMode), true);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
         public static Application New(int argc, string stylesheet, Application.WindowMode windowMode, Rectangle positionSize)
         {
             Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_4(argc, stylesheet, (int)windowMode, Rectangle.getCPtr(positionSize)), true);
index 585ec28..6ba2744 100755 (executable)
@@ -21,7 +21,7 @@
 
 using System.Runtime.CompilerServices;
 [assembly: InternalsVisibleTo("Tizen.NUI.Extension.Test, PublicKey=00240000048000009400000006020000002400005253413100040000010001004d7c7c03a196ecb8e7cc5056750e1f40ee2bbe99f0e53a07f2538f2b0f450bd731b9dca3706503a0378baca74a09cf3af6261b330c031f44817ab6ed64189460765a402279d3e0c1fa7295ae1dccb2e3ff329705fd85b58d66ae7cb7e95ba06e0d847c3e3ba918798f579e5caeb1c6149955e6baf24236eec46227a623e494b1")]
-[assembly: InternalsVisibleTo("Tizen.Multimedia, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
+[assembly: InternalsVisibleTo("Tizen.Multimedia, PublicKey=0024000004800000940000000602000000240000525341310004000001000100bd36a93b6d224759632d08a501b9dcb99a533e8ff0c3a1fc7044f5b05e176c005e5a7fc4d1dfa54da4d4cad4868c4518aa1f661380fb90685dc699d5e48dcc697b33c1e38b70845f405612d6827e7337c191ddd0a0aa35fdad654efe4c54881fdaa82ce35dce18ea918953e448c7aa284a47ed6fe3aa9404930b2b973a28cddf")]
 [assembly: InternalsVisibleTo("Tizen.TV.NUI, PublicKey=0024000004800000940000000602000000240000525341310004000001000100ed445c2a988d35b99e5766f42eef33d89d1f67225db051f011abcfce47a4788875c39750a2e5695f1ec117f41d96610419811762669f98131db30a6e64c6bb8fde3731f373f6cda4c0087d121f5108559f216dc015807dc46ec5a4d1b63f5deff64c01754a0db0dc849bc300672572cbd2697432ab6c193ebf9fade6bf0f2aad")]
 
 namespace Tizen.NUI
index ba61c57..e6870e6 100755 (executable)
@@ -795,6 +795,12 @@ namespace Tizen.NUI
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Window_GetPosition")]
         public static extern global::System.IntPtr GetPosition(global::System.Runtime.InteropServices.HandleRef jarg1);
 
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Adaptor_FeedKeyEvent")]
+        public static extern void Window_FeedKeyEvent(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint = "CSharp_Dali_MakeCallback")]
+        public static extern global::System.IntPtr MakeCallback(global::System.Runtime.InteropServices.HandleRef jarg1);
+
         //for widget view
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetView_Property_WIDGET_ID_get")]
         public static extern int WidgetView_Property_WIDGET_ID_get();
@@ -926,6 +932,7 @@ namespace Tizen.NUI
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetViewManager_SWIGUpcast")]
         public static extern global::System.IntPtr WidgetViewManager_SWIGUpcast(global::System.IntPtr jarg1);
 
+
         //For Adaptor
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Adaptor_New__SWIG_0")]
         public static extern global::System.IntPtr Adaptor_New__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1);
@@ -1039,5 +1046,254 @@ namespace Tizen.NUI
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_AdaptorSignalType")]
         public static extern void delete_AdaptorSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
 
+        //For widget
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_New")]
+        public static extern global::System.IntPtr Widget_New(string jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Widget__SWIG_0")]
+        public static extern global::System.IntPtr new_Widget__SWIG_0();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Widget__SWIG_1")]
+        public static extern global::System.IntPtr new_Widget__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_Assign")]
+        public static extern global::System.IntPtr Widget_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_Widget")]
+        public static extern void delete_Widget(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_CreateSignal")]
+        public static extern global::System.IntPtr Widget_CreateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_TerminateSignal")]
+        public static extern global::System.IntPtr Widget_TerminateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_PauseSignal")]
+        public static extern global::System.IntPtr Widget_PauseSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_ResumeSignal")]
+        public static extern global::System.IntPtr Widget_ResumeSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_ResizeSignal")]
+        public static extern global::System.IntPtr Widget_ResizeSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_UpdateSignal")]
+        public static extern global::System.IntPtr Widget_UpdateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_New")]
+        public static extern global::System.IntPtr WidgetApplication_New(int jarg1, string jarg2, string jarg3);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetApplication__SWIG_0")]
+        public static extern global::System.IntPtr new_WidgetApplication__SWIG_0();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetApplication__SWIG_1")]
+        public static extern global::System.IntPtr new_WidgetApplication__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_Assign")]
+        public static extern global::System.IntPtr WidgetApplication_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetApplication")]
+        public static extern void delete_WidgetApplication(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_MainLoop")]
+        public static extern void WidgetApplication_MainLoop(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_Quit")]
+        public static extern void WidgetApplication_Quit(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_GetWindow")]
+        public static extern global::System.IntPtr WidgetApplication_GetWindow(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_GetResourcePath")]
+        public static extern string WidgetApplication_GetResourcePath();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_InitSignal")]
+        public static extern global::System.IntPtr WidgetApplication_InitSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_TerminateSignal")]
+        public static extern global::System.IntPtr WidgetApplication_TerminateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_LanguageChangedSignal")]
+        public static extern global::System.IntPtr WidgetApplication_LanguageChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_RegionChangedSignal")]
+        public static extern global::System.IntPtr WidgetApplication_RegionChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_BatteryLowSignal")]
+        public static extern global::System.IntPtr WidgetApplication_BatteryLowSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_MemoryLowSignal")]
+        public static extern global::System.IntPtr WidgetApplication_MemoryLowSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_New")]
+        public static extern global::System.IntPtr WidgetData_New(string jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, string jarg3);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetData__SWIG_0")]
+        public static extern global::System.IntPtr new_WidgetData__SWIG_0();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetData__SWIG_1")]
+        public static extern global::System.IntPtr new_WidgetData__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_Assign")]
+        public static extern global::System.IntPtr WidgetData_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetData")]
+        public static extern void delete_WidgetData(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetInstanceId")]
+        public static extern string WidgetData_GetInstanceId(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetArgs")]
+        public static extern global::System.IntPtr WidgetData_GetArgs(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetContent")]
+        public static extern string WidgetData_GetContent(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetWindow")]
+        public static extern global::System.IntPtr WidgetData_GetWindow(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetArgs")]
+        public static extern void WidgetData_SetArgs(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetContent")]
+        public static extern void WidgetData_SetContent(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetWindow")]
+        public static extern void WidgetData_SetWindow(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Empty")]
+        public static extern bool WidgetInstanceCreateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_GetConnectionCount")]
+        public static extern uint WidgetInstanceCreateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Connect")]
+        public static extern void WidgetInstanceCreateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Disconnect")]
+        public static extern void WidgetInstanceCreateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Emit")]
+        public static extern void WidgetInstanceCreateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceCreateSignalType")]
+        public static extern global::System.IntPtr new_WidgetInstanceCreateSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceCreateSignalType")]
+        public static extern void delete_WidgetInstanceCreateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Empty")]
+        public static extern bool WidgetInstanceTerminateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_GetConnectionCount")]
+        public static extern uint WidgetInstanceTerminateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Connect")]
+        public static extern void WidgetInstanceTerminateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Disconnect")]
+        public static extern void WidgetInstanceTerminateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Emit")]
+        public static extern void WidgetInstanceTerminateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, int jarg4);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceTerminateSignalType")]
+        public static extern global::System.IntPtr new_WidgetInstanceTerminateSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceTerminateSignalType")]
+        public static extern void delete_WidgetInstanceTerminateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Empty")]
+        public static extern bool WidgetInstancePauseOrResumeSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_GetConnectionCount")]
+        public static extern uint WidgetInstancePauseOrResumeSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Connect")]
+        public static extern void WidgetInstancePauseOrResumeSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Disconnect")]
+        public static extern void WidgetInstancePauseOrResumeSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Emit")]
+        public static extern void WidgetInstancePauseOrResumeSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstancePauseOrResumeSignalType")]
+        public static extern global::System.IntPtr new_WidgetInstancePauseOrResumeSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstancePauseOrResumeSignalType")]
+        public static extern void delete_WidgetInstancePauseOrResumeSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Empty")]
+        public static extern bool WidgetInstanceResizeSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_GetConnectionCount")]
+        public static extern uint WidgetInstanceResizeSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Connect")]
+        public static extern void WidgetInstanceResizeSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Disconnect")]
+        public static extern void WidgetInstanceResizeSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Emit")]
+        public static extern void WidgetInstanceResizeSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceResizeSignalType")]
+        public static extern global::System.IntPtr new_WidgetInstanceResizeSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceResizeSignalType")]
+        public static extern void delete_WidgetInstanceResizeSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Empty")]
+        public static extern bool WidgetInstanceUpdateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_GetConnectionCount")]
+        public static extern uint WidgetInstanceUpdateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Connect")]
+        public static extern void WidgetInstanceUpdateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Disconnect")]
+        public static extern void WidgetInstanceUpdateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Emit")]
+        public static extern void WidgetInstanceUpdateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, int jarg4);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceUpdateSignalType")]
+        public static extern global::System.IntPtr new_WidgetInstanceUpdateSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceUpdateSignalType")]
+        public static extern void delete_WidgetInstanceUpdateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Empty")]
+        public static extern bool AppSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_GetConnectionCount")]
+        public static extern uint AppSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Connect")]
+        public static extern void AppSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Disconnect")]
+        public static extern void AppSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Emit")]
+        public static extern void AppSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_AppSignalType")]
+        public static extern global::System.IntPtr new_AppSignalType();
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_AppSignalType")]
+        public static extern void delete_AppSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_SWIGUpcast")]
+        public static extern global::System.IntPtr Widget_SWIGUpcast(global::System.IntPtr jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_SWIGUpcast")]
+        public static extern global::System.IntPtr WidgetApplication_SWIGUpcast(global::System.IntPtr jarg1);
+
+        [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SWIGUpcast")]
+        public static extern global::System.IntPtr WidgetData_SWIGUpcast(global::System.IntPtr jarg1);
     }
 }
index 1939974..e6c72b6 100755 (executable)
@@ -6296,6 +6296,9 @@ class NDalicPINVOKE {
   [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Application_New__SWIG_3")]
   public static extern global::System.IntPtr Application_New__SWIG_3(int jarg1, string jarg3, int jarg4);
 
+  [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Application_New__MANUAL_4")]
+  public static extern global::System.IntPtr Application_New__MANUAL_4(int jarg1, string jarg2, string jarg3, int jarg4);
+
   [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Application__SWIG_0")]
   public static extern global::System.IntPtr new_Application__SWIG_0();
 
@@ -6428,7 +6431,6 @@ class NDalicPINVOKE {
   [global::System.Runtime.InteropServices.DllImport("NDalic", EntryPoint="CSharp_Dali_Application_New__SWIG_4")]
   public static extern global::System.IntPtr Application_New__SWIG_4(int jarg1, string jarg3, int jarg4, global::System.Runtime.InteropServices.HandleRef jarg5);
 
-
   [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_TimerSignalType_Empty")]
   public static extern bool TimerSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
 
index 05744b8..3f28755 100755 (executable)
@@ -30,6 +30,8 @@ namespace Tizen.NUI
         /// Application instance to connect event.
         /// </summary>
         protected Application _application;
+        private string _stylesheet = "";
+        private NUIApplication.WindowMode _windowMode = NUIApplication.WindowMode.Opaque;
 
         /// <summary>
         /// Dictionary to contain each type of event callback.
@@ -41,7 +43,6 @@ namespace Tizen.NUI
         /// </summary>
         public NUICoreBackend()
         {
-            _application = Application.NewApplication();
         }
 
         /// <summary>
@@ -49,7 +50,7 @@ namespace Tizen.NUI
         /// </summary>
         public NUICoreBackend(string stylesheet)
         {
-            _application = Application.NewApplication(stylesheet);
+            _stylesheet = stylesheet;
         }
 
         /// <summary>
@@ -57,7 +58,8 @@ namespace Tizen.NUI
         /// </summary>
         public NUICoreBackend(string stylesheet, NUIApplication.WindowMode windowMode)
         {
-            _application = Application.NewApplication(stylesheet, (Application.WindowMode)windowMode );
+            _stylesheet = stylesheet;
+            _windowMode = windowMode;
         }
 
         /// <summary>
@@ -89,7 +91,10 @@ namespace Tizen.NUI
         /// </summary>
         public void Dispose()
         {
-            _application.Dispose();
+            if(_application != null)
+            {
+                _application.Dispose();
+            }
         }
 
         /// <summary>
@@ -97,7 +102,20 @@ namespace Tizen.NUI
         /// </summary>
         public void Exit()
         {
-            _application.Quit();
+            if(_application != null)
+            {
+                _application.Quit();
+            }
+        }
+
+        /// <summary>
+        /// Ensures that the function passed in is called from the main loop when it is idle.
+        /// </summary>
+        /// <param name="func">The function to call</param>
+        /// <returns>true if added successfully, false otherwise</returns>
+        public bool AddIdle(System.Delegate func)
+        {
+            return _application.AddIdle(func);
         }
 
         /// <summary>
@@ -107,6 +125,17 @@ namespace Tizen.NUI
         public void Run(string[] args)
         {
             TizenSynchronizationContext.Initialize();
+
+            args[0] = Tizen.Applications.Application.Current.ApplicationInfo.ExecutablePath;
+            if (args.Length == 1)
+            {
+                _application = Application.NewApplication();
+            }
+            else if (args.Length > 1)
+            {
+                _application = Application.NewApplication(args, _stylesheet, (Application.WindowMode)_windowMode);
+            }
+
             _application.BatteryLow += OnBatteryLow;
             _application.LanguageChanged += OnLanguageChanged;
             _application.MemoryLow += OnMemoryLow;
@@ -221,10 +250,9 @@ namespace Tizen.NUI
         private void OnAppControl(object source, NUIApplicationAppControlEventArgs e)
         {
             Log.Debug("NUI", "NUICorebackend OnAppControl Called");
-            /* can invoke after making new api which getting control handle at application.
             var handler = Handlers[EventType.AppControlReceived] as Action<AppControlReceivedEventArgs>;
-            handler?.Invoke();
-            */
+            SafeAppControlHandle handle = new SafeAppControlHandle(e.VoidP,false);
+            handler?.Invoke( new AppControlReceivedEventArgs(new ReceivedAppControl(handle)) );
         }
 
         /// <summary>
diff --git a/src/Tizen.NUI/src/internal/NUIWidgetCoreBackend.cs b/src/Tizen.NUI/src/internal/NUIWidgetCoreBackend.cs
new file mode 100755 (executable)
index 0000000..ec05e43
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+using Tizen.Applications.CoreBackend;
+using Tizen.Applications;
+
+namespace Tizen.NUI
+{
+    class NUIWidgetCoreBackend : ICoreBackend
+    {
+        /// <summary>
+        /// Application instance to connect event.
+        /// </summary>
+        protected WidgetApplication _application;
+        private string _stylesheet = "";
+
+        /// <summary>
+        /// Dictionary to contain each type of event callback.
+        /// </summary>
+        protected IDictionary<EventType, object> Handlers = new Dictionary<EventType, object>();
+
+        /// <summary>
+        /// The default Constructor.
+        /// </summary>
+        public NUIWidgetCoreBackend()
+        {
+            //Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend called");
+            //_application = WidgetApplication.NewWidgetApplication();
+        }
+
+        /// <summary>
+        /// The constructor with stylesheet.
+        /// </summary>
+        public NUIWidgetCoreBackend(string stylesheet)
+        {
+            _stylesheet = stylesheet;
+            //_application = WidgetApplication.NewWidgetApplication(stylesheet);
+        }
+
+        /// <summary>
+        /// Add NUIWidgetApplication event to Application.
+        /// Put each type of event callback in Dictionary.
+        /// </summary>
+        /// <param name="evType">Type of event</param>
+        /// <param name="handler">Event callback</param>
+        public void AddEventHandler(EventType evType, Action handler)
+        {
+            Handlers.Add(evType, handler);
+        }
+
+        /// <summary>
+        /// Add NUIWidgetApplication event to Application.
+        /// Put each type of event callback in Dictionary.
+        /// </summary>
+        /// <typeparam name="TEventArgs">Argument type for the event</typeparam>
+        /// <param name="evType">Type of event</param>
+        /// <param name="handler">Event callback</param>
+        public void AddEventHandler<TEventArgs>(EventType evType, Action<TEventArgs> handler) where TEventArgs : EventArgs
+        {
+            Handlers.Add(evType, handler);
+        }
+
+
+        /// <summary>
+        /// Dispose function.
+        /// </summary>
+        public void Dispose()
+        {
+            Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend Dispose called");
+            if (_application != null)
+            {
+                _application.Dispose();
+            }
+        }
+
+        /// <summary>
+        /// Exit Application.
+        /// </summary>
+        public void Exit()
+        {
+            Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend Exit called");
+            if (_application != null)
+            {
+                _application.Quit();
+            }
+        }
+
+        /// <summary>
+        /// Run Application.
+        /// </summary>
+        /// <param name="args">Arguments from commandline.</param>
+        public void Run(string[] args)
+        {
+            args[0] = Tizen.Applications.Application.Current.ApplicationInfo.ExecutablePath;
+            _application = WidgetApplication.NewWidgetApplication(args, _stylesheet);
+
+            TizenSynchronizationContext.Initialize();
+            _application.BatteryLow += OnBatteryLow;
+            _application.LanguageChanged += OnLanguageChanged;
+            _application.MemoryLow += OnMemoryLow;
+            _application.RegionChanged += OnRegionChanged; ;
+
+            _application.Init += OnInit;
+            _application.Terminate += OnTerminate;
+
+            _application.MainLoop();
+        }
+
+        private void OnInit(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+            Log.Fatal("NUI", "NUIWidgetApplication OnPreCreated Called");
+            var preCreateHandler = Handlers[EventType.PreCreated] as Action;
+            preCreateHandler?.Invoke();
+
+            Log.Fatal("NUI", "NUIWidgetApplication OnCreate Called");
+            var createHandler = Handlers[EventType.Created] as Action;
+            createHandler?.Invoke();
+
+        }
+
+        private void OnTerminate(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+            Log.Fatal("NUI", "NUIWidgetApplication OnTerminated Called");
+            var handler = Handlers[EventType.Terminated] as Action;
+            handler?.Invoke();
+        }
+
+        /// <summary>
+        /// Region changed event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for RegionChanged</param>
+        private void OnRegionChanged(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+            Log.Fatal("NUI", "NUIWidgetApplication OnRegionChanged Called");
+            var handler = Handlers[EventType.RegionFormatChanged] as Action<RegionFormatChangedEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke(new RegionFormatChangedEventArgs(""));
+        }
+
+        /// <summary>
+        /// Memory Low event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for MemoryLow</param>
+        private void OnMemoryLow(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+            Log.Fatal("NUI", "NUIWidgetApplication OnMemoryLow Called");
+            var handler = Handlers[EventType.LowMemory] as Action<LowMemoryEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke(new LowMemoryEventArgs(LowMemoryStatus.None));
+        }
+
+        /// <summary>
+        /// Language changed event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for LanguageChanged</param>
+        private void OnLanguageChanged(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+
+            Log.Fatal("NUI", "NUIWidgetApplication OnLanguageChanged Called");
+            var handler = Handlers[EventType.LocaleChanged] as Action<LocaleChangedEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke(new LocaleChangedEventArgs(""));
+
+        }
+
+        /// <summary>
+        /// Battery low event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for BatteryLow</param>
+        private void OnBatteryLow(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+        {
+            Log.Fatal("NUI", "NUIWidgetApplication OnBatteryLow Called");
+            var handler = Handlers[EventType.LowBattery] as Action<LowBatteryEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke(new LowBatteryEventArgs(LowBatteryStatus.None));
+
+        }
+
+        internal WidgetApplication WidgetApplicationHandle
+        {
+            get
+            {
+                return _application;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/SWIGTYPE_p_bundle.cs b/src/Tizen.NUI/src/internal/SWIGTYPE_p_bundle.cs
new file mode 100755 (executable)
index 0000000..2c1c4d0
--- /dev/null
@@ -0,0 +1,40 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    public class SWIGTYPE_p_bundle
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+        internal SWIGTYPE_p_bundle(global::System.IntPtr cPtr, bool futureUse)
+        {
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        protected SWIGTYPE_p_bundle()
+        {
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_bundle obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+    }
+
+}
index 956a3c6..e0f21c5 100755 (executable)
@@ -151,7 +151,7 @@ namespace Tizen.NUI
             get
             {
                 global::System.IntPtr cPtr = NDalicPINVOKE.TouchPoint_hitActor_get(swigCPtr);
-                View ret = (cPtr == global::System.IntPtr.Zero) ? null : Registry.GetManagedBaseHandleFromRefObject(cPtr) as View;
+                View ret = (cPtr == global::System.IntPtr.Zero) ? null : Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
                 return ret;
             }
index 94e182e..361ce7e 100755 (executable)
@@ -215,7 +215,7 @@ namespace Tizen.NUI
         public VisualBase GetVisual(int index)
         {
             System.IntPtr cPtr = NDalicManualPINVOKE.ViewWrapperImpl_GetVisual(swigCPtr, index);
-            VisualBase ret = Registry.GetManagedBaseHandleFromRefObject(cPtr) as VisualBase;
+            VisualBase ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as VisualBase;
 
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             return ret;
diff --git a/src/Tizen.NUI/src/internal/WidgetApplication.cs b/src/Tizen.NUI/src/internal/WidgetApplication.cs
new file mode 100755 (executable)
index 0000000..9d16fd9
--- /dev/null
@@ -0,0 +1,576 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+using System;
+using System.Runtime.InteropServices;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// Widget application
+    /// </summary>
+    internal class WidgetApplication : BaseHandle
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+        internal WidgetApplication(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.WidgetApplication_SWIGUpcast(cPtr), cMemoryOwn)
+        {
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetApplication obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        /// <summary>
+        /// To make Window instance be disposed.
+        /// </summary>
+        protected override void Dispose(DisposeTypes type)
+        {
+            if(disposed)
+            {
+                return;
+            }
+
+            if(type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (_initCallback != null)
+            {
+                this.InitSignal().Disconnect(_initCallback);
+            }
+            if (_terminateCallback != null)
+            {
+                this.TerminateSignal().Disconnect(_terminateCallback);
+            }
+            if (_languageChangedCallback != null)
+            {
+                this.LanguageChangedSignal().Disconnect(_languageChangedCallback);;
+            }
+            if (_regionChangedCallback != null)
+            {
+                this.RegionChangedSignal().Disconnect(_regionChangedCallback);
+            }
+            if (_batteryLowCallback != null)
+            {
+                this.BatteryLowSignal().Disconnect(_batteryLowCallback);
+            }
+            if (_memoryLowCallback != null)
+            {
+                this.MemoryLowSignal().Disconnect(_memoryLowCallback);
+            }
+            
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                if (swigCMemOwn)
+                {
+                    swigCMemOwn = false;
+                    NDalicManualPINVOKE.delete_WidgetApplication(swigCPtr);
+                }
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            base.Dispose(type);
+        }
+
+        internal static WidgetApplication GetWidgetApplicationFromPtr(global::System.IntPtr cPtr)
+        {
+            WidgetApplication ret = new WidgetApplication(cPtr, false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public static WidgetApplication instance
+        {
+            get
+            {
+                return _instance;
+            }
+        }
+
+        internal void SetupDelegates()
+        {
+            InitDelegateInternal initializeCallback = new InitDelegateInternal(Initialization);
+
+            NUILog.Debug("InitSignal connection count");
+            this.InitSignal().Connect(initializeCallback);
+            NUILog.Debug("InitSignal connection count = " + InitSignal().GetConnectionCount());
+        }
+
+        public static WidgetApplication NewWidgetApplication(string[] args, string stylesheet)
+        {
+            WidgetApplication ret = New(args, stylesheet);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+            // we've got an application now connect the signals
+            ret.SetupDelegates();
+            _instance = ret;
+            return ret;
+        }
+
+        public static WidgetApplication New(string[] args, string stylesheet)
+        {
+            int argc = args.Length;
+            string argvStr = string.Join(" ", args);
+
+            WidgetApplication ret = new WidgetApplication(NDalicManualPINVOKE.WidgetApplication_New(argc, argvStr, stylesheet), true);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+        internal WidgetApplication(WidgetApplication widgetApplication) : this(NDalicManualPINVOKE.new_WidgetApplication__SWIG_1(WidgetApplication.getCPtr(widgetApplication)), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        internal WidgetApplication Assign(WidgetApplication widgetApplication)
+        {
+            WidgetApplication ret = new WidgetApplication(NDalicManualPINVOKE.WidgetApplication_Assign(swigCPtr, WidgetApplication.getCPtr(widgetApplication)), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// This starts the application.
+        /// </summary>
+        public void MainLoop()
+        {
+            NDalicManualPINVOKE.WidgetApplication_MainLoop(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+            {
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        /// <summary>
+        /// This quits the application.
+        /// Tizen applications should use Lower to improve re-start performance unless they need to Quit completely.
+        /// </summary>
+        public void Quit()
+        {
+            NDalicManualPINVOKE.WidgetApplication_Quit(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Get window.
+        /// </summary>
+        /// <returns> The window for widget instance.</returns>
+        public Window GetWindow()
+        {
+            Window ret = new Window(NDalicManualPINVOKE.WidgetApplication_GetWindow(swigCPtr), true);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Get path application resources are stored at.
+        /// </summary>
+        /// <returns>The full path of the resources</returns>
+        public static string GetResourcePath()
+        {
+            string ret = NDalicManualPINVOKE.WidgetApplication_GetResourcePath();
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via widget app event signal.
+        /// </summary>
+        public class WidgetApplicationEventArgs : EventArgs
+        {
+            /// <summary>
+            /// Widget application.
+            /// </summary>
+            public WidgetApplication WidgetApplication
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void InitCallbackType(IntPtr widgetApplication);
+        private InitCallbackType _initCallback;
+        private DaliEventHandler<object,WidgetApplicationEventArgs> _initEventHandler;
+
+        /// <summary>
+        /// Init event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> Init
+        {
+            add
+            {
+                if (_initEventHandler == null)
+                {
+                    _initCallback = new InitCallbackType( OnInit);
+                    InitSignal().Connect(_initCallback);
+                }
+
+                _initEventHandler += value;
+            }
+
+            remove
+            {
+                _initEventHandler -= value;
+
+                if (_initEventHandler == null && InitSignal().Empty() == false)
+                {
+                   InitSignal().Disconnect(_initCallback);
+                }
+            }
+        }
+
+        private void OnInit(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_initEventHandler != null)
+            {
+                _initEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType InitSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_InitSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void TerminateCallbackType(IntPtr widgetApplication);
+        private TerminateCallbackType _terminateCallback;
+        private DaliEventHandler<object, WidgetApplicationEventArgs> _terminateEventHandler;
+
+        /// <summary>
+        /// Terminate event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> Terminate
+        {
+            add
+            {
+                if (_terminateEventHandler == null)
+                {
+                    _terminateCallback = new TerminateCallbackType( OnTerminate);
+                    TerminateSignal().Connect(_terminateCallback);
+                }
+
+                _terminateEventHandler += value;
+            }
+
+            remove
+            {
+                _terminateEventHandler -= value;
+
+                if (_terminateEventHandler == null && TerminateSignal().Empty() == false)
+                {
+                   TerminateSignal().Disconnect(_terminateCallback);
+                }
+            }
+        }
+
+        private void OnTerminate(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_terminateEventHandler != null)
+            {
+                _terminateEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType TerminateSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_TerminateSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void LanguageChangedCallbackType(IntPtr widgetApplication);
+        private LanguageChangedCallbackType _languageChangedCallback;
+        private DaliEventHandler<object, WidgetApplicationEventArgs> _languageChangedEventHandler;
+
+        /// <summary>
+        /// LanguageChanged event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> LanguageChanged
+        {
+            add
+            {
+                if (_languageChangedEventHandler == null)
+                {
+                    _languageChangedCallback = new LanguageChangedCallbackType( OnLanguageChanged);
+                    LanguageChangedSignal().Connect(_languageChangedCallback);
+                }
+
+                _languageChangedEventHandler += value;
+            }
+
+            remove
+            {
+                _languageChangedEventHandler -= value;
+
+                if (_languageChangedEventHandler == null && LanguageChangedSignal().Empty() == false)
+                {
+                   LanguageChangedSignal().Disconnect(_languageChangedCallback);
+                }
+            }
+        }
+
+        private void OnLanguageChanged(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_languageChangedEventHandler != null)
+            {
+                _languageChangedEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType LanguageChangedSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_LanguageChangedSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void RegionChangedCallbackType(IntPtr widgetApplication);
+        private RegionChangedCallbackType _regionChangedCallback;
+        private DaliEventHandler<object, WidgetApplicationEventArgs> _regionChangedEventHandler;
+
+        /// <summary>
+        /// RegionChanged event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> RegionChanged
+        {
+            add
+            {
+                if (_regionChangedEventHandler == null)
+                {
+                    _regionChangedCallback = new RegionChangedCallbackType( OnRegionChanged );
+                    RegionChangedSignal().Connect(_regionChangedCallback);
+                }
+
+                _regionChangedEventHandler += value;
+            }
+
+            remove
+            {
+                _regionChangedEventHandler -= value;
+
+                if (_regionChangedEventHandler == null && RegionChangedSignal().Empty() == false)
+                {
+                   RegionChangedSignal().Disconnect(_regionChangedCallback);
+                }
+            }
+        }
+
+        private void OnRegionChanged(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_regionChangedEventHandler != null)
+            {
+                _regionChangedEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType RegionChangedSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_RegionChangedSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void BatteryLowCallbackType(IntPtr widgetApplication);
+        private BatteryLowCallbackType _batteryLowCallback;
+        private DaliEventHandler<object, WidgetApplicationEventArgs> _batteryLowEventHandler;
+
+        /// <summary>
+        /// BatteryLow event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> BatteryLow
+        {
+            add
+            {
+                if (_batteryLowEventHandler == null)
+                {
+                    _batteryLowCallback = new BatteryLowCallbackType( OnBatteryLow );
+                    BatteryLowSignal().Connect(_batteryLowCallback);
+                }
+
+                _batteryLowEventHandler += value;
+            }
+
+            remove
+            {
+                _batteryLowEventHandler -= value;
+
+                if (_batteryLowEventHandler == null && BatteryLowSignal().Empty() == false)
+                {
+                   BatteryLowSignal().Disconnect(_batteryLowCallback);
+                }
+            }
+        }
+
+        private void OnBatteryLow(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_batteryLowEventHandler != null)
+            {
+                _batteryLowEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType BatteryLowSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_BatteryLowSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void MemoryLowCallbackType(IntPtr widgetApplication);
+        private MemoryLowCallbackType _memoryLowCallback;
+        private DaliEventHandler<object, WidgetApplicationEventArgs> _memoryLowEventHandler;
+
+        /// <summary>
+        /// MemoryLow event.
+        /// </summary>
+        public event DaliEventHandler<object, WidgetApplicationEventArgs> MemoryLow
+        {
+            add
+            {
+                if (_memoryLowEventHandler == null)
+                {
+                    _memoryLowCallback = new MemoryLowCallbackType (OnMemoryLow);
+                    MemoryLowSignal().Connect(_memoryLowCallback);
+                }
+
+                _memoryLowEventHandler += value;
+            }
+
+            remove
+            {
+                _memoryLowEventHandler -= value;
+
+                if (_memoryLowEventHandler == null && MemoryLowSignal().Empty() == false)
+                {
+                   MemoryLowSignal().Disconnect(_memoryLowCallback);
+                }
+            }
+        }
+
+        private void OnMemoryLow(IntPtr widgetApplication)
+        {
+            WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+            if (widgetApplication != null)
+            {
+                e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+            }
+
+            if (_memoryLowEventHandler != null)
+            {
+                _memoryLowEventHandler(this, e);
+            }
+        }
+
+        internal AppSignalType MemoryLowSignal()
+        {
+            AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_MemoryLowSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public delegate void InitDelegate();
+
+        public delegate void TerminateDelegate();
+
+        public delegate void LanguageChangedDelegate();
+
+        public delegate void RegionChangedDelegate();
+
+        public delegate void BatteryLowDelegate();
+
+        public delegate void MemoryLowDelegate();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void InitDelegateInternal();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void TerminateDelegateInternal();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void LanguageChangedDelegateInternal();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void RegionChangedDelegateInternal();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void BatteryLowDelegateInternal();
+
+        [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+        internal delegate void MemoryLowDelegateInternal();
+
+        static void Initialization()
+        {
+            // instance.InitDelegate();
+        }
+
+        private static WidgetApplication _instance; //singleton
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/WidgetInstanceCreateSignalType.cs b/src/Tizen.NUI/src/internal/WidgetInstanceCreateSignalType.cs
new file mode 100755 (executable)
index 0000000..16543dd
--- /dev/null
@@ -0,0 +1,143 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    internal class WidgetInstanceCreateSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal WidgetInstanceCreateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceCreateSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~WidgetInstanceCreateSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_WidgetInstanceCreateSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.WidgetInstanceCreateSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, Uint16Pair arg3)
+        {
+            NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), Uint16Pair.getCPtr(arg3));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public WidgetInstanceCreateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceCreateSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/WidgetInstancePauseOrResumeSignalType.cs b/src/Tizen.NUI/src/internal/WidgetInstancePauseOrResumeSignalType.cs
new file mode 100755 (executable)
index 0000000..49a170b
--- /dev/null
@@ -0,0 +1,143 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    internal class WidgetInstancePauseOrResumeSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal WidgetInstancePauseOrResumeSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstancePauseOrResumeSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~WidgetInstancePauseOrResumeSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_WidgetInstancePauseOrResumeSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetData arg)
+        {
+            NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public WidgetInstancePauseOrResumeSignalType() : this(NDalicManualPINVOKE.new_WidgetInstancePauseOrResumeSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/WidgetInstanceResizeSignalType.cs b/src/Tizen.NUI/src/internal/WidgetInstanceResizeSignalType.cs
new file mode 100755 (executable)
index 0000000..0685f80
--- /dev/null
@@ -0,0 +1,142 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    internal class WidgetInstanceResizeSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal WidgetInstanceResizeSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceResizeSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~WidgetInstanceResizeSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_WidgetInstanceResizeSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.WidgetInstanceResizeSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetData arg1, Uint16Pair arg2)
+        {
+            NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), Uint16Pair.getCPtr(arg2));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public WidgetInstanceResizeSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceResizeSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/WidgetInstanceTerminateSignalType.cs b/src/Tizen.NUI/src/internal/WidgetInstanceTerminateSignalType.cs
new file mode 100755 (executable)
index 0000000..1e4327f
--- /dev/null
@@ -0,0 +1,142 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+namespace Tizen.NUI
+{
+
+    internal class WidgetInstanceTerminateSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal WidgetInstanceTerminateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceTerminateSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~WidgetInstanceTerminateSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_WidgetInstanceTerminateSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, Widget.WidgetTerminateType arg3)
+        {
+            NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), (int)arg3);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public WidgetInstanceTerminateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceTerminateSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/WidgetInstanceUpdateSignalType.cs b/src/Tizen.NUI/src/internal/WidgetInstanceUpdateSignalType.cs
new file mode 100755 (executable)
index 0000000..26480b5
--- /dev/null
@@ -0,0 +1,143 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+    internal class WidgetInstanceUpdateSignalType : global::System.IDisposable
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+        protected bool swigCMemOwn;
+
+        internal WidgetInstanceUpdateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+        {
+            swigCMemOwn = cMemoryOwn;
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceUpdateSignalType obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        //A Flag to check who called Dispose(). (By User or DisposeQueue)
+        private bool isDisposeQueued = false;
+        //A Flat to check if it is already disposed.
+        protected bool disposed = false;
+
+        ~WidgetInstanceUpdateSignalType()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        public void Dispose()
+        {
+            //Throw excpetion if Dispose() is called in separate thread.
+            if (!Window.IsInstalled())
+            {
+                throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+            }
+
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                System.GC.SuppressFinalize(this);
+            }
+        }
+
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                swigCMemOwn = false;
+                NDalicManualPINVOKE.delete_WidgetInstanceUpdateSignalType(swigCPtr);
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            disposed = true;
+        }
+
+        public bool Empty()
+        {
+            bool ret = NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Empty(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public uint GetConnectionCount()
+        {
+            uint ret = NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_GetConnectionCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            }
+        }
+
+        public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, int arg3)
+        {
+            NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), arg3);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        public WidgetInstanceUpdateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceUpdateSignalType(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+    }
+
+}
diff --git a/src/Tizen.NUI/src/internal/dotnetcore/AddedException.cs b/src/Tizen.NUI/src/internal/dotnetcore/AddedException.cs
deleted file mode 100755 (executable)
index be7d0dd..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*/
-
-namespace System
-{
-    public class ApplicationException : Exception
-    {
-        public ApplicationException()
-        {
-            new global::System.ApplicationException();
-        }
-
-        public ApplicationException(string message)
-        {
-            new global::System.ApplicationException(message);
-        }
-
-        public ApplicationException(string message, Exception innerException)
-        {
-            new global::System.ApplicationException(message, innerException);
-        }
-    }
-
-    public class SystemException : Exception
-    {
-        public SystemException()
-        {
-            new global::System.SystemException();
-        }
-
-        public SystemException(string message)
-        {
-            new global::System.SystemException(message);
-        }
-
-        public SystemException(string message, Exception innerException)
-        {
-            new global::System.SystemException(message, innerException);
-        }
-    }
-}
diff --git a/src/Tizen.NUI/src/internal/dotnetcore/HandleRef.cs b/src/Tizen.NUI/src/internal/dotnetcore/HandleRef.cs
deleted file mode 100755 (executable)
index db34d4a..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// ==++==
-// 
-//   Copyright (c) Microsoft Corporation.  All rights reserved.
-// 
-// ==--==
-namespace System.Runtime.InteropServices
-{
-
-    using System;
-
-    [System.Runtime.InteropServices.ComVisible(true)]
-    public struct HandleRef
-    {
-
-        // ! Do not add or rearrange fields as the EE depends on this layout.
-        //------------------------------------------------------------------
-        internal Object m_wrapper;
-        internal IntPtr m_handle;
-        //------------------------------------------------------------------
-
-
-        public HandleRef(Object wrapper, IntPtr handle)
-        {
-            m_wrapper = wrapper;
-            m_handle = handle;
-        }
-
-        public Object Wrapper
-        {
-            get
-            {
-                return m_wrapper;
-            }
-        }
-
-        public IntPtr Handle
-        {
-            get
-            {
-                return m_handle;
-            }
-        }
-
-
-        public static explicit operator IntPtr(HandleRef value)
-        {
-            return value.m_handle;
-        }
-
-        public static IntPtr ToIntPtr(HandleRef value)
-        {
-            return value.m_handle;
-        }
-    }
-}
index b0deba5..422e0ad 100755 (executable)
@@ -65,6 +65,17 @@ namespace Tizen.NUI
 
             }
 
+            if (_animationFinishedEventCallback != null)
+            {
+                FinishedSignal().Disconnect(_animationFinishedEventCallback);
+            }
+
+            if (_animationProgressReachedEventCallback != null)
+            {
+
+                ProgressReachedSignal().Disconnect(_animationProgressReachedEventCallback);
+            }
+
             if(this)
             {
                 this.Clear();
@@ -73,7 +84,6 @@ namespace Tizen.NUI
                 //throw new System.InvalidOperationException("Animation Instance should not be disposed until getting Finished event. Should be a global variable");
             }
 
-
             //Release your own unmanaged resources here.
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
@@ -175,7 +185,7 @@ namespace Tizen.NUI
                 if (_animationProgressReachedEventHandler == null && ProgressReachedSignal().Empty() == false)
                 {
                     NUILog.Debug("[remove before]ProgressReachedSignal().Empty=" + FinishedSignal().Empty() + " GetConnectionCount=" + FinishedSignal().GetConnectionCount());
-                    ProgressReachedSignal().Disconnect(_animationProgressReachedEventHandler);
+                    ProgressReachedSignal().Disconnect(_animationProgressReachedEventCallback);
                     NUILog.Debug("[remove after]ProgressReachedSignal().Empty=" + FinishedSignal().Empty() + " GetConnectionCount=" + FinishedSignal().GetConnectionCount());
                 }
             }
@@ -879,6 +889,23 @@ namespace Tizen.NUI
             return ret;
         }
 
+        private static bool? disableAnimation = null;
+        private bool DisableAnimation
+        {
+            get
+            {
+                if (disableAnimation.HasValue == false)
+                {
+                    string type = Environment.GetEnvironmentVariable("PlatformSmartType");
+                    if (type == "Entry")
+                        disableAnimation = true;
+                    else
+                        disableAnimation = false;
+                }
+                return disableAnimation.Value;
+            }
+        }
+
         /// <summary>
         /// Plays the animation.
         /// </summary>
@@ -886,9 +913,9 @@ namespace Tizen.NUI
         {
             NDalicPINVOKE.Animation_Play(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-#if DISABLE_ANIMATION
-            Stop(EndActions.StopFinal);
-#endif
+
+            if (DisableAnimation == true)
+                Stop(EndActions.StopFinal);
         }
 
         /// <summary>
@@ -908,10 +935,10 @@ namespace Tizen.NUI
         /// The delay time is not included in the looping time.<br/>
         /// When the delay time is negative value, it would treat as play immediately.<br/>
         /// </summary>
-        /// <param name="delayMiliSeconds">The delay time</param>
-        public void PlayAfter(int delayMiliSeconds)
+        /// <param name="delayMilliseconds">The delay time</param>
+        public void PlayAfter(int delayMilliseconds)
         {
-            NDalicPINVOKE.Animation_PlayAfter(swigCPtr, MilliSecondsToSeconds(delayMiliSeconds));
+            NDalicPINVOKE.Animation_PlayAfter(swigCPtr, MilliSecondsToSeconds(delayMilliseconds));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
index 37b8cfd..3803986 100755 (executable)
@@ -53,6 +53,8 @@ namespace Tizen.NUI.BaseComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            DisConnectFromSignals();
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -66,6 +68,34 @@ namespace Tizen.NUI.BaseComponents
             base.Dispose(type);
         }
 
+        private void DisConnectFromSignals()
+        {
+            // Save current CPtr.
+            global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+            // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+            swigCPtr = GetBaseHandleCPtrHandleRef;
+
+            if (_scrollableCompletedCallbackDelegate != null)
+            {
+                this.ScrollCompletedSignal().Disconnect(_scrollableCompletedCallbackDelegate);
+            }
+
+            if (_scrollableUpdatedCallbackDelegate != null)
+            {
+                this.ScrollUpdatedSignal().Disconnect(_scrollableUpdatedCallbackDelegate);
+            }
+
+            if (_scrollableStartedCallbackDelegate != null)
+            {
+                this.ScrollStartedSignal().Disconnect(_scrollableStartedCallbackDelegate);
+            }
+
+            // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+            // Restore current CPtr.
+            swigCPtr = currentCPtr;
+        }
+
         public class StartedEventArgs : EventArgs
         {
             private Vector2 _vector2;
index 5ccab67..11e8199 100755 (executable)
@@ -64,6 +64,11 @@ namespace Tizen.NUI.BaseComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_textEditorTextChangedCallbackDelegate != null)
+            {
+                TextChangedSignal().Disconnect(_textEditorTextChangedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -1342,9 +1347,9 @@ namespace Tizen.NUI.BaseComponents
                 }
                 switch (temp)
                 {
-                    case "WORD":
+                    case "WRAP_MODE_WORD":
                     return LineWrapMode.Word;
-                    case "CHARACTER":
+                    case "WRAP_MODE_CHARACTER":
                     return LineWrapMode.Character;
                     default:
                     return LineWrapMode.Word;
@@ -1357,12 +1362,12 @@ namespace Tizen.NUI.BaseComponents
                 {
                     case LineWrapMode.Word:
                     {
-                        temp = "WORD";
+                        temp = "WRAP_MODE_WORD";
                         break;
                     }
                     case LineWrapMode.Character:
                     {
-                        temp = "CHARACTER";
+                        temp = "WRAP_MODE_CHARACTER";
                         break;
                     }
                 }
index ba7d45c..09dc7d7 100755 (executable)
@@ -63,6 +63,16 @@ namespace Tizen.NUI.BaseComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_textFieldMaxLengthReachedCallbackDelegate != null)
+            {
+                this.MaxLengthReachedSignal().Disconnect(_textFieldMaxLengthReachedCallbackDelegate);
+            }
+
+            if (_textFieldTextChangedCallbackDelegate != null)
+            {
+                TextChangedSignal().Disconnect(_textFieldTextChangedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index 4abad84..83931f8 100755 (executable)
@@ -757,6 +757,25 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// TextColorAnimatable property.<br>
+        /// The color of the text that can be animatated.<br>
+        /// Animation framework can be used to change the color of the text when not using mark up.<br>
+        /// Not possible when text is auto scrolling. <br>
+        /// </summary>
+        public Color TextColorAnimatable
+        {
+            get
+            {
+                Color animatableColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
+                GetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE).Get(animatableColor);
+                return animatableColor;
+            }
+            set
+            {
+                SetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE, new Tizen.NUI.PropertyValue(value));
+            }
+        }
+
         /// The line count of text.
         /// </summary>
         public int LineCount
@@ -784,9 +803,9 @@ namespace Tizen.NUI.BaseComponents
                 }
                 switch (temp)
                 {
-                    case "WORD":
+                    case "WRAP_MODE_WORD":
                     return LineWrapMode.Word;
-                    case "CHARACTER":
+                    case "WRAP_MODE_CHARACTER":
                     return LineWrapMode.Character;
                     default:
                     return LineWrapMode.Word;
@@ -811,25 +830,5 @@ namespace Tizen.NUI.BaseComponents
                 SetProperty(TextLabel.Property.LINE_WRAP_MODE, new Tizen.NUI.PropertyValue(temp));
             }
         }
-
-        /// TextColorAnimatable property.<br>
-        /// The color of the text that can be animatated.<br>
-        /// Animation framework can be used to change the color of the text when not using mark up.<br>
-        /// Not possible when text is auto scrolling. <br>
-        /// </summary>
-        public Color TextColorAnimatable
-        {
-            get
-            {
-                Color animatableColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
-                GetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE).Get(animatableColor);
-                return animatableColor;
-            }
-            set
-            {
-                SetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE, new Tizen.NUI.PropertyValue(value));
-            }
-        }
-
     }
 }
index 0c8e0de..ae73ef1 100755 (executable)
@@ -55,6 +55,11 @@ namespace Tizen.NUI.BaseComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_videoViewFinishedCallbackDelegate != null)
+            {
+                FinishedSignal().Disconnect(_videoViewFinishedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index cedb4d0..d4a2bec 100755 (executable)
@@ -20,12 +20,10 @@ namespace Tizen.NUI.BaseComponents
     using System;
     using System.Runtime.InteropServices;
 
-
-
     /// <summary>
     /// View is the base class for all views.
     /// </summary>
-    public class View : Animatable //CustomActor => Animatable
+    public class View : Container
     {
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
 
@@ -40,6 +38,88 @@ namespace Tizen.NUI.BaseComponents
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
         }
 
+        // From Container Base class
+
+        /// <summary>
+        /// Adds a child view to this View.
+        /// </summary>
+        /// <seealso cref="Container::Add()">
+        /// </seealso>
+        public override void Add(View child)
+        {
+            NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+        /// </summary>
+        /// <seealso cref="Container::Remove()">
+        /// </seealso>
+        public override void Remove(View child)
+        {
+            NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Retrieves child view by index.
+        /// </summary>
+        /// <seealso cref="Container::GetChildAt()">
+        /// </seealso>
+        public override View GetChildAt(uint index)
+        {
+            IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
+
+            View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret ?? null;
+        }
+
+        /// <summary>
+        /// Retrieves the number of children held by the view.
+        /// </summary>
+        /// <seealso cref="Container::GetChildCount()">
+        /// </seealso>
+        protected override uint GetChildCount()
+        {
+            uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Get the Views parent
+        /// </summary>
+        /// <seealso cref="Container::GetParent()">
+        protected override Container GetParent()
+        {
+            Container ret;
+            IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
+
+            BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
+
+            if(basehandle is Layer)
+            {
+                ret = basehandle as Layer;
+            }
+            else
+            {
+                ret = basehandle as View;
+            }
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        ///
+
         // you can override it to clean-up your own resources.
         protected override void Dispose(DisposeTypes type)
         {
@@ -59,6 +139,8 @@ namespace Tizen.NUI.BaseComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            DisConnectFromSignals();
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -72,6 +154,99 @@ namespace Tizen.NUI.BaseComponents
             base.Dispose(type);
         }
 
+        private void DisConnectFromSignals()
+        {
+            // Save current CPtr.
+            global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+            // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+            swigCPtr = GetBaseHandleCPtrHandleRef;
+
+            if (_onRelayoutEventCallback != null)
+            {
+                this.OnRelayoutSignal().Disconnect(_onRelayoutEventCallback);
+            }
+
+            if (_offWindowEventCallback != null)
+            {
+                this.OffWindowSignal().Disconnect(_offWindowEventCallback);
+            }
+
+            if (_onWindowEventCallback != null)
+            {
+                this.OnWindowSignal().Disconnect(_onWindowEventCallback);
+            }
+
+            if (_wheelEventCallback != null)
+            {
+                this.WheelEventSignal().Disconnect(_wheelEventCallback);
+            }
+
+            if (_hoverEventCallback != null)
+            {
+                this.HoveredSignal().Disconnect(_hoverEventCallback);
+            }
+
+            if (_touchDataCallback != null)
+            {
+                this.TouchSignal().Disconnect(_touchDataCallback);
+            }
+
+            if (_ResourcesLoadedCallback != null)
+            {
+                this.ResourcesLoadedSignal().Disconnect(_ResourcesLoadedCallback);
+            }
+
+            if (_offWindowEventCallback != null)
+            {
+                this.OffWindowSignal().Disconnect(_offWindowEventCallback);
+            }
+
+            if (_onWindowEventCallback != null)
+            {
+                this.OnWindowSignal().Disconnect(_onWindowEventCallback);
+            }
+
+            if (_wheelEventCallback != null)
+            {
+                this.WheelEventSignal().Disconnect(_wheelEventCallback);
+            }
+
+            if (_hoverEventCallback != null)
+            {
+                this.HoveredSignal().Disconnect(_hoverEventCallback);
+            }
+
+            if (_touchDataCallback != null)
+            {
+                this.TouchSignal().Disconnect(_touchDataCallback);
+            }
+
+            if (_onRelayoutEventCallback != null)
+            {
+                this.OnRelayoutSignal().Disconnect(_onRelayoutEventCallback);
+            }
+
+            if (_keyCallback != null)
+            {
+                this.KeyEventSignal().Disconnect(_keyCallback);
+            }
+
+            if (_keyInputFocusLostCallback != null)
+            {
+                this.KeyInputFocusLostSignal().Disconnect(_keyInputFocusLostCallback);
+            }
+
+            if (_keyInputFocusGainedCallback != null)
+            {
+                this.KeyInputFocusGainedSignal().Disconnect(_keyInputFocusGainedCallback);
+            }
+
+            // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+            // Restore current CPtr.
+            swigCPtr = currentCPtr;
+        }
+
         private EventHandler _keyInputFocusGainedEventHandler;
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         private delegate void KeyInputFocusGainedCallbackType(IntPtr control);
@@ -850,9 +1025,10 @@ namespace Tizen.NUI.BaseComponents
         {
             View view = null;
 
-            if (Parent)
+            if (Parent is View)
             {
-                view = Parent.FindChildById(id);
+                View parentView = Parent as View;
+                view = parentView.FindChildById(id);
             }
 
             if (!view)
@@ -1699,17 +1875,6 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        /// <summary>
-        /// Retrieves the view's parent.<br>
-        /// </summary>
-        public View Parent
-        {
-            get
-            {
-                return GetParent();
-            }
-        }
-
         [Obsolete("Please do not use! this will be deprecated. Please use Visibility instead.")]
         public bool Visible
         {
@@ -2055,32 +2220,6 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
-        /// Adds a child view to this View.
-        /// </summary>
-        /// <pre>This View(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
-        /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
-        /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
-        /// <param name="child">The child</param>
-        public void Add(View child)
-        {
-            NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-        }
-
-        /// <summary>
-        /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
-        /// </summary>
-        /// <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
-        /// <param name="child">The child</param>
-        public void Remove(View child)
-        {
-            NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-        }
-
-        /// <summary>
         /// Removes a View from its Parent View / Layer. If the View has no parent, this method does nothing.
         /// </summary>
         /// <pre>The (child) View has been initialized. </pre>
@@ -2092,36 +2231,6 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
-        /// Retrieves the number of children held by the view.
-        /// </summary>
-        /// <pre>The View has been initialized.</pre>
-        /// <returns>The number of children</returns>
-        internal uint GetChildCount()
-        {
-            uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret;
-        }
-
-        /// <summary>
-        /// Retrieves child view by index.
-        /// </summary>
-        /// <pre>The View has been initialized.</pre>
-        /// <param name="index">The index of the child to retrieve</param>
-        /// <returns>The view for the given index or empty handle if children not initialized</returns>
-        public View GetChildAt(uint index)
-        {
-            IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
-
-            View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
-
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret ?? null;
-        }
-
-        /// <summary>
         /// Search through this view's hierarchy for an view with the given name.
         /// The view itself is also considered in the search.
         /// </summary>
@@ -2150,47 +2259,6 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
-        /*internal View GetParent()
-        {
-            View ret;
-            IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
-
-            BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
-
-            if(basehandle is Layer)
-            {
-                ret = new View(cPtr,false);
-            }
-            else
-            {
-                ret = basehandle as View;
-            }
-
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret;
-        }*/
-
-        internal View GetParent()
-        {
-            View ret;
-            IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
-
-            BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
-
-            if(basehandle is Layer)
-            {
-                View ret2 = new View(cPtr,false);
-                return ret2;
-            }
-
-            ret = basehandle as View;
-
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret;
-        }
-
         internal void SetParentOrigin(Vector3 origin)
         {
             NDalicPINVOKE.Actor_SetParentOrigin(swigCPtr, Vector3.getCPtr(origin));
@@ -3893,6 +3961,32 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        [Obsolete("Please DO NOT use! This will be deprecated! Please use 'Container GetParent()' instead!")]
+        public View Parent
+        {
+            get
+            {
+                View ret;
+                IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
+
+                BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
+
+                if (basehandle is Layer)
+                {
+                    ret = new View(cPtr, false);
+                }
+                else
+                {
+                    ret = basehandle as View;
+                }
+
+                if (NDalicPINVOKE.SWIGPendingException.Pending)
+                    throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+                return ret;
+            }
+        }
+
+
 
 
 
index dc36895..d33ce5d 100755 (executable)
@@ -57,7 +57,7 @@ namespace Tizen.NUI.BaseComponents
             CustomViewRegistry.Instance.Register(CreateInstance, typeof(VisualView));
         }
 
-        public VisualView() : base(typeof(VisualView).Name, CustomViewBehaviour.ViewBehaviourDefault)
+        public VisualView() : base(typeof(VisualView).FullName, CustomViewBehaviour.ViewBehaviourDefault)
         {
         }
 
index c692895..40ed2a1 100755 (executable)
@@ -25,12 +25,16 @@ namespace Tizen.NUI
 
         internal BaseHandle(global::System.IntPtr cPtr, bool cMemoryOwn)
         {
+            //to catch derived classes dali native exceptions
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
             _registerMe = swigCMemOwn = cMemoryOwn;
 
             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
 
             // using copy constructor to create another native handle so Registry.Unregister works fine.
             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, NDalicPINVOKE.new_BaseHandle__SWIG_2(swigCPtr));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
             if (_registerMe)
             {
@@ -47,6 +51,7 @@ namespace Tizen.NUI
 
             // using copy constructor to create another native handle so Registry.Unregister works fine.
             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, NDalicPINVOKE.new_BaseHandle__SWIG_2(swigCPtr));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
             if (_registerMe)
             {
@@ -337,6 +342,14 @@ namespace Tizen.NUI
             return ret;
         }
 
+        internal global::System.Runtime.InteropServices.HandleRef GetBaseHandleCPtrHandleRef
+        {
+            get
+            {
+                return swigCPtr;
+            }
+        }
+
     }
 
 }
diff --git a/src/Tizen.NUI/src/public/Container.cs b/src/Tizen.NUI/src/public/Container.cs
new file mode 100755 (executable)
index 0000000..515874e
--- /dev/null
@@ -0,0 +1,114 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+using System;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    ///
+    /// Container is an abstract class to be inherited from by classes that desire to have Views
+    /// added to them.
+    ///
+    /// </summary>
+
+    public abstract class Container : Animatable
+    {
+
+        internal Container(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+            // No un-managed data hence no need to store a native ptr
+        }
+
+        protected override void Dispose(DisposeTypes type)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            base.Dispose(type);
+        }
+
+
+        /// <summary>
+        /// Adds a child view to this Container.
+        /// </summary>
+        /// <pre>This Container(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
+        /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
+        /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
+        /// <param name="view">The child view to add</param>
+        public abstract void Add( View view );
+
+        /// <summary>
+        /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+        /// </summary>
+        /// <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
+        /// <param name="child">The child</param>
+        public abstract void Remove( View view );
+
+        /// <summary>
+        /// Retrieves child view by index.
+        /// </summary>
+        /// <pre>The View has been initialized.</pre>
+        /// <param name="index">The index of the child to retrieve</param>
+        /// <returns>The view for the given index or empty handle if children not initialized</returns>
+        public abstract View GetChildAt( uint index );
+
+        /// <summary>
+        /// Get the parent of this container
+        /// </summary>
+        /// <pre>The child container has been initialized.</pre>
+        /// <returns>The parent container</returns>
+        protected abstract Container GetParent();
+
+        /// <summary>
+        /// Get the number of children for this container
+        /// </summary>
+        /// <pre>The container has been initialized.</pre>
+        /// <returns>number of children</returns>
+        protected abstract UInt32 GetChildCount();
+
+        /// <summary>
+        /// Get the parent Container
+        /// Read only
+        /// </summary>
+        /// <pre>The child container has been initialized.</pre>
+        /// <returns>The parent container</returns>
+        public Container Parent
+        {
+            get
+            {
+                return GetParent();
+            }
+        }
+
+        /// <summary>
+        /// Get the number of children for this container
+        /// Read only
+        /// </summary>
+        /// <pre>The container has been initialized.</pre>
+        /// <returns>number of children</returns>
+        public uint ChildCount
+        {
+            get
+            {
+                return GetChildCount();
+            }
+        }
+    }
+} // namespace Tizen.NUI
\ No newline at end of file
index c528820..ac1aaff 100755 (executable)
@@ -65,6 +65,31 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_focusedViewEnterKeyEventCallback2 != null)
+            {
+                FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback2);
+            }
+
+            if (_focusedViewEnterKeyEventCallback != null)
+            {
+                FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback);
+            }
+
+            if (_focusGroupChangedEventCallback != null)
+            {
+                FocusGroupChangedSignal().Disconnect(_focusGroupChangedEventCallback);
+            }
+
+            if (_focusChangedEventCallback != null)
+            {
+                FocusChangedSignal().Disconnect(_focusChangedEventCallback);
+            }
+
+            if (_preFocusChangeCallback != null)
+            {
+                PreFocusChangeSignal().Disconnect(_preFocusChangeCallback);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -403,7 +428,7 @@ namespace Tizen.NUI
             {
                 _focusedViewEnterKeyEventHandler -= value;
 
-                if (_focusedViewEnterKeyEventCallback == null && FocusedViewEnterKeySignal().Empty() == false)
+                if (_focusedViewEnterKeyEventCallback != null && FocusedViewEnterKeySignal().Empty() == false)
                 {
                     FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback);
                 }
@@ -729,7 +754,7 @@ namespace Tizen.NUI
             {
                 _focusedViewEnterKeyEventHandler2 -= value;
 
-                if (_focusedViewEnterKeyEventCallback2 == null && FocusedViewEnterKeySignal().Empty() == false)
+                if (_focusedViewEnterKeyEventCallback2 != null && FocusedViewEnterKeySignal().Empty() == false)
                 {
                     FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback2);
                 }
index 16f5728..946f353 100755 (executable)
@@ -54,7 +54,37 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
-            if (swigCPtr.Handle != IntPtr.Zero)
+            if (_keyboardTypeChangedEventCallback != null)
+            {
+                KeyboardTypeChangedSignal().Disconnect(_keyboardTypeChangedEventCallback);
+            }
+
+            if (_imfManagerLanguageChangedEventCallback != null)
+            {
+                LanguageChangedSignal().Disconnect(_imfManagerLanguageChangedEventCallback);
+            }
+
+            if (_imfManagerResizedEventCallback != null)
+            {
+                ResizedSignal().Disconnect(_imfManagerResizedEventCallback);
+            }
+
+            if (_imfManagerStatusChangedEventCallback != null)
+            {
+                StatusChangedSignal().Disconnect(_imfManagerStatusChangedEventCallback);
+            }
+
+            if (_imfManagerEventReceivedEventCallback != null)
+            {
+                EventReceivedSignal().Disconnect(_imfManagerEventReceivedEventCallback);
+            }
+
+            if (_imfManagerActivatedEventCallback != null)
+            {
+                ActivatedSignal().Disconnect(_imfManagerActivatedEventCallback);
+            }
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
                 {
index 17179f8..f4aaa35 100755 (executable)
@@ -22,7 +22,7 @@ namespace Tizen.NUI
     /// <summary>
     /// Layers provide a mechanism for overlaying groups of actors on top of each other.
     /// </summary>
-    public class Layer : Animatable
+    public class Layer : Container
     {
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
 
@@ -36,6 +36,64 @@ namespace Tizen.NUI
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
         }
 
+        /// from Container base class
+
+        /// <summary>
+        /// Adds a child view to this layer.
+        /// </summary>
+        /// <seealso cref="Container::Add()">
+        /// </seealso>
+        public override void Add(View child)
+        {
+            NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
+        /// </summary>
+        /// <seealso cref="Container::Add()">
+        /// </seealso>
+        public override void Remove(View child)
+        {
+            NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Retrieves child view by index.
+        /// </summary>
+        /// <pre>The View has been initialized.</pre>
+        /// <param name="index">The index of the child to retrieve</param>
+        /// <returns>The view for the given index or empty handle if children not initialized</returns>
+        public override View GetChildAt(uint index)
+        {
+            System.IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
+
+            View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+            return ret ?? null;
+        }
+
+
+        protected override Container GetParent()
+        {
+            return null;
+        }
+
+        protected override uint GetChildCount()
+        {
+            uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
         protected override void Dispose(DisposeTypes type)
         {
             if(disposed)
@@ -126,32 +184,6 @@ namespace Tizen.NUI
         }
 
         /// <summary>
-        /// Adds a child view to this layer.
-        /// </summary>
-        /// <pre>This layer(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent layer.</pre>
-        /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
-        /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this layer. This may change child's position, color, scale etc as it now inherits them from this layer.</remarks>
-        /// <param name="child">The child</param>
-        public void Add(View child)
-        {
-            NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-        }
-
-        /// <summary>
-        /// Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
-        /// </summary>
-        /// <pre>This layer(the parent) has been initialized. The child view is not the same as the parent view.</pre>
-        /// <param name="child">The child</param>
-        public void Remove(View child)
-        {
-            NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-        }
-
-        /// <summary>
         /// Queries the depth of the layer.<br>
         /// 0 is the bottom most layer, higher number is on top.<br>
         /// </summary>
@@ -286,24 +318,6 @@ namespace Tizen.NUI
         }
 
         /// <summary>
-        /// Retrieves child view by index.
-        /// </summary>
-        /// <pre>The View has been initialized.</pre>
-        /// <param name="index">The index of the child to retrieve</param>
-        /// <returns>The view for the given index or empty handle if children not initialized</returns>
-        public View GetChildAt(uint index)
-        {
-            System.IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
-
-            View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
-
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-
-            return ret ?? null;
-        }
-
-        /// <summary>
         /// Enumeration for the behavior of the layer.
         /// </summary>
         public enum LayerBehavior
@@ -459,5 +473,6 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending)
                 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
+
     }
 }
index 32f9950..77639e8 100755 (executable)
@@ -182,6 +182,16 @@ namespace Tizen.NUI
         }
 
         /// <summary>
+        /// Ensures that the function passed in is called from the main loop when it is idle.
+        /// </summary>
+        /// <param name="func">The function to call</param>
+        /// <returns>true if added successfully, false otherwise</returns>
+        public bool AddIdle(System.Delegate func)
+        {
+            return ((NUICoreBackend)this.Backend).AddIdle(func);
+        }
+
+        /// <summary>
         /// Enumeration for deciding whether a NUI application window is opaque or transparent.
         /// </summary>
         public enum WindowMode
diff --git a/src/Tizen.NUI/src/public/NUIWidgetApplication.cs b/src/Tizen.NUI/src/public/NUIWidgetApplication.cs
new file mode 100755 (executable)
index 0000000..c0de24c
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using Tizen.Applications;
+using Tizen.Applications.CoreBackend;
+using Tizen.NUI;
+
+namespace Tizen.NUI
+{
+
+    /// <summary>
+    /// Represents an application that have UI screen. The NUIWidgetApplication class has a default stage.
+    /// </summary>
+    public class NUIWidgetApplication : CoreApplication
+    {
+
+        /// <summary>
+        /// The default constructor.
+        /// </summary>
+        public NUIWidgetApplication() : base(new NUIWidgetCoreBackend())
+        {
+            Tizen.Log.Fatal("NUI", "### NUIWidgetApplication called");
+        }
+
+        /// <summary>
+        /// The constructor with stylesheet.
+        /// </summary>
+        public NUIWidgetApplication(string stylesheet) : base(new NUIWidgetCoreBackend(stylesheet))
+        {
+            Tizen.Log.Fatal("NUI", "### NUIWidgetApplication(string) called");
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)
+        {
+            Log.Fatal("NUI", "OnLocaleChanged() is called!");
+            base.OnLocaleChanged(e);
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnLowBattery(LowBatteryEventArgs e)
+        {
+            Log.Fatal("NUI", "OnLowBattery() is called!");
+            base.OnLowBattery(e);
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnLowMemory(LowMemoryEventArgs e)
+        {
+            Log.Fatal("NUI", "OnLowMemory() is called!");
+            base.OnLowMemory(e);
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)
+        {
+            Log.Fatal("NUI", "OnRegionFormatChanged() is called!");
+            base.OnRegionFormatChanged(e);
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnTerminate()
+        {
+            Log.Fatal("NUI", "OnTerminate() is called!");
+            base.OnTerminate();
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected virtual void OnPreCreate()
+        {
+            Log.Fatal("NUI", "OnPreCreate() is called!");
+        }
+
+        /// <summary>
+        /// Overrides this method if want to handle behavior.
+        /// </summary>
+        protected override void OnCreate()
+        {
+            // This is also required to create DisposeQueue on main thread.
+            DisposeQueue disposeQ = DisposeQueue.Instance;
+            disposeQ.Initialize();
+            Log.Fatal("NUI","OnCreate() is called!");
+            base.OnCreate();
+        }
+
+        /// <summary>
+        /// Run NUIWidgetApplication.
+        /// </summary>
+        /// <param name="args">Arguments from commandline.</param>
+        public override void Run(string[] args)
+        {
+            Backend.AddEventHandler(EventType.PreCreated, OnPreCreate);
+            base.Run(args);
+        }
+
+        /// <summary>
+        /// Exit NUIWidgetApplication.
+        /// </summary>
+        public override void Exit()
+        {
+            Tizen.Log.Fatal("NUI", "### NUIWidgetApplication Exit called");
+            base.Exit();
+        }
+
+        internal WidgetApplication ApplicationHandle
+        {
+            get
+            {
+                return ((NUIWidgetCoreBackend)this.Backend).WidgetApplicationHandle;
+            }
+        }
+
+        /// <summary>
+        /// Get the window instance.
+        /// </summary>
+        public Window Window
+        {
+            get
+            {
+                //return Window.Instance;
+                return ApplicationHandle.GetWindow();
+            }
+        }
+    }
+}
index 960b5f4..d579034 100755 (executable)
@@ -63,6 +63,11 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_styleManagerStyleChangedCallbackDelegate != null)
+            {
+                StyleChangedSignal().Disconnect(_styleManagerStyleChangedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index ec2b788..415606b 100755 (executable)
@@ -54,6 +54,11 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_stateChangedEventCallback != null)
+            {
+                StateChangedSignal().Disconnect(_stateChangedEventCallback);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index 41c9b7a..f873d6e 100755 (executable)
@@ -62,6 +62,11 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_timerTickCallbackDelegate != null)
+            {
+                TickSignal().Disconnect(_timerTickCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index a67858d..43eb91a 100755 (executable)
@@ -72,6 +72,8 @@ namespace Tizen.NUI.UIComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            DisConnectFromSignals();
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -85,6 +87,39 @@ namespace Tizen.NUI.UIComponents
             base.Dispose(type);
         }
 
+        private void DisConnectFromSignals()
+        {
+            // Save current CPtr.
+            global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+            // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+            swigCPtr = GetBaseHandleCPtrHandleRef;
+
+            if (_stateChangedCallback != null)
+            {
+                StateChangedSignal().Disconnect(_stateChangedCallback);
+            }
+
+            if (_releasedCallback != null)
+            {
+                ReleasedSignal().Disconnect(_releasedCallback);
+            }
+
+            if (_pressedCallback != null)
+            {
+                this.PressedSignal().Disconnect(_pressedCallback);
+            }
+
+            if (_clickedCallback != null)
+            {
+                ClickedSignal().Disconnect(_clickedCallback);
+            }
+
+            // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+            // Restore current CPtr.
+            swigCPtr = currentCPtr;
+        }
+
 
         private EventHandlerWithReturnType<object, EventArgs, bool> _clickedEventHandler;
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
index 24a606d..a39f012 100755 (executable)
@@ -58,6 +58,31 @@ namespace Tizen.NUI.UIComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_popUpHiddenEventCallbackDelegate != null)
+            {
+                HiddenSignal().Disconnect(_popUpHiddenEventCallbackDelegate);
+            }
+
+            if (_popUpHidingEventCallbackDelegate != null)
+            {
+                HidingSignal().Disconnect(_popUpHidingEventCallbackDelegate);
+            }
+
+            if (_popUpShownEventCallbackDelegate != null)
+            {
+                ShownSignal().Disconnect(_popUpShownEventCallbackDelegate);
+            }
+
+            if (_popUpShowingEventCallbackDelegate != null)
+            {
+                ShowingSignal().Disconnect(_popUpShowingEventCallbackDelegate);
+            }
+
+            if (_popUpOutsideTouchedEventCallbackDelegate != null)
+            {
+                this.OutsideTouchedSignal().Disconnect(_popUpOutsideTouchedEventCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index 978e777..a6bde47 100755 (executable)
@@ -60,6 +60,11 @@ namespace Tizen.NUI.UIComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_progressBarValueChangedCallbackDelegate != null)
+            {
+                ValueChangedSignal().Disconnect(_progressBarValueChangedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index 51417f2..9a9a5ad 100755 (executable)
@@ -60,6 +60,16 @@ namespace Tizen.NUI.UIComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_scrollBarScrollPositionIntervalReachedEventCallbackDelegate != null)
+            {
+                ScrollPositionIntervalReachedSignal().Disconnect(_scrollBarScrollPositionIntervalReachedEventCallbackDelegate);
+            }
+
+            if (_scrollBarPanFinishedEventCallbackDelegate != null)
+            {
+                PanFinishedSignal().Disconnect(_scrollBarPanFinishedEventCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index b9bb7ea..67f307f 100755 (executable)
@@ -54,6 +54,11 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_scrollViewSnapStartedCallbackDelegate != null)
+            {
+                this.SnapStartedSignal().Disconnect(_scrollViewSnapStartedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index a7d6882..3bb0e12 100755 (executable)
@@ -60,6 +60,21 @@ namespace Tizen.NUI.UIComponents
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_sliderValueChangedCallbackDelegate != null)
+            {
+                ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
+            }
+
+            if (_sliderSlidingFinishedCallbackDelegate != null)
+            {
+                SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
+            }
+
+            if (_sliderMarkReachedCallbackDelegate != null)
+            {
+                MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
index 01098c3..1c0584d 100755 (executable)
@@ -74,7 +74,7 @@ namespace Tizen.NUI
                 _visualSize = value;
                 if (_visualSizePolicy == null)
                 {
-                    _visualSizePolicy = new Vector2(0.0f, 0.0f);
+                    _visualSizePolicy = new Vector2(1.0f, 1.0f);
                 }
                 UpdateVisual();
             }
@@ -97,7 +97,7 @@ namespace Tizen.NUI
                 _visualOffset = value;
                 if (_visualOffsetPolicy == null)
                 {
-                    _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
+                    _visualOffsetPolicy = new Vector2(1.0f, 1.0f);
                 }
                 UpdateVisual();
             }
diff --git a/src/Tizen.NUI/src/public/Widget.cs b/src/Tizen.NUI/src/public/Widget.cs
new file mode 100755 (executable)
index 0000000..098e5ab
--- /dev/null
@@ -0,0 +1,620 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Applications;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// Widget object should be created by WidgetApplication.
+    /// </summary>
+    public class Widget : BaseHandle
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+        internal Widget(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.Widget_SWIGUpcast(cPtr), cMemoryOwn)
+        {
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Widget obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        /// <summary>
+        /// To make Widget instance be disposed.
+        /// </summary>
+        protected override void Dispose(DisposeTypes type)
+        {
+            if(disposed)
+            {
+                return;
+            }
+
+            if(type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                if (swigCMemOwn)
+                {
+                    swigCMemOwn = false;
+                    NDalicManualPINVOKE.delete_Widget(swigCPtr);
+                }
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            base.Dispose(type);
+        }
+
+        /// <summary>
+        /// This is the constructor for Widget.
+        /// </summary>
+        /// <param name="id">for widget instance</param>
+        public Widget(string id) : this(NDalicManualPINVOKE.Widget_New(id), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        internal Widget(Widget widget) : this(NDalicManualPINVOKE.new_Widget__SWIG_1(Widget.getCPtr(widget)), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        internal Widget Assign(Widget widget)
+        {
+            Widget ret = new Widget(NDalicManualPINVOKE.Widget_Assign(swigCPtr, Widget.getCPtr(widget)), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via KeyEvent signal.
+        /// </summary>
+        public class CreateEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// a bundle.
+            /// </summary>
+            public SWIGTYPE_p_bundle Bundle
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// window size.
+            /// </summary>
+            public Size2D WindowSize
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void CreateCallbackType(IntPtr widgetData, IntPtr bundle, IntPtr windowSize);
+        private CreateCallbackType _createCallback;
+        private EventHandler<CreateEventArgs> _createEventHandler;
+
+        /// <summary>
+        /// Create event.
+        /// </summary>
+        public event EventHandler<CreateEventArgs> Create
+        {
+            add
+            {
+                if (_createEventHandler == null)
+                {
+                    _createCallback = OnCreate;
+                    CreateSignal().Connect(_createCallback);
+                }
+
+                _createEventHandler += value;
+            }
+
+            remove
+            {
+                _createEventHandler -= value;
+
+                if (_createEventHandler == null && CreateSignal().Empty() == false)
+                {
+                   CreateSignal().Disconnect(_createCallback);
+                }
+            }
+        }
+
+        private void OnCreate(IntPtr widgetData, IntPtr bundle, IntPtr windowSize)
+        {
+            CreateEventArgs e = new CreateEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+            if (bundle != null)
+            {
+                e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+            }
+            if (windowSize != null)
+            {
+                var val = new Uint16Pair(windowSize, false);
+                e.WindowSize = val;
+                val.Dispose();
+            }
+
+            _createEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstanceCreateSignalType CreateSignal()
+        {
+            WidgetInstanceCreateSignalType ret = new WidgetInstanceCreateSignalType(NDalicManualPINVOKE.Widget_CreateSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via terminate event signal.
+        /// </summary>
+        public class TerminateEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// a bundle.
+            /// </summary>
+            public SWIGTYPE_p_bundle Bundle
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// widget terminate type.
+            /// </summary>
+            public WidgetTerminateType WidgetTerminateType
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void TerminateCallbackType(IntPtr widgetData, IntPtr bundle, WidgetTerminateType widgetTerminateType);
+        private TerminateCallbackType _terminateCallback;
+        private EventHandler<TerminateEventArgs> _terminateEventHandler;
+
+        /// <summary>
+        /// Terminate event.
+        /// </summary>
+        public event EventHandler<TerminateEventArgs> Terminate
+        {
+            add
+            {
+                if (_terminateEventHandler == null)
+                {
+                    _terminateCallback = OnTerminate;
+                    TerminateSignal().Connect(_terminateCallback);
+                }
+
+                _terminateEventHandler += value;
+            }
+
+            remove
+            {
+                _terminateEventHandler -= value;
+
+                if (_terminateEventHandler == null && TerminateSignal().Empty() == false)
+                {
+                   TerminateSignal().Disconnect(_terminateCallback);
+                }
+            }
+        }
+
+        private void OnTerminate(IntPtr widgetData, IntPtr bundle, WidgetTerminateType widgetTerminateType)
+        {
+            TerminateEventArgs e = new TerminateEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+            if (bundle != null)
+            {
+                e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+            }
+
+            e.WidgetTerminateType = widgetTerminateType;
+            _terminateEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstanceTerminateSignalType TerminateSignal()
+        {
+            WidgetInstanceTerminateSignalType ret = new WidgetInstanceTerminateSignalType(NDalicManualPINVOKE.Widget_TerminateSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via pause event signal.
+        /// </summary>
+        public class PauseEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void PauseCallbackType(IntPtr widgetData);
+        private PauseCallbackType _pauseCallback;
+        private EventHandler<PauseEventArgs> _pauseEventHandler;
+
+        /// <summary>
+        /// Pause event.
+        /// </summary>
+        public event EventHandler<PauseEventArgs> Pause
+        {
+            add
+            {
+                if (_pauseEventHandler == null)
+                {
+                    _pauseCallback = OnPause;
+                    PauseSignal().Connect(_pauseCallback);
+                }
+
+                _pauseEventHandler += value;
+            }
+
+            remove
+            {
+                _pauseEventHandler -= value;
+
+                if (_pauseEventHandler == null && PauseSignal().Empty() == false)
+                {
+                   PauseSignal().Disconnect(_pauseCallback);
+                }
+            }
+        }
+
+        private void OnPause(IntPtr widgetData)
+        {
+            PauseEventArgs e = new PauseEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+
+            _pauseEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstancePauseOrResumeSignalType PauseSignal()
+        {
+            WidgetInstancePauseOrResumeSignalType ret = new WidgetInstancePauseOrResumeSignalType(NDalicManualPINVOKE.Widget_PauseSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via pause event signal.
+        /// </summary>
+        public class ResumeEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void ResumeCallbackType(IntPtr widgetData);
+        private ResumeCallbackType _resumeCallback;
+        private EventHandler<ResumeEventArgs> _resumeEventHandler;
+
+        /// <summary>
+        /// Resume event.
+        /// </summary>
+        public event EventHandler<ResumeEventArgs> Resume
+        {
+            add
+            {
+                if (_resumeEventHandler == null)
+                {
+                    _resumeCallback = OnResume;
+                    ResumeSignal().Connect(_resumeCallback);
+                }
+
+                _resumeEventHandler += value;
+            }
+
+            remove
+            {
+                _resumeEventHandler -= value;
+
+                if (_resumeEventHandler == null && ResumeSignal().Empty() == false)
+                {
+                   ResumeSignal().Disconnect(_resumeCallback);
+                }
+            }
+        }
+
+        private void OnResume(IntPtr widgetData)
+        {
+            ResumeEventArgs e = new ResumeEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+
+            _resumeEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstancePauseOrResumeSignalType ResumeSignal()
+        {
+            WidgetInstancePauseOrResumeSignalType ret = new WidgetInstancePauseOrResumeSignalType(NDalicManualPINVOKE.Widget_ResumeSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via resize signal.
+        /// </summary>
+        public class ResizeEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// window size.
+            /// </summary>
+            public Size2D WindowSize
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void ResizeCallbackType(IntPtr widgetData, IntPtr windowSize);
+        private ResizeCallbackType _resizeCallback;
+        private EventHandler<ResizeEventArgs> _resizeEventHandler;
+
+        /// <summary>
+        /// Resize event.
+        /// </summary>
+        public event EventHandler<ResizeEventArgs> Resize
+        {
+            add
+            {
+                if (_resizeEventHandler == null)
+                {
+                    _resizeCallback = OnResize;
+                    ResizeSignal().Connect(_resizeCallback);
+                }
+
+                _resizeEventHandler += value;
+            }
+
+            remove
+            {
+                _resizeEventHandler -= value;
+
+                if (_resizeEventHandler == null && ResizeSignal().Empty() == false)
+                {
+                   ResizeSignal().Disconnect(_resizeCallback);
+                }
+            }
+        }
+
+        private void OnResize(IntPtr widgetData, IntPtr windowSize)
+        {
+            ResizeEventArgs e = new ResizeEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+            if (windowSize != null)
+            {
+                var val = new Uint16Pair(windowSize, false);
+                e.WindowSize = val;
+                val.Dispose();
+            }
+
+            _resizeEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstanceResizeSignalType ResizeSignal()
+        {
+            WidgetInstanceResizeSignalType ret = new WidgetInstanceResizeSignalType(NDalicManualPINVOKE.Widget_ResizeSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Event arguments that passed via update event signal.
+        /// </summary>
+        public class UpdateEventArgs : EventArgs
+        {
+            /// <summary>
+            /// widget data.
+            /// </summary>
+            public WidgetData WidgetData
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// A bundle.
+            /// </summary>
+            public SWIGTYPE_p_bundle Bundle
+            {
+                get;
+                set;
+            }
+
+            /// <summary>
+            /// It means several steps.
+            /// </summary>
+            /// <remark>
+            /// 0 -> no force
+            /// 1 -> force but do someting
+            /// 2 -> force
+            /// </remark>
+            public int Force
+            {
+                get;
+                set;
+            }
+        }
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void UpdateCallbackType(IntPtr widgetData, IntPtr bundle, int force);
+        private UpdateCallbackType _updateCallback;
+        private EventHandler<UpdateEventArgs> _updateEventHandler;
+
+        /// <summary>
+        /// Update event.
+        /// </summary>
+        public event EventHandler<UpdateEventArgs> Update
+        {
+            add
+            {
+                if (_updateEventHandler == null)
+                {
+                    _updateCallback = OnUpdate;
+                    UpdateSignal().Connect(_updateCallback);
+                }
+
+                _updateEventHandler += value;
+            }
+
+            remove
+            {
+                _updateEventHandler -= value;
+
+                if (_updateEventHandler == null && UpdateSignal().Empty() == false)
+                {
+                   UpdateSignal().Disconnect(_updateCallback);
+                }
+            }
+        }
+
+        private void OnUpdate(IntPtr widgetData, IntPtr bundle, int force)
+        {
+            UpdateEventArgs e = new UpdateEventArgs();
+            if (widgetData != null)
+            {
+                e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+            }
+            if (bundle != null)
+            {
+                e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+            }
+            e.Force = force;
+
+            _updateEventHandler?.Invoke(this, e);
+        }
+
+        internal WidgetInstanceUpdateSignalType UpdateSignal()
+        {
+            WidgetInstanceUpdateSignalType ret = new WidgetInstanceUpdateSignalType(NDalicManualPINVOKE.Widget_UpdateSignal(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Enumeration for terminate type of widget instance.
+        /// </summary>
+        public enum WidgetTerminateType
+        {
+            /// <summary>
+            /// User deleted this widget from the viewer
+            /// </summary>
+            Permanent,
+            /// <summary>
+            /// Widget is deleted because of other reasons (e.g. widget process is terminated temporarily by the system)
+            /// </summary>
+            Temporary
+        }
+
+        /// <summary>
+        /// Enumeration for lifecycle event type of widget instance.
+        /// </summary>
+        public enum WidgetLifecycleEventType
+        {
+            /// <summary>
+            /// The widget is dead.
+            /// </summary>
+            AppDead = 0,
+            /// <summary>
+            /// The widget is dead.
+            /// </summary>
+            Create = 1,
+            /// <summary>
+            /// The widget is destroyed.
+            /// </summary>
+            Destroy = 2,
+            /// <summary>
+            /// The widget is paused.
+            /// </summary>
+            Pause = 3,
+            /// <summary>
+            /// The widget is resumed.
+            /// </summary>
+            Resume = 4
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/public/WidgetData.cs b/src/Tizen.NUI/src/public/WidgetData.cs
new file mode 100755 (executable)
index 0000000..7053846
--- /dev/null
@@ -0,0 +1,161 @@
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// Widget data.
+    /// </summary>
+    public class WidgetData : BaseHandle
+    {
+        private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+        internal WidgetData(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.WidgetData_SWIGUpcast(cPtr), cMemoryOwn)
+        {
+            swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetData obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+        }
+
+        /// <summary>
+        /// To make Window instance be disposed.
+        /// </summary>
+        protected override void Dispose(DisposeTypes type)
+        {
+            if(disposed)
+            {
+                return;
+            }
+
+            if(type == DisposeTypes.Explicit)
+            {
+                //Called by User
+                //Release your own managed resources here.
+                //You should release all of your own disposable objects here.
+            }
+
+            //Release your own unmanaged resources here.
+            //You should not access any managed member here except static instance.
+            //because the execution order of Finalizes is non-deterministic.
+
+            if (swigCPtr.Handle != global::System.IntPtr.Zero)
+            {
+                if (swigCMemOwn)
+                {
+                    swigCMemOwn = false;
+                    NDalicManualPINVOKE.delete_WidgetData(swigCPtr);
+                }
+                swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+            }
+
+            base.Dispose(type);
+        }
+
+        internal static WidgetData GetWidgetDataFromPtr(global::System.IntPtr cPtr)
+        {
+            WidgetData ret = new WidgetData(cPtr, false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        internal WidgetData(string instanceId, SWIGTYPE_p_bundle args, string content) : this(NDalicManualPINVOKE.WidgetData_New(instanceId, SWIGTYPE_p_bundle.getCPtr(args), content), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        internal WidgetData(WidgetData widgetData) : this(NDalicManualPINVOKE.new_WidgetData__SWIG_1(WidgetData.getCPtr(widgetData)), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        internal WidgetData Assign(WidgetData widgetData)
+        {
+            WidgetData ret = new WidgetData(NDalicManualPINVOKE.WidgetData_Assign(swigCPtr, WidgetData.getCPtr(widgetData)), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Get widget instance id.
+        /// </summary>
+        /// <returns>Id of widget instance.</returns>
+        public string GetInstanceId()
+        {
+            string ret = NDalicManualPINVOKE.WidgetData_GetInstanceId(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        internal SWIGTYPE_p_bundle GetArgs()
+        {
+            global::System.IntPtr cPtr = NDalicManualPINVOKE.WidgetData_GetArgs(swigCPtr);
+            SWIGTYPE_p_bundle ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_bundle(cPtr, false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Get widget instance content.
+        /// </summary>
+        /// <returns>Content of widget instance.</returns>
+        public string GetContent()
+        {
+            string ret = NDalicManualPINVOKE.WidgetData_GetContent(swigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Get widget instance Window.
+        /// </summary>
+        /// <returns>Window of widget instance</returns>
+        public Window GetWindow()
+        {
+            Window ret = new Window(NDalicManualPINVOKE.WidgetData_GetWindow(swigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        internal void SetArgs(SWIGTYPE_p_bundle args)
+        {
+            NDalicManualPINVOKE.WidgetData_SetArgs(swigCPtr, SWIGTYPE_p_bundle.getCPtr(args));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Set widget instance arguments.
+        /// </summary>
+        /// <param name="content">Content of widget instance</param>
+        public void SetContent(string content)
+        {
+            NDalicManualPINVOKE.WidgetData_SetContent(swigCPtr, content);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Set widget instance arguments.
+        /// </summary>
+        /// <param name="window">Window of widget instance.</param>
+        public void SetWindow(Window window)
+        {
+            NDalicManualPINVOKE.WidgetData_SetWindow(swigCPtr, Window.getCPtr(window));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+    }
+}
index 8c2b91f..e904b4a 100755 (executable)
@@ -30,6 +30,7 @@ namespace Tizen.NUI
         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
         private global::System.Runtime.InteropServices.HandleRef stageCPtr;
         private Layer _rootLayer;
+        private string _windowTitle;
 
         internal Window(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Window_SWIGUpcast(cPtr), cMemoryOwn)
         {
@@ -66,6 +67,56 @@ namespace Tizen.NUI
             //You should not access any managed member here except static instance.
             //because the execution order of Finalizes is non-deterministic.
 
+            if (_windowFocusChangedEventCallback != null)
+            {
+                WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback);
+            }
+
+            if (_stageTouchCallbackDelegate != null)
+            {
+                TouchSignal().Disconnect(_stageTouchCallbackDelegate);
+            }
+
+            if (_stageWheelCallbackDelegate != null)
+            {
+                WheelEventSignal().Disconnect(_stageWheelCallbackDelegate);
+            }
+
+            if (_stageKeyCallbackDelegate != null)
+            {
+                KeyEventSignal().Disconnect(_stageKeyCallbackDelegate);
+            }
+
+            if (_stageEventProcessingFinishedEventCallbackDelegate != null)
+            {
+                EventProcessingFinishedSignal().Disconnect(_stageEventProcessingFinishedEventCallbackDelegate);
+            }
+
+            if (_stageContextLostEventCallbackDelegate != null)
+            {
+                ContextLostSignal().Disconnect(_stageContextLostEventCallbackDelegate);
+            }
+
+            if (_stageContextRegainedEventCallbackDelegate != null)
+            {
+                this.ContextRegainedSignal().Disconnect(_stageContextRegainedEventCallbackDelegate);
+            }
+
+            if (_stageSceneCreatedEventCallbackDelegate != null)
+            {
+                SceneCreatedSignal().Disconnect(_stageSceneCreatedEventCallbackDelegate);
+            }
+
+            if (_windowResizedEventCallback != null)
+            {
+                ResizedSignal().Disconnect(_windowResizedEventCallback);
+            }
+
+            if (_windowFocusChangedEventCallback2 != null)
+            {
+                WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback2);
+            }
+
             if (swigCPtr.Handle != global::System.IntPtr.Zero)
             {
                 if (swigCMemOwn)
@@ -379,6 +430,22 @@ namespace Tizen.NUI
             }
         }
 
+        /// <summary>
+        /// Gets/Sets a window title.
+        /// </summary>
+        public string Title
+        {
+            get
+            {
+                return _windowTitle;
+            }
+            set
+            {
+                _windowTitle = value;
+                SetClass( _windowTitle, "" );
+            }
+        }
+
         internal WindowFocusSignalType WindowFocusChangedSignal()
         {
             WindowFocusSignalType ret = new WindowFocusSignalType(NDalicPINVOKE.FocusChangedSignal(swigCPtr), false);
@@ -424,7 +491,12 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        internal void SetClass(string name, string klass)
+        /// <summary>
+        /// Sets the window name and class string.
+        /// </summary>
+        /// <param name="name">The name of the window</param>
+        /// <param name="klass">The class of the window</param>
+        public void SetClass(string name, string klass)
         {
             NDalicPINVOKE.Window_SetClass(swigCPtr, name, klass);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -767,7 +839,7 @@ namespace Tizen.NUI
             return ret;
         }
 
-        internal System.IntPtr GetNativeWindowHandler()
+        public System.IntPtr GetNativeWindowHandler()
         {
             System.IntPtr ret = NDalicManualPINVOKE.GetNativeWindowHandler(HandleRef.ToIntPtr(this.swigCPtr));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -1414,6 +1486,11 @@ namespace Tizen.NUI
             }
         }
 
+        public static void FeedKeyEvent(Key keyEvent)
+        {
+            NDalicManualPINVOKE.Window_FeedKeyEvent(Key.getCPtr(keyEvent));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
 
     }
 }
index 3cc4118..348907f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index ee9aca5..756944a 100644 (file)
@@ -35,7 +35,14 @@ namespace Tizen.Network.Bluetooth
         {
             get
             {
-                return BluetoothAdapterImpl.Instance.IsBluetoothEnabled;
+                try
+                {
+                    return BluetoothAdapterImpl.Instance.IsBluetoothEnabled;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
@@ -85,7 +92,14 @@ namespace Tizen.Network.Bluetooth
             }
             set
             {
-                BluetoothAdapterImpl.Instance.Name = value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.Name = value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
@@ -161,89 +175,186 @@ namespace Tizen.Network.Bluetooth
         /// <summary>
         /// The StateChanged event is raised when the Bluetooth adapter state is changed.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<StateChangedEventArgs> StateChanged
         {
             add
             {
-                BluetoothAdapterImpl.Instance.StateChanged += value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.StateChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
             remove
             {
-                BluetoothAdapterImpl.Instance.StateChanged -= value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.StateChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
         /// <summary>
         /// The NameChanged event is raised when the Bluetooth adapter name is changed.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<NameChangedEventArgs> NameChanged
         {
             add
             {
-                BluetoothAdapterImpl.Instance.NameChanged += value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.NameChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
             remove
             {
-                BluetoothAdapterImpl.Instance.NameChanged -= value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.NameChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
         /// <summary>
         /// The VisibilityModeChanged event is raised when the Bluetooth adapter visibility mode is changed.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<VisibilityModeChangedEventArgs> VisibilityModeChanged
         {
             add
             {
-                BluetoothAdapterImpl.Instance.VisibilityModeChanged += value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.VisibilityModeChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
             remove
             {
-                BluetoothAdapterImpl.Instance.VisibilityModeChanged -= value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.VisibilityModeChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
         /// <summary>
         /// The VisibilityDurationChanged event is raised very second until the visibility mode is changed to NonDiscoverable.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<VisibilityDurationChangedEventArgs> VisibilityDurationChanged
         {
             add
             {
-                BluetoothAdapterImpl.Instance.VisibilityDurationChanged += value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.VisibilityDurationChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
             remove
             {
-                BluetoothAdapterImpl.Instance.VisibilityDurationChanged -= value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.VisibilityDurationChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
         /// <summary>
         /// The DiscoveryStateChanged event is raised when the device discovery state is changed.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<DiscoveryStateChangedEventArgs> DiscoveryStateChanged
         {
             add
             {
-                BluetoothAdapterImpl.Instance.DiscoveryStateChanged += value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.DiscoveryStateChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
             remove
             {
-                BluetoothAdapterImpl.Instance.DiscoveryStateChanged -= value;
+                try
+                {
+                    BluetoothAdapterImpl.Instance.DiscoveryStateChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
         /// <summary>
         /// This event is called when the LE scan result is obtained.
         /// </summary>
+        /// <exception cref="System.NotSupportedException">Thrown when the Bluetooth is not supported.</exception>
+        /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public event EventHandler<AdapterLeScanResultChangedEventArgs> ScanResultChanged
         {
             add
             {
-                BluetoothLeImplAdapter.Instance.AdapterLeScanResultChanged += value;
+                try
+                {
+                    BluetoothLeImplAdapter.Instance.AdapterLeScanResultChanged += value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
-            remove {
-                BluetoothLeImplAdapter.Instance.AdapterLeScanResultChanged -= value;
+            remove
+            {
+                try
+                {
+                    BluetoothLeImplAdapter.Instance.AdapterLeScanResultChanged -= value;
+                }
+                catch (TypeInitializationException e)
+                {
+                    throw e.InnerException;
+                }
             }
         }
 
@@ -336,7 +447,14 @@ namespace Tizen.Network.Bluetooth
         /// <exception cref="System.InvalidOperationException">Thrown when the Bluetooth is not enabled.</exception>
         static public bool IsServiceUsed(string serviceUuid)
         {
-            return BluetoothAdapterImpl.Instance.IsServiceUsed(serviceUuid);
+            try
+            {
+                return BluetoothAdapterImpl.Instance.IsServiceUsed(serviceUuid);
+            }
+            catch (TypeInitializationException e)
+            {
+                throw e.InnerException;
+            }
         }
 
         /// <summary>
index 444c461..14e2981 100644 (file)
@@ -598,7 +598,6 @@ namespace Tizen.Network.Bluetooth
             if (ret != (int)BluetoothError.None)
             {
                 Log.Error (Globals.LogTag, "Failed to deinitialize bluetooth, Error - " + (BluetoothError)ret);
-                BluetoothErrorFactory.ThrowBluetoothException (ret);
             }
             else
             {
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index a9bff16..ebb3f81 100755 (executable)
@@ -375,6 +375,7 @@ namespace Tizen.Network.Connection
         /// <summary>
         /// Default constructor. Initializes an object of the CellularAuthInformation.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
         public CellularAuthInformation()
         {
         }
index 9fa8b86..3636f1d 100755 (executable)
@@ -304,6 +304,7 @@ namespace Tizen.Network.Connection
         /// <summary>
         /// Adds a route to the routing table.
         /// </summary>
+        /// <since_tizen> 4 </since_tizen>
         /// <param name="family">The address family.</param>
         /// <param name="interfaceName">The name of the network interface.</param>
         /// <param name="hostAddress">The IP address of the host.</param>
@@ -328,6 +329,7 @@ namespace Tizen.Network.Connection
         /// <summary>
         /// Removes a route from the routing table.
         /// </summary>
+        /// <since_tizen> 4 </since_tizen>
         /// <param name="family">The address family.</param>
         /// <param name="interfaceName">The name of network interface.</param>
         /// <param name="hostAddress">The IP address of the host.</param>
index ee0882a..4a2a475 100755 (executable)
@@ -113,6 +113,7 @@ namespace Tizen.Network.Connection
         /// <summary>
         /// The DHCP server address. It is only supported for the IPV4 address family.
         /// </summary>
+        /// <since_tizen> 4 </since_tizen>
         /// <value>Server address of the DHCP.</value>
         System.Net.IPAddress DhcpServerAddress { get; }
     }
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 9da873d..3d042e0 100755 (executable)
@@ -515,6 +515,7 @@ namespace Tizen.Network.IoTConnectivity
                         ResourceFoundEventArgs e = new ResourceFoundEventArgs()
                         {
                             RequestId = requestId,
+                            EventContinue = true,
                             Resource = resource
                         };
                         ResourceFound?.Invoke(null, e);
@@ -924,6 +925,7 @@ namespace Tizen.Network.IoTConnectivity
             PlatformInformationFoundEventArgs e = new PlatformInformationFoundEventArgs()
             {
                 RequestId = requestId,
+                EventContinue = true,
                 PlatformId = (platformId != IntPtr.Zero) ? Marshal.PtrToStringAnsi(platformId) : string.Empty,
                 ManufacturerName = (manufacturerName != IntPtr.Zero) ? Marshal.PtrToStringAnsi(manufacturerName) : string.Empty,
                 ManufacturerURL = (manufacturerUrl != IntPtr.Zero) ? Marshal.PtrToStringAnsi(manufacturerUrl) : string.Empty,
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index dd1bde7..aeeef3f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index d9e9bef..f4e6b1a 100755 (executable)
@@ -51,7 +51,7 @@ namespace Tizen.Network.Nsd
         /// </summary>
         /// <param name="serviceType">The DNSSD service type</param>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="ArgumentException">Thrown when serviceType is null.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         public DnssdBrowser(string serviceType)
@@ -76,7 +76,7 @@ namespace Tizen.Network.Nsd
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
@@ -107,7 +107,7 @@ namespace Tizen.Network.Nsd
         /// Stops browsing the DNSSD remote service.
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         public void StopDiscovery()
index 803c6b8..fdf5880 100755 (executable)
@@ -55,7 +55,7 @@ namespace Tizen.Network.Nsd
         /// <param name="serviceType">The DNSSD service type. It is expressed as type followed by protocol, separated by a dot(e.g. "_ftp._tcp").
         /// It must begin with an underscore, followed by 1-15 characters which may be letters, digits or hyphens.
         /// </param>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when serviceType is set to null.</exception>
         public DnssdService(string serviceType)
@@ -90,7 +90,7 @@ namespace Tizen.Network.Nsd
         /// In case of error, null will be returned during get and exception will be thrown during set.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when Name value is set to null.</exception>
         /// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
@@ -158,7 +158,7 @@ namespace Tizen.Network.Nsd
         /// In case of error, -1 will be returned during get and exception will be thrown during set.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown if value of Port is set to less than 0 or more than 65535.</exception>
         /// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
@@ -237,7 +237,7 @@ namespace Tizen.Network.Nsd
         /// <since_tizen> 4 </since_tizen>
         /// <param name="key">The key of the TXT record. It must be a null-terminated string with 9 characters or fewer excluding null. It is case insensitive.</param>
         /// <param name="value">The value of the TXT record.If null, then "key" will be added with no value. If non-null but value_length is zero, then "key=" will be added with empty value.</param>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when value of key is null.</exception>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
@@ -269,7 +269,7 @@ namespace Tizen.Network.Nsd
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
         /// <param name="key">The key of the TXT record to be removed.</param>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when value of key is null.</exception>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
@@ -302,7 +302,7 @@ namespace Tizen.Network.Nsd
         /// Name of the service must be set.
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
@@ -337,7 +337,7 @@ namespace Tizen.Network.Nsd
         /// A local service registered using RegisterService() must be passed.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
         public void DeregisterService()
index 524f921..7fa490a 100755 (executable)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+using System;
+
 namespace Tizen.Network.Nsd
 {
     /// <summary>
@@ -30,8 +32,8 @@ namespace Tizen.Network.Nsd
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
@@ -41,8 +43,8 @@ namespace Tizen.Network.Nsd
         /// Stops browsing the DNSSD/SSDP remote service.
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
         void StopDiscovery();
index 594fbf0..7b0c6e3 100755 (executable)
@@ -31,8 +31,8 @@ namespace Tizen.Network.Nsd
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
@@ -45,8 +45,8 @@ namespace Tizen.Network.Nsd
         /// A local service registered using RegisterService() must be passed.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.dnssd</feature>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
         void DeregisterService();
index 1ec8bba..e1e4b61 100644 (file)
@@ -8,10 +8,10 @@ The Tizen.Network.Nsd namespace provides classes to manage the network service d
 </para>
 <h2>Related Features</h2>
 <para>To use DNS-SD, declare the following feature requirements in the config file:<br/>
-http://tizen.org/feature/network.dnssd
+http://tizen.org/feature/network.service_discovery.dnssd
 </para>
 <para>To use SSDP, declare the following feature requirements in the config file:<br/>
-http://tizen.org/feature/network.ssdp
+http://tizen.org/feature/network.service_discovery.ssdp
 </para>
 
 </remarks>
index 2dfb586..69bfd78 100755 (executable)
@@ -51,7 +51,7 @@ namespace Tizen.Network.Nsd
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
         /// <param name="target">The target to browse for the service.</param>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="ArgumentException">Thrown when target is null.</exception>
         /// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
         public SsdpBrowser(string target)
@@ -75,7 +75,7 @@ namespace Tizen.Network.Nsd
         /// Application will keep browsing for available/unavailable services until it calls StopDiscovery().
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
         /// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
         public void StartDiscovery()
@@ -106,7 +106,7 @@ namespace Tizen.Network.Nsd
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
         /// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
index 25cc8f3..06cc83d 100755 (executable)
@@ -51,7 +51,7 @@ namespace Tizen.Network.Nsd
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
         /// <param name="target">The SSDP local service's target. It may be a device type or a service type.</param>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when target is set to null.</exception>
         public SsdpService(string target)
@@ -85,7 +85,7 @@ namespace Tizen.Network.Nsd
         /// In case of error, null will be returned during get and exception will be thrown during set.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when Usn value is set to null.</exception>
         /// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
@@ -152,7 +152,7 @@ namespace Tizen.Network.Nsd
         /// In case of error, null will be returned during get and exception will be thrown during set.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
         /// <exception cref="ArgumentException">Thrown when Url value is set to null.</exception>
         /// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
@@ -196,7 +196,7 @@ namespace Tizen.Network.Nsd
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
         /// <privilege>http://tizen.org/privilege/internet</privilege>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
@@ -226,7 +226,7 @@ namespace Tizen.Network.Nsd
         /// A local service registered using RegisterService() must be passed.
         /// </remarks>
         /// <since_tizen> 4 </since_tizen>
-        /// <feature>http://tizen.org/feature/network.ssdp</feature>
+        /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
         /// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
         /// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
         public void DeregisterService()
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 819343d..b3b1ca1 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 192e11b..1f2dbc9 100755 (executable)
@@ -223,7 +223,7 @@ namespace Tizen.Network.WiFi
         }
 
         /// <summary>
-        /// Gets the result of a specific AP scan.
+        /// Gets the result of ScanSpecificAPAsync(string essid) API.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>A list containing the WiFiAP objects.</returns>
index 97e5189..d77be57 100755 (executable)
@@ -210,7 +210,7 @@ namespace Tizen.Network.WiFi
         /// <summary>
         /// The Received signal strength indication(RSSI).
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
+        /// <since_tizen> 4 </since_tizen>
         /// <value>Represents Rssi level of WiFi.</value>
         /// <feature>http://tizen.org/feature/network.wifi</feature>
         /// <exception cref="NotSupportedException">Thrown while setting this property when WiFi is not supported.</exception>
index cda3b93..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
@@ -9,8 +9,4 @@
     <ProjectReference Include="..\Tizen.Log\Tizen.Log.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <PackageReference Include="System.Threading.Thread" Version="$(SystemPackageVersion)" PrivateAssets="All" />
-  </ItemGroup>
-
 </Project>
\ No newline at end of file
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 30c95b2..60d9410 100644 (file)
@@ -22,16 +22,6 @@ using System.Diagnostics.CodeAnalysis;
 namespace Tizen.Pims.Calendar
 {
     /// <summary>
-    /// Delegate for detecting the calendar database changes.
-    /// </summary>
-    /// <param name="uri">The record uri</param>
-    /// <remarks>
-    /// The delegate must be registered using AddDBChangedDelegate.
-    /// It's invoked when the designated view changes.
-    /// </remarks>
-    public delegate void CalendarDBChanged(string uri);
-
-    /// <summary>
     /// CalendarDatabase provides methods to manage calendar information from/to the database.
     /// </summary>
     /// <remarks>
@@ -40,8 +30,8 @@ namespace Tizen.Pims.Calendar
     public class CalendarDatabase
     {
         private Object thisLock = new Object();
-        private Dictionary<string, CalendarDBChanged> _callbackMap = new Dictionary<string, CalendarDBChanged>();
-        private Dictionary<string, Interop.Database.DBChangedCallback> _delegateMap = new Dictionary<string, Interop.Database.DBChangedCallback>();
+        private Dictionary<string, EventHandler<DBChangedEventArgs>> _eventHandlerMap = new Dictionary<string, EventHandler<DBChangedEventArgs>>();
+        private Dictionary<string, Interop.Database.DBChangedCallback> _callbackMap = new Dictionary<string, Interop.Database.DBChangedCallback>();
         private Interop.Database.DBChangedCallback _dbChangedDelegate;
 
         internal CalendarDatabase()
@@ -492,46 +482,63 @@ namespace Tizen.Pims.Calendar
         /// Registers a callback function to be invoked when a record changes.
         /// </summary>
         /// <param name="viewUri">The view URI of the record to subscribe for change notifications</param>
-        /// <param name="callback">The callback function to register</param>
+        /// <param name="DBChanged">The EventHandler to register</param>
         /// <privilege>http://tizen.org/privilege/calendar.read</privilege>
         [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
-        public void AddDBChangedDelegate(string viewUri, CalendarDBChanged callback)
+        public void AddDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
         {
             Log.Debug(Globals.LogTag, "AddDBChangedDelegate");
 
-            _dbChangedDelegate = (string uri, IntPtr userData) =>
-            {
-                _callbackMap[uri](uri);
-            };
-            int error = Interop.Database.AddChangedCallback(viewUri, _dbChangedDelegate, IntPtr.Zero);
-            if (CalendarError.None != (CalendarError)error)
-            {
-                Log.Error(Globals.LogTag, "AddDBChangedDelegate Failed with error " + error);
-                throw CalendarErrorFactory.GetException(error);
-            }
-            _callbackMap[viewUri] += callback;
-            _delegateMap[viewUri] = _dbChangedDelegate;
+                       if (!_callbackMap.ContainsKey(viewUri))
+                       {
+                               _callbackMap[viewUri] = (string uri, IntPtr userData) =>
+                               {
+                                       DBChangedEventArgs args = new DBChangedEventArgs(uri);
+                                       _eventHandlerMap[uri]?.Invoke(this, args);
+                               };
+
+                               int error = Interop.Database.AddChangedCallback(viewUri, _dbChangedDelegate, IntPtr.Zero);
+                               if (CalendarError.None != (CalendarError)error)
+                               {
+                                       Log.Error(Globals.LogTag, "AddDBChangedDelegate Failed with error " + error);
+                                       throw CalendarErrorFactory.GetException(error);
+                               }
+                       }
+
+                       EventHandler<DBChangedEventArgs> handler = null;
+                       if (!_eventHandlerMap.TryGetValue(viewUri, out handler))
+                               _eventHandlerMap.Add(viewUri, null);
+
+                       _eventHandlerMap[viewUri] = handler + DBChanged;
         }
 
         /// <summary>
         /// Deregisters a callback function.
         /// </summary>
         /// <param name="viewUri">The view URI of the record to subscribe for change notifications</param>
-        /// <param name="callback">The callback function to register</param>
+        /// <param name="DBChanged">The EventHandler to deregister</param>
         /// <privilege>http://tizen.org/privilege/calendar.read</privilege>
         [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
-        public void RemoveDBChangedDelegate(string viewUri, CalendarDBChanged callback)
+        public void RemoveDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
         {
             Log.Debug(Globals.LogTag, "RemoveDBChangedDelegate");
 
-            int error = Interop.Database.RemoveChangedCallback(viewUri, _delegateMap[viewUri], IntPtr.Zero);
-            if (CalendarError.None != (CalendarError)error)
+            EventHandler<DBChangedEventArgs> handler = null;
+            if (!_eventHandlerMap.TryGetValue(viewUri, out handler))
+                _eventHandlerMap.Add(viewUri, null);
+            else
+                _eventHandlerMap[viewUri] = handler - DBChanged;
+
+            if (_eventHandlerMap[viewUri] == null)
             {
-                Log.Error(Globals.LogTag, "RemoveDBChangedDelegate Failed with error " + error);
-                throw CalendarErrorFactory.GetException(error);
-            }
-            _callbackMap[viewUri] -= callback;
-            _delegateMap.Remove(viewUri);
+                               int error = Interop.Database.RemoveChangedCallback(viewUri, _callbackMap[viewUri], IntPtr.Zero);
+                               if (CalendarError.None != (CalendarError)error)
+                               {
+                                       Log.Error(Globals.LogTag, "RemoveDBChangedDelegate Failed with error " + error);
+                                       throw CalendarErrorFactory.GetException(error);
+                               }
+                               _callbackMap.Remove(viewUri);
+                       }
         }
 
         /// <summary>
diff --git a/src/Tizen.Pims.Calendar/Tizen.Pims.Calendar/DBChangedEventArgs.cs b/src/Tizen.Pims.Calendar/Tizen.Pims.Calendar/DBChangedEventArgs.cs
new file mode 100644 (file)
index 0000000..7fc8a9c
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the License);
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+using System;
+
+namespace Tizen.Pims.Calendar
+{
+    /// <summary>
+    /// Event arguments passed when calendar database is changed
+    /// </summary>
+    public class DBChangedEventArgs : EventArgs
+    {
+        internal DBChangedEventArgs(string viewUri)
+        {
+            ViewUri = viewUri;
+        }
+
+        /// <summary>
+        /// The calendar view URI changed.
+        /// </summary>
+        public string ViewUri
+        {
+            get;
+            internal set;
+        }
+    }
+}
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
old mode 100755 (executable)
new mode 100644 (file)
index 03602e2..238d76e
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.26430.12
+VisualStudioVersion = 15.0.26430.13
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Pims.Contacts", "Tizen.Pims.Contacts.csproj", "{5B40ACBE-A9D5-492B-AB98-11DD8581941E}"
 EndProject
index c1a4043..4be2929 100644 (file)
@@ -33,7 +33,7 @@ namespace Tizen.Pims.Contacts
         private Object thisLock = new Object();
         private Interop.Database.ContactsDBStatusChangedCallback _contactsDBStatusChangedCallback;
         private EventHandler<DBStatusChangedEventArgs> _dbStatusChanged;
-        private Dictionary<string, EventHandler<DBChangedEventArgs>> _delegateMap = new Dictionary<string, EventHandler<DBChangedEventArgs>>();
+        private Dictionary<string, EventHandler<DBChangedEventArgs>> _eventHandlerMap = new Dictionary<string, EventHandler<DBChangedEventArgs>>();
         private Dictionary<string, Interop.Database.ContactsDBChangedCallback> _callbackMap = new Dictionary<string, Interop.Database.ContactsDBChangedCallback>();
         private Interop.Database.ContactsDBChangedCallback _dbChangedDelegate;
 
@@ -709,48 +709,56 @@ namespace Tizen.Pims.Contacts
         }
 
         /// <summary>
-        /// Registers a callback function to be invoked when a record changes.
+        /// Registers a EventHandler to be invoked when a record changes.
         /// </summary>
         /// <param name="viewUri">The view URI of records whose changes are monitored</param>
         /// <param name="DBChanged">The EventHandler to register</param>
         [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
-        public void AddDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
+        public void AddDBChangedEventHandler(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
         {
-            if (_callbackMap[viewUri] == null)
+            if (!_callbackMap.ContainsKey(viewUri))
             {
                 _callbackMap[viewUri] = (string uri, IntPtr userData) =>
                 {
                     DBChangedEventArgs args = new DBChangedEventArgs(uri);
-                    _delegateMap[uri]?.Invoke(this, args);
+                    _eventHandlerMap[uri]?.Invoke(this, args);
                 };
 
                 int error = Interop.Database.AddChangedCb(viewUri, _callbackMap[viewUri], IntPtr.Zero);
                 if ((int)ContactsError.None != error)
                 {
-                    Log.Error(Globals.LogTag, "AddDBChangedDelegate Failed with error " + error);
+                    Log.Error(Globals.LogTag, "AddDBChangedEventHandler Failed with error " + error);
                     throw ContactsErrorFactory.CheckAndCreateException(error);
                 }
             }
 
-            _delegateMap[viewUri] += DBChanged;
+            EventHandler<DBChangedEventArgs> handler = null;
+            if (!_eventHandlerMap.TryGetValue(viewUri, out handler))  
+                _eventHandlerMap.Add(viewUri, null);
+
+            _eventHandlerMap[viewUri] = handler + DBChanged;
         }
 
         /// <summary>
-        /// Deregisters a callback function.
+        /// Deregisters a EventHandler.
         /// </summary>
         /// <param name="viewUri">The view URI of records whose changes are monitored</param>
         /// <param name="DBChanged">The EventHandler to deregister</param>
         [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
-        public void RemoveDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
+        public void RemoveDBChangedEventHandler(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
         {
-            _delegateMap[viewUri] -= DBChanged;
+            EventHandler<DBChangedEventArgs> handler = null;
+            if (!_eventHandlerMap.TryGetValue(viewUri, out handler))
+                _eventHandlerMap.Add(viewUri, null);
+            else
+                _eventHandlerMap[viewUri] = handler - DBChanged;
 
-            if (_delegateMap[viewUri] == null)
+            if (_eventHandlerMap[viewUri] == null)
             {
                 int error = Interop.Database.RemoveChangedCb(viewUri, _callbackMap[viewUri], IntPtr.Zero);
                 if ((int)ContactsError.None != error)
                 {
-                    Log.Error(Globals.LogTag, "RemoveDBChangedDelegate Failed with error " + error);
+                    Log.Error(Globals.LogTag, "RemoveDBChangedEventHandler Failed with error " + error);
                     throw ContactsErrorFactory.CheckAndCreateException(error);
                 }
                 _callbackMap.Remove(viewUri);
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 922c310..eec4f4a 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 58a6b1e..160c033 100644 (file)
@@ -130,7 +130,7 @@ internal static partial class Interop
 
     internal static SensorEventStruct IntPtrToEventStruct(IntPtr unmanagedVariable)
     {
-        SensorEventStruct outStruct = (SensorEventStruct)Marshal.PtrToStructure(unmanagedVariable, typeof(SensorEventStruct));
+        SensorEventStruct outStruct = (SensorEventStruct)Marshal.PtrToStructure<SensorEventStruct>(unmanagedVariable);
         return outStruct;
     }
 }
index 3cc4118..348907f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index e6c6f48..330628c 100755 (executable)
@@ -69,7 +69,7 @@ namespace Tizen.Sensor
         /// <feature>http://tizen.org/feature/sensor.heart_rate_monitor</feature>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
         /// <exception cref="NotSupportedException">Thrown when the sensor is not supported.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <param name='index'>
         /// Index. Default value for this is 0. Index refers to a particular heart rate monitor in case of multiple sensors.
index 2f778f3..4c9c502 100755 (executable)
@@ -118,7 +118,7 @@ namespace Tizen.Sensor
         /// <feature>http://tizen.org/feature/sensor.pedometer</feature>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
         /// <exception cref="NotSupportedException">Thrown when the sensor is not supported.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <param name='index'>
         /// Index. Default value for this is 0. Index refers to a particular pedometer sensor in case of multiple sensors.
index e9c8578..7ac0b46 100755 (executable)
@@ -69,7 +69,7 @@ namespace Tizen.Sensor
         /// <feature>http://tizen.org/feature/sensor.sleep_monitor</feature>
         /// <exception cref="ArgumentException">Thrown when an invalid argument is used.</exception>
         /// <exception cref="NotSupportedException">Thrown when the sensor is not supported.</exception>
-        /// <exception cref="UnauthroizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the application has no privilege to use the sensor.</exception>
         /// <exception cref="InvalidOperationException">Thrown when the operation is invalid for the current state.</exception>
         /// <param name='index'>
         /// Index. Default value for this is 0. Index refers to a particular sleep monitor in case of multiple sensors.
index 74d88c1..79ebddb 100755 (executable)
@@ -61,7 +61,7 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Tizen.Sensor.stationaryActivityDetector"/> class.
+        /// Initializes a new instance of the <see cref="Tizen.Sensor.StationaryActivityDetector"/> class.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <feature>http://tizen.org/feature/sensor.activity_recognition</feature>
index 6e5c162..d2b7906 100755 (executable)
@@ -61,7 +61,7 @@ namespace Tizen.Sensor
         }
 
         /// <summary>
-        /// Initializes a new instance of the <see cref="Tizen.Sensor.walkingActivityDetector"/> class.
+        /// Initializes a new instance of the <see cref="Tizen.Sensor.WalkingActivityDetector"/> class.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <feature>http://tizen.org/feature/sensor.activity_recognition</feature>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 11cd4a8..7f4584f 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 6a175d6..9e56825 100755 (executable)
@@ -133,8 +133,6 @@ namespace Tizen.System
         /// CapacityChanged is triggered when the battery charge percentage is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="sender"></param>
-        /// <param name="e">BatteryCapacityChangedEventArgs is an object that contains the changed battery capacity (Percent).</param>
         /// <code>
         /// public static async Task BatteryEventHandler()
         /// {
@@ -179,8 +177,6 @@ namespace Tizen.System
         /// LevelChanged is triggered when the battery level is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="sender"></param>
-        /// <param name="e">BatteryLevelChangedEventArgs is an object that contains the changed battery level.</param>
         /// <code>
         /// public static async Task BatteryEventHandler()
         /// {
@@ -225,8 +221,6 @@ namespace Tizen.System
         /// This event is triggered when the charger is connected/disconnected.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="sender"></param>
-        /// <param name="e">BatteryChargingStateChangedEventArgs is an object that contains the changed battery charging state.</param>
         /// <code>
         /// public static async Task BatteryEventHandler()
         /// {
index e61118d..7d00ca8 100644 (file)
@@ -168,8 +168,6 @@ namespace Tizen.System
         /// StateChanged is raised when the LED state is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">LedBrightnessChangedEventArgs is an object that contains the changed brightness.</param>
         public static event EventHandler<LedBrightnessChangedEventArgs> BrightnessChanged
         {
             add
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 5fffbbb..020c97f 100755 (executable)
@@ -43,7 +43,7 @@ namespace Tizen
         /// Tizen.Tracer.End() ends the most recently called Tizen.Tracer.Begin().
         /// The specific error code can be obtained using the Tizen.Internals.Errors.ErrorFacts.GetLastResult() method.
         /// </remarks>
-        /// <seealso cref="Tizen.Tracer.Begin()"/>
+        /// <seealso cref="Tizen.Tracer.Begin(String)"/>
         public static void End ()
         {
             Interop.Tracer.End ();
@@ -57,7 +57,7 @@ namespace Tizen
         /// </remarks>
         /// <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>
         /// <param name="name">The name of an event (optionally containing format specifiers).</param>
-        /// <seealso cref="Tizen.Tracer.AsyncEnd()"/>
+        /// <seealso cref="Tizen.Tracer.AsyncEnd(int, String)"/>
         public static void AsyncBegin (int cookie, String name)
         {
             Interop.Tracer.AsyncBegin (cookie, name);
@@ -72,7 +72,7 @@ namespace Tizen
         /// </remarks>
         /// <param name="cookie">An unique identifier for distinguishing simultaneous events.</param>
         /// <param name="name">The name of an event (optionally containing format specifiers).</param>
-        /// <seealso cref="Tizen.Tracer.AsyncBegin()"/>
+        /// <seealso cref="Tizen.Tracer.AsyncBegin(int, String)"/>
         public static void AsyncEnd (int cookie, String name)
         {
             Interop.Tracer.AsyncEnd (cookie, name);
index 895f913..973f027 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100755 (executable)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 45ee828..4c51c41 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index ea3ba84..48e80f0 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
index 8511dcd..ca220ed 100644 (file)
 
 namespace Tizen.WebView
 {
+    /// <summary>
+    /// This class provides methods to initialize and shutdown Chromium-efl.
+    /// </summary>
     public static class Chromium
     {
         /// <summary>
-        /// Initializes Chromium's instance
+        /// Initializes Chromium's instance.
         /// </summary>
         /// <returns>A reference count of Chromium's instance</returns>
         public static int Initialize()
@@ -28,7 +31,7 @@ namespace Tizen.WebView
         }
 
         /// <summary>
-        /// Decreases a reference count of WebKit's instance, possibly destroying it
+        /// Decreases a reference count of WebKit's instance, possibly destroying it.
         /// </summary>
         /// <returns>A reference count of Chromium's instance</returns>
         public static int Shutdown()
index 6e58cad..097da62 100644 (file)
@@ -23,11 +23,27 @@ namespace Tizen.WebView
     /// </summary>
     public enum CacheModel
     {
-        DocumentViewer,     /* Use the smallest cache capacity */
-        DocumentBrowser,    /* Use bigger cache capacity than DocumentBrowser */
-        PrimaryWebBrowser   /* Use the biggest cache capacity. */
+        /// <summary>
+        /// Use the smallest cache capacity.
+        /// </summary>
+        DocumentViewer,
+        /// <summary>
+        /// Use bigger cache capacity than DocumentBrowser.
+        /// </summary>
+        DocumentBrowser,
+        /// <summary>
+        /// Use the biggest cache capacity.
+        /// </summary>
+        PrimaryWebBrowser
     }
 
+    /// <summary>
+    /// This class encapsulates all pages related to the specific use of Chromium-efl.
+    /// </summary>
+    /// <remarks>
+    /// Applications have the option of creating a context different from the default one and using it for a group of pages.
+    /// All pages in the same context share the same preferences, visited link set, local storage, and so on.
+    /// </remarks>
     public class Context
     {
         private IntPtr _handle;
index 487e88b..f7ed538 100644 (file)
@@ -22,9 +22,18 @@ namespace Tizen.WebView
     /// </summary>
     public enum CookieAcceptPolicy
     {
-        Always,         /* Accepts every cookie sent from any page */
-        Never,          /* Rejects all cookies */
-        NoThirdParty    /* Accepts only cookies set by the main document loaded */
+        /// <summary>
+        /// Accepts every cookie sent from any page.
+        /// </summary>
+        Always,
+        /// <summary>
+        /// Rejects all cookies.
+        /// </summary>
+        Never,
+        /// <summary>
+        /// Accepts only cookies set by the main document loaded.
+        /// </summary>
+        NoThirdParty
     }
 
     /// <summary>
@@ -32,10 +41,19 @@ namespace Tizen.WebView
     /// </summary>
     public enum CookiePersistentStorage
     {
-        Text,       /* Cookies are stored in a text file in the Mozilla "cookies.txt" format */
-        SqlLite     /* Cookies are stored in a SQLite file in the current Mozilla format. */
+        /// <summary>
+        /// Cookies are stored in a text file in the Mozilla "cookies.txt" format.
+        /// </summary>
+        Text,
+        /// <summary>
+        /// Cookies are stored in a SQLite file in the current Mozilla format.
+        /// </summary>
+        SqlLite
     }
 
+    /// <summary>
+    /// This class provides methods for the cookie manager.
+    /// </summary>
     public class CookieManager
     {
         private IntPtr _handle;
@@ -68,10 +86,8 @@ namespace Tizen.WebView
         /// <summary>
         /// Sets the storage where non-session cookies are stored persistently to read/write the cookies.
         /// </summary>
-        ///<privilege>
-        /// http://tizen.org/privilege/mediastorage
-        /// http://tizen.org/privilege/externalstorage
-        /// </privilege>
+        /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
         /// <param name="path">The path where to read/write Cookies</param>
         /// <param name="storage">The type of storage</param>
         public void SetPersistentStorage(string path, CookiePersistentStorage storage)
index 8e1f349..b9fcba3 100644 (file)
@@ -18,6 +18,9 @@ using System;
 
 namespace Tizen.WebView
 {
+    /// <summary>
+    /// This class provides properties for setting the preference of a specific WebView.
+    /// </summary>
     public class Settings
     {
         private IntPtr _handle;
index 8aa6704..28323bb 100644 (file)
@@ -33,7 +33,7 @@ namespace Tizen.WebView
         /// </summary>
         Canceled,
         /// <summary>
-        /// Can't show page for this MIME Type
+        /// Can't show page for this MIME Type.
         /// </summary>
         CantSupportMimetype,
         /// <summary>
@@ -41,19 +41,19 @@ namespace Tizen.WebView
         /// </summary>
         FailedFileIo,
         /// <summary>
-        /// Cannot connect to network
+        /// Cannot connect to network.
         /// </summary>
         CantConnect,
         /// <summary>
-        /// Fail to look up host from DNS
+        /// Fail to look up host from DNS.
         /// </summary>
         CantLookupHost,
         /// <summary>
-        /// Fail to SSL/TLS handshake
+        /// Fail to SSL/TLS handshake.
         /// </summary>
         FailedTlsHandshake,
         /// <summary>
-        /// Received certificate is invalid
+        /// Received certificate is invalid.
         /// </summary>
         InvalidCertificate,
         /// <summary>
@@ -81,7 +81,7 @@ namespace Tizen.WebView
         /// </summary>
         Authentication,
         /// <summary>
-        /// Web server has internal server error
+        /// Web server has internal server error.
         /// </summary>
         InternalServer,
     }
index e73da10..dbdcea4 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
 </Project>
old mode 100644 (file)
new mode 100755 (executable)
index 580f5c5..5842abe
@@ -12,7 +12,7 @@
   <!-- Property Group for .NET Core Project -->
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp1.1</TargetFramework>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
   </PropertyGroup>
 
   <!-- Property Group for Tizen Project -->
index 7686cc4..d32515b 100644 (file)
@@ -12,7 +12,7 @@
   <!-- Property Group for .NET Core Project -->
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp1.1</TargetFramework>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
   </PropertyGroup>
 
   <!-- Property Group for Tizen Project -->
diff --git a/test/ElmSharp.Wearable.Test/TC/CircleTool.cs b/test/ElmSharp.Wearable.Test/TC/CircleTool.cs
new file mode 100644 (file)
index 0000000..b12b507
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ElmSharp.Test
+{
+    public static class CircleTool
+    {
+        static Rect _inSquare;
+        public static Rect GetInnerSquare(this Window window)
+        {
+            Size screenSize = window.ScreenSize;
+            int min = Math.Min(screenSize.Height, screenSize.Width);
+            int width = (int)(min * Math.Cos(Math.PI / 4));
+            int x = screenSize.Width / 2 - width / 2;
+            int y = screenSize.Height / 2 - width / 2;
+
+            return _inSquare == default(Rect) ? (_inSquare = new Rect(x, y, width, width)) : _inSquare;
+        }
+    }
+}
diff --git a/test/ElmSharp.Wearable.Test/TC/RotaryEvent1.cs b/test/ElmSharp.Wearable.Test/TC/RotaryEvent1.cs
new file mode 100644 (file)
index 0000000..a4faf1f
--- /dev/null
@@ -0,0 +1,55 @@
+using ElmSharp.Wearable;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ElmSharp.Test.TC
+{
+    public class RotaryEvent1 : TestCaseBase
+    {
+        public override string TestName => "Rotary Event Test 1";
+
+        public override string TestDescription => "Wearable test for Rotary event";
+
+        public override void Run(Window window)
+        {
+            Log.Debug("window id is " + window.Handle.ToString());
+            Rect square = window.GetInnerSquare();
+
+            Log.Debug(square.ToString());
+
+            Rectangle redSquare = new Rectangle(window)
+            {
+                Color = Color.Red,
+                Geometry = square
+            };
+            redSquare.Show();
+
+            double degrees = 0;
+
+            RotaryEventHandler handler = (args) =>
+            {
+                if (args.IsClockwise) degrees += 10;
+                else degrees -= 10;
+
+                if (degrees < 0) degrees = 360;
+                else if (degrees > 360) degrees = 0;
+
+                Rect rect = redSquare.Geometry;
+                EvasMap map = new EvasMap(4);
+                map.PopulatePoints(redSquare, 0);
+                map.Rotate(degrees, rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+                redSquare.EvasMap = map;
+                redSquare.IsMapEnabled = true;
+            };
+
+            RotaryEventManager.Rotated += handler;
+
+            window.BackButtonPressed += (s, e) =>
+            {
+                RotaryEventManager.Rotated -= handler;
+                Log.Debug("handler is Removed!!!!!!!");
+            };
+        }
+    }
+}
diff --git a/test/ElmSharp.Wearable.Test/TC/RotaryEvent2.cs b/test/ElmSharp.Wearable.Test/TC/RotaryEvent2.cs
new file mode 100644 (file)
index 0000000..8893d57
--- /dev/null
@@ -0,0 +1,53 @@
+using ElmSharp.Wearable;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ElmSharp.Test.TC
+{
+    public class RotaryEvent2 : TestCaseBase
+    {
+        public override string TestName => "Rotary Event Test 2";
+
+        public override string TestDescription => "Wearable test for Rotary object event";
+
+        Rectangle rect;
+
+        double degrees = 0;
+
+        void EventHandler(RotaryEventArgs args)
+        {
+            if (args.IsClockwise) degrees += 10;
+            else degrees -= 10;
+
+            if (degrees < 0) degrees = 360;
+            else if (degrees > 360) degrees = 0;
+
+            Rect r = rect.Geometry;
+            EvasMap map = new EvasMap(4);
+            map.PopulatePoints(rect, 0);
+            map.Rotate(degrees, r.X + r.Width / 2, r.Y + r.Height / 2);
+            rect.EvasMap = map;
+            rect.IsMapEnabled = true;
+        }
+
+        public override void Run(Window window)
+        {
+            Rect square = window.GetInnerSquare();
+
+            Log.Debug(square.ToString());
+
+            rect = new Rectangle(window)
+            {
+                Color = Color.Blue,
+                Geometry = square
+            };
+            rect.Show();
+
+            rect.AddRotaryEventHandler(EventHandler);
+            rect.Activate();
+
+            window.BackButtonPressed += (s, e) => rect.RemoveRotaryEventHandler(EventHandler);
+        }
+    }
+}
diff --git a/test/ElmSharp.Wearable.Test/TC/RotaryEvent3.cs b/test/ElmSharp.Wearable.Test/TC/RotaryEvent3.cs
new file mode 100644 (file)
index 0000000..8c439c1
--- /dev/null
@@ -0,0 +1,82 @@
+using ElmSharp.Wearable;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ElmSharp.Test.TC
+{
+    public class RotaryEvent3 : TestCaseBase
+    {
+        public override string TestName => "Rotary Event Test 3";
+
+        public override string TestDescription => "Multiple wearable test for Rotary event";
+
+        public override void Run(Window window)
+        {
+            Log.Debug("window id is " + window.Handle.ToString());
+            Rect square = window.GetInnerSquare();
+
+            Log.Debug(square.ToString());
+
+            Rectangle redSquare = new Rectangle(window)
+            {
+                Color = Color.Red,
+                Geometry = square
+            };
+            redSquare.Show();
+
+            Rectangle blueSquare = new Rectangle(window)
+            {
+                Color = Color.Blue,
+                Geometry = new Rect(square.X + square.Width / 4, square.Y + square.Height / 4, square.Width / 2, square.Height / 2)
+            };
+            blueSquare.Show();
+
+            double degrees = 0;
+            double degrees2 = 0;
+
+            RotaryEventHandler handler1 = (args) =>
+            {
+                Log.Debug((args.IsClockwise ? "CW" : "CCW") + " : " + args.Timestamp);
+                if (args.IsClockwise) degrees2 += 10;
+                else degrees2 -= 10;
+
+                if (degrees2 < 0) degrees2 = 360;
+                else if (degrees2 > 360) degrees2 = 0;
+
+                Rect rect = blueSquare.Geometry;
+                EvasMap map = new EvasMap(4);
+                map.PopulatePoints(blueSquare, 0);
+                map.Rotate(degrees2, rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+                blueSquare.EvasMap = map;
+                blueSquare.IsMapEnabled = true;
+            };
+
+            RotaryEventHandler handler2 = (args) =>
+            {
+                if (args.IsClockwise) degrees += 10;
+                else degrees -= 10;
+
+                if (degrees < 0) degrees = 360;
+                else if (degrees > 360) degrees = 0;
+
+                Rect rect = redSquare.Geometry;
+                EvasMap map = new EvasMap(4);
+                map.PopulatePoints(redSquare, 0);
+                map.Rotate(degrees, rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+                redSquare.EvasMap = map;
+                redSquare.IsMapEnabled = true;
+            };
+
+            RotaryEventManager.Rotated += handler1;
+            RotaryEventManager.Rotated += handler2;
+
+            window.BackButtonPressed += (s, e) =>
+            {
+                RotaryEventManager.Rotated -= handler1;
+                RotaryEventManager.Rotated -= handler2;
+                Log.Debug("handler is Removed!!!!!!!");
+            };
+        }
+    }
+}
index 2257110..30cd5a4 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.6</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
 
 
diff --git a/tools/retry.sh b/tools/retry.sh
new file mode 100755 (executable)
index 0000000..b6add9d
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+retry_count=3
+cmd="${@}"
+
+n=0
+until [ $n -ge $retry_count ]; do
+  if [ $n -gt 0 ]; then
+    echo "(Failed! Retry $[$n+1]/$retry_count) $cmd"
+    sleep 2
+  fi
+  $cmd
+  RET=$?
+  if [ $RET -eq 0 ]; then
+    break
+  else
+    n=$[$n+1]
+  fi
+done
+
+exit $RET
diff --git a/tools/timeout.sh b/tools/timeout.sh
new file mode 100755 (executable)
index 0000000..c7273d0
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# Execute a command with a timeout
+
+# License: LGPLv2
+# Author:
+#    http://www.pixelbeat.org/
+# Notes:
+#    Note there is a timeout command packaged with coreutils since v7.0
+#    If the timeout occurs the exit status is 124.
+#    There is an asynchronous (and buggy) equivalent of this
+#    script packaged with bash (under /usr/share/doc/ in my distro),
+#    which I only noticed after writing this.
+#    I noticed later again that there is a C equivalent of this packaged
+#    with satan by Wietse Venema, and copied to forensics by Dan Farmer.
+# Changes:
+#    V1.0, Nov  3 2006, Initial release
+#    V1.1, Nov 20 2007, Brad Greenlee <brad@footle.org>
+#                       Make more portable by using the 'CHLD'
+#                       signal spec rather than 17.
+#    V1.3, Oct 29 2009, Ján Sáreník <jasan@x31.com>
+#                       Even though this runs under dash,ksh etc.
+#                       it doesn't actually timeout. So enforce bash for now.
+#                       Also change exit on timeout from 128 to 124
+#                       to match coreutils.
+#    V2.0, Oct 30 2009, Ján Sáreník <jasan@x31.com>
+#                       Rewritten to cover compatibility with other
+#                       Bourne shell implementations (pdksh, dash)
+
+if [ "$#" -lt "2" ]; then
+    echo "Usage:   `basename $0` timeout_in_seconds command" >&2
+    echo "Example: `basename $0` 2 sleep 3 || echo timeout" >&2
+    exit 1
+fi
+
+cleanup()
+{
+    trap - ALRM               #reset handler to default
+    kill -ALRM $a 2>/dev/null #stop timer subshell if running
+    kill $! 2>/dev/null &&    #kill last job
+      exit 124                #exit with 124 if it was running
+}
+
+watchit()
+{
+    trap "cleanup" ALRM
+    sleep $1& wait
+    kill -ALRM $$
+}
+
+watchit $1& a=$!         #start the timeout
+shift                    #first param was timeout for sleep
+trap "cleanup" ALRM INT  #cleanup after timeout
+"$@"& wait $!; RET=$?    #start the job wait for it and save its return value
+kill -ALRM $a            #send ALRM signal to watchit
+wait $a                  #wait for watchit to finish cleanup
+exit $RET                #return the value
+