Merge "[NUI] Fix Build warnings: GetFunctionPointerFor" preview1-00204
authordongsug song <dongsug.song@samsung.com>
Thu, 14 Sep 2017 06:45:08 +0000 (06:45 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Thu, 14 Sep 2017 06:45:08 +0000 (06:45 +0000)
402 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.AccountManager/Tizen.Account.AccountManager/AccountService.cs
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.Badge/Tizen.Applications/Badge.cs
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/ShortcutEventManager.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/Features.cs [changed mode: 0644->0755]
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/AudioIO/AudioCapture.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioDataAvailableEventArgs.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioIOEnums.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioIOStateChangedEventArgs.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioIOUtil.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs
src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlaybackBufferAvailableEventArgs.cs
src/Tizen.Multimedia.AudioIO/Tizen.Multimedia.AudioIO.csproj
src/Tizen.Multimedia.AudioIO/TonePlayer/TonePlayer.cs
src/Tizen.Multimedia.AudioIO/TonePlayer/ToneType.cs
src/Tizen.Multimedia.AudioIO/WavPlayer/WavPlayer.cs
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/CameraException.cs [changed mode: 0644->0755]
src/Tizen.Multimedia.Camera/Camera/CameraFocusStateChangedEventArgs.cs
src/Tizen.Multimedia.Camera/Camera/CameraInterruptStartedEventArgs.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/DoublePlane.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/IPreviewPlane.cs
src/Tizen.Multimedia.Camera/Camera/Location.cs [changed mode: 0644->0755]
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/Camera/TriplePlane.cs
src/Tizen.Multimedia.Camera/Tizen.Multimedia.Camera.csproj
src/Tizen.Multimedia.MediaCodec/MediaCodec/BufferStatusChangedEventArgs.cs
src/Tizen.Multimedia.MediaCodec/MediaCodec/InputProcessedEventArgs.cs
src/Tizen.Multimedia.MediaCodec/MediaCodec/MediaCodec.cs
src/Tizen.Multimedia.MediaCodec/Tizen.Multimedia.MediaCodec.csproj
src/Tizen.Multimedia.MediaPlayer/Player/AudioEffect.cs
src/Tizen.Multimedia.MediaPlayer/Player/EqualizerBand.cs
src/Tizen.Multimedia.MediaPlayer/Player/MediaBufferSource.cs
src/Tizen.Multimedia.MediaPlayer/Player/MediaSource.cs
src/Tizen.Multimedia.MediaPlayer/Player/MediaStreamConfiguration.cs
src/Tizen.Multimedia.MediaPlayer/Player/MediaStreamSource.cs
src/Tizen.Multimedia.MediaPlayer/Player/MediaUriSource.cs
src/Tizen.Multimedia.MediaPlayer/Player/Player.Events.cs
src/Tizen.Multimedia.MediaPlayer/Player/Player.Properties.cs
src/Tizen.Multimedia.MediaPlayer/Player/Player.cs
src/Tizen.Multimedia.MediaPlayer/Player/PlayerDisplaySettings.cs
src/Tizen.Multimedia.MediaPlayer/Player/PlayerEnums.cs
src/Tizen.Multimedia.MediaPlayer/Player/PlayerErrorOccurredEventArgs.cs
src/Tizen.Multimedia.MediaPlayer/Player/PlayerTrackInfo.cs
src/Tizen.Multimedia.MediaPlayer/Player/StreamInfo.cs
src/Tizen.Multimedia.MediaPlayer/Player/VideoStreamChangedEventArgs.cs
src/Tizen.Multimedia.MediaPlayer/Tizen.Multimedia.MediaPlayer.csproj
src/Tizen.Multimedia.Metadata/MetadataEditor/MetadataEditor.cs
src/Tizen.Multimedia.Metadata/MetadataEditor/MetadataEditorError.cs
src/Tizen.Multimedia.Metadata/MetadataExtractor/Artwork.cs
src/Tizen.Multimedia.Metadata/MetadataExtractor/Metadata.cs
src/Tizen.Multimedia.Metadata/MetadataExtractor/MetadataExtractor.cs
src/Tizen.Multimedia.Metadata/MetadataExtractor/MetadataExtractorError.cs
src/Tizen.Multimedia.Metadata/MetadataExtractor/SyncLyrics.cs
src/Tizen.Multimedia.Metadata/Tizen.Multimedia.Metadata.csproj
src/Tizen.Multimedia.Radio/Radio/Radio.cs [changed mode: 0644->0755]
src/Tizen.Multimedia.Radio/Tizen.Multimedia.Radio.csproj
src/Tizen.Multimedia.Recorder/Recorder/Recorder.Events.cs [changed mode: 0644->0755]
src/Tizen.Multimedia.Recorder/Recorder/Recorder.Settings.cs [changed mode: 0644->0755]
src/Tizen.Multimedia.Recorder/Recorder/Recorder.cs
src/Tizen.Multimedia.Recorder/Recorder/RecorderEnums.cs
src/Tizen.Multimedia.Recorder/Recorder/RecorderInterruptedEventArgs.cs
src/Tizen.Multimedia.Recorder/Recorder/VideoRecorder.cs [changed mode: 0644->0755]
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/MediaController/MediaControllerManager.cs
src/Tizen.Multimedia.Remoting/MediaController/MediaControllerRepeatMode.cs
src/Tizen.Multimedia.Remoting/ScreenMirroring/EventArgs.cs
src/Tizen.Multimedia.Remoting/ScreenMirroring/ScreenMirroringEnums.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/ImageUtil/BitmapFrame.cs
src/Tizen.Multimedia.Util/ImageUtil/GifFrame.cs
src/Tizen.Multimedia.Util/ImageUtil/ImageColorSpace.cs
src/Tizen.Multimedia.Util/ImageUtil/ImageDecoder.cs
src/Tizen.Multimedia.Util/ImageUtil/ImageEncoder.cs
src/Tizen.Multimedia.Util/ImageUtil/ImageTransform.cs
src/Tizen.Multimedia.Util/ImageUtil/ImageTransformer.cs
src/Tizen.Multimedia.Util/ImageUtil/JpegDownscale.cs
src/Tizen.Multimedia.Util/ImageUtil/PngCompression.cs
src/Tizen.Multimedia.Util/ThumbnailExtractor/ThumbnailExtractionResult.cs
src/Tizen.Multimedia.Util/ThumbnailExtractor/ThumbnailExtractor.cs
src/Tizen.Multimedia.Util/ThumbnailExtractor/ThumbnailExtractorError.cs
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/EngineConfiguration.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/AudioManager/AudioDevice.cs
src/Tizen.Multimedia/AudioManager/AudioManager.cs
src/Tizen.Multimedia/AudioManager/AudioManagerEnums.cs
src/Tizen.Multimedia/AudioManager/AudioStreamPolicy.cs
src/Tizen.Multimedia/AudioManager/AudioVolume.cs
src/Tizen.Multimedia/AudioManager/VolumeChangedEventArgs.cs
src/Tizen.Multimedia/AudioManager/VolumeLevel.cs
src/Tizen.Multimedia/Common.Internal/Features.cs [changed mode: 0644->0755]
src/Tizen.Multimedia/Common.Internal/IBufferOwner.cs
src/Tizen.Multimedia/Common.Internal/MediaBufferBase.cs
src/Tizen.Multimedia/Common/CodecNotSupportedException.cs
src/Tizen.Multimedia/Common/ColorSpace.cs
src/Tizen.Multimedia/Common/Display.cs
src/Tizen.Multimedia/Common/FileFormatException.cs
src/Tizen.Multimedia/Common/IMediaBuffer.cs
src/Tizen.Multimedia/Common/Point.cs
src/Tizen.Multimedia/Common/Range.cs
src/Tizen.Multimedia/Common/Rectangle.cs
src/Tizen.Multimedia/Common/Size.cs
src/Tizen.Multimedia/MediaTool/AudioMediaFormat.cs
src/Tizen.Multimedia/MediaTool/ContainerMediaFormat.cs
src/Tizen.Multimedia/MediaTool/MediaFormat.cs
src/Tizen.Multimedia/MediaTool/MediaFormatAacType.cs
src/Tizen.Multimedia/MediaTool/MediaFormatMimeType.cs
src/Tizen.Multimedia/MediaTool/MediaFormatTextType.cs
src/Tizen.Multimedia/MediaTool/MediaPacket.Lock.cs
src/Tizen.Multimedia/MediaTool/MediaPacket.cs
src/Tizen.Multimedia/MediaTool/MediaPacketBuffer.cs
src/Tizen.Multimedia/MediaTool/MediaPacketBufferFlags.cs
src/Tizen.Multimedia/MediaTool/MediaPacketVideoPlane.cs
src/Tizen.Multimedia/MediaTool/TextMediaFormat.cs
src/Tizen.Multimedia/MediaTool/VideoMediaFormat.cs
src/Tizen.Multimedia/MediaView/MediaView.cs
src/Tizen.Multimedia/Tizen.Multimedia.csproj
src/Tizen.NUI/Tizen.NUI.csproj
src/Tizen.NUI/src/internal/Alignment.cs
src/Tizen.NUI/src/internal/Any.cs
src/Tizen.NUI/src/internal/AppSignalType.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Application.cs
src/Tizen.NUI/src/internal/Builder.cs
src/Tizen.NUI/src/internal/Camera.cs
src/Tizen.NUI/src/internal/ConnectionTracker.cs
src/Tizen.NUI/src/internal/CustomActor.cs
src/Tizen.NUI/src/internal/FriendAssembly.cs
src/Tizen.NUI/src/internal/GestureDetector.cs
src/Tizen.NUI/src/internal/ItemView.cs
src/Tizen.NUI/src/internal/LinearConstrainer.cs
src/Tizen.NUI/src/internal/ManualPINVOKE.cs
src/Tizen.NUI/src/internal/Model3dView.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/PageTurnView.cs
src/Tizen.NUI/src/internal/PathConstrainer.cs
src/Tizen.NUI/src/internal/Registry.cs
src/Tizen.NUI/src/internal/RenderTask.cs
src/Tizen.NUI/src/internal/Ruler.cs
src/Tizen.NUI/src/internal/RulerPtr.cs
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/CustomView.cs
src/Tizen.NUI/src/public/BaseComponents/FlexContainer.cs
src/Tizen.NUI/src/public/BaseComponents/ImageView.cs
src/Tizen.NUI/src/public/BaseComponents/Scrollable.cs
src/Tizen.NUI/src/public/BaseComponents/TableView.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/CustomViewRegistry.cs
src/Tizen.NUI/src/public/FocusManager.cs
src/Tizen.NUI/src/public/Geometry.cs
src/Tizen.NUI/src/public/ImfManager.cs
src/Tizen.NUI/src/public/KeyFrames.cs
src/Tizen.NUI/src/public/Layer.cs
src/Tizen.NUI/src/public/NUIApplication.cs
src/Tizen.NUI/src/public/NUIConstants.cs
src/Tizen.NUI/src/public/NUIWidgetApplication.cs [new file with mode: 0755]
src/Tizen.NUI/src/public/Path.cs
src/Tizen.NUI/src/public/Property.cs
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/PushButton.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/UIComponents/ToggleButton.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/WidgetView.cs
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.Nfc/Tizen.Network.Nfc/NfcManager.cs
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.Sensor/Tizen.Sensor/Sensor.cs
src/Tizen.System.Feedback/Tizen.System.Feedback.csproj
src/Tizen.System.Information/Common/Information.cs [new file with mode: 0755]
src/Tizen.System.Information/Common/InformationErrorFactory.cs [moved from src/Tizen.System.Information/RuntimeInfo/RuntimeInfoErrorFactory.cs with 73% similarity, mode: 0755]
src/Tizen.System.Information/Interop/Interop.RuntimeInfo.cs [changed mode: 0644->0755]
src/Tizen.System.Information/Interop/Interop.SystemInfo.cs [changed mode: 0644->0755]
src/Tizen.System.Information/RuntimeInfo/CpuUsage.cs [deleted file]
src/Tizen.System.Information/RuntimeInfo/Enumerations.cs
src/Tizen.System.Information/RuntimeInfo/MemoryInformation.cs [deleted file]
src/Tizen.System.Information/RuntimeInfo/RuntimeFeatureStatusChangedEventArgs.cs [moved from src/Tizen.System.Information/RuntimeInfo/RuntimeKeyStatusChangedEventArgs.cs with 69% similarity]
src/Tizen.System.Information/RuntimeInfo/RuntimeInfo.cs [new file with mode: 0755]
src/Tizen.System.Information/RuntimeInfo/RuntimeInfoEventHandler.cs [new file with mode: 0755]
src/Tizen.System.Information/RuntimeInfo/RuntimeInformation.cs [deleted file]
src/Tizen.System.Information/RuntimeInfo/TvProductHelper.cs [new file with mode: 0755]
src/Tizen.System.Information/SystemInfo/SystemInfo.cs
src/Tizen.System.Information/Tizen.System.Information.csproj [changed mode: 0644->0755]
src/Tizen.System.Information/Usage/ProcessCpuUsage.cs [new file with mode: 0755]
src/Tizen.System.Information/Usage/ProcessMemoryUsage.cs [new file with mode: 0755]
src/Tizen.System.Information/Usage/SystemCpuUsage.cs [new file with mode: 0755]
src/Tizen.System.Information/Usage/SystemMemoryUsage.cs [new file with mode: 0755]
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 8ebab51..9e5193c 100644 (file)
@@ -593,8 +593,6 @@ namespace Tizen.Account.AccountManager
         /// <remarks>
         /// ContentUpdate event is triggered if the MediaInformation updated/deleted or new information is inserted.
         /// </remarks>
-        /// <param name="sender">An object that contains information about sender</param>
-        /// <param name="e">A ContentUpdatedEventArgs object that contains information about the update operation.</param>
         /// <privilege>http://tizen.org/privilege/account.read</privilege>
         /// <feature>http://tizen.org/feature/account</feature>
         /// <exception cref="InvalidOperationException">In case of any DB error.</exception>
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 2361942..6fc0ebc 100755 (executable)
@@ -46,6 +46,7 @@ namespace Tizen.Applications
         /// Property for the count value of the badge.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
+        /// <exception cref="ArgumentException">Thrown when set negative number</exception>
         public int Count
         {
             get
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 a4467d4..fba8ab1 100755 (executable)
@@ -197,6 +197,11 @@ namespace Tizen.Applications.Shortcut
         {
             shortcutTemplates.Clear();
 
+            if (string.IsNullOrEmpty(appId))
+            {
+                throw ShortcutErrorFactory.GetException(Interop.Shortcut.ErrorCode.InvalidParameter, null);
+            }
+
             Interop.Shortcut.ListCallback callback = (appName, iconPath, shortcutName, extrakey, extraData, user_data) =>
             {
                 ShortcutTemplate template = new ShortcutTemplate
@@ -213,7 +218,11 @@ namespace Tizen.Applications.Shortcut
                 return 0;
             };
 
-            Interop.Shortcut.GetList(appId, callback, IntPtr.Zero);
+            Interop.Shortcut.ErrorCode err = Interop.Shortcut.GetList(appId, callback, IntPtr.Zero);
+            if (err < Interop.Shortcut.ErrorCode.None)
+            {
+                throw ShortcutErrorFactory.GetException(err, "unable to get ShortcutTemplate Lists");
+            }
 
             return shortcutTemplates;
         }
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>
old mode 100644 (file)
new mode 100755 (executable)
index 245a94a..e0c2d23
@@ -22,7 +22,7 @@ static internal class Features
 
     internal static bool IsSupported(string key)
     {
-        if (SystemInfo.TryGetValue(key, out bool value))
+        if (Information.TryGetValue(key, out bool value))
         {
             return value;
         }
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 f61ef9e..bde809d 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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.Runtime.InteropServices;
@@ -158,7 +158,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the size allocated for the audio input buffer.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         public int GetBufferSize()
         {
             AudioIOUtil.ThrowIfError(AudioInput.GetBufferSize(_handle, out var size));
@@ -169,7 +169,7 @@ namespace Tizen.Multimedia
         /// Prepares the AudioCapture for reading audio data by starting buffering of audio data from the device.
         /// </summary>
         /// <exception cref="InvalidOperationException">
-        ///     Operation failed due to internal error.\n
+        ///     Operation failed due to an internal error.\n
         ///     -or-\n
         ///     The current state is not <see cref="AudioIOState.Idle"/>.
         /// </exception>
@@ -186,7 +186,7 @@ namespace Tizen.Multimedia
         /// Unprepares the AudioCapture.
         /// </summary>
         /// <exception cref="InvalidOperationException">
-        ///     Operation failed due to internal error.\n
+        ///     Operation failed due to an internal error.\n
         ///     -or-\n
         ///     The current state is <see cref="AudioIOState.Idle"/>.
         /// </exception>
@@ -237,6 +237,7 @@ namespace Tizen.Multimedia
 
             AudioIOUtil.ThrowIfError(AudioInput.Resume(_handle));
         }
+
         /// <summary>
         /// Flushes and discards buffered audio data from the input stream.
         /// </summary>
@@ -255,7 +256,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <param name="streamPolicy">The <see cref="AudioStreamPolicy"/> to apply for the AudioCapture.</param>
         /// <exception cref="ArgumentNullException"><paramref name="streamPolicy"/> is null.</exception>
-        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed of.</exception>
         /// <exception cref="NotSupportedException"><paramref name="streamPolicy"/> is not supported.</exception>
         /// <exception cref="ArgumentException">Not able to retrieve information from <paramref name="streamPolicy"/>.</exception>
         public void ApplyStreamPolicy(AudioStreamPolicy streamPolicy)
@@ -272,15 +273,15 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Provides the ability to record audio from system audio input devices in synchronous way.
+    /// Provides the ability to record audio from system audio input devices in synchronous way.
     /// </summary>
     /// <privilege>http://tizen.org/privilege/recorder</privilege>
     public class AudioCapture : AudioCaptureBase
     {
         /// <summary>
-        /// Initializes a new instance of the AudioCapture class with the specified sample rate, channel and sampleType.
+        /// Initializes a new instance of the AudioCapture class with the specified sample rate, channel, and sampleType.
         /// </summary>
-        /// <param name="sampleRate">The audio sample rate.(8000 ~ 48000Hz)</param>
+        /// <param name="sampleRate">The audio sample rate (8000 ~ 48000Hz).</param>
         /// <param name="channel">The audio channel type.</param>
         /// <param name="sampleType">The audio sample type.</param>
         /// <exception cref="ArgumentOutOfRangeException">
@@ -326,7 +327,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Provides the ability to record audio from system audio input devices in asynchronous way.
+    /// Provides the ability to record audio from system audio input devices in an asynchronous way.
     /// </summary>
     /// <privilege>http://tizen.org/privilege/recorder</privilege>
     public class AsyncAudioCapture : AudioCaptureBase
@@ -340,7 +341,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Initializes a new instance of the AsyncAudioCapture class with the specified sample rate, channel and sampleType.
         /// </summary>
-        /// <param name="sampleRate">The audio sample rate.(8000 ~ 48000Hz)</param>
+        /// <param name="sampleRate">The audio sample rate (8000 ~ 48000Hz).</param>
         /// <param name="channel">The audio channel type.</param>
         /// <param name="sampleType">The audio sample type.</param>
         /// <exception cref="ArgumentOutOfRangeException">
index 8fc7940..72fbc0a 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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;
 
index bec87b0..50e9c84 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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 Tizen.Internals.Errors;
 
@@ -22,7 +22,7 @@ namespace Tizen.Multimedia
     {
         Mono = 0x80,
         Stereo
-    };
+    }
 
     internal enum AudioIOError
     {
@@ -42,7 +42,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies the states for the <see cref="AudioPlayback"/>, <see cref="AudioCapture"/> and <see cref="AsyncAudioCapture"/>.
+    /// Specifies the states for the <see cref="AudioPlayback"/>, <see cref="AudioCapture"/>, and <see cref="AsyncAudioCapture"/>.
     /// </summary>
     public enum AudioIOState
     {
@@ -63,7 +63,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for audio sample type.
+    /// Specifies the audio sample types.
     /// </summary>
     public enum AudioSampleType
     {
@@ -76,5 +76,4 @@ namespace Tizen.Multimedia
         /// </summary>
         S16Le
     }
-
-}
+}
\ No newline at end of file
index 5d1677d..5ade7ed 100644 (file)
@@ -1,25 +1,25 @@
 /*
-* 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.
-*/
+ * 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.Multimedia
 {
     /// <summary>
-    /// Provides data for the <see cref="AudioCaptureBase.StateChanged"/> event and <see cref="AudioPlayback.StateChanged"/>.
+    /// Provides data for the <see cref="AudioCaptureBase.StateChanged"/> event and the <see cref="AudioPlayback.StateChanged"/> event.
     /// </summary>
     public class AudioIOStateChangedEventArgs : EventArgs
     {
@@ -41,7 +41,7 @@ namespace Tizen.Multimedia
         public AudioIOState Current { get; }
 
         /// <summary>
-        /// Gets the value indicating whether the state is changed by policy or not.
+        /// Gets the value indicating whether the state is changed by policy or not.
         /// </summary>
         public bool ByPolicy { get; }
     }
index d6a0c76..d0b5d13 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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;
index d8fd45e..4d935db 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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 static Interop.AudioIO;
@@ -20,7 +20,7 @@ using static Interop.AudioIO;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Provides the ability to directly manage the system audio output devices and play PCM (pulse-code modulation) data.
+    /// Provides the ability to directly manage the system audio output devices and play the PCM (pulse-code modulation) data.
     /// </summary>
     public class AudioPlayback : IDisposable
     {
@@ -42,7 +42,7 @@ namespace Tizen.Multimedia
 
         #region Event
         /// <summary>
-        /// Occurs when audio playback data can be written.
+        /// Occurs when the audio playback data can be written.
         /// </summary>
         /// <seealso cref="Write(byte[])"/>
         public event EventHandler<AudioPlaybackBufferAvailableEventArgs> BufferAvailable;
@@ -85,9 +85,9 @@ namespace Tizen.Multimedia
         #endregion
 
         /// <summary>
-        /// Initializes a new instance of the AudioPlayback class with the specified sample rate, channel and sample type.
+        /// Initializes a new instance of the AudioPlayback class with the specified sample rate, channel, and sample type.
         /// </summary>
-        /// <param name="sampleRate">The audio sample rate.(8000 ~ 48000Hz)</param>
+        /// <param name="sampleRate">The audio sample rate (8000 ~ 48000Hz).</param>
         /// <param name="channel">The audio channel type.</param>
         /// <param name="sampleType">The audio sample type.</param>
         /// <exception cref="ArgumentOutOfRangeException">
@@ -197,7 +197,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the sound type supported by the audio output device.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         public AudioStreamType StreamType
         {
             get
@@ -215,7 +215,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the size allocated for the audio output buffer.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         public int GetBufferSize()
         {
             AudioIOUtil.ThrowIfError(AudioOutput.GetBufferSize(_handle, out var size));
@@ -223,10 +223,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Drains buffered audio data from the output stream.
-        /// It blocks the calling thread until draining the stream buffer completely. (e.g. end of playback)
+        /// Drains the buffered audio data from the output stream.
+        /// It blocks the calling thread until the drain of the stream buffer is complete, for example, at the end of playback.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The current state is <see cref="AudioIOState.Idle"/>.</exception>
         public void Drain()
         {
@@ -245,7 +245,7 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentNullException"><paramref name="buffer"/> is null.</exception>
         /// <exception cref="ArgumentException">The length of <paramref name="buffer"/> is zero.</exception>
         /// <exception cref="InvalidOperationException">The current state is not <see cref="AudioIOState.Running"/>.</exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         public int Write(byte[] buffer)
         {
             ValidateState(AudioIOState.Running);
@@ -274,11 +274,11 @@ namespace Tizen.Multimedia
         /// This must be called before <see cref="Write(byte[])"/>.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
-        ///     Operation failed due to internal error.\n
+        ///     Operation failed due to an internal error.\n
         ///     -or-\n
         ///     The current state is not <see cref="AudioIOState.Idle"/>.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         /// <seealso cref="Unprepare"/>
         public void Prepare()
         {
@@ -292,11 +292,11 @@ namespace Tizen.Multimedia
         /// Unprepares the AudioPlayback.
         /// </summary>
         /// <exception cref="InvalidOperationException">
-        ///     Operation failed due to internal error.\n
+        ///     Operation failed due to an internal error.\n
         ///     -or-\n
         ///     The current state is <see cref="AudioIOState.Idle"/>.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         /// <seealso cref="Prepare"/>
         public void Unprepare()
         {
@@ -307,15 +307,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Pauses feeding of audio data to the device.
+        /// Pauses feeding of the audio data to the device.
         /// </summary>
-        /// <remarks>It has no effect if the current is the <see cref="AudioIOState.Paused"/>.</remarks>
+        /// <remarks>It has no effect if the current state is <see cref="AudioIOState.Paused"/>.</remarks>
         /// <exception cref="InvalidOperationException">
         ///     The current state is <see cref="AudioIOState.Idle"/>.\n
         ///     -or-\n
         ///     The method is called in the <see cref="BufferAvailable"/> event handler.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         /// <seealso cref="Resume"/>
         public void Pause()
         {
@@ -329,15 +329,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Resumes feeding of audio data to the device.
+        /// Resumes feeding of the audio data to the device.
         /// </summary>
-        /// <remarks>It has no effect if the current is the <see cref="AudioIOState.Running"/>.</remarks>
+        /// <remarks>It has no effect if the current state is <see cref="AudioIOState.Running"/>.</remarks>
         /// <exception cref="InvalidOperationException">
         ///     The current state is <see cref="AudioIOState.Idle"/>.\n
         ///     -or-\n
         ///     The method is called in an event handler.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         /// <seealso cref="Pause"/>
         public void Resume()
         {
@@ -351,10 +351,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Flushes and discards buffered audio data from the output stream.
+        /// Flushes and discards the buffered audio data from the output stream.
         /// </summary>
         /// <exception cref="InvalidOperationException">The current state is <see cref="AudioIOState.Idle"/>.</exception>
-        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The AudioPlayback has already been disposed of.</exception>
         public void Flush()
         {
             ValidateState(AudioIOState.Running, AudioIOState.Paused);
@@ -370,9 +370,9 @@ namespace Tizen.Multimedia
         /// <param name="streamPolicy">The <see cref="AudioStreamPolicy"/> to apply for the AudioPlayback.</param>
         /// <exception cref="ArgumentNullException"><paramref name="streamPolicy"/> is null.</exception>
         /// <exception cref="ObjectDisposedException">
-        ///     <paramref name="streamPolicy"/> has already been disposed.\n
+        ///     <paramref name="streamPolicy"/> has already been disposed of.\n
         ///     -or-\n
-        ///     The AudioPlayback has already been disposed.
+        ///     The AudioPlayback has already been disposed of.
         /// </exception>
         /// <exception cref="NotSupportedException"><paramref name="streamPolicy"/> is not supported.</exception>
         /// <exception cref="ArgumentException">Not able to retrieve information from <paramref name="streamPolicy"/>.</exception>
index ac9a495..b834894 100644 (file)
@@ -1,23 +1,26 @@
 /*
-* 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.
-*/
+ * 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.Multimedia
 {
+    /// <summary>
+    /// Provides data for the <see cref="AudioPlayback.BufferAvailable"/> event.
+    /// </summary>
     public class AudioPlaybackBufferAvailableEventArgs : EventArgs
     {
         internal AudioPlaybackBufferAvailableEventArgs(int length)
@@ -25,6 +28,11 @@ namespace Tizen.Multimedia
             Length = length;
         }
 
+        /// <summary>
+        /// Gets the length of the buffer that can be written.
+        /// </summary>
+        /// <value>The length of the buffer that can be written.</value>
+        /// <seealso cref="AudioPlayback.Write(byte[])"/>
         public int Length { 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 4675814..718c4fe 100644 (file)
@@ -38,7 +38,7 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="durationMilliseconds"/> is less than -1.</exception>
         /// <exception cref="InvalidOperationException">Any invalid operations occurred.</exception>
         /// <exception cref="NotSupportedException"><paramref name="tone"/> is not a supported type.</exception>
-        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed of.</exception>
         public static Task StartAsync(ToneType tone, AudioStreamPolicy streamPolicy,
             int durationMilliseconds)
         {
@@ -58,7 +58,7 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="durationMilliseconds"/> is less than -1.</exception>
         /// <exception cref="InvalidOperationException">Any invalid operations occurred.</exception>
         /// <exception cref="NotSupportedException"><paramref name="tone"/> is not a supported type.</exception>
-        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed of.</exception>
         public static Task StartAsync(ToneType tone, AudioStreamPolicy streamPolicy,
             int durationMilliseconds, CancellationToken cancellationToken)
         {
index 85e2aab..1cfc2ec 100644 (file)
@@ -17,7 +17,7 @@
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Enumeration for Audio Codec.
+    /// Specifies the audio codec.
     /// </summary>
     public enum ToneType
     {
@@ -38,7 +38,7 @@ namespace Tizen.Multimedia
         /// </summary>
         Dtmf2,
         /// <summary>
-        /// redefined DTMF 3.
+        /// Predefined DTMF 3.
         /// </summary>
         Dtmf3,
         /// <summary>
index 4a42a41..6e848fe 100644 (file)
@@ -62,7 +62,7 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
         /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exists.</exception>
         /// <exception cref="FileFormatException">The format of <paramref name="path"/> is not supported.</exception>
-        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="streamPolicy"/> has already been disposed of.</exception>
         public static Task StartAsync(string path, AudioStreamPolicy streamPolicy,
             CancellationToken cancellationToken)
         {
index 4a1bf65..91f6c64 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()
         {
@@ -1005,4 +1005,3 @@ namespace Tizen.Multimedia
         #endregion Callback registrations
     }
 }
-
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..befb012 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about the captured still image.
+    /// Provides data for the <see cref="Camera.Capturing"/> event.
     /// </summary>
     public class CameraCapturingEventArgs : EventArgs
     {
@@ -31,22 +31,21 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The main image data of the captured still image.
+        /// Gets the main image data of the captured still image.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public StillImage MainImage { get; }
 
         /// <summary>
-        /// The image data of the postview.
+        /// Gets the image data of the post view.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public StillImage PostView { get; }
 
         /// <summary>
-        /// The image data of the thumbnail.
+        /// Gets the image data of the thumbnail.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public StillImage Thumbnail { get; }
     }
 }
-
index 32353f1..b647736 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
-    /// of the camera when its state is changed.
+    /// Provides data for the <see cref="Camera.DeviceStateChanged"/> event.
     /// </summary>
     public class CameraDeviceStateChangedEventArgs : EventArgs
     {
@@ -31,16 +30,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Camera device type.
+        /// Gets the camera device type.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraDevice Device { get; }
 
         /// <summary>
-        /// Current state of the camera device.
+        /// Gets the current state of the camera device.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraDeviceState State { get; }
     }
 }
-
index 8fcad37..3f90093 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
@@ -173,4 +173,3 @@ namespace Tizen.Multimedia
         }
     }
 }
-
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..650288e 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about error status and
-    /// state of the camera when it failed.
+    /// Provides data for the <see cref="Camera.ErrorOccurred"/> event.
     /// </summary>
     public class CameraErrorOccurredEventArgs : EventArgs
     {
@@ -31,16 +30,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// The camera error code.
+        /// Gets the camera error.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraErrorCode Error { get; }
 
         /// <summary>
-        /// The state of the camera.
+        /// Gets the current state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraState State { get; }
     }
 }
-
old mode 100644 (file)
new mode 100755 (executable)
index 36f46d7..40d2a70
@@ -50,4 +50,4 @@ namespace Tizen.Multimedia
         {
         }
     }
-}
\ No newline at end of file
+}
index c288d73..63931d4 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.
+    /// Provides data for the <see cref="Camera.FocusStateChanged"/> event.
     /// </summary>
     public class CameraFocusStateChangedEventArgs : EventArgs
     {
@@ -30,10 +29,9 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Focus state of the camera.
+        /// Gets the focus state of the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraFocusState State { get; }
     }
 }
-
index 626e465..ec969cf 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about current state
-    /// of the camera when interrupt is invoked internally in Native FW.
+    /// Provides data for the <see cref="Camera.InterruptStarted"/> event.
     /// </summary>
     public class CameraInterruptStartedEventArgs : EventArgs
     {
@@ -31,14 +30,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Current state of the camera.
+        /// Gets the current state of the camera.
         /// </summary>
         public CameraState State { get; }
 
         /// <summary>
-        /// The policy that interrupted the camera.
+        /// Gets the policy that interrupted the camera.
         /// </summary>
         public CameraPolicy Policy { get; }
     }
 }
-
index 4ce158a..ec2d277 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
-    /// of the camera when its interrupted.
+    /// Provides data for the <see cref="Camera.Interrupted"/> event.
     /// </summary>
     public class CameraInterruptedEventArgs : EventArgs
     {
@@ -32,22 +31,21 @@ 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>
-        /// The policy that interrupted the camera.
+        /// Gets the policy that interrupted the camera.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public CameraPolicy Policy { get; }
     }
 }
-
index 9d8c2bc..903f17c 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
@@ -1159,4 +1159,3 @@ namespace Tizen.Multimedia
         #endregion EXIF tag
     }
 }
-
index 96e2e0c..57f8722 100755 (executable)
@@ -19,8 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about previous and current state
-    /// of the camera when its state is changed.
+    /// Provides data for the <see cref="Camera.StateChanged"/> event.
     /// </summary>
     public class CameraStateChangedEventArgs : EventArgs
     {
@@ -32,23 +31,24 @@ 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 e6960f1..887388a 100755 (executable)
@@ -44,4 +44,4 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         public byte[] UV { get; }
     }
-}
\ No newline at end of file
+}
index d88e596..48524b7 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,9 +31,9 @@ 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; }
     }
-}
\ No newline at end of file
+}
index 6c5feaa..3b9e7eb 100755 (executable)
@@ -20,8 +20,8 @@ using System.Collections.Generic;
 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.
+    /// Provides data for the <see cref="Camera.FaceDetected"/> event.
+    /// If the user needs to keep the faces data, the user has to copy the data.
     /// </summary>
     public class FaceDetectedEventArgs : EventArgs
     {
@@ -31,10 +31,9 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// List containing faces of type <see cref="Tizen.Multimedia.FaceDetectionData"/>.
+        /// Gets the list containing faces of type <see cref="Tizen.Multimedia.FaceDetectionData"/>.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public IEnumerable<FaceDetectionData> Faces { get; }
     }
 }
-
index 53905c7..0a3f6c0 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; }
@@ -74,4 +74,3 @@ namespace Tizen.Multimedia
         public int Height { get; }
     }
 }
-
index ce5db62..cf44765 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about the hdr capture progress.
+    /// Provides data for the <see cref="Camera.HdrCaptureProgress"/> event.
     /// </summary>
     public class HdrCaptureProgressEventArgs : EventArgs
     {
@@ -29,10 +29,9 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Hdr Capture progress in percent.
+        /// Gets the HDR Capture progress in percent.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public int Percent { get; }
     }
 }
-
index e3b506b..d84d07a 100755 (executable)
@@ -19,4 +19,4 @@ namespace Tizen.Multimedia
     public interface IPreviewPlane
     {
     }
-}
\ No newline at end of file
+}
old mode 100644 (file)
new mode 100755 (executable)
index 1733352..8160f4e
 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,22 +35,21 @@ 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..b60083b 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.
+    /// Provides data for the <see cref="Camera.MediaPacketPreview"/> event.
     /// </summary>
     public class MediaPacketPreviewEventArgs : EventArgs
     {
@@ -29,10 +29,9 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Media Packet data.
+        /// Gets the media packet data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public MediaPacket Packet { get; }
     }
 }
-
index fe5d623..fbda63c 100755 (executable)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// An extended EventArgs class which contains details about the preview frame.
+    /// Provides data for the <see cref="Camera.Preview"/> event.
     /// </summary>
     public class PreviewEventArgs : EventArgs
     {
@@ -29,10 +29,9 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// PreviewData frame.
+        /// Gets the preview frame data.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public PreviewFrame Preview { get; }
     }
 }
-
index e21542d..3777018 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,21 +97,21 @@ 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; }
     }
-}
\ No newline at end of file
+}
index 33e64f2..d627c5d 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
     {
@@ -36,4 +36,4 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         public byte[] Data { get; }
     }
-}
\ No newline at end of file
+}
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 132911b..0d50515 100755 (executable)
@@ -52,4 +52,4 @@ namespace Tizen.Multimedia
         /// <since_tizen> 3 </since_tizen>
         public byte[] V { get; }
     }
-}
\ No newline at end of file
+}
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 6beac7c..d5bb05f 100644 (file)
@@ -33,7 +33,7 @@ namespace Tizen.Multimedia.MediaCodec
         }
 
         /// <summary>
-        /// Gets the value indicating new status of the codec.
+        /// Gets the value indicating the new status of the codec.
         /// </summary>
         public MediaCodecStatus Status { get; }
 
index 1883d95..b10d0d3 100644 (file)
@@ -36,7 +36,7 @@ namespace Tizen.Multimedia.MediaCodec
         }
 
         /// <summary>
-        /// Gets the packet that the codec has processed.
+        /// Gets the packet processed by the codec.
         /// </summary>
         public MediaPacket Packet { get; }
     }
index 38d5e0b..b01f245 100644 (file)
@@ -21,7 +21,7 @@ using System.Diagnostics;
 namespace Tizen.Multimedia.MediaCodec
 {
     /// <summary>
-    /// Provides the means to encode and decode video and audio data.
+    /// Provides the means to encode and decode the video and the audio data.
     /// </summary>
     public class MediaCodec : IDisposable
     {
@@ -33,7 +33,7 @@ namespace Tizen.Multimedia.MediaCodec
         private IntPtr _handle;
 
         /// <summary>
-        /// Initialize a new instance of the MediaCodec class.
+        /// Initializes a new instance of the MediaCodec class.
         /// </summary>
         public MediaCodec()
         {
@@ -81,7 +81,7 @@ namespace Tizen.Multimedia.MediaCodec
         #endregion
 
         /// <summary>
-        /// Validates if the object already has been disposed of.
+        /// Validates if the object has already been disposed of.
         /// </summary>
         /// <exception cref="ObjectDisposedException">The current object has been disposed of.</exception>
         private void ValidateNotDisposed()
@@ -188,7 +188,7 @@ namespace Tizen.Multimedia.MediaCodec
         /// Prepares the MediaCodec for encoding or decoding.
         /// </summary>
         /// <exception cref="InvalidOperationException">
-        ///     The codec is not configured, yet.\n
+        ///     The codec is not configured yet.\n
         ///     -or-\n
         ///     Internal error.
         /// </exception>
@@ -226,15 +226,15 @@ namespace Tizen.Multimedia.MediaCodec
         /// Configures the MediaCodec.
         /// </summary>
         /// <param name="format">The <see cref="MediaFormat"/> for properties of media data to decode or encode.</param>
-        /// <param name="encoder">The value indicating whether the codec works as a encoder or a decoder.</param>
+        /// <param name="encoder">The value indicating whether the codec works as an encoder or a decoder.</param>
         /// <param name="codecType">The value indicating whether the codec uses hardware acceleration.</param>
-        /// <exception cref="ArgumentNullException">format is null</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="format"/> is null.</exception>
         /// <exception cref="ArgumentException">
         ///     <paramref name="codecType"/> is invalid.\n
         ///     -or-\n
         ///     <paramref name="format"/> is neither audio type nor video type.
         ///     </exception>
-        /// <exception cref="NotSupportedException">the mime type of the format is not supported.</exception>
+        /// <exception cref="NotSupportedException">The mime type of the format is not supported.</exception>
         /// <see cref="SupportedAudioCodecs"/>
         /// <see cref="SupportedVideoCodecs"/>
         public void Configure(MediaFormat format, bool encoder, MediaCodecTypes codecType)
@@ -343,9 +343,9 @@ namespace Tizen.Multimedia.MediaCodec
         /// Adds the packet to the internal queue of the codec.
         /// </summary>
         /// <param name="packet">The packet to be encoded or decoded.</param>
-        /// <exception cref="ArgumentNullException">packet is null.</exception>
-        /// <exception cref="InvalidOperationException">the current codec is not prepared, yet.</exception>
-        /// <remarks>Any attempts to modify the packet will be failed until the <see cref="InputProcessed"/> event for the packet is invoked.</remarks>
+        /// <exception cref="ArgumentNullException"><paramref="packet"/> is null.</exception>
+        /// <exception cref="InvalidOperationException">The current codec is not prepared yet.</exception>
+        /// <remarks>Any attempts to modify the packet will fail until the <see cref="InputProcessed"/> event for the packet is invoked.</remarks>
         public void ProcessInput(MediaPacket packet)
         {
             ValidateNotDisposed();
@@ -385,7 +385,7 @@ namespace Tizen.Multimedia.MediaCodec
         /// <param name="encoder">The value indicating encoder or decoder.</param>
         /// <param name="type">The mime type to query.</param>
         /// <returns>The values indicating which codec types are supported on the current device.</returns>
-        /// <exception cref="ArgumentException">type is invalid.</exception>
+        /// <exception cref="ArgumentException"><paramref="type"/> is invalid.</exception>
         public MediaCodecTypes GetCodecType(bool encoder, MediaFormatVideoMimeType type)
         {
             ValidateNotDisposed();
@@ -404,7 +404,7 @@ namespace Tizen.Multimedia.MediaCodec
         /// <param name="encoder">The value indicating encoder or decoder.</param>
         /// <param name="type">The mime type to query.</param>
         /// <returns>The values indicating which codec types are supported on the current device.</returns>
-        /// <exception cref="ArgumentException">type is invalid.</exception>
+        /// <exception cref="ArgumentException"><paramref="type"/> is invalid.</exception>
         public MediaCodecTypes GetCodecType(bool encoder, MediaFormatAudioMimeType type)
         {
             ValidateNotDisposed();
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 9890398..f47e3b2 100644 (file)
@@ -63,15 +63,14 @@ namespace Tizen.Multimedia
         /// <param name="index">The index of the band to get.</param>
         /// <exception cref="ObjectDisposedException">The <see cref="Player"/> has already been disposed of.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     index is less than zero.\n
+        ///     <pramref name="index"/> is less than zero.\n
         ///     -or-\n
-        ///     index is equal to or greater than <see cref="Count"/>.
+        ///     <paramref name="index"/> is equal to or greater than <see cref="Count"/>.
         /// </exception>
         public EqualizerBand this[int index]
         {
             get
             {
-                Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
                 Player.ValidateNotDisposed();
 
                 if (index < 0 || Count <= index)
@@ -95,21 +94,19 @@ namespace Tizen.Multimedia
         /// <exception cref="ObjectDisposedException">The <see cref="Player"/> has already been disposed of.</exception>
         public void Clear()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             Player.ValidateNotDisposed();
 
             Native.EqualizerClear(Player.Handle).
                 ThrowIfFailed("Failed to clear equalizer effect");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
-        /// Get the number of items.
+        /// Gets the number of items.
         /// </summary>
         public int Count { get; }
 
         /// <summary>
-        /// Get the band level range of the bands in dB.
+        /// Gets the band level range of the bands in the dB.
         /// </summary>
         public Range BandLevelRange { get; }
 
index b64c00f..199fbd1 100644 (file)
@@ -22,7 +22,7 @@ namespace Tizen.Multimedia
 {
 
     /// <summary>
-    /// Represents a equalizer band of <see cref="AudioEffect"/>.
+    /// Represents an equalizer band of <see cref="AudioEffect"/>.
     /// </summary>
     public class EqualizerBand
     {
@@ -31,7 +31,6 @@ namespace Tizen.Multimedia
 
         internal EqualizerBand(AudioEffect owner, int index)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             Debug.Assert(owner != null);
 
             _owner = owner;
@@ -63,7 +62,6 @@ namespace Tizen.Multimedia
         {
             get
             {
-                Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
                 _owner.Player.ValidateNotDisposed();
 
                 int value = 0;
@@ -74,7 +72,6 @@ namespace Tizen.Multimedia
             }
             set
             {
-                Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
                 _owner.Player.ValidateNotDisposed();
 
                 if (value < _owner.BandLevelRange.Min || _owner.BandLevelRange.Max < value)
@@ -92,12 +89,12 @@ namespace Tizen.Multimedia
 
 
         /// <summary>
-        /// Gets the frequency in dB.
+        /// Gets the frequency in the dB.
         /// </summary>
         public int Frequency { get; }
 
         /// <summary>
-        /// Gets the frequency range in dB.
+        /// Gets the frequency range in the dB.
         /// </summary>
         public int FrequencyRange { get; }
 
index a8982d4..2785aef 100644 (file)
@@ -32,7 +32,7 @@ namespace Tizen.Multimedia
         private byte[] _buffer;
 
         /// <summary>
-        /// Initialize a new instance of the MediaBufferSource class with an allocated buffer.
+        /// Initializes a new instance of the MediaBufferSource class with an allocated buffer.
         /// </summary>
         /// <param name="length">The value indicating the size of the buffer.</param>
         /// <exception cref="ArgumentOutOfRangeException">
@@ -52,23 +52,23 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Initialize a new instance of the MediaBufferSource class from the buffer.
+        /// Initializes a new instance of the MediaBufferSource class from the buffer.
         /// </summary>
         /// <param name="buffer">The source array to be copied into the buffer.</param>
-        /// <exception cref="ArgumentNullException">buffer is null.</exception>
+        /// <exception cref="ArgumentNullException"><paramref="buffer"/> is null.</exception>
         public MediaBufferSource(byte[] buffer) : this(buffer, buffer == null ? 0 : buffer.Length)
         {
         }
 
         //TODO remove default parameter.
         /// <summary>
-        /// Initialize a new instance of the MediaBufferSource class from the buffer
+        /// Initializes a new instance of the MediaBufferSource class from the buffer
         /// with the specified length and the specified offset.
         /// </summary>
         /// <param name="buffer">The source array to be copied into the buffer.</param>
         /// <param name="length">The value indicating the number of bytes to copy from the buffer.</param>
         /// <param name="offset">The value indicating the offset in the buffer of the first byte to copy.</param>
-        /// <exception cref="ArgumentNullException">buffer is null.</exception>
+        /// <exception cref="ArgumentNullException"><paramref="buffer"/> is null.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     <paramref name="offset"/> is less than zero.\n
         ///     -or-\n
@@ -109,7 +109,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Create a MediaBufferSource that wraps a byte array.
+        /// Creates a MediaBufferSource that wraps a byte array.
         /// </summary>
         /// <param name="buffer">The array to be wrapped.</param>
         /// <returns>A MediaBufferSource wrapping the byte array.</returns>
index fb147b5..8d980ce 100644 (file)
@@ -27,13 +27,11 @@ namespace Tizen.Multimedia
 
         internal void AttachTo(Player player)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             OnAttached(player);
         }
 
         internal void DetachFrom(Player player)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             OnDetached(player);
         }
 
index f7c8abf..c0a6319 100644 (file)
@@ -42,7 +42,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Occurs when the buffer underrun or overflow.
+        /// Occurs when the buffer underruns or overflows.
         /// </summary>
         /// <remarks>The event handler will be executed on an internal thread.</remarks>
         /// <seealso cref="BufferMaxSize"/>
@@ -59,9 +59,9 @@ namespace Tizen.Multimedia
         /// Gets the max size of the buffer.
         /// </summary>
         /// <value>The max size of the buffer. The default is 200000.</value>
-        /// <remarks>If the buffer level over the max size, <see cref="BufferStatusChanged"/> will be raised with <see cref="MediaStreamBufferStatus.Overflow"/>.</remarks>
+        /// <remarks>If the buffer level overflows the max size, <see cref="BufferStatusChanged"/> will be raised with <see cref="MediaStreamBufferStatus.Overflow"/>.</remarks>
         /// <exception cref="InvalidOperationException">The <see cref="MediaStreamSource"/> is not assigned to a player.</exception>
-        /// <exception cref="ArgumentOutOfRangeException">value is zero.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is zero.</exception>
         /// <seealso cref="BufferStatusChanged"/>
         public ulong BufferMaxSize
         {
@@ -91,12 +91,12 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the min threshold of the buffer or zero if the <see cref="MediaStreamSource"/> is not assigned to a player.
+        /// Gets the minimum threshold of the buffer, or zero if the <see cref="MediaStreamSource"/> is not assigned to a player.
         /// </summary>
         /// <value>The minimum threshold of the buffer in percentage. The default is zero.</value>
         /// <remarks>If the buffer level drops below the threshold value, <see cref="BufferStatusChanged"/> will be raised with <see cref="MediaStreamBufferStatus.Underrun"/>.</remarks>
         /// <exception cref="InvalidOperationException">The <see cref="MediaStreamSource"/> is not assigned to a player.</exception>
-        /// <exception cref="ArgumentOutOfRangeException">value is greater than 100.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is greater than 100.</exception>
         /// <seealso cref="BufferStatusChanged"/>
         public uint BufferMinThreshold
         {
index 18e8873..2cb9624 100644 (file)
@@ -24,7 +24,7 @@ namespace Tizen.Multimedia
 {
 
     /// <summary>
-    /// Provides the ability to push packets as the source of <see cref="Player"/>
+    /// Provides the ability to push packets as the source of <see cref="Player"/>.
     /// </summary>
     /// <remarks>The source must be set as a source to a player before pushing.</remarks>
     /// <seealso cref="Player.SetSource(MediaSource)"/>
@@ -91,7 +91,7 @@ namespace Tizen.Multimedia
 
 
         /// <summary>
-        /// Initialize a new instance of the MediaStreamSource class
+        /// Initializes a new instance of the MediaStreamSource class
         /// with the specified <see cref="AudioMediaFormat"/> and <see cref="VideoMediaFormat"/>.
         /// </summary>
         /// <param name="audioMediaFormat">The <see cref="AudioMediaFormat"/> for this source.</param>
@@ -120,7 +120,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Initialize a new instance of the MediaStreamSource class with the specified <see cref="AudioMediaFormat"/>.
+        /// Initializes a new instance of the MediaStreamSource class with the specified <see cref="AudioMediaFormat"/>.
         /// </summary>
         /// <param name="audioMediaFormat">The <see cref="AudioMediaFormat"/> for this source.</param>
         /// <remarks>AAC is supported.</remarks>
@@ -139,9 +139,9 @@ namespace Tizen.Multimedia
             AudioConfiguration = CreateAudioConfiguration(audioMediaFormat);
         }
         /// <summary>
-        /// Initialize a new instance of the MediaStreamSource class with the specified <see cref="VideoMediaFormat"/>.
+        /// Initializes a new instance of the MediaStreamSource class with the specified <see cref="VideoMediaFormat"/>.
         /// </summary>
-        /// <remarks>H.264 can is supported.</remarks>
+        /// <remarks>H.264 is supported.</remarks>
         /// <param name="videoMediaFormat">The <see cref="VideoMediaFormat"/> for this source.</param>
         /// <exception cref="ArgumentNullException"><paramref name="videoMediaFormat"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="videoMediaFormat"/> is not supported.</exception>
@@ -159,33 +159,34 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the audio configuration or null if no AudioMediaFormat is specified in the constructor.
+        /// Gets the audio configuration, or null if no AudioMediaFormat is specified in the constructor.
         /// </summary>
         public MediaStreamConfiguration AudioConfiguration { get; }
 
         /// <summary>
-        /// Gets the video configuration or null if no VideoMediaFormat is specified in the constructor.
+        /// Gets the video configuration, or null if no VideoMediaFormat is specified in the constructor.
         /// </summary>
         public MediaStreamConfiguration VideoConfiguration { get; }
 
         /// <summary>
         /// Pushes elementary stream to decode audio or video.
         /// </summary>
-        /// <remarks>This source must be set as a source to a player and the player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
+        /// <remarks>This source must be set as a source to a player and the player must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.</remarks>
         /// <param name="packet">The <see cref="MediaPacket"/> to decode.</param>
         /// <exception cref="InvalidOperationException">
         ///     This source is not set as a source to a player.\n
         ///     -or-\n
         ///     The player is not in the valid state.
         /// </exception>
-        /// <exception cref="ArgumentNullException">packet is null.</exception>
-        /// <exception cref="ObjectDisposedException">packet has been disposed.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="packet"/> is null.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="packet"/> has been disposed of.</exception>
         /// <exception cref="ArgumentException">
         ///     <paramref name="packet"/> is neither video nor audio type.\n
         ///     -or-\n
         ///     The format of packet is not matched with the specified format in the constructor.
         /// </exception>
-        /// <exception cref="NoBufferSpaceException">the internal buffer reaches limits.</exception>
+        /// <exception cref="NoBufferSpaceException">The internal buffer has reached its limits.</exception>
         /// <seealso cref="Player.SetSource(MediaSource)"/>
         /// <seealso cref="MediaStreamConfiguration.BufferMaxSize"/>
         /// <seealso cref="MediaPacket"/>
@@ -288,7 +289,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the <see cref="Player"/> that this source is assigned to as a source or null if this source is not assigned.
+        /// Gets the <see cref="Player"/> that this source is assigned to as a source, or null if this source is not assigned.
         /// </summary>
         /// <seealso cref="Player.SetSource(MediaSource)"/>
         public Player Player => _player;
index e4c7d41..40f66d4 100644 (file)
@@ -23,7 +23,7 @@ namespace Tizen.Multimedia
     /// Represents a media source with a uri.
     /// </summary>
     /// <remarks>
-    /// The internet privilege(http://tizen.org/privilege/internet) must be added if any URLs are used to play from network.
+    /// The internet privilege(http://tizen.org/privilege/internet) must be added if any URLs are used to play from network.
     /// The mediastorage privilege(http://tizen.org/privilege/mediastorage) must be added if any video/audio files are used to play located in the internal storage.
     /// The externalstorage privilege(http://tizen.org/privilege/externalstorage) must be added if any video/audio files are used to play located in the external storage.
     /// </remarks>
index a9f0f82..11fee2d 100644 (file)
@@ -26,13 +26,13 @@ namespace Tizen.Multimedia
     public partial class Player
     {
         /// <summary>
-        /// Occurs when playback of a media is finished.
+        /// Occurs when the playback of a media is finished.
         /// </summary>
         public event EventHandler<EventArgs> PlaybackCompleted;
         private NativePlayer.PlaybackCompletedCallback _playbackCompletedCallback;
 
         /// <summary>
-        /// Occurs when playback of a media is interrupted.
+        /// Occurs when the playback of a media is interrupted.
         /// </summary>
         public event EventHandler<PlaybackInterruptedEventArgs> PlaybackInterrupted;
         private NativePlayer.PlaybackInterruptedCallback _playbackInterruptedCallback;
@@ -45,7 +45,7 @@ namespace Tizen.Multimedia
         private NativePlayer.PlaybackErrorCallback _playbackErrorCallback;
 
         /// <summary>
-        /// Occurs when the video stream changed.
+        /// Occurs when the video stream is changed.
         /// </summary>
         /// <remarks>The event handler will be executed on an internal thread.</remarks>
         public event EventHandler<VideoStreamChangedEventArgs> VideoStreamChanged;
index f0cb03e..e8219d6 100644 (file)
@@ -53,7 +53,7 @@ namespace Tizen.Multimedia
         private string _userAgent = "";
 
         /// <summary>
-        /// Gets or Sets the cookie for streaming playback.
+        /// Gets or sets the cookie for streaming playback.
         /// </summary>
         /// <remarks>To set, the player must be in the <see cref="PlayerState.Idle"/> state.</remarks>
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
@@ -83,7 +83,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or Sets the user agent for streaming playback.
+        /// Gets or sets the user agent for streaming playback.
         /// </summary>
         /// <remarks>To set, the player must be in the <see cref="PlayerState.Idle"/> state.</remarks>
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
@@ -145,7 +145,7 @@ namespace Tizen.Multimedia
         /// <value>A <see cref="AudioLatencyMode"/> that specifies the mode. The default is <see cref="AudioLatencyMode.Mid"/>.</value>
         /// <remarks>
         /// If the mode is <see cref="AudioLatencyMode.High"/>,
-        /// audio output interval can be increased so, it can keep more audio data to play.
+        /// audio output interval can be increased, so it can keep more audio data to play.
         /// But, state transition like pause or resume can be more slower than default(<see cref="AudioLatencyMode.Mid"/>).
         /// </remarks>
         /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
@@ -284,7 +284,7 @@ namespace Tizen.Multimedia
         private PlayerTrackInfo _audioTrack;
 
         /// <summary>
-        /// Gets the track info for audio.
+        /// Gets the track info for the audio.
         /// </summary>
         /// <value>A <see cref="PlayerTrackInfo"/> for audio.</value>
         public PlayerTrackInfo AudioTrackInfo
@@ -302,9 +302,9 @@ namespace Tizen.Multimedia
         private PlayerTrackInfo _subtitleTrackInfo;
 
         /// <summary>
-        /// Gets the track info for subtitle.
+        /// Gets the track info for the subtitle.
         /// </summary>
-        /// <value>A <see cref="PlayerTrackInfo"/> for subtitle.</value>
+        /// <value>A <see cref="PlayerTrackInfo"/> for the subtitle.</value>
         public PlayerTrackInfo SubtitleTrackInfo
         {
             get
index 1992c81..7dd4035 100644 (file)
@@ -23,18 +23,16 @@ using static Interop;
 
 namespace Tizen.Multimedia
 {
-    static internal class PlayerLog
+    internal static class PlayerLog
     {
         internal const string Tag = "Tizen.Multimedia.Player";
-        internal const string Enter = "[ENTER]";
-        internal const string Leave = "[LEAVE]";
     }
 
     /// <summary>
     /// Provides the ability to control media playback.
     /// </summary>
     /// <remarks>
-    /// The Player provides functions to play a media content.
+    /// The player provides functions to play a media content.
     /// It also provides functions to adjust the configurations of the player such as playback rate, volume, looping etc.
     /// Note that only one video player can be played at one time.
     /// </remarks>
@@ -43,7 +41,7 @@ namespace Tizen.Multimedia
         private PlayerHandle _handle;
 
         /// <summary>
-        /// Initialize a new instance of the Player class.
+        /// Initializes a new instance of the <see cref="Player"/> class.
         /// </summary>
         public Player()
         {
@@ -135,7 +133,7 @@ namespace Tizen.Multimedia
         #region Methods
 
         /// <summary>
-        /// Gets the streaming download Progress.
+        /// Gets the streaming download progress.
         /// </summary>
         /// <returns>The <see cref="DownloadProgress"/> containing current download progress.</returns>
         /// <remarks>The player must be in the <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
@@ -147,7 +145,6 @@ namespace Tizen.Multimedia
         /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
         public DownloadProgress GetDownloadProgress()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidatePlayerState(PlayerState.Playing, PlayerState.Paused);
 
             int start = 0;
@@ -173,7 +170,6 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentNullException">The path is null.</exception>
         public void SetSubtitle(string path)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidateNotDisposed();
 
             if (path == null)
@@ -193,8 +189,6 @@ namespace Tizen.Multimedia
 
             NativePlayer.SetSubtitlePath(Handle, path).
                 ThrowIfFailed("Failed to set the subtitle path to the player");
-
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
@@ -205,12 +199,10 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
         public void ClearSubtitle()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidatePlayerState(PlayerState.Idle);
 
             NativePlayer.SetSubtitlePath(Handle, null).
                 ThrowIfFailed("Failed to clear the subtitle of the player");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
@@ -237,7 +229,6 @@ namespace Tizen.Multimedia
             }
 
             err.ThrowIfFailed("Failed to the subtitle offset of the player");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         private void Prepare()
@@ -264,7 +255,6 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
         public virtual Task PrepareAsync()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (_source == null)
             {
                 throw new InvalidOperationException("No source is set.");
@@ -292,7 +282,6 @@ namespace Tizen.Multimedia
                     completionSource.TrySetException(e);
                 }
             });
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
 
             return completionSource.Task;
         }
@@ -301,10 +290,10 @@ namespace Tizen.Multimedia
         /// Unprepares the player.
         /// </summary>
         /// <remarks>
-        ///     The most recently used source is reset and no longer associated with the player. Playback is no longer possible.
+        ///     The most recently used source is reset and is no longer associated with the player. Playback is no longer possible.
         ///     If you want to use the player again, you have to set a source and call <see cref="PrepareAsync"/> again.
         ///     <para>
-        ///     The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.
+        ///     The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
         ///     It has no effect if the player is already in the <see cref="PlayerState.Idle"/> state.
         ///     </para>
         /// </remarks>
@@ -312,7 +301,6 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
         public virtual void Unprepare()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (State == PlayerState.Idle)
             {
                 Log.Warn(PlayerLog.Tag, "idle state already");
@@ -353,7 +341,6 @@ namespace Tizen.Multimedia
         /// <seealso cref="ApplyAudioStreamPolicy"/>
         public virtual void Start()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (State == PlayerState.Playing)
             {
                 Log.Warn(PlayerLog.Tag, "playing state already");
@@ -362,11 +349,10 @@ namespace Tizen.Multimedia
             ValidatePlayerState(PlayerState.Ready, PlayerState.Paused);
 
             NativePlayer.Start(Handle).ThrowIfFailed("Failed to start the player");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
-        /// Stops playing media content.
+        /// Stops playing the media content.
         /// </summary>
         /// <remarks>
         /// The player must be in the <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.
@@ -378,7 +364,6 @@ namespace Tizen.Multimedia
         /// <seealso cref="Pause"/>
         public virtual void Stop()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (State == PlayerState.Ready)
             {
                 Log.Warn(PlayerLog.Tag, "ready state already");
@@ -387,7 +372,6 @@ namespace Tizen.Multimedia
             ValidatePlayerState(PlayerState.Paused, PlayerState.Playing);
 
             NativePlayer.Stop(Handle).ThrowIfFailed("Failed to stop the player");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
@@ -402,7 +386,6 @@ namespace Tizen.Multimedia
         /// <seealso cref="Start"/>
         public virtual void Pause()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (State == PlayerState.Paused)
             {
                 Log.Warn(PlayerLog.Tag, "pause state already");
@@ -412,7 +395,6 @@ namespace Tizen.Multimedia
             ValidatePlayerState(PlayerState.Playing);
 
             NativePlayer.Pause(Handle).ThrowIfFailed("Failed to pause the player");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         private MediaSource _source;
@@ -431,7 +413,6 @@ namespace Tizen.Multimedia
         /// <seealso cref="PrepareAsync"/>
         public void SetSource(MediaSource source)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidatePlayerState(PlayerState.Idle);
 
             if (source != null)
@@ -445,11 +426,10 @@ namespace Tizen.Multimedia
             }
 
             _source = source;
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
-        /// Captures a video frame asynchronously.
+        /// Captures a video frame, asynchronously.
         /// </summary>
         /// <returns>A task that represents the asynchronous capture operation.</returns>
         /// <feature>http://tizen.org/feature/multimedia.raw_video</feature>
@@ -459,8 +439,6 @@ namespace Tizen.Multimedia
         /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
         public async Task<CapturedFrame> CaptureVideoAsync()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
-
             ValidationUtil.ValidateFeatureSupported(Features.RawVideo);
 
             ValidatePlayerState(PlayerState.Playing, PlayerState.Paused);
@@ -489,13 +467,13 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the play position in milliseconds.
         /// </summary>
-        /// <remarks>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
+        /// <remarks>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/>,
+        /// or <see cref="PlayerState.Paused"/> state.</remarks>
         /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The player is not in the valid state.</exception>
         /// <seealso cref="SetPlayPositionAsync(int, bool)"/>
         public int GetPlayPosition()
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidatePlayerState(PlayerState.Ready, PlayerState.Paused, PlayerState.Playing);
 
             int playPosition = 0;
@@ -511,7 +489,6 @@ namespace Tizen.Multimedia
         private void SetPlayPosition(int milliseconds, bool accurate,
             NativePlayer.SeekCompletedCallback cb)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             var ret = NativePlayer.SetPlayPosition(Handle, milliseconds, accurate, cb, IntPtr.Zero);
 
             //Note that we assume invalid param error is returned only when the position value is invalid.
@@ -533,7 +510,8 @@ namespace Tizen.Multimedia
         /// <param name="position">The value indicating a desired position in milliseconds.</param>
         /// <param name="accurate">The value indicating whether the operation performs with accuracy.</param>
         /// <remarks>
-        ///     <para>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</para>
+        ///     <para>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/>,
+        ///     or <see cref="PlayerState.Paused"/> state.</para>
         ///     <para>If the <paramref name="accurate"/> is true, the play position will be adjusted as the specified <paramref name="position"/> value,
         ///     but this might be considerably slow. If false, the play position will be a nearest keyframe position.</para>
         ///     </remarks>
@@ -543,7 +521,6 @@ namespace Tizen.Multimedia
         /// <seealso cref="GetPlayPosition"/>
         public async Task SetPlayPositionAsync(int position, bool accurate)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
 
             var taskCompletionSource = new TaskCompletionSource<bool>();
@@ -562,16 +539,15 @@ namespace Tizen.Multimedia
 
                 await taskCompletionSource.Task;
             }
-
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
-        /// Sets playback rate.
+        /// Sets the playback rate.
         /// </summary>
         /// <param name="rate">The value for the playback rate. Valid range is -5.0 to 5.0, inclusive.</param>
         /// <remarks>
-        ///     <para>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</para>
+        ///     <para>The player must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/>,
+        ///     or <see cref="PlayerState.Paused"/> state.</para>
         ///     <para>The sound will be muted, when the playback rate is under 0.0 or over 2.0.</para>
         /// </remarks>
         /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
@@ -589,7 +565,6 @@ namespace Tizen.Multimedia
         /// </exception>
         public void SetPlaybackRate(float rate)
         {
-            Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
             if (rate < -5.0F || 5.0F < rate || rate == 0.0F)
             {
                 throw new ArgumentOutOfRangeException(nameof(rate), rate, "Valid range is -5.0 to 5.0 (except 0.0)");
@@ -598,7 +573,6 @@ namespace Tizen.Multimedia
             ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
 
             NativePlayer.SetPlaybackRate(Handle, rate).ThrowIfFailed("Failed to set the playback rate.");
-            Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
         }
 
         /// <summary>
index c661b08..12f2acb 100644 (file)
@@ -52,7 +52,7 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">
         ///     Operation failed; internal error.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The player already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
         /// <exception cref="ArgumentException">The specified value to set is invalid.</exception>
         public PlayerDisplayMode Mode
         {
@@ -79,7 +79,7 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">
         ///     Operation failed; internal error.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The player already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
         public bool IsVisible
         {
             get
@@ -103,7 +103,7 @@ namespace Tizen.Multimedia
         /// <exception cref="InvalidOperationException">
         ///     Operation failed; internal error.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The player already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
         /// <exception cref="ArgumentException">The specified value to set is invalid.</exception>
         public Rotation Rotation
         {
@@ -135,8 +135,8 @@ namespace Tizen.Multimedia
         ///     -or-\n
         ///     <see cref="Mode"/> is not set to <see cref="PlayerDisplayMode.Roi"/>.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The player already has been disposed of.</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width or height is less than or equal to zero.</exception>
+        /// <exception cref="ObjectDisposedException">The player has already been disposed of.</exception>
+        /// <exception cref="ArgumentOutOfRangeException">The width or the height is less than or equal to zero.</exception>
         public void SetRoi(Rectangle roi)
         {
             if (roi.Width <= 0)
index e52aaad..cfc5c38 100644 (file)
@@ -126,7 +126,7 @@ namespace Tizen.Multimedia
         Paused,
 
         /// <summary>
-        /// Preparing in progress.
+        /// Preparation in progress.
         /// </summary>
         /// <seealso cref="Player.PrepareAsync"/>/>
         Preparing,
@@ -141,7 +141,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio latency modes for <see cref="Player"/> .
+    /// Specifies audio latency modes for <see cref="Player"/>.
     /// </summary>
     /// <seealso cref="Player.AudioLatencyMode"/>
     public enum AudioLatencyMode
@@ -163,7 +163,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies display modes for <see cref="Player"/>
+    /// Specifies display modes for <see cref="Player"/>.
     /// </summary>
     /// <seealso cref="PlayerDisplaySettings.Mode"/>
     public enum PlayerDisplayMode
@@ -189,31 +189,32 @@ namespace Tizen.Multimedia
         CroppedFull,
 
         /// <summary>
-        /// Origin size (if surface size is larger than video size(width/height)) or
-        /// Letter box (if video size(width/height) is larger than surface size).
+        /// Original size (if surface size is larger than video size(width/height)) or
+        /// letter box (if video size(width/height) is larger than surface size).
         /// </summary>
         OriginalOrFull,
 
         /// <summary>
-        /// Region of interest, See <see cref="PlayerDisplaySettings.SetRoi(Rectangle)"/>.
+        /// Region of interest.
         /// </summary>
+        /// <seealso cref="PlayerDisplaySettings.SetRoi(Rectangle)"/>
         Roi
     }
 
     internal enum StreamType
     {
         /// <summary>
-        ///  Audio element stream type
+        ///  Audio element stream type.
         /// </summary>
         Audio = 1,
 
         /// <summary>
-        /// Video element stream type
+        /// Video element stream type.
         /// </summary>
         Video,
 
         /// <summary>
-        /// Text type
+        /// Text type.
         /// </summary>
         Text
     }
@@ -243,7 +244,7 @@ namespace Tizen.Multimedia
     public enum PlaybackInterruptionReason
     {
         /// <summary>
-        /// Interrupted by a resource conflict and the <see cref="Player"/> will be unprepared, automatically.
+        /// Interrupted by a resource conflict and the <see cref="Player"/> will be unprepared automatically.
         /// </summary>
         ResourceConflict = 4
     }
index 206133f..7971ed4 100644 (file)
@@ -25,7 +25,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Initializes a new instance of the PlayerErrorOccurredEventArgs class.
         /// </summary>
-        /// <param name="error">The value indicating what kind of error occurred.</param>
+        /// <param name="error">The value indicating the kind of error occurred.</param>
         public PlayerErrorOccurredEventArgs(PlayerError error)
         {
             Error = error;
index 459f725..d771fae 100644 (file)
@@ -21,7 +21,7 @@ using static Interop;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Provides a means to retrieve track information.
+    /// Provides a means to retrieve the track information.
     /// </summary>
     /// <seealso cref="Player.SubtitleTrackInfo"/>
     /// <seealso cref="Player.AudioTrackInfo"/>
@@ -43,8 +43,11 @@ namespace Tizen.Multimedia
         /// Gets the number of tracks.
         /// </summary>
         /// <returns>The number of tracks.</returns>
-        /// <remarks>The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed.</exception>
+        /// <remarks>
+        /// The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The <see cref="Player"/> that this instance belongs to is not in the valid state.</exception>
         public int GetCount()
         {
@@ -58,14 +61,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the language code for the specified index or null if the language is undefined.
+        /// Gets the language code for the specified index, or null if the language is undefined.
         /// </summary>
         /// <returns>The number of tracks.</returns>
         /// <remarks>
-        ///     <para>The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</para>
+        ///     <para>The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        ///     <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.</para>
         ///     <para>The language codes are defined in ISO 639-1.</para>
         /// </remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The <see cref="Player"/> that this instance belongs to is not in the valid state.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     <paramref name="index"/> is less than zero.\n
@@ -110,8 +114,11 @@ namespace Tizen.Multimedia
         /// Gets or sets the selected track index.
         /// </summary>
         /// <value>The currently selected track index.</value>
-        /// <remarks>The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed.</exception>
+        /// <remarks>
+        /// The <see cref="Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">The <see cref="Player"/> that this instance belongs to has been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The <see cref="Player"/> that this instance belongs to is not in the valid state.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     <paramref name="value"/> is less than zero.\n
index b31fb41..b82ba0c 100644 (file)
@@ -20,12 +20,12 @@ using static Interop;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents properties for audio stream.
+    /// Represents properties for the audio stream.
     /// </summary>
     public struct AudioStreamProperties
     {
         /// <summary>
-        /// Initialize a new instance of the AudioStreamProperties struct with the specified sample rate, channels and bit rate.
+        /// Initializes a new instance of the AudioStreamProperties struct with the specified sample rate, channels, and bit rate.
         /// </summary>
         /// <param name="sampleRate">The sample rate of the stream.</param>
         /// <param name="channels">The number of channels of the stream.</param>
@@ -76,12 +76,12 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Represents properties for video stream.
+    /// Represents properties for the video stream.
     /// </summary>
     public struct VideoStreamProperties
     {
         /// <summary>
-        /// Initialize a new instance of the VideoStreamProperties struct with the specified fps, bit rate and size.
+        /// Initializes a new instance of the VideoStreamProperties struct with the specified fps, bit rate, and size.
         /// </summary>
         /// <param name="fps">The fps of the stream.</param>
         /// <param name="bitRate">The bit rate of the stream.</param>
@@ -95,7 +95,7 @@ namespace Tizen.Multimedia
                 ", width : " + size.Width + ", height : " + size.Height);
         }
         /// <summary>
-        /// Initialize a new instance of the VideoStreamProperties struct with the specified fps, bit rate, width and height.
+        /// Initializes a new instance of the VideoStreamProperties struct with the specified fps, bit rate, width, and height.
         /// </summary>
         /// <param name="fps">The fps of the stream.</param>
         /// <param name="bitRate">The bit rate of the stream.</param>
@@ -157,12 +157,19 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves the album art of the stream or null if there is no album art data.
+        /// Retrieves the album art of the stream, or null if there is no album art data.
         /// </summary>
         /// <returns>Raw byte array if album art exists; otherwise null.</returns>
-        /// <remarks>The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed.</exception>
-        /// <exception cref="InvalidOperationException">The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.</exception>
+        /// <remarks>
+        /// The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed of.
+        /// </exception>
+        /// <exception cref="InvalidOperationException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.
+        /// </exception>
         public byte[] GetAlbumArt()
         {
             Player.ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
@@ -211,18 +218,18 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves the codec name of audio or null if there is no audio.
+        /// Retrieves the codec name of the audio or null if there is no audio.
         /// </summary>
-        /// <returns>A string that represents codec name.</returns>
+        /// <returns>A string that represents the codec name.</returns>
         public string GetAudioCodec()
         {
             return GetCodecInfo(true);
         }
 
         /// <summary>
-        /// Retrieves the codec name of video or null if there is no video.
+        /// Retrieves the codec name of the video or null if there is no video.
         /// </summary>
-        /// <returns>A string that represents codec name.</returns>
+        /// <returns>A string that represents the codec name.</returns>
         public string GetVideoCodec()
         {
             return GetCodecInfo(false);
@@ -232,9 +239,16 @@ namespace Tizen.Multimedia
         /// Gets the duration.
         /// </summary>
         /// <returns>The duration of the stream.</returns>
-        /// <remarks>The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed.</exception>
-        /// <exception cref="InvalidOperationException">The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.</exception>
+        /// <remarks>
+        /// The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed of.
+        /// </exception>
+        /// <exception cref="InvalidOperationException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.
+        /// </exception>
         public int GetDuration()
         {
             Player.ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
@@ -248,12 +262,19 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the properties of audio.
+        /// Gets the properties of the audio.
         /// </summary>
-        /// <returns>A <see cref="AudioStreamProperties"/> that contains audio stream information.</returns>
-        /// <remarks>The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed.</exception>
-        /// <exception cref="InvalidOperationException">The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.</exception>
+        /// <returns>A <see cref="AudioStreamProperties"/> that contains the audio stream information.</returns>
+        /// <remarks>
+        /// The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed of.
+        /// </exception>
+        /// <exception cref="InvalidOperationException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.
+        /// </exception>
         public AudioStreamProperties GetAudioProperties()
         {
             Player.ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
@@ -265,18 +286,23 @@ namespace Tizen.Multimedia
             NativePlayer.GetAudioStreamInfo(Player.Handle, out sampleRate, out channels, out bitRate).
                 ThrowIfFailed("Failed to get audio stream info");
 
-            // TODO should we check value is zero and return null?
-
             return new AudioStreamProperties(sampleRate, channels, bitRate);
         }
 
         /// <summary>
-        /// Gets the properties of video.
+        /// Gets the properties of the video.
         /// </summary>
-        /// <returns>A <see cref="VideoStreamProperties"/> that contains video stream information.</returns>
-        /// <remarks>The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed.</exception>
-        /// <exception cref="InvalidOperationException">The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.</exception>
+        /// <returns>A <see cref="VideoStreamProperties"/> that contains the video stream information.</returns>
+        /// <remarks>
+        /// The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.
+        /// </remarks>
+        /// <exception cref="ObjectDisposedException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed of.
+        /// </exception>
+        /// <exception cref="InvalidOperationException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.
+        /// </exception>
         public VideoStreamProperties GetVideoProperties()
         {
             Player.ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
@@ -287,8 +313,6 @@ namespace Tizen.Multimedia
             NativePlayer.GetVideoStreamInfo(Player.Handle, out fps, out bitRate).
                 ThrowIfFailed("Failed to get the video stream info");
 
-            // TODO should we check value is zero and return null?
-
             return new VideoStreamProperties(fps, bitRate, GetVideoSize());
         }
 
@@ -310,9 +334,15 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <returns>A string that represents the value of the specified key.</returns>
         /// <param name="key">The key to query.</param>
-        /// <remarks>The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>, <see cref="PlayerState.Playing"/> or <see cref="PlayerState.Paused"/> state.</remarks>
-        /// <exception cref="ObjectDisposedException">The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed.</exception>
-        /// <exception cref="InvalidOperationException">The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.</exception>
+        /// <remarks>
+        /// The <see cref="Multimedia.Player"/> that owns this instance must be in the <see cref="PlayerState.Ready"/>,
+        /// <see cref="PlayerState.Playing"/>, or <see cref="PlayerState.Paused"/> state.</remarks>
+        /// <exception cref="ObjectDisposedException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to has been disposed of.
+        /// </exception>
+        /// <exception cref="InvalidOperationException">
+        /// The <see cref="Multimedia.Player"/> that this instance belongs to is not in the valid state.
+        /// </exception>
         public string GetMetadata(StreamMetadataKey key)
         {
             Player.ValidatePlayerState(PlayerState.Ready, PlayerState.Playing, PlayerState.Paused);
index 327a565..40ca485 100644 (file)
@@ -33,17 +33,17 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the <see cref="Size"/> of new video.
+        /// Gets the <see cref="Size"/> of the new video.
         /// </summary>
         public Size Size { get; }
 
         /// <summary>
-        /// Gets the fps of new video
+        /// Gets the fps of the new video
         /// </summary>
         public int Fps { get; }
 
         /// <summary>
-        /// Gets the bit rate of new video.
+        /// Gets the bit rate of the new video.
         /// </summary>
         public int BitRate { 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 aeda76e..9510cb3 100755 (executable)
@@ -24,9 +24,9 @@ namespace Tizen.Multimedia
     /// Provides a means to edit the metadata of the media file.
     /// </summary>
     /// <privilege>
-    /// If you want to access only internal storage,
+    /// If you want to access only an internal storage,
     /// you should add privilege http://tizen.org/privilege/mediastorage. \n
-    /// Or if you want to access only external storage,
+    /// Or if you want to access only an external storage,
     /// you should add privilege http://tizen.org/privilege/externalstorage. \n
     /// </privilege>
     public class MetadataEditor : IDisposable
@@ -52,12 +52,12 @@ namespace Tizen.Multimedia
         /// Initializes a new instance of the <see cref="MetadataEditor"/> class with the specified path.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="path">The path of the media file to edit metadata.</param>
+        /// <param name="path">The path of the media file to edit the metadata.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="path"/> is a zero-length string, contains only white space.</exception>
         /// <exception cref="FileFormatException">The file is not supported.</exception>
-        /// <exception cref="FileNotFoundException">File does not exist.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege to access the file.</exception>
+        /// <exception cref="FileNotFoundException">The file does not exist.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege to access the file.</exception>
         public MetadataEditor(string path)
         {
             if (path == null)
@@ -117,7 +117,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Artist
         {
             get
@@ -136,7 +136,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Title
         {
             get
@@ -155,7 +155,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Album
         {
             get
@@ -174,7 +174,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Genre
         {
             get
@@ -193,7 +193,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Author
         {
             get
@@ -212,7 +212,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Copyright
         {
             get
@@ -231,11 +231,11 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <remarks>
-        /// If the media contains ID3 tag, this refers to the recorded date.
-        /// If the media is a mp4 format, this refers to the year and the value to set will be converted into integer.
+        /// If the media contains the ID3 tag, this refers to the recorded date.
+        /// If the media is a mp4 format, this refers to the year, and the value to set will be converted into integer.
         /// </remarks>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Date
         {
             get
@@ -254,7 +254,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Description
         {
             get
@@ -273,7 +273,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Comment
         {
             get
@@ -292,7 +292,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string TrackNumber
         {
             get
@@ -310,7 +310,7 @@ namespace Tizen.Multimedia
         /// Gets the count of album arts of media.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public int PictureCount
         {
             get => int.TryParse(GetParam(MetadataEditorAttr.PictureCount), out var value) ? value : 0;
@@ -321,7 +321,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string Conductor
         {
             get
@@ -340,7 +340,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <exception cref="InvalidOperationException">The file is read-only.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public string UnsyncLyrics
         {
             get
@@ -362,7 +362,7 @@ namespace Tizen.Multimedia
         ///     -or-\n
         ///     The file is read-only.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public void Commit()
         {
             if (_isFileReadOnly)
@@ -377,16 +377,15 @@ namespace Tizen.Multimedia
         /// Gets the artwork image in the media file.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="index">The index of picture to import.</param>
-        /// <returns> Artwork included in the media file.</returns>
-        /// <returns>Artwork included in the media file.</returns>
+        /// <param name="index">The index of the picture to import.</param>
+        /// <returns>The artwork included in the media file.</returns>
         /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     <paramref name="index"/> is less than zero.\n
         ///     -or-\n
         ///     <paramref name="index"/> is greater than or equal to <see cref="PictureCount"/>.\n
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public Artwork GetPicture(int index)
         {
             if (index < 0)
@@ -437,16 +436,16 @@ namespace Tizen.Multimedia
         /// Appends the picture to the media file.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="path">The path of picture for adding to the metadata.</param>
+        /// <param name="path">The path of the picture for adding to the metadata.</param>
         /// <exception cref="InvalidOperationException">
         ///     An internal error occurs.\n
         ///     -or-\n
         ///     The media file is read-only.
         /// </exception>
-        /// <exception cref="ArgumentNullException"> Picture path is null</exception>
-        /// <exception cref="FileNotFoundException">File does not exist.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege to access the file.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="path"/> is null</exception>
+        /// <exception cref="FileNotFoundException">The file does not exist.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege to access the file.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         /// <exception cref="FileFormatException">The specified file is not supported.</exception>
         public void AddPicture(string path)
         {
@@ -473,7 +472,7 @@ namespace Tizen.Multimedia
         /// Removes the picture from the media file.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="index">The index of picture to remove.</param>
+        /// <param name="index">The index of the picture to remove.</param>
         /// <exception cref="InvalidOperationException">
         ///     An internal error occurs.\n
         ///     -or-\n
@@ -484,7 +483,7 @@ namespace Tizen.Multimedia
         ///     -or-\n
         ///     <paramref name="index"/> is greater than or equal to <see cref="PictureCount"/>.\n
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MetadataEditor"/> has already been disposed of.</exception>
         public void RemovePicture(int index)
         {
             if (index < 0)
index 4459d60..7ae1680 100644 (file)
@@ -21,7 +21,7 @@ using Tizen.Internals.Errors;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Enumeration for metadata extractor's error codes.
+    /// Enumeration for the metadata extractor's error codes.
     /// </summary>
     internal enum MetadataEditorError
     {
index d5a83a7..38afe72 100755 (executable)
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents artwork information of media.
+    /// Represents the artwork information of the media.
     /// </summary>
     public class Artwork
     {
         /// <summary>
-        /// Initializes a new instance of the Artwork class with the specified data and mime type.
+        /// Initializes a new instance of the Artwork class with the specified data and the mime type.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="data">The data of the artwork to set metadata.</param>
+        /// <param name="data">The data of the artwork to set the metadata.</param>
         /// <param name="mimeType">The mime type of the data of the artwork.</param>
         public Artwork(byte[] data, string mimeType)
         {
@@ -40,7 +40,7 @@ namespace Tizen.Multimedia
         public byte[] Data { get; }
 
         /// <summary>
-        /// Gets the mime type of artwork.
+        /// Gets the mime type of the artwork.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         public string MimeType { get; }
index 4efafa1..11b33af 100755 (executable)
@@ -21,7 +21,7 @@ using static Interop.MetadataExtractor;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents video metadata information.
+    /// Represents the video metadata information.
     /// </summary>
     public class VideoMetadata
     {
@@ -55,7 +55,7 @@ namespace Tizen.Multimedia
         public int? BitRate { get; }
 
         /// <summary>
-        /// Gets the video FPS.
+        /// Gets the video fps.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>The fps value, or null if the information does not exist.</value>
@@ -76,7 +76,7 @@ namespace Tizen.Multimedia
         public int? Height { get; }
 
         /// <summary>
-        /// Get the codec type of the video.
+        /// Gets the codec type of the video.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <value>A string representing the codec type, or null if the information does not exist.</value>
@@ -99,7 +99,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Represents audio metadata information.
+    /// Represents the audio metadata information.
     /// </summary>
     public class AudioMetadata
     {
@@ -175,7 +175,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Represents metadata information of a media.
+    /// Represents the metadata information of a media.
     /// </summary>
     public class Metadata
     {
index bc3514c..3086a9b 100755 (executable)
@@ -15,6 +15,7 @@
  */
 
 using System;
+using System.IO;
 using System.Runtime.InteropServices;
 
 namespace Tizen.Multimedia
@@ -25,7 +26,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Provides a set of functions to get the metadata from a media file.
+    /// Provides a means to get the metadata from a media file.
     /// </summary>
     public class MetadataExtractor : IDisposable
     {
@@ -55,9 +56,9 @@ namespace Tizen.Multimedia
         /// Initializes a new instance of the MetadataExtractor class with the specified path.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="path">The path for the file to extract metadata.</param>
+        /// <param name="path">The path for the file to extract the metadata.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
-        /// <exception cref="FileNotFoundException"><paramref name="path"/> is not exist.</exception>
+        /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exist.</exception>
         public MetadataExtractor(string path)
         {
             if (path == null)
@@ -72,7 +73,7 @@ namespace Tizen.Multimedia
         /// Initializes a new instance of the MetadataExtractor class with the specified buffer.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <param name="buffer">The buffer to extract metadata.</param>
+        /// <param name="buffer">The buffer to extract the metadata.</param>
         /// <exception cref="ArgumentNullException"><paramref name="buffer"/> is null.</exception>
         /// <exception cref="ArgumentException">The length of <paramref name="buffer"/> is zero.</exception>
         public MetadataExtractor(byte[] buffer)
@@ -120,8 +121,8 @@ namespace Tizen.Multimedia
         /// Retrieves the <see cref="Metadata"/>.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <returns>A <see cref="Metadata"/> for the given source.</returns>
-        /// <exception cref="InvalidOperationException">Internal process error is occurred.</exception>
+        /// <returns>The <see cref="Metadata"/> for the given source.</returns>
+        /// <exception cref="InvalidOperationException">An internal process error occurs.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="MetadataExtractor"/> has been already disposed of.</exception>
         public Metadata GetMetadata()
         {
@@ -137,8 +138,8 @@ namespace Tizen.Multimedia
         /// Gets the artwork image in the source.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        /// <returns>A <see cref="Artwork"/> if it exists, otherwise null.</returns>
-        /// <exception cref="InvalidOperationException">Internal process error is occurred.</exception>
+        /// <returns>The <see cref="Artwork"/> if it exists, otherwise null.</returns>
+        /// <exception cref="InvalidOperationException">An internal process error occurs.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="MetadataExtractor"/> has been already disposed of.</exception>
         public Artwork GetArtwork()
         {
@@ -174,8 +175,8 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <param name="index">The index of lyrics to retrieve.</param>
-        /// <returns>A <see cref="SyncLyrics"/> object if <paramref name="index"/> is valid, otherwise null.</returns>
-        /// <exception cref="InvalidOperationException">Internal process error is occurred.</exception>
+        /// <returns>The <see cref="SyncLyrics"/> object if <paramref name="index"/> is valid, otherwise null.</returns>
+        /// <exception cref="InvalidOperationException">An internal process error occurs.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="MetadataExtractor"/> has been already disposed of.</exception>
         public SyncLyrics GetSyncLyrics(int index)
         {
@@ -206,7 +207,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>The raw thumbnail data in RGB888 if it exists, otherwise null.</returns>
-        /// <exception cref="InvalidOperationException">Internal process error is occurred.</exception>
+        /// <exception cref="InvalidOperationException">An internal process error occurs.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="MetadataExtractor"/> has been already disposed of.</exception>
         public byte[] GetVideoThumbnail()
         {
@@ -272,10 +273,6 @@ namespace Tizen.Multimedia
             }
         }
 
-        /// <summary>
-        /// Metadata Extractor destructor
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         ~MetadataExtractor()
         {
             Dispose(false);
index 36d40a2..71c8bca 100644 (file)
@@ -21,7 +21,7 @@ using Tizen.Internals.Errors;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Enumeration for metadata extractor's error codes.
+    /// Enumeration for the metadata extractor's error codes.
     /// </summary>
     internal enum MetadataExtractorError
     {
index 3081964..77f1bdf 100755 (executable)
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents synchronized lyrics information of media.
+    /// Represents the synchronized lyrics information of the media.
     /// </summary>
     public class SyncLyrics
     {
         /// <summary>
-        /// Initialize a new instance of the MetadataExtractor class with the specified lyrics and timestamp.
+        /// Initializes a new instance of the MetadataExtractor class with the specified lyrics and the timestamp.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <param name="lyrics">The text of synchronized lyrics.</param>
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>
old mode 100644 (file)
new mode 100755 (executable)
index 521eb50..20d70fd
@@ -32,9 +32,9 @@ namespace Tizen.Multimedia
         private const string FeatureFmRadio = "http://tizen.org/feature/fmradio";
 
         /// <summary>
-        /// Initialize a new instance of the Radio class.
+        /// Initializes a new instance of the Radio class.
         /// </summary>
-        /// <exception cref="NotSupportedException">Radio feature is not supported</exception>
+        /// <exception cref="NotSupportedException">The radio feature is not supported.</exception>
         public Radio()
         {
             ValidateFeatureSupported(FeatureFmRadio);
@@ -66,22 +66,22 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Occurs when radio scan information is updated.
+        /// Occurs when the radio scanning information is updated.
         /// </summary>
         public event EventHandler<ScanUpdatedEventArgs> ScanUpdated;
 
         /// <summary>
-        /// Occurs when radio scanning stops.
+        /// Occurs when the radio scanning stops.
         /// </summary>
         public event EventHandler ScanStopped;
 
         /// <summary>
-        /// Occurs when radio scan is completed.
+        /// Occurs when the radio scanning is completed.
         /// </summary>
         public event EventHandler ScanCompleted;
 
         /// <summary>
-        /// Occurs when radio is interrupted
+        /// Occurs when the radio is interrupted.
         /// </summary>
         public event EventHandler<RadioInterruptedEventArgs> Interrupted;
 
@@ -99,7 +99,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the radio frequency, in [87500 ~ 108000] (kHz).
+        /// Gets or sets the radio frequency in the range of 87500 ~ 108000 kHz.
         /// </summary>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     <paramref name="value"/> is less than <see cref="Range.Min"/> of <see cref="FrequencyRange"/>.\n
@@ -126,7 +126,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the current signal strength, in [-128 ~ 128] (dBm).
+        /// Gets the current signal strength in the range of -128 ~ 128 dBm.
         /// </summary>
         public int SignalStrength
         {
@@ -139,7 +139,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the value indicating if radio is muted.
+        /// Gets the value indicating if the radio is muted.
         /// </summary>
         /// <value>
         /// true if the radio is muted; otherwise, false.
@@ -160,7 +160,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the channel spacing for current region.
+        /// Gets the channel spacing for the current region.
         /// </summary>
         public int ChannelSpacing
         {
@@ -203,7 +203,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the frequency for the region, in [87500 ~ 108000] (kHz).
+        /// Gets the frequency for the region in the range of 87500 ~ 108000 kHz.
         /// </summary>
         public Range FrequencyRange
         {
@@ -242,7 +242,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Starts radio scan, will trigger ScanInformationUpdated event, when scan information is updated
+        /// Starts the radio scanning and triggers the ScanInformationUpdated event when the scan information is updated.
         /// </summary>
         /// <remarks>The radio must be in the <see cref="RadioState.Ready"/> or <see cref="RadioState.Playing"/> state.</remarks>
         /// <exception cref="InvalidOperationException">The radio is not in the valid state.</exception>
@@ -256,7 +256,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Stops radio scan.
+        /// Stops the radio scanning.
         /// </summary>
         /// <remarks>The radio must be in the <see cref="RadioState.Scanning"/> state.</remarks>
         /// <exception cref="InvalidOperationException">The radio is not in the valid state.</exception>
@@ -273,7 +273,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <returns>
         /// A task that represents the asynchronous seeking operation.
-        /// The result value is the current frequency, in range [87500 ~ 108000] (kHz).
+        /// The result value is the current frequency in the range of 87500 ~ 108000 kHz.
         /// It can be -1 if the seeking operation has failed.
         /// </returns>
         /// <remarks>The radio must be in the <see cref="RadioState.Playing"/> state.</remarks>
@@ -297,7 +297,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <returns>
         /// A task that represents the asynchronous seeking operation.
-        /// The result value is the current frequency, in range [87500 ~ 108000] (kHz).
+        /// The result value is the current frequency in the range of 87500 ~ 108000 kHz.
         /// It can be -1 if the seeking operation has failed.
         /// </returns>
         /// <remarks>The radio must be in the <see cref="RadioState.Playing"/> state.</remarks>
@@ -319,7 +319,7 @@ namespace Tizen.Multimedia
         private void ValidateFeatureSupported(string featurePath)
         {
             bool supported = false;
-            SystemInfo.TryGetValue(featurePath, out supported);
+            Information.TryGetValue(featurePath, out supported);
 
             if (supported == false)
             {
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>
old mode 100644 (file)
new mode 100755 (executable)
index e28f85f..31d6447
@@ -23,7 +23,7 @@ namespace Tizen.Multimedia
     public partial class Recorder
     {
         /// <summary>
-        /// Occurs when an error occurs during recorder operation.
+        /// Occurs when an error occurs during the recorder operation.
         /// </summary>
         public event EventHandler<RecordingErrorOccurredEventArgs> ErrorOccurred;
         private Native.RecorderErrorCallback _errorOccurredCallback;
@@ -35,20 +35,20 @@ namespace Tizen.Multimedia
         private Native.InterruptedCallback _interruptedCallback;
 
         /// <summary>
-        /// This event occurs when recorder state is changed.
+        /// This event occurs when the recorder state is changed.
         /// </summary>
         public event EventHandler<RecorderStateChangedEventArgs> StateChanged;
         private Native.StatechangedCallback _stateChangedCallback;
 
         /// <summary>
-        /// Occurs when recording information changes.
+        /// Occurs when the recording information changes.
         /// </summary>
         public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
         private Native.RecordingProgressCallback _recordingProgressCallback;
 
         //TODO need to test dispose while event handler is running.
         /// <summary>
-        /// Occurs when audio stream data is being delivered.
+        /// Occurs when the audio stream data is being delivered.
         /// </summary>
         /// <remarks>
         /// Do not call <see cref="Commit"/> and <see cref="Cancel"/> in this event.
@@ -60,13 +60,13 @@ namespace Tizen.Multimedia
         /// Occurs when recording limit is reached.
         /// </summary>
         /// <remarks>
-        /// After this event is raised, recording data is discarded and not written in the recording file.
+        /// After this event is raised, the recording data is discarded and not written in the recording file.
         /// </remarks>
         public event EventHandler<RecordingLimitReachedEventArgs> RecordingLimitReached;
         private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
 
         /// <summary>
-        /// Occurs when muxed stream data is being delivered.
+        /// Occurs when the muxed stream data is being delivered.
         /// </summary>
         public event EventHandler<MuxedStreamDeliveredEventArgs> MuxedStreamDelivered;
         private Native.MuxedStreamCallback _muxedStreamCallback;
old mode 100644 (file)
new mode 100755 (executable)
index f2d28a9..59ba378
@@ -68,14 +68,14 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the number of audio channel.
+        /// Gets or sets the number of the audio channel.
         /// </summary>
         /// <remarks>
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
         /// <value>
-        /// For mono recording, set channel to 1.
-        /// For stereo recording, set channel to 2.
+        /// For mono recording, set the channel to 1.
+        /// For stereo recording, set the channel to 2.
         /// </value>
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
@@ -107,9 +107,9 @@ namespace Tizen.Multimedia
         /// Gets or sets the audio device for recording.
         /// </summary>
         /// <remarks>
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
-        /// <value>A <see cref="RecorderAudioDevice"/> that specifies the type of audio device.</value>
+        /// <value>A <see cref="RecorderAudioDevice"/> that specifies the type of the audio device.</value>
         /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
         /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
@@ -136,7 +136,7 @@ namespace Tizen.Multimedia
         /// Gets or sets the sampling rate of an audio stream in hertz.
         /// </summary>
         /// <remarks>
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
@@ -170,7 +170,7 @@ namespace Tizen.Multimedia
         /// Gets or sets the bitrate of an audio encoder in bits per second.
         /// </summary>
         /// <remarks>
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
@@ -207,9 +207,9 @@ namespace Tizen.Multimedia
         /// </value>
         /// <remarks>
         /// After reaching the limitation, the data which is being recorded will
-        /// be discarded and not written to the file.\n
+        /// be discarded and will not be written to the file.\n
         /// \n
-        /// To set, the recorder must be in the<see cref="RecorderState.Idle"/> or <see cref= "RecorderState.Ready" /> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref= "RecorderState.Ready" /> state.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
@@ -248,9 +248,9 @@ namespace Tizen.Multimedia
         /// </value>
         /// <remarks>
         /// After reaching the limitation, the data which is being recorded will
-        /// be discarded and not written to the file.\n
+        /// be discarded and will not be written to the file.\n
         /// \n
-        /// To set, the recorder must be in the<see cref="RecorderState.Idle"/> or <see cref= "RecorderState.Ready" /> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref= "RecorderState.Ready" /> state.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
index 6f5303b..24807ce 100755 (executable)
@@ -120,7 +120,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the current state of the recorder.
         /// </summary>
-        /// <value>A <see cref="RecorderState"/> that specifies the state of recorder.</value>
+        /// <value>A <see cref="RecorderState"/> that specifies the state of the recorder.</value>
         /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
         public RecorderState State
         {
@@ -135,7 +135,7 @@ namespace Tizen.Multimedia
 
         #region Methods
         /// <summary>
-        /// Prepare the media recorder for recording.
+        /// Prepares the media recorder for recording.
         /// </summary>
         /// <remarks>
         /// The recorder should be in the <see cref="RecorderState.Idle"/> state.\n
@@ -175,7 +175,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <remarks>
         /// The recorder should be in the <see cref="RecorderState.Ready"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Idle"/> after this.
+        /// The state of recorder will be the <see cref="RecorderState.Idle"/> after this.
         /// It has no effect if the current state is the <see cref="RecorderState.Idle"/>.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
@@ -205,14 +205,14 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <remarks>
         /// The recorder must be in the <see cref="RecorderState.Ready"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Recording"/> after this. \n
+        /// The state of the recorder will be the <see cref="RecorderState.Recording"/> after this. \n
         /// \n
         /// If the specified path exists, the file is removed automatically and updated by new one.\n
         /// The mediastorage privilege(http://tizen.org/privilege/mediastorage) is required if the path is relevant to media storage.\n
         /// The externalstorage privilege(http://tizen.org/privilege/externalstorage) is required if the path is relevant to external storage.\n
         /// \n
         /// In the video recorder, some preview format does not support record mode.
-        ///    You should use default preview format or <see cref="CameraPixelFormat.Nv12"/> in the record mode.
+        ///    You should use the default preview format or the <see cref="CameraPixelFormat.Nv12"/> in the record mode.
         /// </remarks>
         /// <param name="savePath">The file path for recording result.</param>
         /// <privilege>http://tizen.org/privilege/recorder</privilege>
@@ -255,7 +255,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <remarks>
         /// The recorder should be in the <see cref="RecorderState.Paused"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Recording"/> after this.
+        /// The state of recorder will be the <see cref="RecorderState.Recording"/> after this.
         /// It has no effect if the current state is the <see cref="RecorderState.Recording"/>.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
@@ -279,11 +279,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Pause the recording.
+        /// Pauses the recording.
         /// </summary>
         /// <remarks>
         /// The recorder should be in the <see cref="RecorderState.Recording"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Paused"/> after this.
+        /// The state of the recorder will be the <see cref="RecorderState.Paused"/> after this.
         /// It has no effect if the current state is the <see cref="RecorderState.Paused"/>.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
@@ -310,8 +310,8 @@ namespace Tizen.Multimedia
         /// Stops recording and saves the result.
         /// </summary>
         /// <remarks>
-        /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Ready"/> after the operation.
+        /// The recorder must be in the <see cref="RecorderState.Recording"/> or the <see cref="RecorderState.Paused"/> state.
+        /// The state of the recorder will be the <see cref="RecorderState.Ready"/> after the operation.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
         ///     The recorder is not in the valid state.\n
@@ -337,8 +337,8 @@ namespace Tizen.Multimedia
         /// The recording data is discarded and not written in the recording file.
         /// </summary>
         /// <remarks>
-        /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
-        /// The state of recorder will be <see cref="RecorderState.Ready"/> after the operation.
+        /// The recorder must be in the <see cref="RecorderState.Recording"/> or the <see cref="RecorderState.Paused"/> state.
+        /// The state of the recorder will be the <see cref="RecorderState.Ready"/> after the operation.
         /// </remarks>
         /// <exception cref="InvalidOperationException">
         ///     The recorder is not in the valid state.\n
@@ -363,7 +363,7 @@ namespace Tizen.Multimedia
         /// Apply the audio stream policy.
         /// </summary>
         /// <remarks>
-        /// The recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// The recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
         /// <param name="policy">The policy to apply.</param>
         /// <exception cref="ArgumentNullException"><paramref name="policy"/> is null.</exception>
@@ -395,9 +395,9 @@ namespace Tizen.Multimedia
         /// Returns the peak audio input level in dB since the last call to this method.
         /// </summary>
         /// <remarks>
-        /// 0dB indicates maximum input level, -300dB indicates minimum input level.\n
+        /// 0dB indicates the maximum input level, -300dB indicates the minimum input level.\n
         /// \n
-        /// The recorder must be in the <see cref="RecorderState.Recording"/> or <see cref="RecorderState.Paused"/> state.
+        /// The recorder must be in the <see cref="RecorderState.Recording"/> or the <see cref="RecorderState.Paused"/> state.
         /// </remarks>
         /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
         public double GetPeakAudioLevel()
index 3639d20..8d93891 100755 (executable)
@@ -54,11 +54,11 @@ namespace Tizen.Multimedia
     public enum RecorderAudioDevice
     {
         /// <summary>
-        /// Capture audio from Mic device.
+        /// Capture audio from the Mic device.
         /// </summary>
         Mic,
         /// <summary>
-        /// Capture audio from modem.
+        /// Capture audio from the modem.
         /// </summary>
         Modem
     }
@@ -126,15 +126,15 @@ namespace Tizen.Multimedia
     public enum RecordingLimitType
     {
         /// <summary>
-        /// Time limit in seconds of recording file
+        /// Time limit in seconds of the recording file
         /// </summary>
         Time,
         /// <summary>
-        /// Size limit in KB(KiloBytes) of recording file.
+        /// Size limit in KB(KiloBytes) of the recording file.
         /// </summary>
         Size,
         /// <summary>
-        /// No free space in storage.
+        /// No free space in the storage.
         /// </summary>
         Space
     }
@@ -149,16 +149,16 @@ namespace Tizen.Multimedia
         /// </summary>
         Idle = 1,
         /// <summary>
-        /// Recorder is ready to record. In case of video recorder,
+        /// Recorder is ready to record. In case of video recorder,
         /// preview display will be shown.
         /// </summary>
         Ready,
         /// <summary>
-        /// Recorder is recording media.
+        /// Recorder is recording the media.
         /// </summary>
         Recording,
         /// <summary>
-        /// Recorder is paused while recording media.
+        /// Recorder is paused while recording the media.
         /// </summary>
         Paused
     }
index 86be713..cae1329 100755 (executable)
@@ -31,7 +31,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the policy that interrupted the recorder.
+        /// Gets the reason that interrupted the recorder.
         /// </summary>
         public RecorderPolicy Reason { get; }
 
old mode 100644 (file)
new mode 100755 (executable)
index 78bec71..fa8821a
@@ -229,10 +229,10 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <remarks>
         /// The attribute is valid only in a video recorder.\n
-        /// If the rate is in range of 0-1, video is recorded in a slow motion mode.\n
-        /// If the rate is bigger than 1, video is recorded in a fast motion mode.\n
+        /// If the rate is in range of 0-1, the video is recorded in a slow motion mode.\n
+        /// If the rate is bigger than 1, the video is recorded in a fast motion mode.\n
         /// \n
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
         /// <exception cref="ArgumentOutOfRangeException">The <paramref name="value"/> is less than or equal to 0.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
@@ -262,7 +262,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the orientation in a video metadata tag.
+        /// Gets or sets the orientation in the video metadata tag.
         /// </summary>
         /// <value>A <see cref="Rotation"/> that specifies the type of orientation.</value>
         /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
@@ -289,11 +289,9 @@ namespace Tizen.Multimedia
         /// Gets or sets the resolution of the video recording.
         /// </summary>
         /// <remarks>
-        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
+        /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or the <see cref="RecorderState.Ready"/> state.
         /// </remarks>
-        /// <exception cref="ArgumentOutOfRangeException">
-        ///    Width or height of <paramref name="value"/> is less than or equal to zero.
-        /// </exception>
+        /// <exception cref="ArgumentOutOfRangeException">Width or height of <paramref name="value"/> is less than or equal to zero.</exception>
         /// <exception cref="NotSupportedException"><paramref name="value"> is not supported.</exception>
         /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
         /// <exception cref="ObjectDisposedException">The recorder already has been disposed of.</exception>
@@ -330,7 +328,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the bitrate of an video encoder in bits per second.
+        /// Gets or sets the bitrate of the video encoder in bits per second.
         /// </summary>
         /// <remarks>
         /// To set, the recorder must be in the <see cref="RecorderState.Idle"/> or <see cref="RecorderState.Ready"/> state.
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 a8f6c5a..78a0e06 100644 (file)
@@ -52,7 +52,7 @@ namespace Tizen.Multimedia.Remoting
         /// </summary>
         /// <privilege>http://tizen.org/privilege/mediacontroller.client</privilege>
         /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege.</exception>
         public MediaControllerManager()
         {
             Native.Create(out _handle).ThrowIfError("Failed to create media controller client.");
index 5bcd5c8..1ac0dc8 100644 (file)
 
 namespace Tizen.Multimedia.Remoting
 {
+    /// <summary>
+    /// Specifies the repeat mode.
+    /// </summary>
     public enum MediaControlRepeatMode
     {
+        /// <summary>
+        /// Off.
+        /// </summary>
         Off,
+
+        /// <summary>
+        /// On.
+        /// </summary>
         On,
     }
 }
\ No newline at end of file
index 47fde2b..e1d8bf3 100644 (file)
@@ -29,7 +29,7 @@ namespace Tizen.Multimedia.Remoting
         }
 
         /// <summary>
-        /// Gets the current state of screen mirroring.
+        /// Gets the current state of the screen mirroring.
         /// </summary>
         public ScreenMirroringState State { get; }
     }
index 91a4e9f..0bed78d 100644 (file)
@@ -19,47 +19,47 @@ using System;
 namespace Tizen.Multimedia.Remoting
 {
     /// <summary>
-    /// Specifies audio codecs for <see cref="ScreenMirroring"/>.
+    /// Specifies the audio codecs for <see cref="ScreenMirroring"/>.
     /// </summary>
     /// <seealso cref="ScreenMirroringAudioInfo"/>
     public enum ScreenMirroringAudioCodec
     {
         /// <summary>
-        /// Screen mirroring is not negotiated yet.
+        /// The screen mirroring is not negotiated yet.
         /// </summary>
         None,
         /// <summary>
-        /// AAC codec for audio.
+        /// AAC codec.
         /// </summary>
         Aac,
         /// <summary>
-        /// AC3 codec for audio.
+        /// AC3 codec.
         /// </summary>
         Ac3,
         /// <summary>
-        /// LPCM codec for audio.
+        /// LPCM codec.
         /// </summary>
         Lpcm
     }
 
     /// <summary>
-    /// Specifies video codecs for <see cref="ScreenMirroring"/>.
+    /// Specifies the video codecs for <see cref="ScreenMirroring"/>.
     /// </summary>
     /// <seealso cref="ScreenMirroringVideoInfo"/>
     public enum ScreenMirroringVideoCodec
     {
         /// <summary>
-        /// Screen mirroring is not negotiated yet.
+        /// The screen mirroring is not negotiated yet.
         /// </summary>
         None,
         /// <summary>
-        /// H.264 codec for video.
+        /// H.264 codec.
         /// </summary>
         H264
     }
 
     /// <summary>
-    /// Specifies available combinations of resolutions and fps for <see cref="ScreenMirroring"/>.
+    /// Specifies the available combinations of resolutions and fps for <see cref="ScreenMirroring"/>.
     /// </summary>
     [Flags]
     public enum ScreenMirroringResolutions
@@ -136,7 +136,7 @@ namespace Tizen.Multimedia.Remoting
     }
 
     /// <summary>
-    /// Specifies errors for <see cref="ScreenMirroring"/>.
+    /// Specifies the errors for <see cref="ScreenMirroring"/>.
     /// </summary>
     public enum ScreenMirroringError
     {
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 d964786..0a48598 100644 (file)
@@ -21,7 +21,7 @@ using System.Runtime.InteropServices;
 namespace Tizen.Multimedia.Util
 {
     /// <summary>
-    /// Represents image data returned by a decoder class.
+    /// Represents the image data returned by a decoder class.
     /// </summary>
     public class BitmapFrame
     {
index 48a8896..6649e29 100644 (file)
@@ -19,13 +19,13 @@ using System;
 namespace Tizen.Multimedia.Util
 {
     /// <summary>
-    /// Represent gif image data used to encode a gif image with <see cref="GifEncoder"/>.
+    /// Represents the gif image data used to encode a gif image with <see cref="GifEncoder"/>.
     /// </summary>
     public class GifFrame
     {
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="GifFrame"/> class with a buffer and a delay.
+        /// Initializes a new instance of the <see cref="GifFrame"/> class with a buffer and a delay.
         /// </summary>
         /// <param name="buffer">The raw image buffer to be encoded.</param>
         /// <param name="delay">The delay for this image, in 0.001 sec units.</param>
index 0572e09..8c3fd1b 100644 (file)
@@ -22,63 +22,63 @@ namespace Tizen.Multimedia.Util
     internal enum ImageColorSpace
     {
         /// <summary>
-        /// YV12 - YCrCb planar format
+        /// YV12 - YCrCb planar format.
         /// </summary>
         YV12,
         /// <summary>
-        /// YUV422 - planar
+        /// YUV422 - planar.
         /// </summary>
         Yuv422,
         /// <summary>
-        /// YUV420 - planar
+        /// YUV420 - planar.
         /// </summary>
         I420,
         /// <summary>
-        /// NV12- planar
+        /// NV12- planar.
         /// </summary>
         NV12,
         /// <summary>
-        /// UYVY - packed
+        /// UYVY - packed.
         /// </summary>
         Uyvy,
         /// <summary>
-        /// YUYV - packed
+        /// YUYV - packed.
         /// </summary>
         Yuyv,
         /// <summary>
-        /// RGB565, high-byte is Blue
+        /// RGB565, high-byte is blue.
         /// </summary>
         Rgb565,
         /// <summary>
-        /// RGB888, high-byte is Blue
+        /// RGB888, high-byte is blue.
         /// </summary>
         Rgb888,
         /// <summary>
-        /// ARGB8888, high-byte is Blue
+        /// ARGB8888, high-byte is blue.
         /// </summary>
         Argb8888,
         /// <summary>
-        /// BGRA8888, high-byte is Alpha
+        /// BGRA8888, high-byte is alpha.
         /// </summary>
         Bgra8888,
         /// <summary>
-        /// RGBA8888, high-byte is Alpha
+        /// RGBA8888, high-byte is alpha.
         /// </summary>
         Rgba8888,
         /// <summary>
-        /// BGRX8888, high-byte is X
+        /// BGRX8888, high-byte is X.
         /// </summary>
         Bgrx8888,
         /// <summary>
-        /// NV21- planar
+        /// NV21- planar.
         /// </summary>
         NV21,
         /// <summary>
-        /// NV16- planar
+        /// NV16- planar.
         /// </summary>
         NV16,
         /// <summary>
-        /// NV61- planar
+        /// NV61- planar.
         /// </summary>
         NV61,
     }
index 891faaa..fcf1cab 100644 (file)
@@ -83,13 +83,13 @@ namespace Tizen.Multimedia.Util
         /// <summary>
         /// Decodes an image from the specified file.
         /// </summary>
-        /// <param name="inputFilePath">Input file path from which to decode.</param>
+        /// <param name="inputFilePath">The input file path from which to decode.</param>
         /// <returns>A task that represents the asynchronous decoding operation.</returns>
         /// <remarks>
         ///     Only Graphics Interchange Format(GIF) codec returns more than one frame.\n
         ///     \n
-        ///     http://tizen.org/privilege/mediastorage is needed if <paramref name="inputFilePath"/> is relevant to media storage.\n
-        ///     http://tizen.org/privilege/externalstorage is needed if <paramref name="inputFilePath"/> is relevant to external storage.
+        ///     http://tizen.org/privilege/mediastorage is needed if <paramref name="inputFilePath"/> is relevant to the media storage.\n
+        ///     http://tizen.org/privilege/externalstorage is needed if <paramref name="inputFilePath"/> is relevant to the external storage.
         /// </remarks>
         /// <exception cref="ArgumentNullException"><paramref name="inputFilePath"/> is null.</exception>
         /// <exception cref="ArgumentException">
@@ -100,7 +100,7 @@ namespace Tizen.Multimedia.Util
         ///     The format of <paramref name="inputFilePath"/> is not <see cref="InputFormat"/>.
         /// </exception>
         /// <exception cref="FileNotFoundException"><paramref name="inputFilePath"/> does not exists.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required permission to access the path.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required permission to access the path.</exception>
         /// <exception cref="FileFormatException">The format of <paramref name="inputFilePath"/> is not <see cref="InputFormat"/>.</exception>
         /// <exception cref="ObjectDisposedException">The <see cref="ImageDecoder"/> has already been disposed of.</exception>
         public async Task<IEnumerable<BitmapFrame>> DecodeAsync(string inputFilePath)
@@ -284,7 +284,7 @@ namespace Tizen.Multimedia.Util
         private static readonly byte[] _header = { (byte)'B', (byte)'M' };
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="BmpDecoder"/> class.
+        /// Initializes a new instance of the <see cref="BmpDecoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageDecoder.InputFormat"/> will be the <see cref="ImageFormat.Bmp"/>.</remarks>
         public BmpDecoder() : base(ImageFormat.Bmp)
@@ -295,14 +295,14 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to decode Portable Network Graphics (PNG) encoded images.
+    /// Provides the ability to decode the Portable Network Graphics (PNG) encoded images.
     /// </summary>
     public class PngDecoder : ImageDecoder
     {
         private static readonly byte[] _header = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="PngDecoder"/> class.
+        /// Initializes a new instance of the <see cref="PngDecoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageDecoder.InputFormat"/> will be the <see cref="ImageFormat.Png"/>.</remarks>
         public PngDecoder() : base(ImageFormat.Png)
@@ -313,7 +313,7 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to decode Joint Photographic Experts Group (JPEG) encoded images.
+    /// Provides the ability to decode the Joint Photographic Experts Group (JPEG) encoded images.
     /// </summary>
     public class JpegDecoder : ImageDecoder
     {
@@ -327,7 +327,7 @@ namespace Tizen.Multimedia.Util
         private JpegDownscale _jpegDownscale = DefaultJpegDownscale;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="JpegDecoder"/> class.
+        /// Initializes a new instance of the <see cref="JpegDecoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageDecoder.InputFormat"/> will be the <see cref="ImageFormat.Jpeg"/>.</remarks>
         public JpegDecoder() : base(ImageFormat.Jpeg)
@@ -363,14 +363,14 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to decode Graphics Interchange Format (GIF) encoded images.
+    /// Provides the ability to decode the Graphics Interchange Format (GIF) encoded images.
     /// </summary>
     public class GifDecoder : ImageDecoder
     {
         private static readonly byte[] _header = { (byte)'G', (byte)'I', (byte)'F' };
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="GifDecoder"/> class.
+        /// Initializes a new instance of the <see cref="GifDecoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageDecoder.InputFormat"/> will be the <see cref="ImageFormat.Gif"/>.</remarks>
         public GifDecoder() : base(ImageFormat.Gif)
index d4b8f83..23863a1 100644 (file)
@@ -244,12 +244,12 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to encode Bitmap (BMP) format images.
+    /// Provides the ability to encode the Bitmap (BMP) format images.
     /// </summary>
     public class BmpEncoder : ImageEncoder
     {
         /// <summary>
-        /// Initialize a new instance of the <see cref="BmpEncoder"/> class.
+        /// Initializes a new instance of the <see cref="BmpEncoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Bmp"/>.</remarks>
         public BmpEncoder() : base(ImageFormat.Bmp)
@@ -262,7 +262,7 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to encode Portable Network Graphics (PNG) format images.
+    /// Provides the ability to encode the Portable Network Graphics (PNG) format images.
     /// </summary>
     public class PngEncoder : ImageEncoder
     {
@@ -274,7 +274,7 @@ namespace Tizen.Multimedia.Util
         private PngCompression? _compression;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="PngEncoder"/> class.
+        /// Initializes a new instance of the <see cref="PngEncoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Png"/>.</remarks>
         public PngEncoder() :
@@ -283,7 +283,7 @@ namespace Tizen.Multimedia.Util
         }
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="PngEncoder"/> class with <see cref="PngCompression"/>.
+        /// Initializes a new instance of the <see cref="PngEncoder"/> class with <see cref="PngCompression"/>.
         /// </summary>
         /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Png"/>.</remarks>
         /// <param name="compression">The compression level of the encoder.</param>
@@ -321,7 +321,7 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to encode Joint Photographic Experts Group (JPEG) format images.
+    /// Provides the ability to encode the Joint Photographic Experts Group (JPEG) format images.
     /// </summary>
     public class JpegEncoder : ImageEncoder
     {
@@ -333,7 +333,7 @@ namespace Tizen.Multimedia.Util
         private int? _quality;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="JpegEncoder"/> class.
+        /// Initializes a new instance of the <see cref="JpegEncoder"/> class.
         /// </summary>
         /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Jpeg"/>.</remarks>
         public JpegEncoder() : base(ImageFormat.Jpeg)
@@ -342,7 +342,7 @@ namespace Tizen.Multimedia.Util
 
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="JpegEncoder"/> class with initial quality value.
+        /// Initializes a new instance of the <see cref="JpegEncoder"/> class with initial quality value.
         /// </summary>
         /// <param name="quality">The quality for JPEG image encoding; from 1(lowest quality) to 100(highest quality).</param>
         /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Jpeg"/>.</remarks>
@@ -394,14 +394,14 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Provides the ability to encode Graphics Interchange Format (GIF) format images.
+    /// Provides the ability to encode the Graphics Interchange Format (GIF) format images.
     /// </summary>
     public class GifEncoder : ImageEncoder
     {
         /// <summary>
-       /// Initialize a new instance of the <see cref="GifEncoder"/> class.
-       /// </summary>
-       /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Gif"/>.</remarks>
+        /// Initializes a new instance of the <see cref="GifEncoder"/> class.
+        /// </summary>
+        /// <remarks><see cref="ImageEncoder.OutputFormat"/> will be the <see cref="ImageFormat.Gif"/>.</remarks>
         public GifEncoder() : base(ImageFormat.Gif)
         {
         }
index be552b7..e3d8d14 100644 (file)
@@ -210,7 +210,7 @@ namespace Tizen.Multimedia.Util
         /// <summary>
         /// Returns an enumerator that can iterate through the collection.
         /// </summary>
-        /// <returns>A enumerator that can be used to iterate through the collection.</returns>
+        /// <returns>An enumerator that can be used to iterate through the collection.</returns>
         public IEnumerator<ImageTransform> GetEnumerator() => _list.GetEnumerator();
 
         IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator();
@@ -269,7 +269,7 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Rotates or flips an image.
+    /// Rotates an image.
     /// </summary>
     /// <seealso cref="Rotation"/>
     public class RotateTransform : ImageTransform
@@ -277,7 +277,7 @@ namespace Tizen.Multimedia.Util
         private Rotation _rotation;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="RotateTransform"/> class.
+        /// Initializes a new instance of the <see cref="RotateTransform"/> class.
         /// </summary>
         /// <param name="rotation">The value how to rotate an image.</param>
         /// <exception cref="ArgumentException"><paramref name="rotation"/> is invalid.</exception>
@@ -330,7 +330,7 @@ namespace Tizen.Multimedia.Util
 
 
     /// <summary>
-    /// Rotates or flips an image.
+    /// Flips an image.
     /// </summary>
     /// <seealso cref="Rotation"/>
     public class FlipTransform : ImageTransform
@@ -338,7 +338,7 @@ namespace Tizen.Multimedia.Util
         private Flips _flip;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="RotateTransform"/> class.
+        /// Initializes a new instance of the <see cref="RotateTransform"/> class.
         /// </summary>
         /// <param name="flip">The value how to flip an image.</param>
         /// <exception cref="ArgumentException"><paramref name="flip"/> is invalid.</exception>
@@ -405,7 +405,7 @@ namespace Tizen.Multimedia.Util
     }
 
     /// <summary>
-    /// Changes colorspace of image.
+    /// Changes the colorspace of an image.
     /// </summary>
     /// <seealso cref="ColorSpace"/>
     public class ColorSpaceTransform : ImageTransform
@@ -413,7 +413,7 @@ namespace Tizen.Multimedia.Util
         private ImageColorSpace _imageColorSpace;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="ColorSpaceTransform"/> class.
+        /// Initializes a new instance of the <see cref="ColorSpaceTransform"/> class.
         /// </summary>
         /// <param name="colorSpace">The colorspace of output image.</param>
         /// <exception cref="ArgumentException"><paramref name="colorSpace"/> is invalid.</exception>
@@ -469,7 +469,7 @@ namespace Tizen.Multimedia.Util
         private Rectangle _region;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="CropTransform"/> class.
+        /// Initializes a new instance of the <see cref="CropTransform"/> class.
         /// </summary>
         /// <param name="region">The crop region.</param>
         /// <exception cref="ArgumentOutOfRangeException">
@@ -546,7 +546,7 @@ namespace Tizen.Multimedia.Util
         private Size _size;
 
         /// <summary>
-        /// Initialize a new instance of the <see cref="ResizeTransform"/> class.
+        /// Initializes a new instance of the <see cref="ResizeTransform"/> class.
         /// </summary>
         /// <param name="size">The size that an image is resized to.</param>
         /// <exception cref="ArgumentOutOfRangeException">
index d0f81ad..53bfd38 100644 (file)
@@ -25,7 +25,7 @@ namespace Tizen.Multimedia.Util
     public class ImageTransformer : IDisposable
     {
         /// <summary>
-        /// Initialize a new instance of the <see cref="ImageTransformer"/> class.
+        /// Initializes a new instance of the <see cref="ImageTransformer"/> class.
         /// </summary>
         public ImageTransformer()
         {
index 842eaf6..de4a94a 100644 (file)
@@ -17,7 +17,7 @@
 namespace Tizen.Multimedia.Util
 {
     /// <summary>
-    /// Specifies JPEG Downscale options for decoding.
+    /// Specifies the JPEG Downscale options for decoding.
     /// </summary>
     public enum JpegDownscale
     {
index c2ea191..8398cfa 100644 (file)
@@ -17,7 +17,7 @@
 namespace Tizen.Multimedia.Util
 {
     /// <summary>
-    /// Specifies PNG compression levels.
+    /// Specifies the PNG compression levels.
     /// </summary>
     public enum PngCompression
     {
index 25aa238..de0a1c4 100755 (executable)
@@ -1,23 +1,23 @@
 /*
-* 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.
-*/
+ * 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.
+ */
 
 namespace Tizen.Multimedia.Util
 {
     /// <summary>
-    /// Represents the result of thumbnail extraction.
+    /// Represents the result of the thumbnail extraction.
     /// </summary>
     public class ThumbnailExtractionResult
     {
index 1201d9e..c9ff018 100755 (executable)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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.IO;
@@ -41,12 +41,12 @@ namespace Tizen.Multimedia.Util
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
         /// <returns>A task that represents the asynchronous extracting operation.</returns>
-        /// <remarks>The size of the thumbnail will be the default size(320x240).\n</remarks>
+        /// <remarks>The size of the thumbnail will be the default size (320x240).</remarks>
         /// <param name="path">The path of the media file to extract the thumbnail.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
-        /// <exception cref="FileNotFoundException">Requested <paramref name="path"/> does not exist.</exception>
-        /// <exception cref="InvalidOperationException">Internal error occurred.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
+        /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exist.</exception>
+        /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
         /// <exception cref="FileFormatException">The specified file is not supported.</exception>
         public static Task<ThumbnailExtractionResult> ExtractAsync(string path)
         {
@@ -61,9 +61,9 @@ namespace Tizen.Multimedia.Util
         /// <param name="path">The path of the media file to extract the thumbnail.</param>
         /// <param name="cancellationToken">The token to stop the operation.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
-        /// <exception cref="FileNotFoundException">Requested <paramref name="path"/> does not exist.</exception>
-        /// <exception cref="InvalidOperationException">Internal error occurred.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
+        /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exist.</exception>
+        /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
         /// <exception cref="FileFormatException">The specified file is not supported.</exception>
         public static Task<ThumbnailExtractionResult> ExtractAsync(string path, CancellationToken cancellationToken)
         {
@@ -76,17 +76,17 @@ namespace Tizen.Multimedia.Util
         /// <since_tizen> 3 </since_tizen>
         /// <returns>A task that represents the asynchronous extracting operation.</returns>
         /// <remarks>
-        /// If the width is not a multiple of 8, it can be changed by inner process.\n
+        /// If the width is not a multiple of 8, it can be changed by the inner process.\n
         /// The width will be a multiple of 8 greater than the set value.
         /// </remarks>
         /// <param name="path">The path of the media file to extract the thumbnail.</param>
         /// <param name="size">The size of the thumbnail.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
-        /// <exception cref="FileNotFoundException">Requested <paramref name="path"/> does not exist.</exception>
-        /// <exception cref="InvalidOperationException">Internal error occurred.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
+        /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exist.</exception>
+        /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     Width or height of <paramref name="size"/> is less than or equal to zero.
+        ///     The width or the height of <paramref name="size"/> is less than or equal to zero.
         /// </exception>
         /// <exception cref="FileFormatException">The specified file is not supported.</exception>
         public static Task<ThumbnailExtractionResult> ExtractAsync(string path, Size size)
@@ -100,18 +100,18 @@ namespace Tizen.Multimedia.Util
         /// <since_tizen> 3 </since_tizen>
         /// <returns>A task that represents the asynchronous extracting operation.</returns>
         /// <remarks>
-        /// If the width is not a multiple of 8, it can be changed by inner process.\n
+        /// If the width is not a multiple of 8, it can be changed by the inner process.\n
         /// The width will be a multiple of 8 greater than the set value.
         /// </remarks>
         /// <param name="path">The path of the media file to extract the thumbnail.</param>
         /// <param name="size">The size of the thumbnail.</param>
         /// <param name="cancellationToken">The token to stop the operation.</param>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
-        /// <exception cref="FileNotFoundException">Requested <paramref name="path"/> does not exist.</exception>
-        /// <exception cref="InvalidOperationException">Internal error occurred.</exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
+        /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exist.</exception>
+        /// <exception cref="InvalidOperationException">An internal error occurs.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege for accessing the <paramref name="path"/>.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     Width or height of <paramref name="size"/> is less than or equal to zero.
+        ///     The width or the height of <paramref name="size"/> is less than or equal to zero.
         /// </exception>
         /// <exception cref="FileFormatException">The specified file is not supported.</exception>
         public static Task<ThumbnailExtractionResult> ExtractAsync(string path, Size size,
index f14ea05..588d958 100644 (file)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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.IO;
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 972c0fa..aa20741 100755 (executable)
@@ -38,7 +38,7 @@ namespace Tizen.Multimedia.Vision
 
             string featureType = _featurePath + type;
 
-            bool ret = SystemInfo.TryGetValue(featureType, out isSupported);
+            bool ret = Information.TryGetValue(featureType, out isSupported);
 
             return (isSupported && ret) ? true : false;
         }
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 59d33bd..c5fa445 100755 (executable)
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// The Device API provides functions to query the information of sound devices.
+    /// Provides the ability to query the information of sound devices.
     /// </summary>
     public class AudioDevice
     {
@@ -46,7 +46,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the id of the device.
+        /// Gets the ID of the device.
         /// </summary>
         /// <value>The id of the device.</value>
         public int Id => _id;
index 51cf1ca..b6be3d5 100755 (executable)
@@ -85,7 +85,7 @@ namespace Tizen.Multimedia
         private static object _audioDeviceConnectionLock = new object();
 
         /// <summary>
-        /// Occurs when the state of connection of an audio device changes.
+        /// Occurs when the state of connection of an audio device changes.
         /// </summary>
         public static event EventHandler<AudioDeviceConnectionChangedEventArgs> DeviceConnectionChanged
         {
index 677a0cd..74d90b1 100644 (file)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Specifies the flag for audio device options.
+    /// Specifies the flags for the audio device options.
     /// <para>
     /// This enumeration has a <see cref="FlagsAttribute"/> attribute that allows a bitwise combination of its member values.
     /// </para>
@@ -63,7 +63,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio device type.
+    /// Specifies the audio device types.
     /// </summary>
     public enum AudioDeviceType
     {
@@ -80,11 +80,11 @@ namespace Tizen.Multimedia
         /// </summary>
         BuiltinMic,
         /// <summary>
-        /// Audio jack that can be connected to wired accessory such as headphones and headsets.
+        /// Audio jack that can be connected to wired accessories such as headphones and headsets.
         /// </summary>
         AudioJack,
         /// <summary>
-        /// Bluetooth Media (A2DP).
+        /// Bluetooth media (A2DP).
         /// </summary>
         BluetoothMedia,
         /// <summary>
@@ -96,17 +96,17 @@ namespace Tizen.Multimedia
         /// </summary>
         Forwarding,
         /// <summary>
-        /// USB Audio.
+        /// USB audio.
         /// </summary>
         UsbAudio,
         /// <summary>
-        /// Bluetooth Voice (SCO).
+        /// Bluetooth voice (SCO).
         /// </summary>
         BluetoothVoice
     }
 
     /// <summary>
-    /// Specifies audio device direction.
+    /// Specifies the audio device directions.
     /// </summary>
     public enum AudioDeviceIoDirection
     {
@@ -125,7 +125,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio device state.
+    /// Specifies the audio device states.
     /// </summary>
     public enum AudioDeviceState
     {
@@ -140,7 +140,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio volume type.
+    /// Specifies the audio volume types.
     /// </summary>
     public enum AudioVolumeType
     {
@@ -184,7 +184,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio stream type.
+    /// Specifies the audio stream types.
     /// </summary>
     public enum AudioStreamType
     {
@@ -231,7 +231,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies change reason of audio stream focus state.
+    /// Specifies the change reasons of the audio stream focus state.
     /// </summary>
     public enum AudioStreamFocusChangedReason
     {
@@ -282,7 +282,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies the flag for audio stream focus options.
+    /// Specifies the flags for the audio stream focus options.
     /// <para>
     /// This enumeration has a <see cref="FlagsAttribute"/> attribute that allows a bitwise combination of its member values.
     /// </para>
@@ -301,7 +301,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies audio stream focus state.
+    /// Specifies the audio stream focus states.
     /// </summary>
     public enum AudioStreamFocusState
     {
@@ -316,7 +316,7 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Specifies the flag for audio stream behaviors.
+    /// Specifies the flags for the audio stream behaviors.
     /// <para>
     /// This enumeration has a <see cref="FlagsAttribute"/> attribute that allows a bitwise combination of its member values.
     /// </para>
index bfa6ee4..2429e39 100755 (executable)
@@ -20,7 +20,7 @@ using System.Diagnostics;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Provides the ability to control a sound stream.
+    /// Provides the ability to control the sound stream.
     /// </summary>
     public class AudioStreamPolicy : IDisposable
     {
@@ -29,13 +29,13 @@ namespace Tizen.Multimedia
         private Interop.AudioStreamPolicy.FocusStateChangedCallback _focusStateChangedCallback;
 
         /// <summary>
-        ///  Initializes a new instance of the <see cref="AudioStreamPolicy"/> class with <see cref="AudioStreamType"/>
+        /// Initializes a new instance of the <see cref="AudioStreamPolicy"/> class with <see cref="AudioStreamType"/>
         /// </summary>
         /// <remarks>
         /// To apply the stream policy according to this stream information, the AudioStreamPolicy should
-        /// be passed to other APIs related to playback or recording. (e.g., <see cref="Player"/>, <see cref="WavPlayer"/> , etc.)
+        /// be passed to other APIs related to playback or recording. (For example., <see cref="Player"/>, <see cref="WavPlayer"/> , etc.)
         /// </remarks>
-        /// <param name="streamType">Type of sound stream for which policy needs to be created.</param>
+        /// <param name="streamType">The type of the sound stream for which the policy needs to be created.</param>
         /// <exception cref="ArgumentException"><paramref name="streamType"/> is invalid.</exception>
         public AudioStreamPolicy(AudioStreamType streamType)
         {
@@ -98,14 +98,14 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets the state of focus for playback.
+        /// Gets the state of focus for the playback.
         /// </summary>
         /// <value>The state of focus for playback.</value>
         /// <exception cref="ObjectDisposedException">The <see cref="AudioStreamPolicy"/> has already been disposed of.</exception>
         public AudioStreamFocusState PlaybackFocusState => GetFocusState(true);
 
         /// <summary>
-        /// Gets the state of focus for recording.
+        /// Gets the state of focus for the recording.
         /// </summary>
         /// <value>The state of focus for recording.</value>
         /// <exception cref="ObjectDisposedException">The <see cref="AudioStreamPolicy"/> has already been disposed of.</exception>
index 3ca2057..d50df66 100755 (executable)
@@ -1,18 +1,18 @@
 /*
-* 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.
-*/
+ * 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;
 
index f35481a..aa4b901 100755 (executable)
@@ -36,7 +36,7 @@ namespace Tizen.Multimedia
         public AudioVolumeType Type { get; }
 
         /// <summary>
-        /// Gets the new volume.
+        /// Gets the new volume level.
         /// </summary>
         /// <value>The new volume level.</value>
         public int Level { get; }
index 47cb155..cdfcbf0 100644 (file)
@@ -18,7 +18,6 @@ using System;
 
 namespace Tizen.Multimedia
 {
-
     /// <summary>
     /// Provides a means to control volume levels.
     /// </summary>
@@ -43,7 +42,7 @@ namespace Tizen.Multimedia
         ///     -or-
         ///     <paramref name="value"/> is greater than <see cref="MaxVolumeLevel.this[AudioVolumeType]"/>.
         /// </exception>
-        /// <exception cref="UnauthorizedAccessException">Caller does not have required privilege to set volume.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller does not have required privilege to set volume.</exception>
         public int this[AudioVolumeType type]
         {
             get
old mode 100644 (file)
new mode 100755 (executable)
index 50c8508..58b1ec6
@@ -26,7 +26,7 @@ namespace Tizen.Multimedia
         internal static bool IsSupported(string featureKey)
         {
             bool supported = false;
-            SystemInfo.TryGetValue(featureKey, out supported);
+            Information.TryGetValue(featureKey, out supported);
             return supported;
         }
 
index 6553b3a..16acf08 100644 (file)
@@ -56,7 +56,7 @@ namespace Tizen.Multimedia
 
             if (!bufferOwner.IsBufferAccessible(buffer, MediaBufferAccessMode.Write))
             {
-                throw new InvalidOperationException("The buffer is not in writable state.");
+                throw new InvalidOperationException("The buffer is not in the writable state.");
             }
         }
     }
index 90a8226..553a0dc 100644 (file)
@@ -46,14 +46,14 @@ namespace Tizen.Multimedia
         public bool IsReadOnly { get; }
 
         /// <summary>
-        /// Validates the range
+        /// Validates the range.
         /// </summary>
         /// <param name="offset"></param>
         /// <param name="length"></param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     offset + length is greater than <see cref="Length"/>.
+        ///     The offset + length is greater than <see cref="Length"/>.
         ///     <para>-or-</para>
-        ///     offset or length is less than zero.
+        ///     The offset or length is less than zero.
         /// </exception>
         private void ValidateRange(int offset, int length)
         {
index ed8dec6..f5757fd 100644 (file)
@@ -19,17 +19,17 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Specifies whether a codec is audio codec or video codec.
+    /// Specifies whether a codec is an audio codec or a video codec.
     /// </summary>
     public enum CodecKind
     {
         /// <summary>
-        /// Audio codec
+        /// Audio codec.
         /// </summary>
         Audio,
 
         /// <summary>
-        /// Video codec
+        /// Video codec.
         /// </summary>
         Video
     }
index edbb001..1d0f598 100644 (file)
@@ -22,89 +22,89 @@ namespace Tizen.Multimedia
     public enum ColorSpace
     {
         /// <summary>
-        /// Y800
+        /// Y800.
         /// </summary>
         Y800,
 
         /// <summary>
-        /// I420
+        /// I420.
         /// </summary>
         I420,
 
         /// <summary>
-        /// NV12
+        /// NV12.
         /// </summary>
         NV12,
 
         /// <summary>
-        /// NV16
+        /// NV16.
         /// </summary>
         NV16,
 
         /// <summary>
-        /// NV21
+        /// NV21.
         /// </summary>
         NV21,
 
         /// <summary>
-        /// NV61
+        /// NV61.
         /// </summary>
         NV61,
 
         /// <summary>
-        /// YV12
+        /// YV12.
         /// </summary>
         ///
         YV12,
 
         /// <summary>
-        /// YUYV
+        /// YUYV.
         /// </summary>
         Yuyv,
 
         /// <summary>
-        /// YUV422
+        /// YUV422.
         /// </summary>
         Yuv422,
 
         /// <summary>
-        /// UYVY
+        /// UYVY.
         /// </summary>
         Uyvy,
 
         /// <summary>
-        /// YUV422P
+        /// YUV422P.
         /// </summary>
         ///
         Yuv422P,
 
         /// <summary>
-        /// RGB565
+        /// RGB565.
         /// </summary>
         Rgb565,
 
         /// <summary>
-        /// RGB888
+        /// RGB888.
         /// </summary>
         Rgb888,
 
         /// <summary>
-        /// RGBA8888
+        /// RGBA8888.
         /// </summary>
         Rgba8888,
 
         /// <summary>
-        /// ARGB8888
+        /// ARGB8888.
         /// </summary>
         Argb8888,
 
         /// <summary>
-        /// BGRA8888
+        /// BGRA8888.
         /// </summary>
         Bgra8888,
 
         /// <summary>
-        /// BGRX8888
+        /// BGRX8888.
         /// </summary>
         Bgrx8888
 
index 636fb8f..ba10409 100644 (file)
@@ -21,17 +21,17 @@ namespace Tizen.Multimedia
     internal enum DisplayType
     {
         /// <summary>
-        /// Overlay surface display
+        /// Overlay surface display.
         /// </summary>
         Overlay,
 
         /// <summary>
-        ///  Evas image object surface display
+        ///  Evas image object surface display.
         /// </summary>
         Surface,
 
         /// <summary>
-        /// This disposes off buffers
+        /// This disposes off buffers.
         /// </summary>
         None,
     }
index e7d7d9a..94e9b16 100644 (file)
@@ -20,7 +20,7 @@ namespace Tizen.Multimedia
 {
     /// <summary>
     /// The exception that is thrown when an input file or a data stream that is supposed to conform
-    /// to a certain file format specification is malformed.
+    /// to a certain file format specification, is malformed.
     /// </summary>
     public class FileFormatException : FormatException
     {
index 0d34db6..dfa4275 100644 (file)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Provides functionality to read and write a media buffer.
+    /// Provides functionality to read and write the media buffer.
     /// </summary>
     public interface IMediaBuffer
     {
@@ -28,12 +28,12 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <param name="index">The index of the value to get or set.</param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     index is less than zero.\n
+        ///     <paramref name="index"/> is less than zero.\n
         ///     -or-\n
-        ///     index is equal to or greater than <see cref="Length"/>.
+        ///     <paramref name="index"/> is equal to or greater than <see cref="Length"/>.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
-        /// <exception cref="InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>
+        /// <exception cref="ObjectDisposedException">The object that owns the current buffer has already been disposed of.</exception>
+        /// <exception cref="InvalidOperationException">The buffer is not available, i.e. not writable state.</exception>
         byte this[int index]
         {
             get;
@@ -57,8 +57,9 @@ namespace Tizen.Multimedia
         /// <param name="dest">The array to copy to.</param>
         /// <param name="startIndex">The zero-based index in the source array where copying should start.</param>
         /// <param name="length">The number of array elements to copy.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="dest"/> is null.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref name="length"/> is not valid.</exception>
+        /// <exception cref="ObjectDisposedException">The object that owns the current buffer has already been disposed of.</exception>
         void CopyTo(byte[] dest, int startIndex, int length);
 
         /// <summary>
@@ -68,31 +69,35 @@ namespace Tizen.Multimedia
         /// <param name="startIndex">The zero-based index in the source array where copying should start.</param>
         /// <param name="length">The number of array elements to copy.</param>
         /// <param name="offset">The zero-based index in the buffer where copying should start.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="dest"/> is null.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/>, <paramref name="length"/>,
+        ///     or <paramref name="offset"/> is not valid.</exception>
+        /// <exception cref="ObjectDisposedException">The object that owns the current buffer has already been disposed of.</exception>
         void CopyTo(byte[] dest, int startIndex, int length, int offset);
 
         /// <summary>
         /// Copies data from the buffer to a byte array.
         /// </summary>
         /// <param name="source">The array to copy from.</param>
-        /// <param name="startIndex">The zero-based index in the dest array where copying should start.</param>
+        /// <param name="startIndex">The zero-based index in the destination array where copying should start.</param>
         /// <param name="length">The number of elements to copy.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/> or <paramref name="length"/> is not valid.</exception>
+        /// <exception cref="ObjectDisposedException">The object that owns the current buffer has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>
-
         void CopyFrom(byte[] source, int startIndex, int length);
 
         /// <summary>
         /// Copies data from the buffer to a byte array.
         /// </summary>
         /// <param name="source">The array to copy from.</param>
-        /// <param name="startIndex">The zero-based index in the dest array where copying should start.</param>
+        /// <param name="startIndex">The zero-based index in the destination array where copying should start.</param>
         /// <param name="length">The number of elements to copy.</param>
         /// <param name="offset">The zero-based index in the buffer where copying should start.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The object that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="startIndex"/>, <paramref name="length"/>,
+        ///     or <paramref name="offset"/> is not valid.</exception>
+        /// <exception cref="ObjectDisposedException">The object that owns the current buffer has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The buffer is not available. i.e. not writable state.</exception>
         void CopyFrom(byte[] source, int startIndex, int length, int offset);
     }
index 07357b5..4cca360 100644 (file)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents a point in 2D space.
+    /// Represents a point in the 2D space.
     /// </summary>
     public struct Point
     {
@@ -27,8 +27,8 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Initializes a new instance of the Point with the specified coordinates.
         /// </summary>
-        /// <param name="x">X-axis coordinate of the point in 2D space.</param>
-        /// <param name="y">Y-axis coordinate of the point in 2D space.</param>
+        /// <param name="x">X-axis coordinate of the point in the 2D space.</param>
+        /// <param name="y">Y-axis coordinate of the point in the 2D space.</param>
         public Point(int x, int y)
         {
             X = x;
@@ -36,7 +36,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets X-axis coordinate of the point in 2D space.
+        /// Gets or sets the X-axis coordinate of the point in the 2D space.
         /// </summary>
         public int X
         {
@@ -45,7 +45,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets Y-axis coordinate of the point in 2D space.
+        /// Gets or sets the Y-axis coordinate of the point in the 2D space.
         /// </summary>
         public int Y
         {
index a1fe5e7..bcfc720 100644 (file)
@@ -24,7 +24,7 @@ namespace Tizen.Multimedia
     public struct Range
     {
         /// <summary>
-        /// Initializes a new instance of the Range with the specified values.
+        /// Initializes a new instance of the range with the specified values.
         /// </summary>
         /// <param name="min">Minimum value of the range.</param>
         /// <param name="max">Maximum value of the range.</param>
@@ -40,7 +40,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets minimum value of the range.
+        /// Gets or sets the minimum value of the range.
         /// </summary>
         public int Min
         {
@@ -49,7 +49,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets maximum value of the range.
+        /// Gets or sets the maximum value of the range.
         /// </summary>
         public int Max
         {
@@ -58,15 +58,15 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets length of the range.
+        /// Gets the length of the range.
         /// </summary>
         public int Length => Max - Min;
 
         /// <summary>
-        /// Determines if the specified value is inside of the range.
+        /// Determines if the specified value is within the range.
         /// </summary>
-        /// <param name="value">A value to check.</param>
-        /// <returns>true if the value is inside of the range; otherwise false.</returns>
+        /// <param name="value">The value to check.</param>
+        /// <returns>true if the value is within the range; otherwise false.</returns>
         public bool IsInside(int value)
         {
             return Min <= value && value <= Max;
index 8f37ee1..d7f537d 100644 (file)
@@ -19,7 +19,7 @@ using System;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// This class represents location of the object bounded by rectangle defined by
+    /// Represents the location of the object bounded by a rectangle defined by
     /// coordinates of top left corner, width and height.
     /// </summary>
     public struct Rectangle
@@ -28,7 +28,7 @@ namespace Tizen.Multimedia
         private Size _size;
 
         /// <summary>
-        /// Initializes a new instance of the Rectangle with the specified values.
+        /// Initializes a new instance of the <see cref="Rectangle"/> with the specified values.
         /// </summary>
         /// <param name="x">The x-coordinate of the upper-left corner of the rectangle.</param>
         /// <param name="y">The y-coordinate of the upper-left corner of the rectangle.</param>
@@ -40,7 +40,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Initializes a new instance of the Rectangle with the specified values.
+        /// Initializes a new instance of the <see cref="Rectangle"/> with the specified values.
         /// </summary>
         /// <param name="location">A <see cref="Location"/> that represents the upper-left corner of the rectangular region.</param>
         /// <param name="size">A <see cref="Size"/> that represents the width and height of the rectangular region.</param>
index 2ccf856..6545bc2 100644 (file)
@@ -24,7 +24,7 @@ namespace Tizen.Multimedia
     public struct Size
     {
         /// <summary>
-        /// Initializes a new instance of the Size with the specified values.
+        /// Initializes a new instance of the <see cref="Size"/> with the specified values.
         /// </summary>
         /// <param name="width">Width of the size.</param>
         /// <param name="height">Height of the size.</param>
@@ -35,7 +35,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the width of the Size.
+        /// Gets or sets the width.
         /// </summary>
         public int Width
         {
@@ -44,7 +44,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets or sets the height of the Size.
+        /// Gets or sets the height.
         /// </summary>
         public int Height
         {
index 60e1a54..b70894e 100644 (file)
@@ -27,7 +27,7 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Initializes a new instance of the AudioMediaFormat class with the specified mime type,
-        ///     channel, sample rate, bit and bit rate.
+        /// channel, sample rate, bit, and bit rate.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="channel">The channel value of the format.</param>
@@ -36,7 +36,7 @@ namespace Tizen.Multimedia
         /// <param name="bitRate">The bit rate value of the format.</param>
         /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid(i.e. undefined value).</exception>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     <paramref name="channel"/>, <paramref name="sampleRate"/>, <paramref name="bit"/> or <paramref name="bitRate"/> is less than zero.
+        ///     <paramref name="channel"/>, <paramref name="sampleRate"/>, <paramref name="bit"/>, or <paramref name="bitRate"/> is less than zero.
         /// </exception>
         public AudioMediaFormat(MediaFormatAudioMimeType mimeType,
             int channel, int sampleRate, int bit, int bitRate)
@@ -46,7 +46,7 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Initializes a new instance of the AudioMediaFormat class with the specified mime type,
-        ///     channel, sample rate, bit, bit rate and aac type.
+        ///     channel, sample rate, bit, bit rate, and AAC type.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="channel">The channel value of the format.</param>
@@ -55,12 +55,12 @@ namespace Tizen.Multimedia
         /// <param name="bitRate">The bit rate value of the format.</param>
         /// <param name="aacType">The AAC bitstream format(ADIF or ADTS).</param>
         /// <exception cref="ArgumentException">
-        ///     <paramref name="mimeType"/> or <paramref name="aacType"/> is invalid(i.e. undefined value).\n
+        ///     <paramref name="mimeType"/> or <paramref name="aacType"/> is invalid (i.e. undefined value).\n
         ///     -or-\n
-        ///     <paramref name="aacType"/> is not <see cref="MediaFormatAacType.None"/>, but <paramref name="mimeType"/> is one of aac types.
+        ///     <paramref name="aacType"/> is not <see cref="MediaFormatAacType.None"/>, but <paramref name="mimeType"/> is one of the AAC types.
         ///     </exception>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     <paramref name="channel"/>, <paramref name="sampleRate"/>, <paramref name="bit"/> or <paramref name="bitRate"/> is less than zero.
+        ///     <paramref name="channel"/>, <paramref name="sampleRate"/>, <paramref name="bit"/>, or <paramref name="bitRate"/> is less than zero.
         /// </exception>
         public AudioMediaFormat(MediaFormatAudioMimeType mimeType,
             int channel, int sampleRate, int bit, int bitRate, MediaFormatAacType aacType)
@@ -138,7 +138,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Returns an indication whether a specified mime type is a aac type.
+        /// Returns an indication whether a specified mime type is an AAC type.
         /// </summary>
         /// <param name="mimeType">A mime type.</param>
         private static bool IsAacSupportedMimeType(MediaFormatAudioMimeType mimeType)
@@ -149,14 +149,14 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves audio properties of media format from a native handle.
+        /// Retrieves audio properties of the media format from a native handle.
         /// </summary>
-        /// <param name="handle">A native handle that properties are retrieved from.</param>
-        /// <param name="mimeType">An out parameter for mime type.</param>
-        /// <param name="channel">An out parameter for channel.</param>
-        /// <param name="sampleRate">An out parameter for sample rate.</param>
-        /// <param name="bit">An out parameter for bit.</param>
-        /// <param name="bitRate">An out parameter for bit rate.</param>
+        /// <param name="handle">A native handle that the properties are retrieved from.</param>
+        /// <param name="mimeType">An out parameter for the mime type.</param>
+        /// <param name="channel">An out parameter for the channel.</param>
+        /// <param name="sampleRate">An out parameter for the sample rate.</param>
+        /// <param name="bit">An out parameter for the bit.</param>
+        /// <param name="bitRate">An out parameter for the bit rate.</param>
         private static void GetInfo(IntPtr handle, out MediaFormatAudioMimeType mimeType,
             out int channel, out int sampleRate, out int bit, out int bitRate)
         {
@@ -176,10 +176,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves aac type value from a native handle.
+        /// Retrieves the AAC type value from a native handle.
         /// </summary>
-        /// <param name="handle">A native handle that properties are retrieved from.</param>
-        /// <param name="aacType">An out parameter for aac type.</param>
+        /// <param name="handle">A native handle that the properties are retrieved from.</param>
+        /// <param name="aacType">An out parameter for tha AAC type.</param>
         private static void GetAacType(IntPtr handle, out MediaFormatAacType aacType)
         {
             Debug.Assert(handle != IntPtr.Zero, "The handle is invalid!");
@@ -244,7 +244,7 @@ namespace Tizen.Multimedia
         public int BitRate { get; }
 
         /// <summary>
-        /// Gets the aac type of the current format.
+        /// Gets the AAC type of the current format.
         /// </summary>
         public MediaFormatAacType AacType { get; }
 
index 0669184..8efa929 100644 (file)
@@ -28,7 +28,7 @@ namespace Tizen.Multimedia
         /// Initializes a new instance of the ContainerMediaFormat class.
         /// </summary>
         /// <param name="mimeType">The mime type of the container format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
         public ContainerMediaFormat(MediaFormatContainerMimeType mimeType)
             : base(MediaFormatType.Container)
         {
index f83b205..d6c51e2 100755 (executable)
@@ -46,7 +46,7 @@ namespace Tizen.Multimedia
         /// Creates a media format from a native handle.
         /// </summary>
         /// <param name="handle">A native handle.</param>
-        /// <returns>An object of one of subclasses of <see cref="MediaFormat"/>.</returns>
+        /// <returns>An object of one of the subclasses of <see cref="MediaFormat"/>.</returns>
         internal static MediaFormat FromHandle(IntPtr handle)
         {
             if (handle == IntPtr.Zero)
@@ -81,7 +81,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Create a native media format from this object.
+        /// Creates a native media format from this object.
         /// </summary>
         /// <returns>A converted native handle.</returns>
         /// <remarks>The returned handle must be destroyed using <see cref="Interop.MediaFormat.Unref(IntPtr)"/>.</remarks>
@@ -103,7 +103,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Fill out properties of a native media format with the current media format object.
+        /// Fills out properties of a native media format with the current media format object.
         /// </summary>
         /// <param name="handle">A native handle to be written.</param>
         internal abstract void AsNativeHandle(IntPtr handle);
index 6839c9f..03ed369 100644 (file)
 namespace Tizen.Multimedia
 {
     /// <summary>
-     /// Specifies aac types for <see cref="AudioMediaFormat"/>.
-     /// </summary>
+    /// Specifies the AAC types for <see cref="AudioMediaFormat"/>.
+    /// </summary>
     public enum MediaFormatAacType
     {
         /// <summary>
-        /// Raw, no header
+        /// Raw, no header.
         /// </summary>
         None,
         /// <summary>
-        /// ADTS header
+        /// ADTS header.
         /// </summary>
         Adts,
         /// <summary>
-        /// ADIF header
+        /// ADIF header.
         /// </summary>
         Adif
     }
index 9e23406..3fbeebf 100755 (executable)
@@ -44,17 +44,17 @@ namespace Tizen.Multimedia
     }
 
     /// <summary>
-    /// Enumeration for media format data type
+    /// Specifies the media format data types.
     /// </summary>
     internal enum MediaFormatDataType
     {
         /// <summary>
-        /// Encoded type
+        /// Encoded type.
         /// </summary>
         Encoded = 0x10000000,
 
         /// <summary>
-        /// Raw type
+        /// Raw type.
         /// </summary>
         Raw = 0x20000000,
     }
@@ -65,7 +65,7 @@ namespace Tizen.Multimedia
     public enum MediaFormatAudioMimeType
     {
         /// <summary>
-        /// AMR, Alias for <see cref="AmrNB"/>.
+        /// AMR, alias for <see cref="AmrNB"/>.
         /// </summary>
         Amr = (MediaFormatType.Audio | MediaFormatDataType.Encoded | 0x1040),
 
@@ -80,7 +80,7 @@ namespace Tizen.Multimedia
         AmrWB = (MediaFormatType.Audio | MediaFormatDataType.Encoded | 0x1041),
 
         /// <summary>
-        /// AAC, Alias for <see cref="AacLC"/>.
+        /// AAC, alias for <see cref="AacLC"/>.
         /// </summary>
         Aac = (MediaFormatType.Audio | MediaFormatDataType.Encoded | 0x1060),
 
@@ -161,7 +161,7 @@ namespace Tizen.Multimedia
         H263P = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2021),
 
         /// <summary>
-        /// H264_SP
+        /// H264_SP.
         /// </summary>
         H264SP = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2030),
 
@@ -211,7 +211,7 @@ namespace Tizen.Multimedia
         Mpeg4Asp = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2071),
 
         /// <summary>
-        /// I420
+        /// I420.
         /// </summary>
         I420 = (MediaFormatType.Video | MediaFormatDataType.Raw | 0x2510),
 
@@ -288,63 +288,63 @@ namespace Tizen.Multimedia
     public enum MediaFormatContainerMimeType
     {
         /// <summary>
-        /// MP4 container, Video.
+        /// MP4 container, video.
         /// </summary>
         MP4 = (MediaFormatType.Container | 0x3010),
 
         /// <summary>
-        /// AVI container, Video.
+        /// AVI container, video.
         /// </summary>
         Avi = (MediaFormatType.Container | 0x3020),
 
         /// <summary>
-        /// MPEG2TS container, Video.
+        /// MPEG2TS container, video.
         /// </summary>
         Mpeg2TS = (MediaFormatType.Container | 0x3030),
 
         /// <summary>
-        /// MPEG2PS container, Video.
+        /// MPEG2PS container, video.
         /// </summary>
         Mpeg2PS = (MediaFormatType.Container | 0x3040),
 
         /// <summary>
-        /// MATROSKA container, Video.
+        /// MATROSKA container, video.
         /// </summary>
         Matroska = (MediaFormatType.Container | 0x3050),
 
         /// <summary>
-        /// WEBM container, Video.
+        /// WEBM container, video.
         /// </summary>
         Webm = (MediaFormatType.Container | 0x3060),
 
         /// <summary>
-        /// 3GP container, Video.
+        /// 3GP container, video.
         /// </summary>
         ThreeGP = (MediaFormatType.Container | 0x3070),
 
         /// <summary>
-        /// WAV container, Audio.
+        /// WAV container, audio.
         /// </summary>
         Wav = (MediaFormatType.Container | 0x4010),
 
         /// <summary>
-        ///  OGG container, Audio
+        ///  OGG container, audio
         /// </summary>
         Ogg = (MediaFormatType.Container | 0x4020),
 
         /// <summary>
-        /// AAC_ADTS container, Audio
+        /// AAC_ADTS container, audio
         /// </summary>
         AacAdts = (MediaFormatType.Container | 0x4030),
 
         /// <summary>
-        /// AAC_ADIF container, Audio
+        /// AAC_ADIF container, audio.
         /// </summary>
         AacAdif = (MediaFormatType.Container | 0x4031),
     }
 
     /// <summary>
-    /// Enumeration for text mime type
+    /// Specifies the text mime types.
     /// </summary>
     public enum MediaFormatTextMimeType
     {
index 38d3a5a..a9673fc 100755 (executable)
@@ -17,7 +17,7 @@
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Specifies text types.
+    /// Specifies the text types.
     /// </summary>
     public enum MediaFormatTextType
     {
@@ -27,12 +27,12 @@ namespace Tizen.Multimedia
         None,
 
         /// <summary>
-        /// The mp4 type.
+        /// MP4.
         /// </summary>
         MP4,
 
         /// <summary>
-        /// The 3gpp type.
+        /// 3GPP.
         /// </summary>
         ThreeGpp
     }
index dcdb6a1..e08eb8f 100644 (file)
@@ -30,7 +30,7 @@ namespace Tizen.Multimedia
         private readonly LockState _lock = new LockState();
 
         /// <summary>
-        /// Validate the current object is not locked.
+        /// Validates the current object is not locked.
         /// </summary>
         /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The MediaPacket is in use by another module.</exception>
index c2ffe33..a72b05c 100644 (file)
@@ -33,9 +33,10 @@ namespace Tizen.Multimedia
         /// Initializes a new instance of the MediaPacket class with the specified media format.
         /// </summary>
         /// <param name="format">The media format containing properties for the packet.</param>
-        /// <exception cref="ArgumentNullException">format is null.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="format"/> is null.</exception>
         /// <exception cref="ArgumentException">
-        ///     <see cref="MediaFormatType"/> of the specified format is <see cref="MediaFormatType.Container"/>.</exception>
+        ///     The <see cref="MediaFormatType"/> of the specified format is <see cref="MediaFormatType.Container"/>.
+        /// </exception>
         /// <exception cref="InvalidOperationException">Operation failed.</exception>
         internal MediaPacket(MediaFormat format)
         {
@@ -168,9 +169,10 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets or sets the PTS(Presentation Time Stamp) value of the current packet.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">
-        ///     The MediaPacket is not writable state which means it being used by another module.</exception>
+        ///     The MediaPacket is not in the writable state, which means it is being used by another module.
+        /// </exception>
         public ulong Pts
         {
             get
@@ -198,9 +200,10 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets or sets the DTS(Decoding Time Stamp) value of the current packet.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">
-        ///     The MediaPacket is not in writable state which means it being used by another module.</exception>
+        ///     The MediaPacket is not in the writable state, which means it is being used by another module.
+        /// </exception>
         public ulong Dts
         {
             get
@@ -226,10 +229,10 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Gets a value indicating whether the packet is encoded type.
+        /// Gets a value indicating whether the packet is the encoded type.
         /// </summary>
-        /// <value>true if the packet is encoded type; otherwise, false.</value>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        /// <value>true if the packet is the encoded type; otherwise, false.</value>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         public bool IsEncoded
         {
             get
@@ -251,8 +254,8 @@ namespace Tizen.Multimedia
         /// Gets the buffer of the packet.
         /// </summary>
         /// <value>The <see cref="MediaPacketBuffer"/> allocated to the packet.
-        ///     This property will return null if the packet is raw video format.</value>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        ///     This property will return null if the packet is in the raw video format.</value>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <seealso cref="IsEncoded"/>
         /// <seealso cref="VideoPlanes"/>
         public MediaPacketBuffer Buffer
@@ -278,13 +281,13 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets or sets a length of data written in the <see cref="Buffer"/>.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="ArgumentOutOfRangeException">
         ///     The value specified for this property is less than zero or greater than <see cref="MediaPacketBuffer.Length"/>.</exception>
         /// <exception cref="InvalidOperationException">
         ///     The MediaPacket has <see cref="VideoPlanes"/> instead of <see cref="Buffer"/>.\n
         ///     -or-\n
-        ///     The MediaPacket is not in writable state which means it being used by another module.
+        ///     The MediaPacket is not in the writable state, which means it is being used by another module.
         ///     </exception>
         public int BufferWrittenLength
         {
@@ -329,8 +332,8 @@ namespace Tizen.Multimedia
         /// Gets the video planes of the packet.
         /// </summary>
         /// <value>The <see cref="MediaPacketVideoPlane"/>s allocated to the packet.
-        ///     This property will return null if the packet is not raw video format.</value>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        ///     This property will return null if the packet is not in the raw video format.</value>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <seealso cref="IsEncoded"/>
         /// <seealso cref="Buffer"/>
         public MediaPacketVideoPlane[] VideoPlanes
@@ -356,10 +359,10 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets or sets the buffer flags of the packet.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">
-        ///     The MediaPacket is not in writable state which means it being used by another module.
-        ///     </exception>
+        ///     The MediaPacket is not in the writable state, which means it is being used by another module.
+        /// </exception>
         public MediaPacketBufferFlags BufferFlags
         {
             get
@@ -409,7 +412,7 @@ namespace Tizen.Multimedia
         /// Releases all resources used by the <see cref="MediaPacket"/> object.
         /// </summary>
         /// <exception cref="InvalidOperationException">
-        ///     The MediaPacket can not be disposed which means it being used by another module.
+        ///     The MediaPacket can not be disposed, which means it is being used by another module.
         /// </exception>
         public void Dispose()
         {
@@ -455,7 +458,7 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Validate the current object has not been disposed of.
+        /// Validates the current object has not been disposed of.
         /// </summary>
         /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         private void ValidateNotDisposed()
@@ -469,7 +472,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Ensures whether the packet is writable.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The MediaPacket is being used by another module.</exception>
         internal void EnsureWritableState()
         {
@@ -480,16 +483,16 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Ensures whether the packet is readable.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket has already been disposed of.</exception>
         internal void EnsureReadableState()
         {
             ValidateNotDisposed();
         }
 
         /// <summary>
-        /// Gets a value indicating whether the packet is raw video format.
+        /// Gets a value indicating whether the packet is in the raw video format.
         /// </summary>
-        /// <value>true if the packet is raw video format; otherwise, false.</value>
+        /// <value>true if the packet is in the raw video format; otherwise, false.</value>
         private bool IsVideoPlaneSupported
         {
             get
index 49b9caf..2aecc07 100644 (file)
@@ -45,11 +45,11 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <param name="index">The index of the value to get or set.</param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     index is less than zero.\n
+        ///     <paramref name="index"/> is less than zero.\n
         ///     -or-\n
-        ///     index is equal to or greater than <see cref="Length"/>.
+        ///     <paramref name="index"/> is equal to or greater than <see cref="Length"/>.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The MediaPacket that owns the current buffer is being used by another module.</exception>
         public byte this[int index]
         {
@@ -73,14 +73,14 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Validates the range
+        /// Validates the range.
         /// </summary>
         /// <param name="offset"></param>
         /// <param name="length"></param>
         /// <exception cref="ArgumentOutOfRangeException">
-        ///     offset + length is greater than <see cref="Length"/>.\n
+        ///     <paramref name="offset"/> + <paramref name="length"/> is greater than <see cref="Length"/>.\n
         ///     -or-\n
-        ///     offset or length is less than zero.
+        ///     <paramref name="offset"/> or <paramref name="length"/> is less than zero.
         /// </exception>
         private void ValidateRange(int offset, int length)
         {
@@ -99,14 +99,16 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Copies data from a byte array to the buffer.
+        /// Copies the data from a byte array to the buffer.
         /// </summary>
         /// <param name="source">The array to copy from.</param>
         /// <param name="startIndex">The zero-based index in the source array where copying should start.</param>
         /// <param name="length">The number of array elements to copy.</param>
         /// <param name="offset">The zero-based index in the buffer where copying should start.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     <paramref name="startIndex"/>, <paramref name="offset"/>, or <paramref name="length"/> is not valid.
+        /// </exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         public void CopyFrom(byte[] source, int startIndex, int length, int offset = 0)
         {
             _packet.EnsureReadableState();
@@ -126,14 +128,16 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Copies data from the buffer to a byte array.
+        /// Copies the data from the buffer to a byte array.
         /// </summary>
         /// <param name="dest">The array to copy to.</param>
-        /// <param name="startIndex">The zero-based index in the dest array where copying should start.</param>
+        /// <param name="startIndex">The zero-based index in the destination array where copying should start.</param>
         /// <param name="length">The number of elements to copy.</param>
         /// <param name="offset">The zero-based index in the buffer where copying should start.</param>
-        /// <exception cref="ArgumentOutOfRangeException">startIndex, offset or length is not valid.</exception>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     <paramref name="startIndex"/>, <paramref name="offset"/>, <paramref name="length"/>, or <paramref name="offset"/> is not valid.
+        /// </exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         /// <exception cref="InvalidOperationException">The MediaPacket that owns the current buffer is being used by another module.</exception>
         public void CopyTo(byte[] dest, int startIndex, int length, int offset = 0)
         {
@@ -158,7 +162,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the size of the buffer, in bytes.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         public int Length
         {
             get
index 7c1bf05..897d4b3 100644 (file)
@@ -28,12 +28,12 @@ namespace Tizen.Multimedia
     public enum MediaPacketBufferFlags
     {
         /// <summary>
-        /// The buffer contains codec initialization or codec specific data instead of media data.
+        /// The buffer contains the codec initialization or the codec specific data instead of the media data.
         /// </summary>
         CodecConfig = 0x1,
 
         /// <summary>
-        /// The buffer indicates the end of stream.
+        /// The buffer indicates the end of the stream.
         /// </summary>
         EndOfStream = 0x2,
 
index 3291221..aaabb39 100644 (file)
@@ -20,8 +20,8 @@ using System.Diagnostics;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// Represents a video plane for <see cref="MediaPacket"/>.
-    /// This class is used if and only if the format of the packet is raw video.
+    /// Represents a video plane for the <see cref="MediaPacket"/>.
+    /// This class is used if and only if the format of the packet is the raw video.
     /// </summary>
     public class MediaPacketVideoPlane
     {
@@ -54,7 +54,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the buffer of the current video plane.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         public MediaPacketBuffer Buffer
         {
             get
@@ -67,7 +67,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the stride width of the current video plane.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         public int StrideWidth
         {
             get
@@ -80,7 +80,7 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Gets the stride height of the current video plane.
         /// </summary>
-        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer already has been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
         public int StrideHeight
         {
             get
index 3f28fe9..1c5ef6b 100644 (file)
@@ -31,7 +31,8 @@ namespace Tizen.Multimedia
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="textType">The text type of the format.</param>
         /// <exception cref="ArgumentException">
-        ///                     mimeType or textType is invalid(i.e. undefined value).</exception>
+        ///     <paramref name="mimeType"/> or <paramref name="textType"/> is invalid (i.e. undefined value).
+        /// </exception>
         public TextMediaFormat(MediaFormatTextMimeType mimeType, MediaFormatTextType textType)
             : base(MediaFormatType.Text)
         {
@@ -66,11 +67,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves text properties of media format from a native handle.
+        /// Retrieves text properties of the media format from a native handle.
         /// </summary>
-        /// <param name="handle">A native handle that properties are retrieved from.</param>
-        /// <param name="mimeType">An out parameter for mime type.</param>
-        /// <param name="textType">An out parameter for text type.</param>
+        /// <param name="handle">A native handle that the properties are retrieved from.</param>
+        /// <param name="mimeType">An out parameter for the mime type.</param>
+        /// <param name="textType">An out parameter for the text type.</param>
         private static void GetInfo(IntPtr handle, out MediaFormatTextMimeType mimeType,
             out MediaFormatTextType textType)
         {
index 4890dd1..ca74d18 100644 (file)
@@ -28,13 +28,13 @@ namespace Tizen.Multimedia
         private const int DefaultBitRate = 0;
 
         /// <summary>
-        /// Initializes a new instance of the VideoMediaFormat class with the specified mime type, width and height.
+        /// Initializes a new instance of the VideoMediaFormat class with the specified mime type, width, and height.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="width">The width value of the format.</param>
         /// <param name="height">The height value of the format</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, or height is less than zero.</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException"><paramref name="width"/> or <paramref name="height"/> is less than zero.</exception>
         public VideoMediaFormat(MediaFormatVideoMimeType mimeType, int width, int height)
             : this(mimeType, width, height, DefaultFrameRate)
         {
@@ -45,8 +45,8 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="size">The size of the format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, or height is less than zero.</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">The width or the height of <paramref name="size"/> is less than zero.</exception>
         public VideoMediaFormat(MediaFormatVideoMimeType mimeType, Size size)
             : this(mimeType, size, DefaultFrameRate)
         {
@@ -54,29 +54,34 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Initializes a new instance of the VideoMediaFormat class with the specified mime type,
-        /// width, height and frame rate.
+        /// width, height, and frame rate.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="width">The width value of the format.</param>
         /// <param name="height">The height value of the format</param>
         /// <param name="frameRate">The frame rate of the format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, height or frameRate is less than zero.</exception>
-        public VideoMediaFormat(MediaFormatVideoMimeType mimeType, int width, int height,
-            int frameRate)
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     <paramref name="width"/>, <paramref name="height"/>, or <paramref name="frameRate"/> is less than zero.
+        /// </exception>
+        public VideoMediaFormat(MediaFormatVideoMimeType mimeType, int width, int height, int frameRate)
             : this(mimeType, width, height, frameRate, DefaultBitRate)
         {
         }
 
         /// <summary>
         /// Initializes a new instance of the VideoMediaFormat class with the specified mime type,
-        /// width, height and frame rate.
+        /// width, height, and frame rate.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="size">The video size of the format.</param>
         /// <param name="frameRate">The frame rate of the format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, height or frameRate is less than zero.</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     The width or the height of <paramref name="size"/> is less than zero.\n
+        ///     -or-\n
+        ///     <paramref name="frameRate"/> is less than zero.
+        /// </exception>
         public VideoMediaFormat(MediaFormatVideoMimeType mimeType, Size size,
             int frameRate)
             : this(mimeType, size, frameRate, DefaultBitRate)
@@ -85,15 +90,17 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Initializes a new instance of the VideoMediaFormat class with the specified mime type,
-        /// width, height, frame rate and bit rate.
+        /// width, height, frame rate, and bit rate.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="width">The width value of the format.</param>
         /// <param name="height">The height value of the format</param>
         /// <param name="frameRate">The frame rate of the format.</param>
         /// <param name="bitRate">The bit rate of the format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, height, frameRate or bitRate is less than zero.</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     <paramref name="width"/>, <paramref name="height"/>, <paramref name="frameRate"/>, or <paramref name="bitRate"/> is less than zero.
+        /// </exception>
         public VideoMediaFormat(MediaFormatVideoMimeType mimeType, int width, int height,
             int frameRate, int bitRate)
             : this(mimeType, new Size(width, height), frameRate, bitRate)
@@ -102,14 +109,20 @@ namespace Tizen.Multimedia
 
         /// <summary>
         /// Initializes a new instance of the VideoMediaFormat class with the specified mime type,
-        /// size, frame rate and bit rate.
+        /// size, frame rate, and bit rate.
         /// </summary>
         /// <param name="mimeType">The mime type of the format.</param>
         /// <param name="size">The size of the format.</param>
         /// <param name="frameRate">The frame rate of the format.</param>
         /// <param name="bitRate">The bit rate of the format.</param>
-        /// <exception cref="ArgumentException">mimeType is invalid(i.e. undefined value).</exception>
-        /// <exception cref="ArgumentOutOfRangeException">width, height, frameRate or bitRate is less than zero.</exception>
+        /// <exception cref="ArgumentException"><paramref name="mimeType"/> is invalid (i.e. undefined value).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">
+        ///     The width or the height of <paramref name="size"/> is less than zero.\n
+        ///     -or-\n
+        ///     <paramref name="frameRate"/> is less than zero.\n
+        ///     -or-\n
+        ///     <paramref name="bitRate"/> is less than zero.
+        /// </exception>
         public VideoMediaFormat(MediaFormatVideoMimeType mimeType, Size size,
             int frameRate, int bitRate)
             : base(MediaFormatType.Video)
@@ -166,13 +179,13 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// Retrieves video properties of media format from a native handle.
+        /// Retrieves video properties of the media format from a native handle.
         /// </summary>
-        /// <param name="handle">A native handle that properties are retrieved from.</param>
-        /// <param name="width">An out parameter for width.</param>
-        /// <param name="height">An out parameter for height.</param>
-        /// <param name="bitRate">An out parameter for bit rate.</param>
-        /// <param name="mimeType">An out parameter for mime type.</param>
+        /// <param name="handle">A native handle that the properties are retrieved from.</param>
+        /// <param name="width">An out parameter for the width.</param>
+        /// <param name="height">An out parameter for the height.</param>
+        /// <param name="bitRate">An out parameter for the bit rate.</param>
+        /// <param name="mimeType">An out parameter for the mime type.</param>
         private static void GetInfo(IntPtr handle, out int width, out int height, out int bitRate,
             out MediaFormatVideoMimeType mimeType)
         {
@@ -195,8 +208,8 @@ namespace Tizen.Multimedia
         /// <summary>
         /// Retrieves frame rate from a native handle.
         /// </summary>
-        /// <param name="handle">A native handle that properties are retrieved from.</param>
-        /// <param name="frameRate">An out parameter for frame rate.</param>
+        /// <param name="handle">A native handle that the properties are retrieved from.</param>
+        /// <param name="frameRate">An out parameter for the frame rate.</param>
         private static void GetFrameRate(IntPtr handle, out int frameRate)
         {
             Debug.Assert(handle != IntPtr.Zero, "The handle is invalid!");
index 08e532f..f064a72 100755 (executable)
@@ -20,7 +20,7 @@ using ElmSharp;
 namespace Tizen.Multimedia
 {
     /// <summary>
-    /// The MediaView class allows application developers to display the video output on screen.
+    /// The MediaView class allows application developers to display the video output on the screen.
     /// </summary>
     /// <remarks>
     /// This view should not be instantiated directly.\n
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'">
index c49d4f7..7108b1a 100755 (executable)
@@ -67,7 +67,7 @@ namespace Tizen.NUI
 
 
 
-        public class Padding : global::System.IDisposable
+        public new class Padding : global::System.IDisposable
         {
             private global::System.Runtime.InteropServices.HandleRef swigCPtr;
             protected bool swigCMemOwn;
index 0bc189d..8b6e5a5 100755 (executable)
@@ -122,7 +122,7 @@ namespace Tizen.NUI
             return ret;
         }
 
-        public SWIGTYPE_p_std__type_info GetType()
+        public new SWIGTYPE_p_std__type_info GetType()
         {
             SWIGTYPE_p_std__type_info ret = new SWIGTYPE_p_std__type_info(NDalicPINVOKE.Any_GetType(swigCPtr), false);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -222,7 +222,7 @@ namespace Tizen.NUI
                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
             }
 
-            public SWIGTYPE_p_std__type_info GetType()
+            public new SWIGTYPE_p_std__type_info GetType()
             {
                 SWIGTYPE_p_std__type_info ret = new SWIGTYPE_p_std__type_info(NDalicPINVOKE.Any_AnyContainerBase_GetType(swigCPtr), false);
                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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 1ef9e8f..5447fd4 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)
@@ -616,7 +671,7 @@ namespace Tizen.NUI
           * (in the type of NUIApplicationResetEventHandler-DaliEventHandler<object,NUIApplicationResetEventArgs>)
           *  provided by the user. Reset signal is emitted when application is reset
           */
-        public event DaliEventHandler<object, NUIApplicationResetEventArgs> Reset
+        public new event DaliEventHandler<object, NUIApplicationResetEventArgs> Reset
         {
             add
             {
@@ -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<System.Delegate>(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 aaa87be..76e6e86 100755 (executable)
@@ -141,6 +141,7 @@ namespace Tizen.NUI
             }
             catch (System.Exception e)
             {
+                NUILog.Error(e.Message);
                 throw new global::System.InvalidOperationException("Failed to parse " + fileName);
             }
         }
index f43ba7f..7cfe070 100755 (executable)
@@ -179,7 +179,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
         }
-        public new static Camera DownCast(BaseHandle handle)
+        public static Camera DownCast(BaseHandle handle)
         {
             Camera ret = Registry.GetManagedBaseHandleFromNativePtr(handle) as Camera;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -204,7 +204,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public CameraType GetType()
+        public new CameraType GetType()
         {
             CameraType ret = (CameraType)NDalicPINVOKE.CameraActor_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index 165375f..21bab19 100755 (executable)
@@ -75,7 +75,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public virtual void SignalDisconnected(SlotObserver slotObserver, SWIGTYPE_p_Dali__CallbackBase callback)
+        public new virtual void SignalDisconnected(SlotObserver slotObserver, SWIGTYPE_p_Dali__CallbackBase callback)
         {
             NDalicPINVOKE.ConnectionTracker_SignalDisconnected(swigCPtr, SlotObserver.getCPtr(slotObserver), SWIGTYPE_p_Dali__CallbackBase.getCPtr(callback));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index 6f7bf4d..15752d2 100755 (executable)
@@ -68,7 +68,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public new static CustomActor DownCast(BaseHandle handle)
+        public static CustomActor DownCast(BaseHandle handle)
         {
             CustomActor ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as CustomActor;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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 a9e8217..cd60b58 100755 (executable)
@@ -68,7 +68,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public new static GestureDetector DownCast(BaseHandle handle)
+        public static GestureDetector DownCast(BaseHandle handle)
         {
             GestureDetector ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as GestureDetector;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index ad354db..5a2c375 100755 (executable)
@@ -83,7 +83,7 @@ namespace Tizen.NUI
             }
         }
 
-        public class Property
+        public new class Property
         {
             public static readonly int LAYOUT = NDalicManualPINVOKE.ItemView_Property_LAYOUT_get();
             public static readonly int MINIMUM_SWIPE_SPEED = NDalicPINVOKE.ItemView_Property_MINIMUM_SWIPE_SPEED_get();
index 5a21f4c..0ffad08 100755 (executable)
@@ -160,7 +160,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
         }
-        internal new static LinearConstrainer DownCast(BaseHandle handle)
+        internal static LinearConstrainer DownCast(BaseHandle handle)
         {
             LinearConstrainer ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as LinearConstrainer;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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 cb053aa..1732b09 100755 (executable)
@@ -65,7 +65,7 @@ namespace Tizen.NUI
             base.Dispose(type);
         }
 
-        public class Property : global::System.IDisposable
+        public new class Property : global::System.IDisposable
         {
             private global::System.Runtime.InteropServices.HandleRef swigCPtr;
             protected bool swigCMemOwn;
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;
+            }
+        }
+    }
+}
index 9a2ebbe..e9008f5 100755 (executable)
@@ -412,7 +412,7 @@ namespace Tizen.NUI
         }
 
 
-        public class Property : global::System.IDisposable
+        public new class Property : global::System.IDisposable
         {
             private global::System.Runtime.InteropServices.HandleRef swigCPtr;
             protected bool swigCMemOwn;
index 98e2d9e..077720e 100755 (executable)
@@ -164,7 +164,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
         }
-        public new static PathConstrainer DownCast(BaseHandle handle)
+        public static PathConstrainer DownCast(BaseHandle handle)
         {
             PathConstrainer ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as PathConstrainer;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index cf91e4e..7cfab4d 100755 (executable)
@@ -53,7 +53,7 @@ namespace Tizen.NUI
         /// <summary>
         /// Remove the this instance of BaseHandle (C# base class) and native part from the mapping table.
         /// </summary>
-        /// <param name="view"> The instance of BaseHandle (C# base class)</param>
+        /// <param name="baseHandle"> The instance of BaseHandle (C# base class)</param>
         internal static void Unregister(BaseHandle baseHandle)
         {
             RefObject refObj = baseHandle.GetObjectPtr();
index babb0ed..f7e3e83 100755 (executable)
@@ -254,7 +254,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public new static RenderTask DownCast(BaseHandle handle)
+        public static RenderTask DownCast(BaseHandle handle)
         {
             RenderTask ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as RenderTask;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index ce8e8e7..61080fe 100755 (executable)
@@ -98,7 +98,7 @@ namespace Tizen.NUI
             return ret;
         }
 
-        public Ruler.RulerType GetType()
+        public new Ruler.RulerType GetType()
         {
             Ruler.RulerType ret = (Ruler.RulerType)NDalicPINVOKE.Ruler_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index 548642e..cd2de6a 100755 (executable)
@@ -207,7 +207,7 @@ namespace Tizen.NUI
             return ret;
         }
 
-        public Ruler.RulerType GetType()
+        public new Ruler.RulerType GetType()
         {
             Ruler.RulerType ret = (Ruler.RulerType)NDalicPINVOKE.RulerPtr_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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..db0728a 100755 (executable)
@@ -59,44 +59,44 @@ namespace Tizen.NUI
         public delegate void OnTapDelegate(TapGesture tap);
         public delegate void OnLongPressDelegate(LongPressGesture longPress);
 
-        public OnStageConnectionDelegate OnStageConnection;
-        public OnStageDisconnectionDelegate OnStageDisconnection;
-        public OnChildAddDelegate OnChildAdd;
-        public OnChildRemoveDelegate OnChildRemove;
-        public OnPropertySetDelegate OnPropertySet;
-        public OnSizeSetDelegate OnSizeSet;
-        public OnSizeAnimationDelegate OnSizeAnimation;
+        public new OnStageConnectionDelegate OnStageConnection;
+        public new OnStageDisconnectionDelegate OnStageDisconnection;
+        public new OnChildAddDelegate OnChildAdd;
+        public new OnChildRemoveDelegate OnChildRemove;
+        public new OnPropertySetDelegate OnPropertySet;
+        public new OnSizeSetDelegate OnSizeSet;
+        public new OnSizeAnimationDelegate OnSizeAnimation;
         public OnTouchDelegate OnTouch;
         public OnHoverDelegate OnHover;
         public OnKeyDelegate OnKey;
         public OnWheelDelegate OnWheel;
-        public OnRelayoutDelegate OnRelayout;
-        public OnSetResizePolicyDelegate OnSetResizePolicy;
-        public GetNaturalSizeDelegate GetNaturalSize;
-        public CalculateChildSizeDelegate CalculateChildSize;
-        public GetHeightForWidthDelegate GetHeightForWidth;
-        public GetWidthForHeightDelegate GetWidthForHeight;
+        public new OnRelayoutDelegate OnRelayout;
+        public new OnSetResizePolicyDelegate OnSetResizePolicy;
+        public new GetNaturalSizeDelegate GetNaturalSize;
+        public new CalculateChildSizeDelegate CalculateChildSize;
+        public new GetHeightForWidthDelegate GetHeightForWidth;
+        public new GetWidthForHeightDelegate GetWidthForHeight;
         public RelayoutDependentOnChildrenDimensionDelegate RelayoutDependentOnChildrenDimension;
-        public RelayoutDependentOnChildrenDelegate RelayoutDependentOnChildren;
-        public OnCalculateRelayoutSizeDelegate OnCalculateRelayoutSize;
-        public OnLayoutNegotiatedDelegate OnLayoutNegotiated;
-        public OnControlChildAddDelegate OnControlChildAdd;
-        public OnControlChildRemoveDelegate OnControlChildRemove;
-        public OnStyleChangeDelegate OnStyleChange;
-        public OnAccessibilityActivatedDelegate OnAccessibilityActivated;
-        public OnAccessibilityPanDelegate OnAccessibilityPan;
-        public OnAccessibilityTouchDelegate OnAccessibilityTouch;
-        public OnAccessibilityValueChangeDelegate OnAccessibilityValueChange;
-        public OnAccessibilityZoomDelegate OnAccessibilityZoom;
+        public new RelayoutDependentOnChildrenDelegate RelayoutDependentOnChildren;
+        public new OnCalculateRelayoutSizeDelegate OnCalculateRelayoutSize;
+        public new OnLayoutNegotiatedDelegate OnLayoutNegotiated;
+        public new OnControlChildAddDelegate OnControlChildAdd;
+        public new OnControlChildRemoveDelegate OnControlChildRemove;
+        public new OnStyleChangeDelegate OnStyleChange;
+        public new OnAccessibilityActivatedDelegate OnAccessibilityActivated;
+        public new OnAccessibilityPanDelegate OnAccessibilityPan;
+        public new OnAccessibilityTouchDelegate OnAccessibilityTouch;
+        public new OnAccessibilityValueChangeDelegate OnAccessibilityValueChange;
+        public new OnAccessibilityZoomDelegate OnAccessibilityZoom;
         public OnFocusGainedDelegate OnFocusGained;
         public OnFocusLostDelegate OnFocusLost;
-        public GetNextFocusableViewDelegate GetNextFocusableView;
-        public OnFocusChangeCommittedDelegate OnFocusChangeCommitted;
-        public OnKeyboardEnterDelegate OnKeyboardEnter;
-        public OnPinchDelegate OnPinch;
-        public OnPanDelegate OnPan;
-        public OnTapDelegate OnTap;
-        public OnLongPressDelegate OnLongPress;
+        public new GetNextFocusableViewDelegate GetNextFocusableView;
+        public new OnFocusChangeCommittedDelegate OnFocusChangeCommitted;
+        public new OnKeyboardEnterDelegate OnKeyboardEnter;
+        public new OnPinchDelegate OnPinch;
+        public new OnPanDelegate OnPan;
+        public new OnTapDelegate OnTap;
+        public new OnLongPressDelegate OnLongPress;
 
         internal ViewWrapperImpl(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.ViewWrapperImpl_SWIGUpcast(cPtr), cMemoryOwn)
         {
@@ -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 3f2d165..fb55ad8 100755 (executable)
@@ -481,7 +481,7 @@ namespace Tizen.NUI.BaseComponents
         /// Return the natural size of the view.
         /// </summary>
         /// <returns>The view's natural size</returns>
-        public virtual Size2D GetNaturalSize()
+        public new virtual Size2D GetNaturalSize()
         {
             return new Size2D(0, 0);
         }
@@ -503,7 +503,7 @@ namespace Tizen.NUI.BaseComponents
         /// </summary>
         /// <param name="width">Width to use</param>
         /// <returns>The height based on the width</returns>
-        public virtual float GetHeightForWidth(float width)
+        public new virtual float GetHeightForWidth(float width)
         {
             return viewWrapperImpl.GetHeightForWidthBase(width);
         }
@@ -514,7 +514,7 @@ namespace Tizen.NUI.BaseComponents
         /// </summary>
         /// <param name="height">Height to use</param>
         /// <returns>The width based on the width</returns>
-        public virtual float GetWidthForHeight(float height)
+        public new virtual float GetWidthForHeight(float height)
         {
             return viewWrapperImpl.GetWidthForHeightBase(height);
         }
index 05c42a7..9069c99 100755 (executable)
@@ -68,7 +68,7 @@ namespace Tizen.NUI.BaseComponents
         }
 
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int CONTENT_DIRECTION = NDalicPINVOKE.FlexContainer_Property_CONTENT_DIRECTION_get();
             internal static readonly int FLEX_DIRECTION = NDalicPINVOKE.FlexContainer_Property_FLEX_DIRECTION_get();
index 5182c4f..025818c 100755 (executable)
@@ -146,7 +146,7 @@ namespace Tizen.NUI.BaseComponents
             base.Dispose(type);
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int RESOURCE_URL = NDalicPINVOKE.ImageView_Property_RESOURCE_URL_get();
             internal static readonly int IMAGE = NDalicPINVOKE.ImageView_Property_IMAGE_get();
@@ -216,7 +216,7 @@ namespace Tizen.NUI.BaseComponents
         /// Most resources are only loaded when the control is placed on stage.<br>
         /// true if the resources are loaded and ready, false otherwise.<br>
         /// </summary>
-        public bool IsResourceReady()
+        public new  bool IsResourceReady()
         {
             bool ret = NDalicPINVOKE.IsResourceReady(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending)
index 37b8cfd..0499a70 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;
@@ -271,7 +301,7 @@ namespace Tizen.NUI.BaseComponents
         }
 
 
-        public class Property
+        public new class Property
         {
             public static readonly int OVERSHOOT_EFFECT_COLOR = NDalicPINVOKE.Scrollable_Property_OVERSHOOT_EFFECT_COLOR_get();
             public static readonly int OVERSHOOT_ANIMATION_SPEED = NDalicPINVOKE.Scrollable_Property_OVERSHOOT_ANIMATION_SPEED_get();
index 48b57d3..a32b258 100755 (executable)
@@ -71,7 +71,7 @@ namespace Tizen.NUI.BaseComponents
         }
 
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int ROWS = NDalicPINVOKE.TableView_Property_ROWS_get();
             internal static readonly int COLUMNS = NDalicPINVOKE.TableView_Property_COLUMNS_get();
index 5ccab67..0fe7579 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)
@@ -232,7 +237,7 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int RENDERING_BACKEND = NDalicPINVOKE.TextEditor_Property_RENDERING_BACKEND_get();
             internal static readonly int TEXT = NDalicPINVOKE.TextEditor_Property_TEXT_get();
@@ -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..45b95fc 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)
@@ -211,7 +221,7 @@ namespace Tizen.NUI.BaseComponents
 
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int RENDERING_BACKEND = NDalicPINVOKE.TextField_Property_RENDERING_BACKEND_get();
             internal static readonly int TEXT = NDalicPINVOKE.TextField_Property_TEXT_get();
index 4abad84..60f085b 100755 (executable)
@@ -74,7 +74,7 @@ namespace Tizen.NUI.BaseComponents
             base.Dispose(type);
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int RENDERING_BACKEND = NDalicPINVOKE.TextLabel_Property_RENDERING_BACKEND_get();
             internal static readonly int TEXT = NDalicPINVOKE.TextLabel_Property_TEXT_get();
@@ -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..4ab63bb 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)
@@ -139,7 +144,7 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int VIDEO = NDalicPINVOKE.VideoView_Property_VIDEO_get();
             internal static readonly int LOOPING = NDalicPINVOKE.VideoView_Property_LOOPING_get();
index cedb4d0..3f3b97b 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);
@@ -828,7 +1003,7 @@ namespace Tizen.NUI.BaseComponents
         /// <param name="handle">Handle to an object</param>
         /// <returns>A handle to a View or an uninitialized handle</returns>
         [Obsolete("Please do not use! this will be deprecated, instead please use as keyword.")]
-        public new static View DownCast(BaseHandle handle)
+        public static View DownCast(BaseHandle handle)
         {
             View ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as View;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -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 0b5cc21..99aeb91 100755 (executable)
@@ -223,7 +223,6 @@ namespace Tizen.NUI
             else
             {
                 throw new global::System.InvalidOperationException("C# View not registererd with ViewRegistry" + controlName);
-                return IntPtr.Zero;
             }
         }
 
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 4752be2..b65ad88 100755 (executable)
@@ -101,7 +101,7 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        public Geometry.Type GetType()
+        public new Geometry.Type GetType()
         {
             Geometry.Type ret = (Geometry.Type)NDalicPINVOKE.Geometry_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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 92abafb..6f67efb 100755 (executable)
@@ -114,7 +114,7 @@ namespace Tizen.NUI
         /// Gets the type of the key frame.
         /// </summary>
         /// <returns>The key frame property type</returns>
-        public PropertyType GetType()
+        public new PropertyType GetType()
         {
             PropertyType ret = (PropertyType)NDalicPINVOKE.KeyFrames_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index 17179f8..5652a0e 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)
@@ -101,7 +159,7 @@ namespace Tizen.NUI
 
 
         [Obsolete("Please do not use! this will be deprecated")]
-        public new static Layer DownCast(BaseHandle handle)
+        public static Layer DownCast(BaseHandle handle)
         {
             Layer ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as Layer;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
@@ -113,7 +171,7 @@ namespace Tizen.NUI
         /// </summary>
         /// <pre>This layer(the parent) has been initialized.</pre>
         /// <remarks>The actor itself is also considered in the search.</remarks>
-        /// <param name="child">The id of the child to find</param>
+        /// <param name="id">The id of the child to find</param>
         /// <returns> A handle to the view if found, or an empty handle if not. </returns>
         public View FindChildById(uint id)
         {
@@ -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
index 704ea52..2139050 100755 (executable)
@@ -100,7 +100,7 @@ namespace Tizen.NUI
         /// <summary>
         /// Size is to use the actor's natural size
         /// </summary>
-        /// <see cref="View.GetNaturalSize"/>
+        /// <see cref="ViewImpl.GetNaturalSize"/>
         UseNaturalSize,
         /// <summary>
         /// Size is to fill up to the actor's parent's bounds. Aspect ratio is not maintained.
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 a13eb6a..bc5b9cb 100755 (executable)
@@ -86,7 +86,7 @@ namespace Tizen.NUI
 
 
         [Obsolete("Please do not use! this will be deprecated")]
-        public new static Path DownCast(BaseHandle handle)
+        public static Path DownCast(BaseHandle handle)
         {
             Path ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as Path;
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
index d5852e2..41b15ef 100755 (executable)
@@ -1440,7 +1440,7 @@ namespace Tizen.NUI
         /// Queries the type of this property value.
         /// </summary>
         /// <returns>The type ID</returns>
-        public PropertyType GetType()
+        public new PropertyType GetType()
         {
             PropertyType ret = (PropertyType)NDalicPINVOKE.Property_Value_GetType(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
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..9d05273 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)]
@@ -488,7 +523,7 @@ namespace Tizen.NUI.UIComponents
             }
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int UNSELECTED_VISUAL = NDalicManualPINVOKE.Button_Property_UNSELECTED_VISUAL_get();
             internal static readonly int SELECTED_VISUAL = NDalicManualPINVOKE.Button_Property_SELECTED_VISUAL_get();
index 24a606d..4b7a296 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)
@@ -315,7 +340,7 @@ namespace Tizen.NUI.UIComponents
             }
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int TITLE = NDalicPINVOKE.Popup_Property_TITLE_get();
             internal static readonly int CONTENT = NDalicPINVOKE.Popup_Property_CONTENT_get();
index 978e777..e2fa031 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)
@@ -166,7 +171,7 @@ namespace Tizen.NUI.UIComponents
             }
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int PROGRESS_VALUE = NDalicPINVOKE.ProgressBar_Property_PROGRESS_VALUE_get();
             internal static readonly int SECONDARY_PROGRESS_VALUE = NDalicPINVOKE.ProgressBar_Property_SECONDARY_PROGRESS_VALUE_get();
index 4c8ee8e..b13edfd 100755 (executable)
@@ -72,7 +72,7 @@ namespace Tizen.NUI.UIComponents
         }
 
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int UNSELECTED_ICON = NDalicPINVOKE.PushButton_Property_UNSELECTED_ICON_get();
             internal static readonly int SELECTED_ICON = NDalicPINVOKE.PushButton_Property_SELECTED_ICON_get();
@@ -173,7 +173,7 @@ namespace Tizen.NUI.UIComponents
             }
         }
         [Obsolete("Please do not use! this will be deprecated")]
-        public Vector4 LabelPadding
+        public new Vector4 LabelPadding
         {
             get
             {
index 51417f2..8d8363e 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)
@@ -187,7 +197,7 @@ namespace Tizen.NUI.UIComponents
         }
 
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int SCROLL_DIRECTION = NDalicPINVOKE.ScrollBar_Property_SCROLL_DIRECTION_get();
             internal static readonly int INDICATOR_HEIGHT_POLICY = NDalicPINVOKE.ScrollBar_Property_INDICATOR_HEIGHT_POLICY_get();
index b9bb7ea..a6ef8d0 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)
@@ -292,7 +297,7 @@ namespace Tizen.NUI
 
         }
 
-        public class Property
+        public new class Property
         {
             public static readonly int WRAP_ENABLED = NDalicPINVOKE.ScrollView_Property_WRAP_ENABLED_get();
             public static readonly int PANNING_ENABLED = NDalicPINVOKE.ScrollView_Property_PANNING_ENABLED_get();
index a7d6882..08d94ec 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)
@@ -341,7 +356,7 @@ namespace Tizen.NUI.UIComponents
             return ret;
         }
 
-        internal class Property : global::System.IDisposable
+        internal new class Property : global::System.IDisposable
         {
             private global::System.Runtime.InteropServices.HandleRef swigCPtr;
             protected bool swigCMemOwn;
index fe3eef4..a861e95 100755 (executable)
@@ -65,7 +65,7 @@ namespace Tizen.NUI
             base.Dispose(type);
         }
 
-        public class Property
+        public new class Property
         {
             public static readonly int STATE_VISUALS = NDalicPINVOKE.ToggleButton_Property_STATE_VISUALS_get();
             public static readonly int TOOLTIPS = NDalicPINVOKE.ToggleButton_Property_TOOLTIPS_get();
index 01098c3..d57e1b0 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();
             }
@@ -1614,7 +1614,7 @@ namespace Tizen.NUI
         /// Applies to ALL shapes.<br>
         /// Optional.
         /// </summary>
-        public Color MixColor
+        public new Color MixColor
         {
             get
             {
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 cccc109..f7b63d5 100755 (executable)
@@ -81,7 +81,7 @@ namespace Tizen.NUI
             base.Dispose();
         }
 
-        internal class Property
+        internal new class Property
         {
             internal static readonly int WIDGET_ID = NDalicManualPINVOKE.WidgetView_Property_WIDGET_ID_get();
             internal static readonly int INSTANCE_ID = NDalicManualPINVOKE.WidgetView_Property_INSTANCE_ID_get();
index 8c2b91f..809da43 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)
@@ -110,8 +161,10 @@ namespace Tizen.NUI
         /// <returns>True if the window accept focus, false otherwise</returns>
         public bool IsFocusAcceptable()
         {
-            return NDalicPINVOKE.IsFocusAcceptable(swigCPtr);
+            bool ret = NDalicPINVOKE.IsFocusAcceptable(swigCPtr);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+            return ret;
         }
 
         /// <summary>
@@ -379,6 +432,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 +493,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 +841,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 +1488,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 43f88e7..41fe3cf 100755 (executable)
@@ -38,7 +38,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -66,7 +66,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -95,8 +95,8 @@ namespace Tizen.Network.Nfc
                 bool isNfcSupported = false;
                 bool isTagSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
 
                 if (!isNfcSupported || !isTagSupported)
                 {
@@ -117,8 +117,8 @@ namespace Tizen.Network.Nfc
                 bool isNfcSupported = false;
                 bool isTagSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
 
                 if (!isNfcSupported || !isTagSupported)
                 {
@@ -148,8 +148,8 @@ namespace Tizen.Network.Nfc
                 bool isNfcSupported = false;
                 bool isCeSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
 
                 if (!isNfcSupported || !isCeSupported)
                 {
@@ -170,8 +170,8 @@ namespace Tizen.Network.Nfc
                 bool isNfcSupported = false;
                 bool isCeSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
 
                 if (!isNfcSupported || !isCeSupported)
                 {
@@ -200,7 +200,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -220,7 +220,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -248,7 +248,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -275,8 +275,8 @@ namespace Tizen.Network.Nfc
             bool isNfcSupported = false;
             bool isTagSupported = false;
 
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc.tag", out isTagSupported);
 
             if (!isNfcSupported || !isTagSupported)
             {
@@ -302,8 +302,8 @@ namespace Tizen.Network.Nfc
             bool isNfcSupported = false;
             bool isP2pSupported = false;
 
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.p2p", out isP2pSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc.p2p", out isP2pSupported);
 
             if (!isNfcSupported || !isP2pSupported)
             {
@@ -329,8 +329,8 @@ namespace Tizen.Network.Nfc
             bool isNfcSupported = false;
             bool isCeSupported = false;
 
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc.cardemulation", out isCeSupported);
 
             if (!isNfcSupported || !isCeSupported)
             {
@@ -357,7 +357,7 @@ namespace Tizen.Network.Nfc
         {
             bool isNfcSupported = false;
 
-            SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+            Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
             if (!isNfcSupported)
             {
@@ -384,7 +384,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -404,7 +404,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -432,7 +432,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
@@ -452,7 +452,7 @@ namespace Tizen.Network.Nfc
             {
                 bool isNfcSupported = false;
 
-                SystemInfo.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
+                Information.TryGetValue("http://tizen.org/feature/network.nfc", out isNfcSupported);
 
                 if (!isNfcSupported)
                 {
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 9b48dee..2210fd3 100755 (executable)
@@ -287,7 +287,7 @@ namespace Tizen.Sensor
         internal static bool CheckIfSupported(SensorType type, String key)
         {
             bool isSupported = false;
-            bool error = SystemInfo.TryGetValue(key, out isSupported);
+            bool error = Information.TryGetValue(key, out isSupported);
 
             if (!error || !isSupported)
             {
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>
diff --git a/src/Tizen.System.Information/Common/Information.cs b/src/Tizen.System.Information/Common/Information.cs
new file mode 100755 (executable)
index 0000000..5ec9dc0
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2017 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.ComponentModel;
+using System.IO;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The Information class provides functions to obtain various system information.
+    /// </summary>
+    public static class Information
+    {
+        internal const string HttpPrefix = "http://";
+        internal const string RuntimeInfoStringKeyPrefix = "tizen.org/runtimefeature/";
+
+        internal const string RuntimeInfoStringKeyBluetooth = "bluetooth";
+        internal const string RuntimeInfoStringKeyTetheringWiFi = "tethering.wifi";
+        internal const string RuntimeInfoStringKeyTetheringBluetooth = "tethering.bluetooth";
+        internal const string RuntimeInfoStringKeyTetheringUsb = "tethering.usb";
+        internal const string RuntimeInfoStringKeyPacketData = "packetdata";
+        internal const string RuntimeInfoStringKeyDataRoaming = "dataroaming";
+        internal const string RuntimeInfoStringKeyVibration = "vibration";
+        internal const string RuntimeInfoStringKeyAudioJackConnected = "audiojack.connected";
+        internal const string RuntimeInfoStringKeyBatteryCharging = "battery.charging";
+        internal const string RuntimeInfoStringKeyTvOut = "tvout";
+        internal const string RuntimeInfoStringKeyCharger = "charger";
+        internal const string RuntimeInfoStringKeyAutoRotation = "autorotation";
+        internal const string RuntimeInfoStringKeyGps = "gps";
+        internal const string RuntimeInfoStringKeyAudioJackType = "audiojack.type";
+
+
+        private static readonly Dictionary<string, RuntimeInfoKey> StringEnumMapping = new Dictionary<string, RuntimeInfoKey>
+        {
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyBluetooth] = RuntimeInfoKey.Bluetooth,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyTetheringWiFi] = RuntimeInfoKey.WifiHotspot,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyTetheringBluetooth] = RuntimeInfoKey.BluetoothTethering,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyTetheringUsb] = RuntimeInfoKey.UsbTethering,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyPacketData] = RuntimeInfoKey.PacketData,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyDataRoaming] = RuntimeInfoKey.DataRoaming,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyVibration] = RuntimeInfoKey.Vibration,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyAudioJackConnected] = RuntimeInfoKey.AudioJack,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyBatteryCharging] = RuntimeInfoKey.BatteryIsCharging,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyTvOut] = RuntimeInfoKey.TvOut,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyCharger] = RuntimeInfoKey.Charger,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyAutoRotation] = RuntimeInfoKey.AutoRotation,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyGps] = RuntimeInfoKey.Gps,
+            [RuntimeInfoStringKeyPrefix + RuntimeInfoStringKeyAudioJackType] = RuntimeInfoKey.AudioJackConnector
+        };
+
+        internal static readonly Dictionary<RuntimeInfoKey, string> EnumStringMapping = new Dictionary<RuntimeInfoKey, string>
+        {
+            [RuntimeInfoKey.Bluetooth] = RuntimeInfoStringKeyBluetooth,
+            [RuntimeInfoKey.WifiHotspot] = RuntimeInfoStringKeyTetheringWiFi,
+            [RuntimeInfoKey.BluetoothTethering] = RuntimeInfoStringKeyTetheringBluetooth,
+            [RuntimeInfoKey.UsbTethering] = RuntimeInfoStringKeyTetheringUsb,
+            [RuntimeInfoKey.PacketData] = RuntimeInfoStringKeyPacketData,
+            [RuntimeInfoKey.DataRoaming] = RuntimeInfoStringKeyDataRoaming,
+            [RuntimeInfoKey.Vibration] = RuntimeInfoStringKeyVibration,
+            [RuntimeInfoKey.AudioJack] = RuntimeInfoStringKeyAudioJackConnected,
+            [RuntimeInfoKey.BatteryIsCharging] = RuntimeInfoStringKeyBatteryCharging,
+            [RuntimeInfoKey.TvOut] = RuntimeInfoStringKeyTvOut,
+            [RuntimeInfoKey.Charger] = RuntimeInfoStringKeyCharger,
+            [RuntimeInfoKey.AutoRotation] = RuntimeInfoStringKeyAutoRotation,
+            [RuntimeInfoKey.Gps] = RuntimeInfoStringKeyGps,
+            [RuntimeInfoKey.AudioJackConnector] = RuntimeInfoStringKeyAudioJackType
+        };
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private static bool ConvertStringToRuntimeInfoKey(string key, out RuntimeInfoKey feature)
+        {
+            string filteredKey = key.StartsWith(HttpPrefix) ? key.Substring(HttpPrefix.Length) : key;
+            feature = default(RuntimeInfoKey);
+
+            return StringEnumMapping.TryGetValue(filteredKey, out feature);
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private static bool TryGetRuntimeInfoValue<T>(RuntimeInfoKey key, out T value)
+        {
+            value = default(T);
+
+            if (!RuntimeInfo.Is<T>(key))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid return type");
+                return false;
+            }
+
+            return RuntimeInfo.TryGetValue<T>(key, out value);
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private static bool TryGetSystemInfoValue<T>(string key, out T value)
+        {
+            value = default(T);
+
+            if (!SystemInfo.IsValidKey(key))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                return false;
+            }
+
+            if (!SystemInfo.Is<T>(key))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid return type");
+                return false;
+            }
+
+            return SystemInfo.TryGetValue<T>(key, out value);
+        }
+
+        /// <summary>
+        /// Gets the value of the feature.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <typeparam name="T">The type of <paramref name="value"/>.</typeparam>
+        /// <param name="key">The name of the feature.</param>
+        /// <param name="value">The value of the given feature.</param>
+        /// <returns>Returns true on success, otherwise false.</returns>
+        public static bool TryGetValue<T>(string key, out T value)
+        {
+            RuntimeInfoKey runtimeFeature;
+
+            if (ConvertStringToRuntimeInfoKey(key, out runtimeFeature))
+            {
+                return TryGetRuntimeInfoValue<T>(runtimeFeature, out value);
+            }
+            else
+            {
+                return TryGetSystemInfoValue<T>(key, out value);
+            }
+        }
+
+        /// <summary>
+        /// Registers a change event callback for given runtime feature key.
+        /// </summary>
+        /// <remarks>
+        /// This function is only for runtime feature.
+        /// </remarks>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="key">The name of runtime feature which wants to register callback.</param>
+        /// <param name="callback">The callback function to subscribe.</param>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
+        /// <exception cref="NotSupportedException">Thrown when the feature related <paramref name="key"/> is not supported.</exception>
+        public static void SetCallback(string key, EventHandler<RuntimeFeatureStatusChangedEventArgs> callback)
+        {
+            RuntimeInfoKey runtimeFeature;
+
+            if (!ConvertStringToRuntimeInfoKey(key, out runtimeFeature))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            RuntimeInfo.SetCallback(runtimeFeature, callback);
+        }
+
+        /// <summary>
+        /// Unregisters a change event callback for given runtime feature key.
+        /// </summary>
+        /// <remarks>
+        /// This function is only for runtime feature.
+        /// </remarks>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="key">The name of runtime feature which wants to unregister callback.</param>
+        /// <param name="callback">The callback function to unsubscribe.</param>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
+        /// <exception cref="NotSupportedException">Thrown when the feature related <paramref name="key"/> is not supported.</exception>
+        public static void UnsetCallback(string key, EventHandler<RuntimeFeatureStatusChangedEventArgs> callback)
+        {
+            RuntimeInfoKey runtimeFeature;
+
+            if (!ConvertStringToRuntimeInfoKey(key, out runtimeFeature))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            RuntimeInfo.UnsetCallback(runtimeFeature, callback);
+        }
+    }
+}
old mode 100644 (file)
new mode 100755 (executable)
similarity index 73%
rename from src/Tizen.System.Information/RuntimeInfo/RuntimeInfoErrorFactory.cs
rename to src/Tizen.System.Information/Common/InformationErrorFactory.cs
index e9fee57..906961d
@@ -22,7 +22,7 @@ using Tizen.Internals.Errors;
 namespace Tizen.System
 {
     [EditorBrowsable(EditorBrowsableState.Never)]
-    internal enum RuntimeInfoError
+    internal enum InformationError
     {
         None = ErrorCode.None,
         InvalidParameter = ErrorCode.InvalidParameter,
@@ -35,38 +35,38 @@ namespace Tizen.System
     }
 
     [EditorBrowsable(EditorBrowsableState.Never)]
-    internal static class RuntimeInfoErrorFactory
+    internal static class InformationErrorFactory
     {
-        internal const string LogTag = "Tizen.System.RuntimeInformation";
+        internal const string LogTag = "Tizen.System.Information";
 
-        internal static void ThrowException(int err)
+        internal static void ThrowException(InformationError err)
         {
-            RuntimeInfoError error = (RuntimeInfoError)err;
-            if (error == RuntimeInfoError.InvalidParameter)
+            InformationError error = (InformationError)err;
+            if (error == InformationError.InvalidParameter)
             {
                 throw new ArgumentException("Invalid parameter");
             }
-            else if (error == RuntimeInfoError.OutOfMemory)
+            else if (error == InformationError.OutOfMemory)
             {
                 throw new OutOfMemoryException("Out of memory");
             }
-            else if (error == RuntimeInfoError.Io)
+            else if (error == InformationError.Io)
             {
                 throw new IOException("I/O Error");
             }
-            else if (error == RuntimeInfoError.RemoteIo)
+            else if (error == InformationError.RemoteIo)
             {
                 throw new IOException("Remote I/O Error");
             }
-            else if (error == RuntimeInfoError.PermissionDenied)
+            else if (error == InformationError.PermissionDenied)
             {
                 throw new UnauthorizedAccessException("Permission denied");
             }
-            else if (error == RuntimeInfoError.NotSupported)
+            else if (error == InformationError.NotSupported)
             {
                 throw new NotSupportedException("Not supported");
             }
-            else if (error == RuntimeInfoError.NoData)
+            else if (error == InformationError.NoData)
             {
                 throw new NotSupportedException("No data");
             }
old mode 100644 (file)
new mode 100755 (executable)
index 21ab05e..d34d53a
@@ -22,7 +22,7 @@ internal static partial class Interop
 {
     internal static partial class RuntimeInfo
     {
-        public delegate void RuntimeInformationChangedCallback(RuntimeInformationKey key, IntPtr userData);
+        public delegate void RuntimeInformationChangedCallback(RuntimeInfoKey key, IntPtr userData);
 
         [StructLayout(LayoutKind.Sequential)]
         public struct MemoryInfo
@@ -63,42 +63,42 @@ internal static partial class Interop
         }
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_value_int")]
-        public static extern int GetValue(RuntimeInformationKey key, out int status);
+        public static extern InformationError GetValue(RuntimeInfoKey key, out int status);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_value_bool")]
-        public static extern int GetValue(RuntimeInformationKey key, out bool status);
+        public static extern InformationError GetValue(RuntimeInfoKey key, out bool status);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_value_double")]
-        public static extern int GetValue(RuntimeInformationKey key, out double status);
+        public static extern InformationError GetValue(RuntimeInfoKey key, out double status);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_value_string")]
-        public static extern int GetValue(RuntimeInformationKey key, out string status);
+        public static extern InformationError GetValue(RuntimeInfoKey key, out string status);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_system_memory_info")]
-        public static extern int GetSystemMemoryInfo(out MemoryInfo memoryInfo);
+        public static extern InformationError GetSystemMemoryInfo(out MemoryInfo memoryInfo);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_process_memory_info")]
-        public static extern int GetProcessMemoryInfo(int[] pid, int size, out ProcessMemoryInfo[] array);
+        public static extern InformationError GetProcessMemoryInfo(int[] pid, int size, ref IntPtr array);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_cpu_usage")]
-        public static extern int GetCpuUsage(out CpuUsage cpuUsage);
+        public static extern InformationError GetCpuUsage(out CpuUsage cpuUsage);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_process_cpu_usage")]
-        public static extern int GetProcessCpuUsage(int[] pid, int size, out ProcessCpuUsage[] array);
+        public static extern InformationError GetProcessCpuUsage(int[] pid, int size, ref IntPtr array);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_processor_count")]
-        public static extern int GetProcessorCount(out int processorCount);
+        public static extern InformationError GetProcessorCount(out int processorCount);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_processor_current_frequency")]
-        public static extern int GetProcessorCurrentFrequency(int coreId, out int cpuFreq);
+        public static extern InformationError GetProcessorCurrentFrequency(int coreId, out int cpuFreq);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_get_processor_max_frequency")]
-        public static extern int GetProcessorMaxFrequency(int coreId, out int cpuFreq);
+        public static extern InformationError GetProcessorMaxFrequency(int coreId, out int cpuFreq);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_set_changed_cb")]
-        public static extern int SetRuntimeInfoChangedCallback(RuntimeInformationKey runtimeInfoKey, RuntimeInformationChangedCallback cb, IntPtr userData);
+        public static extern InformationError SetRuntimeInfoChangedCallback(RuntimeInfoKey runtimeInfoKey, RuntimeInformationChangedCallback cb, IntPtr userData);
 
         [DllImport(Libraries.RuntimeInfo, EntryPoint = "runtime_info_unset_changed_cb")]
-        public static extern int UnsetRuntimeInfoChangedCallback(RuntimeInformationKey runtimeInfoKey);
+        public static extern InformationError UnsetRuntimeInfoChangedCallback(RuntimeInfoKey runtimeInfoKey);
     }
 }
old mode 100644 (file)
new mode 100755 (executable)
index de7282e..2e820be
 * limitations under the License.
 */
 
-using System;
+using Tizen.System;
 using System.Runtime.InteropServices;
 
 internal static partial class Interop
 {
     internal static partial class SystemInfo
     {
-        internal enum ErrorCode
-        {
-            None = Tizen.Internals.Errors.ErrorCode.None,
-            InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
-            OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
-            IoError = Tizen.Internals.Errors.ErrorCode.IoError,
-            PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
-            NotSupported = Tizen.Internals.Errors.ErrorCode.NoSuchDevice,
-        }
-
         internal enum SystemInfoValueType
         {
             Bool = 0,
@@ -47,33 +37,33 @@ internal static partial class Interop
         }
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_platform_type")]
-        internal static extern ErrorCode SystemInfoGetPlatformType(string key, out SystemInfoValueType type);
+        internal static extern InformationError SystemInfoGetPlatformType(string key, out SystemInfoValueType type);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_custom_type")]
-        internal static extern ErrorCode SystemInfoGetCustomType(string key, out SystemInfoValueType type);
+        internal static extern InformationError SystemInfoGetCustomType(string key, out SystemInfoValueType type);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_platform_bool")]
-        internal static extern ErrorCode SystemInfoGetPlatformBool(string key, out bool value);
+        internal static extern InformationError SystemInfoGetPlatformBool(string key, out bool value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_platform_int")]
-        internal static extern ErrorCode SystemInfoGetPlatformInt(string key, out int value);
+        internal static extern InformationError SystemInfoGetPlatformInt(string key, out int value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_platform_double")]
-        internal static extern ErrorCode SystemInfoGetPlatformDouble(string key, out double value);
+        internal static extern InformationError SystemInfoGetPlatformDouble(string key, out double value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_platform_string")]
-        internal static extern ErrorCode SystemInfoGetPlatformString(string key, out string value);
+        internal static extern InformationError SystemInfoGetPlatformString(string key, out string value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_custom_bool")]
-        internal static extern ErrorCode SystemInfoGetCustomBool(string key, out bool value);
+        internal static extern InformationError SystemInfoGetCustomBool(string key, out bool value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_custom_int")]
-        internal static extern ErrorCode SystemInfoGetCustomInt(string key, out int value);
+        internal static extern InformationError SystemInfoGetCustomInt(string key, out int value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_custom_double")]
-        internal static extern ErrorCode SystemInfoGetCustomDouble(string key, out double value);
+        internal static extern InformationError SystemInfoGetCustomDouble(string key, out double value);
 
         [DllImport(Libraries.SystemInfo, EntryPoint = "system_info_get_custom_string")]
-        internal static extern ErrorCode SystemInfoGetCustomString(string key, out string value);
+        internal static extern InformationError SystemInfoGetCustomString(string key, out string value);
     }
 }
diff --git a/src/Tizen.System.Information/RuntimeInfo/CpuUsage.cs b/src/Tizen.System.Information/RuntimeInfo/CpuUsage.cs
deleted file mode 100755 (executable)
index 35ceb90..0000000
+++ /dev/null
@@ -1,77 +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;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.ComponentModel;
-
-namespace Tizen.System
-{
-    /// <summary>
-    /// The structure for CPU usage.
-    /// </summary>
-    public class CpuUsage
-    {
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        internal CpuUsage(Interop.RuntimeInfo.CpuUsage usage)
-        {
-            IoWait = usage.IoWait;
-            Nice = usage.IoWait;
-            System = usage.System;
-            User = usage.User;
-        }
-        /// <summary>
-        /// Running time of un-niced user processes (Percent).
-        /// </summary>
-        public double User { get; internal set; }
-        /// <summary>
-        /// Running time of kernel processes (Percent).
-        /// </summary>
-        public double System { get; internal set; }
-        /// <summary>
-        /// Running time of niced user processes (Percent).
-        /// </summary>
-        public double Nice { get; internal set; }
-        /// <summary>
-        /// Time waiting for I/O completion (Percent).
-        /// </summary>
-        public double IoWait { get; internal set; }
-    }
-
-    /// <summary>
-    /// The structure for CPU usage per process.
-    /// </summary>
-    public class ProcessCpuUsage
-    {
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        internal ProcessCpuUsage(Interop.RuntimeInfo.ProcessCpuUsage usage)
-        {
-            UTime = usage.UTime;
-            STime = usage.STime;
-        }
-        /// <summary>
-        /// The amount of time this process has been scheduled in user mode (clock ticks).
-        /// </summary>
-        public uint UTime { get; internal set; }
-        /// <summary>
-        /// The amount of time this process has been scheduled in kernel mode (clock ticks).
-        /// </summary>
-        public uint STime { get; internal set; }
-    }
-}
index 8b2fcf0..ea0281d 100755 (executable)
 * limitations under the License.
 */
 
-using System;
+using System.ComponentModel;
 
 namespace Tizen.System
 {
+    [EditorBrowsable(EditorBrowsableState.Never)]
     /// <summary>
     /// Enumeration for the runtime information key.
     /// </summary>
-    public enum RuntimeInformationKey
+    internal enum RuntimeInfoKey
     {
         /// <summary>
         /// Indicates whether Bluetooth is enabled.
@@ -29,7 +30,6 @@ namespace Tizen.System
         Bluetooth = 2,
         /// <summary>
         /// Indicates whether Wi-Fi hotspot is enabled.
-        /// <see cref="WifiStatus"/>
         /// </summary>
         WifiHotspot = 3,
         /// <summary>
@@ -85,25 +85,6 @@ namespace Tizen.System
     }
 
     /// <summary>
-    /// Enumeration for the Wi-Fi status.
-    /// </summary>
-    public enum WifiStatus
-    {
-        /// <summary>
-        /// The Wi-Fi is disabled.
-        /// </summary>
-        Disabled,
-        /// <summary>
-        /// The Wi-Fi is enabled and the network connection is not established.
-        /// </summary>
-        Unconnected,
-        /// <summary>
-        /// The network connection is established in a Wi-Fi network.
-        /// </summary>
-        Connected
-    }
-
-    /// <summary>
     /// Enumeration for the GPS status.
     /// </summary>
     public enum GpsStatus
diff --git a/src/Tizen.System.Information/RuntimeInfo/MemoryInformation.cs b/src/Tizen.System.Information/RuntimeInfo/MemoryInformation.cs
deleted file mode 100755 (executable)
index fa38d06..0000000
+++ /dev/null
@@ -1,107 +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;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.ComponentModel;
-
-namespace Tizen.System
-{
-    /// <summary>
-    /// Memory information.
-    /// </summary>
-    public class SystemMemoryInformation
-    {
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        internal SystemMemoryInformation(Interop.RuntimeInfo.MemoryInfo info)
-        {
-            Total = info.Total;
-            Used = info.Used;
-            Cache = info.Cache;
-            Free = info.Free;
-            Swap = info.Swap;
-        }
-        /// <summary>
-        /// Total memory (KiB).
-        /// </summary>
-        public int Total { get; internal set; }
-        /// <summary>
-        /// Used memory (KiB).
-        /// </summary>
-        public int Used { get; internal set; }
-        /// <summary>
-        /// Free memory (KiB).
-        /// </summary>
-        public int Free { get; internal set; }
-        /// <summary>
-        /// Cache memory (KiB).
-        /// </summary>
-        public int Cache { get; internal set; }
-        /// <summary>
-        /// Swap memory (KiB).
-        /// </summary>
-        public int Swap { get; internal set; }
-    }
-
-    /// <summary>
-    /// Memory information per process.
-    /// </summary>
-    public class ProcessMemoryInformation
-    {
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        internal ProcessMemoryInformation(Interop.RuntimeInfo.ProcessMemoryInfo info)
-        {
-            PrivateClean = info.PrivateClean;
-            PrivateDirty = info.PrivateDirty;
-            Pss = info.Pss;
-            Rss = info.Rss;
-            SharedClean = info.SharedClean;
-            SharedDirty = info.SharedDirty;
-            Vsz = info.Vsz;
-        }
-        /// <summary>
-        /// Virtual memory size (KiB).
-        /// </summary>
-        public int Vsz { get; internal set; }
-        /// <summary>
-        /// Resident set size (KiB).
-        /// </summary>
-        public int Rss { get; internal set; }
-        /// <summary>
-        /// Proportional set size (KiB).
-        /// </summary>
-        public int Pss { get; internal set; }
-        /// <summary>
-        /// Not modified and mapped by other processes (KiB).
-        /// </summary>
-        public int SharedClean { get; internal set; }
-        /// <summary>
-        /// Modified and mapped by other processes (KiB).
-        /// </summary>
-        public int SharedDirty { get; internal set; }
-        /// <summary>
-        /// Not modified and available only to that process (KiB).
-        /// </summary>
-        public int PrivateClean { get; internal set; }
-        /// <summary>
-        /// Modified and available only to that process (KiB).
-        /// </summary>
-        public int PrivateDirty { get; internal set; }
-    }
-}
 */
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Tizen.System
 {
     /// <summary>
-    /// RuntimeInfoChangedEventArgs is an extended EventArgs class. This class contains event arguments for runtime event listeners.
+    /// RuntimeFeatureStatusChangedEventArgs is an extended EventArgs class. This class contains event arguments for runtime event listeners.
     /// </summary>
-    public class RuntimeKeyStatusChangedEventArgs : EventArgs
+    public class RuntimeFeatureStatusChangedEventArgs : EventArgs
     {
         /// <summary>
         /// The key indicating the runtime system preference which was changed.
+        /// It includes the prefix "http://" though you don't use for registering callback.
         /// </summary>
-        public RuntimeInformationKey Key { get; internal set; }
+        public String Key { get; internal set; }
     }
 }
diff --git a/src/Tizen.System.Information/RuntimeInfo/RuntimeInfo.cs b/src/Tizen.System.Information/RuntimeInfo/RuntimeInfo.cs
new file mode 100755 (executable)
index 0000000..9ce011a
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2016 - 2017 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.IO;
+using System.ComponentModel;
+
+namespace Tizen.System
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    internal static class RuntimeInfo
+    {
+        private static RuntimeInfoEventHandler BluetoothEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.Bluetooth);
+        private static RuntimeInfoEventHandler WifiHotspotEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.WifiHotspot);
+        private static RuntimeInfoEventHandler BluetoothTetheringEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.BluetoothTethering);
+        private static RuntimeInfoEventHandler UsbTetheringEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.UsbTethering);
+        private static RuntimeInfoEventHandler PacketDataEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.PacketData);
+        private static RuntimeInfoEventHandler DataRoamingEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.DataRoaming);
+        private static RuntimeInfoEventHandler VibrationEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.Vibration);
+        private static RuntimeInfoEventHandler AudioJackConnected = new RuntimeInfoEventHandler(RuntimeInfoKey.AudioJack);
+        private static RuntimeInfoEventHandler GpsStatusChanged = new RuntimeInfoEventHandler(RuntimeInfoKey.Gps);
+        private static RuntimeInfoEventHandler BatteryIsCharging = new RuntimeInfoEventHandler(RuntimeInfoKey.BatteryIsCharging);
+        private static RuntimeInfoEventHandler TvOutConnected = new RuntimeInfoEventHandler(RuntimeInfoKey.TvOut);
+        private static RuntimeInfoEventHandler AudioJackConnectorChanged = new RuntimeInfoEventHandler(RuntimeInfoKey.AudioJackConnector);
+        private static RuntimeInfoEventHandler ChargerConnected = new RuntimeInfoEventHandler(RuntimeInfoKey.Charger);
+        private static RuntimeInfoEventHandler AutoRotationEnabled = new RuntimeInfoEventHandler(RuntimeInfoKey.AutoRotation);
+
+        internal static readonly Dictionary<RuntimeInfoKey, Type> s_keyDataTypeMapping = new Dictionary<RuntimeInfoKey, Type>
+        {
+            [RuntimeInfoKey.Bluetooth] = typeof(bool),
+            [RuntimeInfoKey.WifiHotspot] = typeof(bool),
+            [RuntimeInfoKey.BluetoothTethering] = typeof(bool),
+            [RuntimeInfoKey.UsbTethering] = typeof(bool),
+            [RuntimeInfoKey.PacketData] = typeof(bool),
+            [RuntimeInfoKey.DataRoaming] = typeof(bool),
+            [RuntimeInfoKey.Vibration] = typeof(bool),
+            [RuntimeInfoKey.AudioJack] = typeof(bool),
+            [RuntimeInfoKey.BatteryIsCharging] = typeof(bool),
+            [RuntimeInfoKey.TvOut] = typeof(bool),
+            [RuntimeInfoKey.Charger] = typeof(bool),
+            [RuntimeInfoKey.AutoRotation] = typeof(bool),
+            [RuntimeInfoKey.Gps] = typeof(int),
+            [RuntimeInfoKey.AudioJackConnector] = typeof(int)
+        };
+
+        /// <summary>
+        /// Validates the data type of the status represented by the runtime key.
+        /// Note that this is a generic method.
+        /// </summary>
+        /// <typeparam name="T">The generic type to validate.</typeparam>
+        /// <param name="key">The runtime information key for which the status type is validated.</param>
+        /// <returns>True if the data type matches.</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
+        internal static bool Is<T>(RuntimeInfoKey key)
+        {
+            if (!s_keyDataTypeMapping.ContainsKey(key))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid data type");
+                throw new ArgumentException("Invalid parameter");
+            }
+
+            return s_keyDataTypeMapping[key] == typeof(T);
+        }
+
+        /// <summary>
+        /// Gets the status of runtime key.
+        /// Note that this is a generic method.
+        /// </summary>
+        /// <typeparam name="T">The generic type to return.</typeparam>
+        /// <param name="key">The runtime information key for which the current should be read.</param>
+        /// <param name="value">The value of the given feature.</param>
+        /// <returns>Returns true on success, otherwise false.</returns>
+        internal static bool TryGetValue<T>(RuntimeInfoKey key, out T value)
+        {
+            Type type;
+            value = default(T);
+
+            if (!s_keyDataTypeMapping.TryGetValue(key, out type))
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                return false;
+            }
+
+            if (type == typeof(bool))
+            {
+                InformationError ret = Interop.RuntimeInfo.GetValue(TvProductHelper.ConvertKeyIfTvProduct(key), out bool val);
+
+                if (ret != InformationError.None)
+                {
+                    Log.Error(InformationErrorFactory.LogTag, "Interop failed to get value for key {0}", key.ToString());
+                    return false;
+                }
+
+                value = (T)(object)val;
+            }
+            else if(type == typeof(int))
+            {
+                InformationError ret = Interop.RuntimeInfo.GetValue(TvProductHelper.ConvertKeyIfTvProduct(key), out int val);
+
+                if (ret != InformationError.None)
+                {
+                    Log.Error(InformationErrorFactory.LogTag, "Interop failed to get value for key {0}", key.ToString());
+                    return false;
+                }
+
+                value = (T)(object)val;
+            }
+
+            return true;
+        }
+
+        private static void FindEventHandler(RuntimeInfoKey key, ref RuntimeInfoEventHandler handler)
+        {
+            switch (key)
+            {
+                case RuntimeInfoKey.Bluetooth:
+                    handler = BluetoothEnabled;
+                    break;
+                case RuntimeInfoKey.WifiHotspot:
+                    handler = WifiHotspotEnabled;
+                    break;
+                case RuntimeInfoKey.BluetoothTethering:
+                    handler = BluetoothTetheringEnabled;
+                    break;
+                case RuntimeInfoKey.UsbTethering:
+                    handler = UsbTetheringEnabled;
+                    break;
+                case RuntimeInfoKey.PacketData:
+                    handler = PacketDataEnabled;
+                    break;
+                case RuntimeInfoKey.DataRoaming:
+                    handler = DataRoamingEnabled;
+                    break;
+                case RuntimeInfoKey.Vibration:
+                    handler = VibrationEnabled;
+                    break;
+                case RuntimeInfoKey.AudioJack:
+                    handler = AudioJackConnected;
+                    break;
+                case RuntimeInfoKey.Gps:
+                    handler = GpsStatusChanged;
+                    break;
+                case RuntimeInfoKey.BatteryIsCharging:
+                    handler = BatteryIsCharging;
+                    break;
+                case RuntimeInfoKey.TvOut:
+                    handler = TvOutConnected;
+                    break;
+                case RuntimeInfoKey.AudioJackConnector:
+                    handler = AudioJackConnectorChanged;
+                    break;
+                case RuntimeInfoKey.Charger:
+                    handler = ChargerConnected;
+                    break;
+                case RuntimeInfoKey.AutoRotation:
+                    handler = AutoRotationEnabled;
+                    break;
+                default:
+                    handler = null;
+                    break;
+            }
+        }
+
+        /// <summary>
+        /// Registers a change event callback for given key.
+        /// </summary>
+        /// <param name="key">The runtime information key which wants to register callback.</param>
+        /// <param name="callback">The callback function to subscribe.</param>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
+        /// <exception cref="NotSupportedException">Thrown when the feature related <paramref name="key"/> is not supported.</exception>
+        internal static void SetCallback(RuntimeInfoKey key, EventHandler<RuntimeFeatureStatusChangedEventArgs> callback)
+        {
+            RuntimeInfoEventHandler handler = null;
+
+            FindEventHandler(key, ref handler);
+            if (handler == null)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            handler.EventHandler += callback;
+        }
+
+        /// <summary>
+        /// Unregisters a change event callback for given key.
+        /// </summary>
+        /// <param name="key">The runtime information key which wants to unregister callback.</param>
+        /// <param name="callback">The callback function to unsubscribe.</param>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
+        internal static void UnsetCallback(RuntimeInfoKey key, EventHandler<RuntimeFeatureStatusChangedEventArgs> callback)
+        {
+            RuntimeInfoEventHandler handler = null;
+
+            FindEventHandler(key, ref handler);
+            if (handler == null)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid key");
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            handler.EventHandler -= callback;
+        }
+    }
+}
diff --git a/src/Tizen.System.Information/RuntimeInfo/RuntimeInfoEventHandler.cs b/src/Tizen.System.Information/RuntimeInfo/RuntimeInfoEventHandler.cs
new file mode 100755 (executable)
index 0000000..733e0f1
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2016 - 2017 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.ComponentModel;
+
+namespace Tizen.System
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    internal class RuntimeInfoEventHandler
+    {
+        private RuntimeInfoKey Key;
+        private event EventHandler<RuntimeFeatureStatusChangedEventArgs> Handler;
+
+        internal RuntimeInfoEventHandler(RuntimeInfoKey key)
+        {
+            Key = key;
+            Handler = null;
+        }
+
+        internal event EventHandler<RuntimeFeatureStatusChangedEventArgs> EventHandler
+        {
+            add
+            {
+                if (Handler == null)
+                {
+                    InformationError ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(TvProductHelper.ConvertKeyIfTvProduct(Key), RuntimeInformationChangedCallback, IntPtr.Zero);
+                    if (ret != InformationError.None)
+                    {
+                        Log.Error(InformationErrorFactory.LogTag, "Interop failed to add event handler");
+                        InformationErrorFactory.ThrowException(ret);
+                    }
+                }
+                Handler += value;
+            }
+            remove
+            {
+                Handler -= value;
+                if (Handler == null)
+                {
+                    InformationError ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(TvProductHelper.ConvertKeyIfTvProduct(Key));
+                    if (ret != InformationError.None)
+                    {
+                        Log.Error(InformationErrorFactory.LogTag, "Interop failed to add event handler");
+                        InformationErrorFactory.ThrowException(ret);
+                    }
+                }
+            }
+        }
+
+        private void RuntimeInformationChangedCallback(RuntimeInfoKey key, IntPtr userData)
+        {
+            RuntimeFeatureStatusChangedEventArgs eventArgs = new RuntimeFeatureStatusChangedEventArgs()
+            {
+                Key = Information.HttpPrefix + Information.RuntimeInfoStringKeyPrefix + (Information.EnumStringMapping.ContainsKey(key) ? Information.EnumStringMapping[key] : "Invalid")
+            };
+
+            Handler?.Invoke(null, eventArgs);
+        }
+    }
+}
diff --git a/src/Tizen.System.Information/RuntimeInfo/RuntimeInformation.cs b/src/Tizen.System.Information/RuntimeInfo/RuntimeInformation.cs
deleted file mode 100755 (executable)
index 93c76c3..0000000
+++ /dev/null
@@ -1,891 +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;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.ComponentModel;
-
-namespace Tizen.System
-{
-    /// <summary>
-    /// The RuntimeInformation provides functions to obtain the runtime information of various system preferences.
-    /// </summary>
-    public static class RuntimeInformation
-    {
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_bluetoothEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_wifiHotspotEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_bluetoothTetheringEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_usbTetheringEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_packetDataEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_dataRoamingEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_vibrationEnabled;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_audioJackConnected;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_gpsStatusChanged;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_batteryIsCharging;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_tvOutConnected;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_audioJackConnectorChanged;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_chargerConnected;
-        private static event EventHandler<RuntimeKeyStatusChangedEventArgs> s_autoRotationEnabled;
-
-        private static readonly Interop.RuntimeInfo.RuntimeInformationChangedCallback s_runtimeInfoChangedCallback = (RuntimeInformationKey key, IntPtr userData) =>
-        {
-            RuntimeKeyStatusChangedEventArgs eventArgs = new RuntimeKeyStatusChangedEventArgs()
-            {
-                Key = key
-            };
-            switch (key)
-            {
-                case RuntimeInformationKey.Bluetooth:
-                    {
-                        s_bluetoothEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.WifiHotspot:
-                    {
-                        s_wifiHotspotEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.BluetoothTethering:
-                    {
-                        s_bluetoothTetheringEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.UsbTethering:
-                    {
-                        s_usbTetheringEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.PacketData:
-                    {
-                        s_packetDataEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.DataRoaming:
-                    {
-                        s_dataRoamingEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.Vibration:
-                    {
-                        s_vibrationEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.AudioJack:
-                    {
-                        s_audioJackConnected?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.Gps:
-                    {
-                        s_gpsStatusChanged?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.BatteryIsCharging:
-                    {
-                        s_batteryIsCharging?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.TvOut:
-                    {
-                        s_tvOutConnected?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.AudioJackConnector:
-                    {
-                        s_audioJackConnectorChanged?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.Charger:
-                    {
-                        s_chargerConnected?.Invoke(null, eventArgs);
-                        break;
-                    };
-                case RuntimeInformationKey.AutoRotation:
-                    {
-                        s_autoRotationEnabled?.Invoke(null, eventArgs);
-                        break;
-                    };
-                default:
-                    break;
-            };
-        };
-
-        internal static readonly Dictionary<RuntimeInformationKey, Type> s_keyDataTypeMapping = new Dictionary<RuntimeInformationKey, Type>
-        {
-            [RuntimeInformationKey.Bluetooth] = typeof(bool),
-            [RuntimeInformationKey.WifiHotspot] = typeof(bool),
-            [RuntimeInformationKey.BluetoothTethering] = typeof(bool),
-            [RuntimeInformationKey.UsbTethering] = typeof(bool),
-            [RuntimeInformationKey.PacketData] = typeof(bool),
-            [RuntimeInformationKey.DataRoaming] = typeof(bool),
-            [RuntimeInformationKey.Vibration] = typeof(bool),
-            [RuntimeInformationKey.AudioJack] = typeof(bool),
-            [RuntimeInformationKey.BatteryIsCharging] = typeof(bool),
-            [RuntimeInformationKey.TvOut] = typeof(bool),
-            [RuntimeInformationKey.Charger] = typeof(bool),
-            [RuntimeInformationKey.AutoRotation] = typeof(bool),
-            [RuntimeInformationKey.Gps] = typeof(int),
-            [RuntimeInformationKey.AudioJackConnector] = typeof(int)
-        };
-
-        internal static readonly Dictionary<RuntimeInformationKey, int> s_keyTVkeyMapping = new Dictionary<RuntimeInformationKey, int>
-        {
-            [RuntimeInformationKey.Bluetooth] = 5,
-            [RuntimeInformationKey.WifiHotspot] = 6,
-            [RuntimeInformationKey.BluetoothTethering] = 7,
-            [RuntimeInformationKey.UsbTethering] = 8,
-            [RuntimeInformationKey.PacketData] = 13,
-            [RuntimeInformationKey.DataRoaming] = 14,
-            [RuntimeInformationKey.Vibration] = 16,
-            [RuntimeInformationKey.AudioJack] = 20,
-            [RuntimeInformationKey.BatteryIsCharging] = 22,
-            [RuntimeInformationKey.TvOut] = 18,
-            [RuntimeInformationKey.Charger] = 26,
-            [RuntimeInformationKey.AutoRotation] = 28,
-            [RuntimeInformationKey.Gps] = 21,
-            [RuntimeInformationKey.AudioJackConnector] = 20
-        };
-
-        internal static int is_TV_product = -1;
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        /// This function is for a TV product. It will be removed.
-        internal static RuntimeInformationKey ConvertKeyIfTvProduct(RuntimeInformationKey key)
-        {
-            bool is_key_existed = false;
-            string profile;
-            int key_TV = -1;
-
-            if (is_TV_product == -1)
-            {
-                is_key_existed = SystemInfo.TryGetValue<string>("http://com.samsung/build_config/product_type", out profile);
-                if (is_key_existed && String.Compare(profile, "TV") == 0)
-                {
-                    is_TV_product = 1;
-                }
-                else
-                {
-                    is_TV_product = 0;
-                }
-            }
-
-            if (is_TV_product == 0)
-            {
-                return key;
-            }
-            else
-            {
-                if (!s_keyTVkeyMapping.TryGetValue(key, out key_TV))
-                {
-                    RuntimeInfoErrorFactory.ThrowException((int)RuntimeInfoError.InvalidParameter);
-                }
-                return (RuntimeInformationKey)key_TV;
-            }
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        internal static object GetStatus(RuntimeInformationKey key)
-        {
-            Type value;
-            if (!s_keyDataTypeMapping.TryGetValue(key, out value))
-            {
-                RuntimeInfoErrorFactory.ThrowException((int)RuntimeInfoError.InvalidParameter);
-            }
-
-            if (s_keyDataTypeMapping[key] == typeof(int))
-            {
-                int status;
-                int ret = Interop.RuntimeInfo.GetValue(ConvertKeyIfTvProduct(key), out status);
-                if (ret != (int)RuntimeInfoError.None)
-                {
-                    Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get value for key {0}", key.ToString());
-                    RuntimeInfoErrorFactory.ThrowException(ret);
-                }
-
-                return status;
-            }
-            else
-            {
-                bool status;
-                int ret = Interop.RuntimeInfo.GetValue(ConvertKeyIfTvProduct(key), out status);
-                if (ret != (int)RuntimeInfoError.None)
-                {
-                    Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get value for key {0}", key.ToString());
-                    RuntimeInfoErrorFactory.ThrowException(ret);
-                }
-
-                return status;
-            }
-        }
-
-        /// <summary>
-        /// Validates the data type of the status represented by the runtime key.
-        /// Note that this is a generic method.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <typeparam name="T">The generic type to validate.</typeparam>
-        /// <param name="key">The runtime information key for which the status type is validated.</param>
-        /// <returns>True if the data type matches.</returns>
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
-        public static bool Is<T>(RuntimeInformationKey key)
-        {
-            if (!s_keyDataTypeMapping.ContainsKey(key))
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Invalid data type");
-                throw new ArgumentException("Invalid parameter");
-            }
-
-            return s_keyDataTypeMapping[key] == typeof(T);
-        }
-
-        /// <summary>
-        /// Gets the status of runtime key.
-        /// Note that this is a generic method.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <typeparam name="T">The generic type to return.</typeparam>
-        /// <param name="key">The runtime information key for which the current should be read.</param>
-        /// <returns>The current status of the given key.</returns>.
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="key"/> is invalid.</exception>
-        /// <exception cref="IOException">Thrown when I/O error occurs while reading from the system.</exception>
-        /// <exception cref="NotSupportedException">Thrown when the feature related <paramref name="key"/> is not supported.</exception>
-        public static T GetStatus<T>(RuntimeInformationKey key)
-        {
-            return (T)GetStatus(key);
-        }
-
-        /// <summary>
-        /// Gets the system memory information.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <returns>The system memory information structure.</returns>
-        /// <exception cref="IOException">Thrown when I/O error occurs while reading from the system.</exception>
-        public static SystemMemoryInformation GetSystemMemoryInformation()
-        {
-            Interop.RuntimeInfo.MemoryInfo info = new Interop.RuntimeInfo.MemoryInfo();
-            int ret = Interop.RuntimeInfo.GetSystemMemoryInfo(out info);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get System memory information");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-
-            return new SystemMemoryInformation(info);
-        }
-
-        /// <summary>
-        /// Gets the memory information per process.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <param name="pid">List of unique process ids.</param>
-        /// <returns>List of memory information per process.</returns>
-        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
-        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
-        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
-        public static IDictionary<int, ProcessMemoryInformation> GetProcessMemoryInformation(IEnumerable<int> pid)
-        {
-            int[] processArray = pid.ToArray<int>();
-            Interop.RuntimeInfo.ProcessMemoryInfo[] processMemoryArray = new Interop.RuntimeInfo.ProcessMemoryInfo[pid.Count<int>()];
-            Dictionary<int, ProcessMemoryInformation> map = new Dictionary<int, ProcessMemoryInformation>();
-            int ret = Interop.RuntimeInfo.GetProcessMemoryInfo(processArray, pid.Count<int>(), out processMemoryArray);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get Process memory information");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-
-            int idx = 0;
-            foreach (Interop.RuntimeInfo.ProcessMemoryInfo cur in processMemoryArray)
-            {
-                ProcessMemoryInformation processMemory = new ProcessMemoryInformation(cur);
-                map.Add(processArray[idx], processMemory);
-                idx++;
-            }
-
-            return map;
-        }
-
-        /// <summary>
-        /// Gets the system CPU usage time.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <returns>The system CPU usage time structure.</returns>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system.</exception>
-        public static CpuUsage GetCpuUsage()
-        {
-            Interop.RuntimeInfo.CpuUsage usage = new Interop.RuntimeInfo.CpuUsage();
-            int ret = Interop.RuntimeInfo.GetCpuUsage(out usage);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get cpu usage");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-            return new CpuUsage(usage);
-        }
-
-        /// <summary>
-        /// Gets the CPU usage time per process.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <param name="pid">List of unique process ids.</param>
-        /// <returns>List of CPU usage information per process.</returns>
-        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
-        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
-        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
-        public static IDictionary<int, ProcessCpuUsage> GetProcessCpuUsage(IEnumerable<int> pid)
-        {
-            int[] processArray = pid.ToArray<int>();
-            Interop.RuntimeInfo.ProcessCpuUsage[] processCpuUsageArray = new Interop.RuntimeInfo.ProcessCpuUsage[pid.Count<int>()];
-            Dictionary<int, ProcessCpuUsage> map = new Dictionary<int, ProcessCpuUsage>();
-            int ret = Interop.RuntimeInfo.GetProcessCpuUsage(processArray, pid.Count<int>(), out processCpuUsageArray);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get Process cpu usage");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-
-            int idx = 0;
-            foreach (Interop.RuntimeInfo.ProcessCpuUsage cur in processCpuUsageArray)
-            {
-                ProcessCpuUsage processUsage = new ProcessCpuUsage(cur);
-                map.Add(processArray[idx], processUsage);
-                idx++;
-            }
-
-            return map;
-        }
-
-        /// <summary>
-        /// Gets the number of processors.
-        /// </summary>
-        /// <value>The number of processors.</value>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from system.</exception>
-        public static int ProcessorCount
-        {
-            get
-            {
-                int count;
-                int ret = Interop.RuntimeInfo.GetProcessorCount(out count);
-                if (ret != (int)RuntimeInfoError.None)
-                {
-                    Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get Processor count");
-                    RuntimeInfoErrorFactory.ThrowException(ret);
-                }
-
-                return count;
-            }
-        }
-
-        /// <summary>
-        /// Gets the current frequency of the processor.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <param name="coreId">The index (from 0) of the CPU core that you want to know the frequency of.</param>
-        /// <returns>The current frequency(MHz) of processor.</returns>
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="coreid"/> is invalid.</exception>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from system.</exception>
-        /// <exception cref="NotSupportedException">Thrown when this system does not store the current CPU frequency.</exception>
-        public static int GetProcessorCurrentFrequency(int coreId)
-        {
-            int frequency;
-            int ret = Interop.RuntimeInfo.GetProcessorCurrentFrequency(coreId, out frequency);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get Processor current frequency");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-            return frequency;
-        }
-
-        /// <summary>
-        /// Gets the max frequency of the processor.
-        /// </summary>
-        /// <since_tizen> 3 </since_tizen>
-        /// <param name="coreId">The index (from 0) of CPU core that you want to know the frequency of.</param>
-        /// <returns>The max frequency(MHz) of processor.</returns>
-        /// <exception cref="ArgumentException">Thrown when the <paramref name="coreid"/> is invalid.</exception>
-        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from system.</exception>
-        /// <exception cref="NotSupportedException">Thrown when this system does not store the max CPU frequency.</exception>
-        public static int GetProcessorMaxFrequency(int coreId)
-        {
-            int frequency;
-            int ret = Interop.RuntimeInfo.GetProcessorMaxFrequency(coreId, out frequency);
-            if (ret != (int)RuntimeInfoError.None)
-            {
-                Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to get  Processor max frequency");
-                RuntimeInfoErrorFactory.ThrowException(ret);
-            }
-            return frequency;
-        }
-
-        /// <summary>
-        /// (event) BluetoothEnabled is raised when the system preference for Bluetooth is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> BluetoothEnabled
-        {
-            add
-            {
-                if (s_bluetoothEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Bluetooth), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_bluetoothEnabled += value;
-            }
-            remove
-            {
-                s_bluetoothEnabled -= value;
-                if (s_bluetoothEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Bluetooth));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) WifiHotspotEnabled is raised when the system preference for Wi-Fi is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> WifiHotspotEnabled
-        {
-            add
-            {
-                if (s_wifiHotspotEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.WifiHotspot), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_wifiHotspotEnabled += value;
-            }
-            remove
-            {
-                s_wifiHotspotEnabled -= value;
-                if (s_wifiHotspotEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.WifiHotspot));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) BluetoothTetheringEnabled is raised when the system preference for bluetooth tethering is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> BluetoothTetheringEnabled
-        {
-            add
-            {
-                if (s_bluetoothTetheringEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.BluetoothTethering), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_bluetoothTetheringEnabled += value;
-            }
-            remove
-            {
-                s_bluetoothTetheringEnabled -= value;
-                if (s_bluetoothTetheringEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.BluetoothTethering));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) UsbTetheringEnabled is raised when the system preference for USB tethering is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> UsbTetheringEnabled
-        {
-            add
-            {
-                if (s_usbTetheringEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.UsbTethering), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_usbTetheringEnabled += value;
-            }
-            remove
-            {
-                s_usbTetheringEnabled -= value;
-                if (s_usbTetheringEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.UsbTethering));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) PacketDataEnabled is raised when the system preference for package data through 3G network is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> PacketDataEnabled
-        {
-            add
-            {
-                if (s_packetDataEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.PacketData), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_packetDataEnabled += value;
-            }
-            remove
-            {
-                s_packetDataEnabled -= value;
-                if (s_packetDataEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.PacketData));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) DataRoamingEnabled is raised when the system preference for data roaming is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> DataRoamingEnabled
-        {
-            add
-            {
-                if (s_dataRoamingEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.DataRoaming), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_dataRoamingEnabled += value;
-            }
-            remove
-            {
-                s_dataRoamingEnabled -= value;
-                if (s_dataRoamingEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.DataRoaming));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) VibrationEnabled is raised when the system preference for vibration is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> VibrationEnabled
-        {
-            add
-            {
-                if (s_vibrationEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Vibration), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_vibrationEnabled += value;
-            }
-            remove
-            {
-                s_vibrationEnabled -= value;
-                if (s_vibrationEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Vibration));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) AudioJackConnected is raised when the audio jack is connected/disconnected.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> AudioJackConnected
-        {
-            add
-            {
-                if (s_audioJackConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AudioJack), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_audioJackConnected += value;
-            }
-            remove
-            {
-                s_audioJackConnected -= value;
-                if (s_audioJackConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AudioJack));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) GpsStatusChanged is raised when the status of GPS is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> GpsStatusChanged
-        {
-            add
-            {
-                if (s_gpsStatusChanged == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Gps), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_gpsStatusChanged += value;
-            }
-            remove
-            {
-                s_gpsStatusChanged -= value;
-                if (s_gpsStatusChanged == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Gps));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) BatteryIsCharging is raised when the battery is currently charging.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> BatteryIsCharging
-        {
-            add
-            {
-                if (s_batteryIsCharging == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.BatteryIsCharging), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_batteryIsCharging += value;
-            }
-            remove
-            {
-                s_batteryIsCharging -= value;
-                if (s_batteryIsCharging == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.BatteryIsCharging));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) TvOutConnected is raised when TV out is connected/disconnected.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> TvOutConnected
-        {
-            add
-            {
-                if (s_tvOutConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.TvOut), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_tvOutConnected += value;
-            }
-            remove
-            {
-                s_tvOutConnected -= value;
-                if (s_tvOutConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.TvOut));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) AudioJackConnectorChanged is raised when the audio jack connection changes.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> AudioJackConnectorChanged
-        {
-            add
-            {
-                if (s_audioJackConnectorChanged == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AudioJackConnector), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_audioJackConnectorChanged += value;
-            }
-            remove
-            {
-                s_audioJackConnectorChanged -= value;
-                if (s_audioJackConnectorChanged == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AudioJackConnector));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) ChargerConnected is raised when the charger is connected/disconnected.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> ChargerConnected
-        {
-            add
-            {
-                if (s_chargerConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Charger), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_chargerConnected += value;
-            }
-            remove
-            {
-                s_chargerConnected -= value;
-                if (s_chargerConnected == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.Charger));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-        /// <summary>
-        /// (event) AutoRotationEnabled is raised when the system preference for auto rotation is changed.
-        /// </summary>
-        public static event EventHandler<RuntimeKeyStatusChangedEventArgs> AutoRotationEnabled
-        {
-            add
-            {
-                if (s_autoRotationEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.SetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AutoRotation), s_runtimeInfoChangedCallback, IntPtr.Zero);
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-                s_autoRotationEnabled += value;
-            }
-            remove
-            {
-                s_autoRotationEnabled -= value;
-                if (s_autoRotationEnabled == null)
-                {
-                    int ret = Interop.RuntimeInfo.UnsetRuntimeInfoChangedCallback(ConvertKeyIfTvProduct(RuntimeInformationKey.AutoRotation));
-                    if (ret != (int)RuntimeInfoError.None)
-                    {
-                        Log.Error(RuntimeInfoErrorFactory.LogTag, "Interop failed to add event handler");
-                        RuntimeInfoErrorFactory.ThrowException(ret);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/Tizen.System.Information/RuntimeInfo/TvProductHelper.cs b/src/Tizen.System.Information/RuntimeInfo/TvProductHelper.cs
new file mode 100755 (executable)
index 0000000..df9e3a2
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2016 - 2017 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.ComponentModel;
+
+namespace Tizen.System
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    internal static class TvProductHelper
+    {
+        private static int is_TV_product = -1;
+
+        private static readonly Dictionary<RuntimeInfoKey, int> s_keyTVkeyMapping = new Dictionary<RuntimeInfoKey, int>
+        {
+            [RuntimeInfoKey.Bluetooth] = 5,
+            [RuntimeInfoKey.WifiHotspot] = 6,
+            [RuntimeInfoKey.BluetoothTethering] = 7,
+            [RuntimeInfoKey.UsbTethering] = 8,
+            [RuntimeInfoKey.PacketData] = 13,
+            [RuntimeInfoKey.DataRoaming] = 14,
+            [RuntimeInfoKey.Vibration] = 16,
+            [RuntimeInfoKey.AudioJack] = 20,
+            [RuntimeInfoKey.BatteryIsCharging] = 22,
+            [RuntimeInfoKey.TvOut] = 18,
+            [RuntimeInfoKey.Charger] = 26,
+            [RuntimeInfoKey.AutoRotation] = 28,
+            [RuntimeInfoKey.Gps] = 21,
+            [RuntimeInfoKey.AudioJackConnector] = 20
+        };
+
+        /// This function is for a TV product. It will be removed.
+        internal static RuntimeInfoKey ConvertKeyIfTvProduct(RuntimeInfoKey key)
+        {
+            bool is_key_existed = false;
+            string profile;
+            int key_TV = -1;
+
+            if (is_TV_product == -1)
+            {
+                is_key_existed = SystemInfo.TryGetValue<string>("http://com.samsung/build_config/product_type", out profile);
+                if (is_key_existed && String.Compare(profile, "TV") == 0)
+                {
+                    is_TV_product = 1;
+                }
+                else
+                {
+                    is_TV_product = 0;
+                }
+            }
+
+            if (is_TV_product == 0)
+            {
+                return key;
+            }
+            else
+            {
+                if (!s_keyTVkeyMapping.TryGetValue(key, out key_TV))
+                {
+                    InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+                }
+                return (RuntimeInfoKey)key_TV;
+            }
+        }
+    }
+}
index b551c1b..5c352f0 100755 (executable)
@@ -19,41 +19,36 @@ using System.ComponentModel;
 
 namespace Tizen.System
 {
-    /// <summary>
-    /// System Information class. This class has methods which can be used to obtain device information.
-    /// </summary>
-    public static class SystemInfo
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    internal static class SystemInfo
     {
-        private const string LogTag = "Tizen.System";
-
         [EditorBrowsable(EditorBrowsableState.Never)]
         private static Interop.SystemInfo.SystemInfoType GetValueType(string key, out Interop.SystemInfo.SystemInfoValueType valueType)
         {
-            Interop.SystemInfo.ErrorCode err = Interop.SystemInfo.SystemInfoGetPlatformType(key, out valueType);
-            if (err == Interop.SystemInfo.ErrorCode.None)
+            InformationError err = Interop.SystemInfo.SystemInfoGetPlatformType(key, out valueType);
+            if (err == InformationError.None)
             {
                 return Interop.SystemInfo.SystemInfoType.platform;
             }
 
-            Log.Debug(LogTag, string.Format("Key {0} not in platform system info", key));
+            Log.Debug(InformationErrorFactory.LogTag, string.Format("Key {0} not in platform system info", key));
             err = Interop.SystemInfo.SystemInfoGetCustomType(key, out valueType);
-            if (err == Interop.SystemInfo.ErrorCode.None)
+            if (err == InformationError.None)
             {
                 return Interop.SystemInfo.SystemInfoType.Custom;
             }
 
-            Log.Debug(LogTag, string.Format("Key {0} not in custom system info", key));
+            Log.Debug(InformationErrorFactory.LogTag, string.Format("Key {0} not in custom system info", key));
             return Interop.SystemInfo.SystemInfoType.None;
         }
 
         /// <summary>
         /// Checks if the type of value for the given feature is T.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <typeparam name="T">Type of value for the feature key.</typeparam>
         /// <param name="key">The name of the feature.</param>
         /// <returns>True if type of value for the given feature is T, otherwise false.</returns>
-        public static bool Is<T>(string key)
+        internal static bool Is<T>(string key)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             Interop.SystemInfo.SystemInfoType keyType = GetValueType(key, out valueType);
@@ -79,10 +74,9 @@ namespace Tizen.System
         /// <summary>
         /// Checks if the given key is a valid feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <param name="key">The name of the feature.</param>
         /// <returns>True if the key is valid, otherwise false.</returns>
-        public static bool IsValidKey(string key)
+        internal static bool IsValidKey(string key)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             return GetValueType(key, out valueType) != Interop.SystemInfo.SystemInfoType.None;
@@ -91,12 +85,11 @@ namespace Tizen.System
         /// <summary>
         /// Gets the value of the feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <typeparam name="T">Type of key value.</typeparam>
         /// <param name="key">The name of the feature.</param>
         /// <param name="value">The value of the given feature.</param>
         /// <returns>Returns true on success, otherwise false.</returns>
-        public static bool TryGetValue<T>(string key, out T value)
+        internal static bool TryGetValue<T>(string key, out T value)
         {
             bool res = false;
             if (typeof(T) == typeof(bool))
@@ -133,16 +126,15 @@ namespace Tizen.System
         /// <summary>
         /// Gets the bool value of the feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <param name="key">The name of the feature.</param>
         /// <param name="value">The value of the given feature.</param>
         /// <returns>Returns true on success, otherwise false.</returns>
-        public static bool TryGetValue(string key, out bool value)
+        internal static bool TryGetValue(string key, out bool value)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             Interop.SystemInfo.SystemInfoType keyType = GetValueType(key, out valueType);
 
-            Interop.SystemInfo.ErrorCode err = Interop.SystemInfo.ErrorCode.InvalidParameter;
+            InformationError err = InformationError.InvalidParameter;
             if (keyType == Interop.SystemInfo.SystemInfoType.platform)
             {
                 err = Interop.SystemInfo.SystemInfoGetPlatformBool(key, out value);
@@ -155,9 +147,9 @@ namespace Tizen.System
                 value = false;
             }
 
-            if (err != Interop.SystemInfo.ErrorCode.None)
+            if (err != InformationError.None)
             {
-                Log.Warn(LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
+                Log.Warn(InformationErrorFactory.LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
                 return false;
             }
 
@@ -167,16 +159,15 @@ namespace Tizen.System
         /// <summary>
         /// Gets the int value of the feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <param name="key">The name of the feature.</param>
         /// <param name="value">The value of the given feature.</param>
         /// <returns>Returns true on success, otherwise false.</returns>
-        public static bool TryGetValue(string key, out int value)
+        internal static bool TryGetValue(string key, out int value)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             Interop.SystemInfo.SystemInfoType keyType = GetValueType(key, out valueType);
 
-            Interop.SystemInfo.ErrorCode err = Interop.SystemInfo.ErrorCode.InvalidParameter;
+            InformationError err = InformationError.InvalidParameter;
             if (keyType == Interop.SystemInfo.SystemInfoType.platform)
             {
                 err = Interop.SystemInfo.SystemInfoGetPlatformInt(key, out value);
@@ -190,9 +181,9 @@ namespace Tizen.System
                 value = 0;
             }
 
-            if (err != Interop.SystemInfo.ErrorCode.None)
+            if (err != InformationError.None)
             {
-                Log.Warn(LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
+                Log.Warn(InformationErrorFactory.LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
                 return false;
             }
 
@@ -202,16 +193,15 @@ namespace Tizen.System
         /// <summary>
         /// Gets the double value of the feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <param name="key">The name of the feature.</param>
         /// <param name="value">The value of the given feature.</param>
         /// <returns>Returns true on success, otherwise false.</returns>
-        public static bool TryGetValue(string key, out double value)
+        internal static bool TryGetValue(string key, out double value)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             Interop.SystemInfo.SystemInfoType keyType = GetValueType(key, out valueType);
 
-            Interop.SystemInfo.ErrorCode err = Interop.SystemInfo.ErrorCode.InvalidParameter;
+            InformationError err = InformationError.InvalidParameter;
             if (keyType == Interop.SystemInfo.SystemInfoType.platform)
             {
                 err = Interop.SystemInfo.SystemInfoGetPlatformDouble(key, out value);
@@ -225,9 +215,9 @@ namespace Tizen.System
                 value = 0;
             }
 
-            if (err != Interop.SystemInfo.ErrorCode.None)
+            if (err != InformationError.None)
             {
-                Log.Warn(LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
+                Log.Warn(InformationErrorFactory.LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
                 return false;
             }
 
@@ -237,16 +227,15 @@ namespace Tizen.System
         /// <summary>
         /// Gets the string value of the feature.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
         /// <param name="key">The name of the feature.</param>
         /// <param name="value">The value of the given feature.</param>
         /// <returns>Returns true on success, otherwise false.</returns>
-        public static bool TryGetValue(string key, out string value)
+        internal static bool TryGetValue(string key, out string value)
         {
             Interop.SystemInfo.SystemInfoValueType valueType;
             Interop.SystemInfo.SystemInfoType keyType = GetValueType(key, out valueType);
 
-            Interop.SystemInfo.ErrorCode err = Interop.SystemInfo.ErrorCode.InvalidParameter;
+            InformationError err = InformationError.InvalidParameter;
             if (keyType == Interop.SystemInfo.SystemInfoType.platform)
             {
                 err = Interop.SystemInfo.SystemInfoGetPlatformString(key, out value);
@@ -260,9 +249,9 @@ namespace Tizen.System
                 value = string.Empty;
             }
 
-            if (err != Interop.SystemInfo.ErrorCode.None)
+            if (err != InformationError.None)
             {
-                Log.Warn(LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
+                Log.Warn(InformationErrorFactory.LogTag, string.Format("Failed to get value for key: {0}. err = {1}", key, err));
                 return false;
             }
 
old mode 100644 (file)
new mode 100755 (executable)
index 11cd4a8..7f4584f
@@ -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.System.Information/Usage/ProcessCpuUsage.cs b/src/Tizen.System.Information/Usage/ProcessCpuUsage.cs
new file mode 100755 (executable)
index 0000000..75a579c
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2016 - 2017 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.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The class for CPU usage per process.
+    /// </summary>
+    public class ProcessCpuUsage
+    {
+        private int[] Pids;
+        private Interop.RuntimeInfo.ProcessCpuUsage[] Usages;
+
+        /// <summary>
+        /// The constructor of ProcessCpuUsage class.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">List of unique process ids.</param>
+        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
+        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
+        public ProcessCpuUsage(IEnumerable<int> pid)
+        {
+            Update(pid);
+        }
+
+        /// <summary>
+        /// The number of usage entries.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Count { get; internal set; }
+
+        /// <summary>
+        /// Gets the amount of time this process has been scheduled in user mode.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The amount of time <paramref name="pid"/> has been scheduled in user mode (clock ticks).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public uint GetUTime(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].UTime;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the amount of time this process has been scheduled in kernel mode.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The amount of time <paramref name="pid"/> has been scheduled in kernel mode (clock ticks).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public uint GetSTime(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].STime;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Update the process CPU usage to the latest.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">List of unique process ids.</param>
+        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
+        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
+        public void Update(IEnumerable<int> pid)
+        {
+            InformationError ret;
+
+            Pids = pid.ToArray<int>();
+            IntPtr ptr = new IntPtr();
+            Count = Pids.Count<int>();
+
+            ret = Interop.RuntimeInfo.GetProcessCpuUsage(Pids, Count, ref ptr);
+            if (ret != InformationError.None)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Interop failed to get Process cpu usage");
+                InformationErrorFactory.ThrowException(ret);
+            }
+
+            Usages = new Interop.RuntimeInfo.ProcessCpuUsage[Count];
+            for (int i = 0; i < Count; i++)
+            {
+                Usages[i] = Marshal.PtrToStructure<Interop.RuntimeInfo.ProcessCpuUsage>(ptr);
+                ptr += Marshal.SizeOf<Interop.RuntimeInfo.ProcessCpuUsage>();
+            }
+        }
+    }
+}
diff --git a/src/Tizen.System.Information/Usage/ProcessMemoryUsage.cs b/src/Tizen.System.Information/Usage/ProcessMemoryUsage.cs
new file mode 100755 (executable)
index 0000000..c10c8c9
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2016 - 2017 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.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The class for memory information per process.
+    /// </summary>
+    public class ProcessMemoryUsage
+    {
+        private int[] Pids;
+        private Interop.RuntimeInfo.ProcessMemoryInfo[] Usages;
+
+        /// <summary>
+        /// The constructor of ProcessMemoryInformation class.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">List of unique process ids.</param>
+        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
+        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
+        public ProcessMemoryUsage(IEnumerable<int> pid)
+        {
+            Update(pid);
+        }
+
+        /// <summary>
+        /// The number of usage entries.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Count { get; internal set; }
+
+        /// <summary>
+        /// Gets the virtual memory size of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The virtual memory size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetVsz(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].Vsz;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the resident set size of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The resident set size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetRss(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].Rss;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the proportional set size of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The proportional set size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetPss(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].Pss;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the size not modified and mapped by other processes of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The shared clean memory size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetSharedClean(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].SharedClean;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the size modified and mapped by other processes of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The shared dirty memory size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetSharedDirty(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].SharedDirty;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the size not modified and available only to that process of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The private clean memory size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetPrivateClean(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].PrivateClean;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Gets the size modified and available only to that process of a process.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">The process id.</param>
+        /// <returns>The private dirty memory size <paramref name="pid"/> is using (KiB).</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is invalid.</exception>
+        public int GetPrivateDirty(int pid)
+        {
+            for (int i = 0; i < Count; i++)
+                if (pid == Pids[i])
+                    return Usages[i].PrivateDirty;
+
+            Log.Error(InformationErrorFactory.LogTag, "Invalid pid");
+            InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            return 0;
+        }
+
+        /// <summary>
+        /// Update the process memory information to the latest.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="pid">List of unique process ids.</param>
+        /// <privilege>http://tizen.org/privilege/systemmonitor</privilege>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="pid"/> is empty.</exception>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system or requesting to the resource management daemon.</exception>
+        /// <exception cref="OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when the caller does not have privilege to use this method.</exception>
+        public void Update(IEnumerable<int> pid)
+        {
+            InformationError ret;
+
+            Pids = pid.ToArray<int>();
+            IntPtr ptr = new IntPtr();
+            Count = Pids.Count<int>();
+
+            ret = Interop.RuntimeInfo.GetProcessMemoryInfo(Pids, Count, ref ptr);
+            if (ret != InformationError.None)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Interop failed to get Process cpu usage");
+                InformationErrorFactory.ThrowException(ret);
+            }
+
+            Usages = new Interop.RuntimeInfo.ProcessMemoryInfo[Count];
+            for (int i = 0; i < Count; i++)
+            {
+                Usages[i] = Marshal.PtrToStructure<Interop.RuntimeInfo.ProcessMemoryInfo>(ptr);
+                ptr += Marshal.SizeOf<Interop.RuntimeInfo.ProcessCpuUsage>();
+            }
+        }
+    }
+}
diff --git a/src/Tizen.System.Information/Usage/SystemCpuUsage.cs b/src/Tizen.System.Information/Usage/SystemCpuUsage.cs
new file mode 100755 (executable)
index 0000000..d72b462
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2016 - 2017 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.IO;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The class for system CPU usage.
+    /// </summary>
+    public class SystemCpuUsage
+    {
+        private Interop.RuntimeInfo.CpuUsage Usage;
+        private int[] CurrentFrequencies;
+        private int[] MaxFrequencies;
+
+        /// <summary>
+        /// The constructor of SystemCpuUsage class.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system.</exception>
+        /// <exception cref="NotSupportedException">Thrown when this system does not store the current CPU frequency.</exception>
+        public SystemCpuUsage()
+        {
+            Update();
+        }
+
+        /// <summary>
+        /// Running time of un-niced user processes (Percent).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public double User
+        {
+            get
+            {
+                return Usage.User;
+            }
+        }
+
+        /// <summary>
+        /// Running time of kernel processes (Percent).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public double System
+        {
+            get
+            {
+                return Usage.System;
+            }
+        }
+
+        /// <summary>
+        /// Running time of niced user processes (Percent).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public double Nice
+        {
+            get
+            {
+                return Usage.Nice;
+            }
+        }
+
+        /// <summary>
+        /// Time waiting for I/O completion (Percent).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public double IoWait
+        {
+            get
+            {
+                return Usage.IoWait;
+            }
+        }
+
+        /// <summary>
+        /// The number of processors.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int ProcessorCount { get; internal set; }
+
+        /// <summary>
+        /// Gets the current frequency of the processor.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="coreId">The index (from 0) of the CPU core that you want to know the frequency of.</param>
+        /// <returns>The current frequency(MHz) of processor.</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="coreId"/> is invalid.</exception>
+        public int GetCurrentFrequency(int coreId)
+        {
+            if(coreId < 0 || coreId >= ProcessorCount)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid core ID " + coreId);
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            return CurrentFrequencies[coreId];
+        }
+
+        /// <summary>
+        /// Gets the max frequency of the processor.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <param name="coreId">The index (from 0) of CPU core that you want to know the frequency of.</param>
+        /// <returns>The max frequency(MHz) of processor.</returns>
+        /// <exception cref="ArgumentException">Thrown when the <paramref name="coreId"/> is invalid.</exception>
+        public int GetMaxFrequency(int coreId)
+        {
+            if (coreId < 0 || coreId >= ProcessorCount)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Invalid core ID " + coreId);
+                InformationErrorFactory.ThrowException(InformationError.InvalidParameter);
+            }
+
+            return MaxFrequencies[coreId];
+        }
+
+        /// <summary>
+        /// Update the system CPU usage to the latest.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system.</exception>
+        /// <exception cref="NotSupportedException">Thrown when this system does not store the current CPU frequency.</exception>
+        public void Update()
+        {
+            InformationError ret;
+            int count;
+
+            ret = Interop.RuntimeInfo.GetCpuUsage(out Usage);
+            if (ret != InformationError.None)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Interop failed to get cpu usage");
+                InformationErrorFactory.ThrowException(ret);
+            }
+
+            ret = Interop.RuntimeInfo.GetProcessorCount(out count);
+            if (ret != InformationError.None)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Interop failed to get Processor count");
+                InformationErrorFactory.ThrowException(ret);
+                return;
+            }
+
+            ProcessorCount = count;
+            CurrentFrequencies = new int[ProcessorCount];
+            MaxFrequencies = new int[ProcessorCount];
+
+            for (int coreId = 0; coreId < ProcessorCount; coreId++)
+            {
+                ret = Interop.RuntimeInfo.GetProcessorCurrentFrequency(coreId, out CurrentFrequencies[coreId]);
+                if (ret != InformationError.None)
+                {
+                    Log.Error(InformationErrorFactory.LogTag, "Interop failed to get the current frequency of processor " + coreId);
+                    InformationErrorFactory.ThrowException(ret);
+                }
+
+                ret = Interop.RuntimeInfo.GetProcessorMaxFrequency(coreId, out MaxFrequencies[coreId]);
+                if (ret != InformationError.None)
+                {
+                    Log.Error(InformationErrorFactory.LogTag, "Interop failed to get the max frequency of processor " + coreId);
+                    InformationErrorFactory.ThrowException(ret);
+                }
+            }
+        }
+    }
+}
diff --git a/src/Tizen.System.Information/Usage/SystemMemoryUsage.cs b/src/Tizen.System.Information/Usage/SystemMemoryUsage.cs
new file mode 100755 (executable)
index 0000000..41ec78f
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2016 - 2017 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.IO;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The class for system memory information.
+    /// </summary>
+    public class SystemMemoryUsage
+    {
+        private Interop.RuntimeInfo.MemoryInfo Info;
+
+        /// <summary>
+        /// The constructor of MemoryInformation class.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <exception cref="IOException">Thrown when an I/O error occurs while reading from the system.</exception>
+        public SystemMemoryUsage()
+        {
+            Update();
+        }
+
+        /// <summary>
+        /// Total memory (KiB).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Total
+        {
+            get
+            {
+                return Info.Total;
+            }
+        }
+
+        /// <summary>
+        /// Used memory (KiB).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Used
+        {
+            get
+            {
+                return Info.Used;
+            }
+        }
+
+        /// <summary>
+        /// Free memory (KiB).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Free
+        {
+            get
+            {
+                return Info.Free;
+            }
+        }
+
+        /// <summary>
+        /// Cache memory (KiB).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Cache
+        {
+            get
+            {
+                return Info.Cache;
+            }
+        }
+
+        /// <summary>
+        /// Swap memory (KiB).
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        public int Swap
+        {
+            get
+            {
+                return Info.Swap;
+            }
+        }
+
+        /// <summary>
+        /// Update the system memory information to the latest.
+        /// </summary>
+        /// <since_tizen> 4 </since_tizen>
+        /// <exception cref="IOException">Thrown when I/O error occurs while reading from the system.</exception>
+        public void Update()
+        {
+            InformationError ret = Interop.RuntimeInfo.GetSystemMemoryInfo(out Info);
+            if (ret != InformationError.None)
+            {
+                Log.Error(InformationErrorFactory.LogTag, "Interop failed to get System memory information");
+                InformationErrorFactory.ThrowException(ret);
+            }
+        }
+    }
+}
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
+