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]"
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' -- "$@"`
<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>
<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>
<!-- 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>
<Import Project="$(MSBuildThisFileDirectory)version.props" />
- <Import Project="$(MSBuildThisFileDirectory)dependencies.props" />
-
</Project>
+++ /dev/null
-<Project>
-
- <PropertyGroup>
- <SystemPackageVersion>4.3.0</SystemPackageVersion>
- </PropertyGroup>
-
-</Project>
\ No newline at end of file
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
<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>
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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
--- /dev/null
+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; }
+ }
+}
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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
{
IntPtr _nativeEventInfo;
- EvasEventFlag _eventFlags;
-
/// <summary>
/// BackButton name in Platform
/// </summary>
/// <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);
}
/// <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
{
/// </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
}
}
+ /// <summary>
+ /// It's a abstract property.
+ /// </summary>
public abstract GenItemSelectionMode SelectionMode { get; set; }
public abstract string Cursor { get; set; }
protected abstract void UpdateTooltipDelegate();
}
-}
\ No newline at end of file
+}
/// 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;
/// <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);
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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,
}
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
{
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)
}
/// <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()
{
/// <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)
}
/// <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 a 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)
}
/// <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)
}
/// <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.
}
/// <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 a specific sync job and remove it. </param>
/// <exception cref="ArgumentException"> Thrown if the input arugments is invalid. </exception>
public static void RemoveSyncJob(int id)
{
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; }
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// 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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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;
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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
/// <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.
/// <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
{
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
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;
}
/// <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
/// <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.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
internal static bool IsSupported(string key)
{
- if (SystemInfo.TryGetValue(key, out bool value))
+ if (Information.TryGetValue(key, out bool value))
{
return value;
}
{
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");
}
}
- 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
{
}
Interop.Content.CancelScanFolder(folderPath).ThrowIfError("Failed to cancel scanning");
- tcs.TrySetCanceled();
});
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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
{
/// <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
{
/// <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
{
/// <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
{
/// <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
{
/// 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>
/// </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
{
/// <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()
{
/// <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)
{
/// <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()
{
/// <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)
{
/// <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()
{
/// 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)
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
<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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/*
-* 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;
/// <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));
/// 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>
/// 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>
AudioIOUtil.ThrowIfError(AudioInput.Resume(_handle));
}
+
/// <summary>
/// Flushes and discards buffered audio data from the input stream.
/// </summary>
/// </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)
}
/// <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 a 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">
}
/// <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
/// <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">
/*
-* 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;
/*
-* 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;
{
Mono = 0x80,
Stereo
- };
+ }
internal enum AudioIOError
{
}
/// <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
{
}
/// <summary>
- /// Enumeration for audio sample type.
+ /// Specifies the audio sample types.
/// </summary>
public enum AudioSampleType
{
/// </summary>
S16Le
}
-
-}
+}
\ No newline at end of file
/*
-* 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
{
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 a policy or not.
/// </summary>
public bool ByPolicy { get; }
}
/*
-* 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;
/*
-* 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;
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
{
#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;
#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">
/// <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
/// <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));
}
/// <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()
{
/// <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);
/// 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()
{
/// 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()
{
}
/// <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()
{
}
/// <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()
{
}
/// <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);
/// <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>
/*
-* 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)
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; }
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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)
{
/// <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)
{
namespace Tizen.Multimedia
{
/// <summary>
- /// Enumeration for Audio Codec.
+ /// Specifies the audio codec.
/// </summary>
public enum ToneType
{
/// </summary>
Dtmf2,
/// <summary>
- /// redefined DTMF 3.
+ /// Predefined DTMF 3.
/// </summary>
Dtmf3,
/// <summary>
/// <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)
{
}
/// <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>
{
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),
#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)
}
/// <summary>
- /// Releases all resources used by the Camera.
+ /// Releases all resources used by the camera.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public void Dispose()
#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;
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>
}
/// <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;
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>
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
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
#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; }
/// </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
{
/// 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
}
/// <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
}
/// <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
/// <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
/// </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);
/// 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>
/// 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>
/// 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>
/// </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()
{
/// </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()
{
/// 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()
{
/// <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)
{
/// <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>
/// <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)
{
/// <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>
/// </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()
{
/// </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()
{
/// </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()
{
#endregion Callback registrations
}
}
-
/// <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; }
/// <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
/// <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
/// <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
/// <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
/// <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
/// <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);
/// <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);
/// <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
/// <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
}
/// <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
/// <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
}
/// <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
/// <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
/// <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
/// <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
}
/// <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
/// <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
}
/// <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
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
{
}
/// <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; }
}
}
-
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
{
}
/// <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; }
}
}
-
{
/// <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
{
/// </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
/// <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
/// <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
/// <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
/// 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
}
}
}
-
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
/// </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
/// </summary>
Rear,
/// <summary>
- /// Front direction
+ /// Front direction.
/// </summary>
Front
}
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
}
/// </summary>
Released,
/// <summary>
- /// Focus in progress
+ /// Focus in progress.
/// </summary>
Ongoing,
/// <summary>
- /// Focus succeeded
+ /// Focus succeeded.
/// </summary>
Focused,
/// <summary>
/// </summary>
Nv12,
/// <summary>
- /// NV12 Tiled pixel format.
+ /// NV12 tiled pixel format.
/// </summary>
Nv12t,
/// <summary>
/// </summary>
None,
/// <summary>
- /// Security policy
+ /// Security policy.
/// </summary>
Security = 4,
/// <summary>
- /// Resource conflict
+ /// Resource conflict.
/// </summary>
ResourceConflict
}
}
/// <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
}
/// </summary>
VintageWarm,
/// <summary>
- /// Vintage cold .
+ /// Vintage cold.
/// </summary>
VintageCold,
/// <summary>
/// </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
}
}
/// <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
}
}
/// <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
/// </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
/// </summary>
Sports,
/// <summary>
- /// Party & Indoor.
+ /// Party and indoor.
/// </summary>
PartyAndIndoor,
/// <summary>
- /// Beach & Indoor.
+ /// Beach and indoor.
/// </summary>
BeachAndIndoor,
/// <summary>
/// </summary>
Sunset,
/// <summary>
- /// Dusk & Dawn.
+ /// Dusk and dawn.
/// </summary>
DuskAndDawn,
/// <summary>
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
}
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
/// </summary>
LetterBox,
/// <summary>
- /// Origin size.
+ /// Original size.
/// </summary>
OriginSize,
/// <summary>
}
/// <summary>
- /// Enumeration for camera failure error.
+ /// Enumeration for the camera failure error.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public enum CameraErrorCode
}
/// <summary>
- /// Enumeration for Image datatype.
+ /// Enumeration for the image datatype.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public enum PlaneType
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
{
}
/// <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; }
}
}
-
{
}
}
-}
\ No newline at end of file
+}
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
{
}
/// <summary>
- /// Focus state of the camera.
+ /// Gets the focus state of the camera.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public CameraFocusState State { get; }
}
}
-
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
{
}
/// <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; }
}
}
-
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
{
}
/// <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; }
}
}
-
#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),
}
/// <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),
/// 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()),
/// </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
/// 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
/// 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
/// </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
/// 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
/// </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
/// 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
/// </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
/// </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
#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
/// </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
#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
/// 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
/// <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
/// 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
}
/// <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
/// </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
/// 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
/// 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
/// <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
#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
}
/// <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
/// 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
/// 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
/// 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
/// 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
/// 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
/// </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
/// 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
}
/// <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
/// <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
}
/// <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
/// 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),
#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
/// 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));
/// 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),
/// 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));
/// 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),
}
/// <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
}
/// <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
#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
/// 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
/// 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
}
/// <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
}
/// <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()),
/// 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
#endregion EXIF tag
}
}
-
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
{
}
/// <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; }
}
}
-
/// <since_tizen> 3 </since_tizen>
public byte[] UV { get; }
}
-}
\ No newline at end of file
+}
namespace Tizen.Multimedia
{
/// <summary>
- /// The class containing Encoded image data.
+ /// The class containing the encoded image data.
/// </summary>
public class EncodedPlane : IPreviewPlane
{
}
/// <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
+}
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
{
}
/// <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; }
}
}
-
}
/// <summary>
- /// The Id of each face.
+ /// The ID of each face.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public int Id { get; }
public int Height { get; }
}
}
-
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
{
}
/// <summary>
- /// Hdr Capture progress in percent.
+ /// Gets the HDR Capture progress in percent.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public int Percent { get; }
}
}
-
public interface IPreviewPlane
{
}
-}
\ No newline at end of file
+}
namespace Tizen.Multimedia
{
/// <summary>
- /// Location class containing GPS data details.
+ /// The location class containing GPS data details.
/// </summary>
public class Location
{
/// <summary>
- /// Public constructor.
+ /// The public constructor.
/// </summary>
- /// <param name="latitude">Latitude data</param>
- /// <param name="longitude">Longitude data</param>
- /// <param name="altitude">Altitude data</param>
+ /// <param name="latitude">The latitude data.</param>
+ /// <param name="longitude">The longitude data.</param>
+ /// <param name="altitude">The altitude data.</param>
public Location(double latitude, double longitude, double altitude)
{
Latitude = latitude;
}
/// <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; }
}
}
-
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
{
}
/// <summary>
- /// Media Packet data.
+ /// Gets the media packet data.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public MediaPacket Packet { get; }
}
}
-
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
{
}
/// <summary>
- /// PreviewData frame.
+ /// Gets the preview frame data.
/// </summary>
/// <since_tizen> 3 </since_tizen>
public PreviewFrame Preview { get; }
}
}
-
namespace Tizen.Multimedia
{
/// <summary>
- /// The class containing preview image data.
+ /// The class containing the preview image data.
/// </summary>
public class PreviewFrame
{
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
+}
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
{
/// <since_tizen> 3 </since_tizen>
public byte[] Data { get; }
}
-}
\ No newline at end of file
+}
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; }
/// <since_tizen> 3 </since_tizen>
public byte[] V { get; }
}
-}
\ No newline at end of file
+}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
}
/// <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; }
}
/// <summary>
- /// Gets the packet that the codec has processed.
+ /// Gets the packet processed by the codec.
/// </summary>
public MediaPacket Packet { get; }
}
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
{
private IntPtr _handle;
/// <summary>
- /// Initialize a new instance of the MediaCodec class.
+ /// Initializes a new instance of the MediaCodec class.
/// </summary>
public 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()
/// 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>
/// 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)
/// 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();
/// <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();
/// <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();
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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)
/// <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; }
{
/// <summary>
- /// Represents a equalizer band of <see cref="AudioEffect"/>.
+ /// Represents an equalizer band of <see cref="AudioEffect"/>.
/// </summary>
public class EqualizerBand
{
internal EqualizerBand(AudioEffect owner, int index)
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
Debug.Assert(owner != null);
_owner = owner;
{
get
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
_owner.Player.ValidateNotDisposed();
int value = 0;
}
set
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
_owner.Player.ValidateNotDisposed();
if (value < _owner.BandLevelRange.Min || _owner.BandLevelRange.Max < value)
/// <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; }
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">
}
/// <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
}
/// <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>
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);
}
}
/// <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"/>
/// 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
{
}
/// <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
{
{
/// <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)"/>
/// <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>
}
/// <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>
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>
}
/// <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"/>
}
/// <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;
/// 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 a 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>
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;
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;
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>
}
/// <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>
/// <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>
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
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
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>
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()
{
#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>
/// <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;
/// <exception cref="ArgumentNullException">The path is null.</exception>
public void SetSubtitle(string path)
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
ValidateNotDisposed();
if (path == null)
NativePlayer.SetSubtitlePath(Handle, path).
ThrowIfFailed("Failed to set the subtitle path to the player");
-
- Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
}
/// <summary>
/// <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>
}
err.ThrowIfFailed("Failed to the subtitle offset of the player");
- Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
}
private void Prepare()
/// <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.");
completionSource.TrySetException(e);
}
});
- Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
return completionSource.Task;
}
/// 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>
/// <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");
/// <seealso cref="ApplyAudioStreamPolicy"/>
public virtual void Start()
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
if (State == PlayerState.Playing)
{
Log.Warn(PlayerLog.Tag, "playing state already");
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.
/// <seealso cref="Pause"/>
public virtual void Stop()
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
if (State == PlayerState.Ready)
{
Log.Warn(PlayerLog.Tag, "ready state already");
ValidatePlayerState(PlayerState.Paused, PlayerState.Playing);
NativePlayer.Stop(Handle).ThrowIfFailed("Failed to stop the player");
- Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
}
/// <summary>
/// <seealso cref="Start"/>
public virtual void Pause()
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
if (State == PlayerState.Paused)
{
Log.Warn(PlayerLog.Tag, "pause state already");
ValidatePlayerState(PlayerState.Playing);
NativePlayer.Pause(Handle).ThrowIfFailed("Failed to pause the player");
- Log.Debug(PlayerLog.Tag, PlayerLog.Leave);
}
private MediaSource _source;
/// <seealso cref="PrepareAsync"/>
public void SetSource(MediaSource source)
{
- Log.Debug(PlayerLog.Tag, PlayerLog.Enter);
ValidatePlayerState(PlayerState.Idle);
if (source != null)
}
_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>
/// <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);
/// <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;
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.
/// <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>
/// <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>();
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>
/// </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)");
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>
/// <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
{
/// <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
/// <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
{
/// -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)
Paused,
/// <summary>
- /// Preparing in progress.
+ /// Preparation in progress.
/// </summary>
/// <seealso cref="Player.PrepareAsync"/>/>
Preparing,
}
/// <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
}
/// <summary>
- /// Specifies display modes for <see cref="Player"/>
+ /// Specifies display modes for <see cref="Player"/>.
/// </summary>
/// <seealso cref="PlayerDisplaySettings.Mode"/>
public enum PlayerDisplayMode
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
}
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
}
/// <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;
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"/>
/// 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()
{
}
/// <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
/// 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
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>
}
/// <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>
", 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>
}
/// <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);
}
/// <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);
/// 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);
}
/// <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);
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);
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());
}
/// </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);
}
/// <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; }
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// 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
/// 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)
/// </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
/// </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
/// </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
/// </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
/// </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
/// </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
/// </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
/// </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
/// </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
/// </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
/// 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;
/// </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
/// </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
/// -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)
/// 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)
/// 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)
{
/// 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
/// -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)
namespace Tizen.Multimedia
{
/// <summary>
- /// Enumeration for metadata extractor's error codes.
+ /// Enumeration for the metadata extractor's error codes.
/// </summary>
internal enum MetadataEditorError
{
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)
{
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; }
namespace Tizen.Multimedia
{
/// <summary>
- /// Represents video metadata information.
+ /// Represents the video metadata information.
/// </summary>
public class VideoMetadata
{
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>
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>
}
/// <summary>
- /// Represents audio metadata information.
+ /// Represents the audio metadata information.
/// </summary>
public class AudioMetadata
{
}
/// <summary>
- /// Represents metadata information of a media.
+ /// Represents the metadata information of a media.
/// </summary>
public class Metadata
{
*/
using System;
+using System.IO;
using System.Runtime.InteropServices;
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
{
/// 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)
/// 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)
/// 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()
{
/// 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()
{
/// </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)
{
/// </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()
{
}
}
- /// <summary>
- /// Metadata Extractor destructor
- /// </summary>
- /// <since_tizen> 3 </since_tizen>
~MetadataExtractor()
{
Dispose(false);
namespace Tizen.Multimedia
{
/// <summary>
- /// Enumeration for metadata extractor's error codes.
+ /// Enumeration for the metadata extractor's error codes.
/// </summary>
internal enum MetadataExtractorError
{
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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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);
}
/// <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;
}
/// <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
}
/// <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
{
}
/// <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.
}
/// <summary>
- /// Gets the channel spacing for current region.
+ /// Gets the channel spacing for the current region.
/// </summary>
public int ChannelSpacing
{
}
/// <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
{
}
/// <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>
}
/// <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>
/// </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>
/// </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>
private void ValidateFeatureSupported(string featurePath)
{
bool supported = false;
- SystemInfo.TryGetValue(featurePath, out supported);
+ Information.TryGetValue(featurePath, out supported);
if (supported == false)
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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;
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.
/// 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;
}
/// <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>
/// 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>
/// 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>
/// 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>
/// </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>
/// </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>
/// <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
{
#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
/// </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">
/// </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>
/// </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">
}
/// <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">
/// 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
/// 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
/// 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>
/// 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()
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
}
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
}
/// </summary>
Idle = 1,
/// <summary>
- /// Recorder is ready to record. In case of video recorder,
+ /// Recorder is ready to record. In case of a 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
}
}
/// <summary>
- /// Gets the policy that interrupted the recorder.
+ /// Gets the reason that interrupted the recorder.
/// </summary>
public RecorderPolicy Reason { get; }
/// </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>
}
/// <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>
/// 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>
}
/// <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.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
[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);
}
}
public static class MediaControlServer
{
private static IntPtr _handle = IntPtr.Zero;
+ private static bool? _isRunning;
/// <summary>
/// Gets a value indicating whether the server is running.
/// <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
{
}
/// <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>
/// <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>
/// </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.");
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
}
/// <summary>
- /// Gets the current state of screen mirroring.
+ /// Gets the current state of the screen mirroring.
/// </summary>
public ScreenMirroringState State { get; }
}
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
}
/// <summary>
- /// Specifies errors for <see cref="ScreenMirroring"/>.
+ /// Specifies the errors for <see cref="ScreenMirroring"/>.
/// </summary>
public enum ScreenMirroringError
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
--- /dev/null
+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));
+ }
+}
--- /dev/null
+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);
+ }
+}
--- /dev/null
+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);
+ }
+}
{
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;
+ }
+ }
}
}
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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");
+ }
+ }
+}
*/
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
}
}
--- /dev/null
+/*
+ * 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.");
+ }
+ }
+
+}
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; }
}
}
* 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.
/// <summary>
/// Enumeration for the file container format.
/// </summary>
- public enum StreamRecorderFileFormat
+ internal enum StreamRecorderFileFormat
{
/// <summary>
/// 3GP file format.
/// <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.
/// <summary>
/// Enumeration for source type.
/// </summary>
- public enum StreamRecorderSourceType
+ internal enum StreamRecorderSourceType
{
/// <summary>
/// Video source
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,
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);
}
}
}
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; }
+
}
}
+++ /dev/null
-/*
- * 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;
- }
- }
- }
-}
--- /dev/null
+/*
+ * 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);
+ }
+ }
+}
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; }
}
}
--- /dev/null
+/*
+ * 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.");
+ }
+ }
+
+}
+++ /dev/null
-/*
- * 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());
- }
- }
- }
- }
-}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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
{
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>
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,
}
/// <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">
/// 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)
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)
}
/// <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)
}
/// <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
{
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)
}
/// <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)
}
/// <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)
}
/// <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
{
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() :
}
/// <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>
}
/// <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
{
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)
/// <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>
}
/// <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)
{
}
/// <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();
}
/// <summary>
- /// Rotates or flips an image.
+ /// Rotates an image.
/// </summary>
/// <seealso cref="Rotation"/>
public class RotateTransform : ImageTransform
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>
/// <summary>
- /// Rotates or flips an image.
+ /// Flips an image.
/// </summary>
/// <seealso cref="Rotation"/>
public class FlipTransform : ImageTransform
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>
}
/// <summary>
- /// Changes colorspace of image.
+ /// Changes the colorspace of an image.
/// </summary>
/// <seealso cref="ColorSpace"/>
public class ColorSpaceTransform : ImageTransform
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>
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">
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">
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()
{
namespace Tizen.Multimedia.Util
{
/// <summary>
- /// Specifies JPEG Downscale options for decoding.
+ /// Specifies the JPEG Downscale options for decoding.
/// </summary>
public enum JpegDownscale
{
namespace Tizen.Multimedia.Util
{
/// <summary>
- /// Specifies PNG compression levels.
+ /// Specifies the PNG compression levels.
/// </summary>
public enum PngCompression
{
/*
-* 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
{
/*
-* 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;
/// </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)
{
/// <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)
{
/// <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)
/// <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,
/*
-* 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;
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
* limitations under the License.
*/
+using System;
+
namespace Tizen.Multimedia.Vision
{
/// <summary>
/// <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")
{
/// <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
{
* limitations under the License.
*/
+using System;
using Tizen.Common;
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")
{
/// <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
string featureType = _featurePath + type;
- bool ret = SystemInfo.TryGetValue(featureType, out isSupported);
+ bool ret = Information.TryGetValue(featureType, out isSupported);
return (isSupported && ret) ? true : false;
}
* limitations under the License.
*/
+using System;
+
namespace Tizen.Multimedia.Vision
{
/// <summary>
/// <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")
{
/// 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
{
/// 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>
/// 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>
/// <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)
{
* limitations under the License.
*/
+using System;
+
namespace Tizen.Multimedia.Vision
{
/// <summary>
/// <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")
{
/// 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>
/// 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>
/// <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)
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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
{
}
/// <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;
private static object _audioDeviceConnectionLock = new object();
/// <summary>
- /// Occurs when the state of connection of an audio device changes.
+ /// Occurs when the state of a connection of an audio device changes.
/// </summary>
public static event EventHandler<AudioDeviceConnectionChangedEventArgs> DeviceConnectionChanged
{
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>
}
/// <summary>
- /// Specifies audio device type.
+ /// Specifies the audio device types.
/// </summary>
public enum AudioDeviceType
{
/// </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>
/// </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
{
}
/// <summary>
- /// Specifies audio device state.
+ /// Specifies the audio device states.
/// </summary>
public enum AudioDeviceState
{
}
/// <summary>
- /// Specifies audio volume type.
+ /// Specifies the audio volume types.
/// </summary>
public enum AudioVolumeType
{
}
/// <summary>
- /// Specifies audio stream type.
+ /// Specifies the audio stream types.
/// </summary>
public enum AudioStreamType
{
}
/// <summary>
- /// Specifies change reason of audio stream focus state.
+ /// Specifies the change reasons of the audio stream focus state.
/// </summary>
public enum AudioStreamFocusChangedReason
{
}
/// <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>
}
/// <summary>
- /// Specifies audio stream focus state.
+ /// Specifies the audio stream focus states.
/// </summary>
public enum AudioStreamFocusState
{
}
/// <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>
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
{
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)
{
}
/// <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>
/*
-* 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;
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; }
namespace Tizen.Multimedia
{
-
/// <summary>
/// Provides a means to control volume levels.
/// </summary>
/// -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
internal static bool IsSupported(string featureKey)
{
bool supported = false;
- SystemInfo.TryGetValue(featureKey, out supported);
+ Information.TryGetValue(featureKey, out supported);
return supported;
}
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.");
}
}
}
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)
{
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
}
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
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,
}
{
/// <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
{
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
{
/// </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;
/// <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>
/// <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);
}
namespace Tizen.Multimedia
{
/// <summary>
- /// Represents a point in 2D space.
+ /// Represents a point in the 2D space.
/// </summary>
public struct Point
{
/// <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;
}
/// <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
{
}
/// <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
{
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>
}
/// <summary>
- /// Gets or sets minimum value of the range.
+ /// Gets or sets the minimum value of the range.
/// </summary>
public int Min
{
}
/// <summary>
- /// Gets or sets maximum value of the range.
+ /// Gets or sets the maximum value of the range.
/// </summary>
public int Max
{
}
/// <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;
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
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>
}
/// <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>
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>
}
/// <summary>
- /// Gets or sets the width of the Size.
+ /// Gets or sets the width.
/// </summary>
public int Width
{
}
/// <summary>
- /// Gets or sets the height of the Size.
+ /// Gets or sets the height.
/// </summary>
public int Height
{
/// <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>
/// <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)
/// <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>
/// <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)
}
/// <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)
}
/// <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)
{
}
/// <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!");
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; }
/// 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)
{
/// 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)
}
/// <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>
}
/// <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);
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
}
}
/// <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,
}
public enum MediaFormatAudioMimeType
{
/// <summary>
- /// AMR, Alias for <see cref="AmrNB"/>.
+ /// AMR, alias for <see cref="AmrNB"/>.
/// </summary>
Amr = (MediaFormatType.Audio | MediaFormatDataType.Encoded | 0x1040),
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),
H263P = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2021),
/// <summary>
- /// H264_SP
+ /// H264_SP.
/// </summary>
H264SP = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2030),
Mpeg4Asp = (MediaFormatType.Video | MediaFormatDataType.Encoded | 0x2071),
/// <summary>
- /// I420
+ /// I420.
/// </summary>
I420 = (MediaFormatType.Video | MediaFormatDataType.Raw | 0x2510),
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
{
namespace Tizen.Multimedia
{
/// <summary>
- /// Specifies text types.
+ /// Specifies the text types.
/// </summary>
public enum MediaFormatTextType
{
None,
/// <summary>
- /// The mp4 type.
+ /// MP4.
/// </summary>
MP4,
/// <summary>
- /// The 3gpp type.
+ /// 3GPP.
/// </summary>
ThreeGpp
}
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>
/// 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)
{
/// <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
/// <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
}
/// <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
/// 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
/// <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
{
/// 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
/// <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
/// 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()
{
}
/// <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()
/// <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()
{
/// <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
/// </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]
{
}
/// <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)
{
}
/// <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();
}
/// <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)
{
/// <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
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,
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
{
/// <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
/// <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
/// <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
/// <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)
{
}
/// <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)
{
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)
{
/// </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)
{
/// <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)
/// <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)
/// <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)
}
/// <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)
{
/// <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!");
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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<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'">
- public class Padding : global::System.IDisposable
+ public new class Padding : global::System.IDisposable
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
protected bool swigCMemOwn;
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();
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();
--- /dev/null
+/** 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();
+ }
+ }
+}
//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)
* (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
{
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));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
- }*/
-
-
+ }
/**
* Outer::outer_method(int)
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);
}
catch (System.Exception e)
{
+ NUILog.Error(e.Message);
throw new global::System.InvalidOperationException("Failed to parse " + fileName);
}
}
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();
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();
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();
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();
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
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();
}
}
- 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();
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();
[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();
[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);
[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);
}
}
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;
[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();
[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);
/// 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.
/// </summary>
public NUICoreBackend()
{
- _application = Application.NewApplication();
}
/// <summary>
/// </summary>
public NUICoreBackend(string stylesheet)
{
- _application = Application.NewApplication(stylesheet);
+ _stylesheet = stylesheet;
}
/// <summary>
/// </summary>
public NUICoreBackend(string stylesheet, NUIApplication.WindowMode windowMode)
{
- _application = Application.NewApplication(stylesheet, (Application.WindowMode)windowMode );
+ _stylesheet = stylesheet;
+ _windowMode = windowMode;
}
/// <summary>
/// </summary>
public void Dispose()
{
- _application.Dispose();
+ if(_application != null)
+ {
+ _application.Dispose();
+ }
}
/// <summary>
/// </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>
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;
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>
--- /dev/null
+/*
+ * 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;
+ }
+ }
+ }
+}
}
- public class Property : global::System.IDisposable
+ public new class Property : global::System.IDisposable
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
protected bool swigCMemOwn;
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();
/// <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();
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();
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();
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();
--- /dev/null
+/** 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;
+ }
+ }
+
+}
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;
}
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)
{
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;
--- /dev/null
+/** 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
+
+ }
+
+}
--- /dev/null
+/** 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();
+ }
+
+ }
+
+}
--- /dev/null
+/** 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();
+ }
+
+ }
+
+}
--- /dev/null
+/** 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();
+ }
+
+ }
+
+}
--- /dev/null
+/** 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();
+ }
+
+ }
+
+}
--- /dev/null
+/** 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();
+ }
+
+ }
+
+}
+++ /dev/null
-/** 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);
- }
- }
-}
+++ /dev/null
-// ==++==
-//
-// 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;
- }
- }
-}
}
+ if (_animationFinishedEventCallback != null)
+ {
+ FinishedSignal().Disconnect(_animationFinishedEventCallback);
+ }
+
+ if (_animationProgressReachedEventCallback != null)
+ {
+
+ ProgressReachedSignal().Disconnect(_animationProgressReachedEventCallback);
+ }
+
if(this)
{
this.Clear();
//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.
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());
}
}
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>
{
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>
/// 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();
}
/// 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);
}
/// </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);
}
/// </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);
}
}
- 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();
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();
/// 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)
//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)
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;
}
- 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();
}
- 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();
//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)
}
}
- 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();
}
switch (temp)
{
- case "WORD":
+ case "WRAP_MODE_WORD":
return LineWrapMode.Word;
- case "CHARACTER":
+ case "WRAP_MODE_CHARACTER":
return LineWrapMode.Character;
default:
return LineWrapMode.Word;
{
case LineWrapMode.Word:
{
- temp = "WORD";
+ temp = "WRAP_MODE_WORD";
break;
}
case LineWrapMode.Character:
{
- temp = "CHARACTER";
+ temp = "WRAP_MODE_CHARACTER";
break;
}
}
//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)
}
- 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();
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();
}
/// <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
}
switch (temp)
{
- case "WORD":
+ case "WRAP_MODE_WORD":
return LineWrapMode.Word;
- case "CHARACTER":
+ case "WRAP_MODE_CHARACTER":
return LineWrapMode.Character;
default:
return LineWrapMode.Word;
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));
- }
- }
-
}
}
//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)
}
}
- 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();
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;
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)
{
//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)
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);
/// <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();
{
View view = null;
- if (Parent)
+ if (Parent is View)
{
- view = Parent.FindChildById(id);
+ View parentView = Parent as View;
+ view = parentView.FindChildById(id);
}
if (!view)
}
}
- /// <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
{
}
/// <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>
}
/// <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>
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));
}
}
+ [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;
+ }
+ }
+
+
CustomViewRegistry.Instance.Register(CreateInstance, typeof(VisualView));
}
- public VisualView() : base(typeof(VisualView).Name, CustomViewBehaviour.ViewBehaviourDefault)
+ public VisualView() : base(typeof(VisualView).FullName, CustomViewBehaviour.ViewBehaviourDefault)
{
}
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)
{
// 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)
{
return ret;
}
+ internal global::System.Runtime.InteropServices.HandleRef GetBaseHandleCPtrHandleRef
+ {
+ get
+ {
+ return swigCPtr;
+ }
+ }
+
}
}
--- /dev/null
+/** 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
else
{
throw new global::System.InvalidOperationException("C# View not registererd with ViewRegistry" + controlName);
- return IntPtr.Zero;
}
}
//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)
{
_focusedViewEnterKeyEventHandler -= value;
- if (_focusedViewEnterKeyEventCallback == null && FocusedViewEnterKeySignal().Empty() == false)
+ if (_focusedViewEnterKeyEventCallback != null && FocusedViewEnterKeySignal().Empty() == false)
{
FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback);
}
{
_focusedViewEnterKeyEventHandler2 -= value;
- if (_focusedViewEnterKeyEventCallback2 == null && FocusedViewEnterKeySignal().Empty() == false)
+ if (_focusedViewEnterKeyEventCallback2 != null && FocusedViewEnterKeySignal().Empty() == false)
{
FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback2);
}
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();
//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)
{
/// 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();
/// <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;
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)
[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();
/// </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)
{
}
/// <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>
}
/// <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
if (NDalicPINVOKE.SWIGPendingException.Pending)
throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
+
}
}
}
/// <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
/// <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.
--- /dev/null
+/*
+ * 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();
+ }
+ }
+ }
+}
[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();
/// 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();
//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)
//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)
//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)
//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)
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)]
}
}
- 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();
//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)
}
}
- 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();
//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)
}
}
- 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();
}
- 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();
}
}
[Obsolete("Please do not use! this will be deprecated")]
- public Vector4 LabelPadding
+ public new Vector4 LabelPadding
{
get
{
//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)
}
- 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();
//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)
}
- 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();
//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)
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;
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();
_visualSize = value;
if (_visualSizePolicy == null)
{
- _visualSizePolicy = new Vector2(0.0f, 0.0f);
+ _visualSizePolicy = new Vector2(1.0f, 1.0f);
}
UpdateVisual();
}
_visualOffset = value;
if (_visualOffsetPolicy == null)
{
- _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
+ _visualOffsetPolicy = new Vector2(1.0f, 1.0f);
}
UpdateVisual();
}
/// Applies to ALL shapes.<br>
/// Optional.
/// </summary>
- public Color MixColor
+ public new Color MixColor
{
get
{
--- /dev/null
+/** 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
+ }
+ }
+}
--- /dev/null
+/** 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();
+ }
+ }
+}
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();
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)
{
//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)
/// <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>
}
}
+ /// <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);
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();
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();
}
}
+ public static void FeedKeyEvent(Key keyEvent)
+ {
+ NDalicManualPINVOKE.Window_FeedKeyEvent(Key.getCPtr(keyEvent));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
{
get
{
- return BluetoothAdapterImpl.Instance.IsBluetoothEnabled;
+ try
+ {
+ return BluetoothAdapterImpl.Instance.IsBluetoothEnabled;
+ }
+ catch (TypeInitializationException e)
+ {
+ throw e.InnerException;
+ }
}
}
}
set
{
- BluetoothAdapterImpl.Instance.Name = value;
+ try
+ {
+ BluetoothAdapterImpl.Instance.Name = value;
+ }
+ catch (TypeInitializationException e)
+ {
+ throw e.InnerException;
+ }
}
}
/// <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;
+ }
}
}
/// <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>
if (ret != (int)BluetoothError.None)
{
Log.Error (Globals.LogTag, "Failed to deinitialize bluetooth, Error - " + (BluetoothError)ret);
- BluetoothErrorFactory.ThrowBluetoothException (ret);
}
else
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <summary>
/// Default constructor. Initializes an object of the CellularAuthInformation.
/// </summary>
+ /// <since_tizen> 3 </since_tizen>
public CellularAuthInformation()
{
}
/// <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>
/// <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>
/// <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; }
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
ResourceFoundEventArgs e = new ResourceFoundEventArgs()
{
RequestId = requestId,
+ EventContinue = true,
Resource = resource
};
ResourceFound?.Invoke(null, e);
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,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
{
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)
{
{
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)
{
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)
{
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)
{
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)
{
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)
{
{
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)
{
{
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)
{
{
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)
{
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)
{
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)
{
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)
{
{
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)
{
{
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)
{
{
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)
{
{
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)
{
{
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)
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// </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)
/// </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>
/// 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()
/// <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)
/// 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>
/// 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>
/// <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>
/// </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>
/// 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>
/// 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()
* limitations under the License.
*/
+using System;
+
namespace Tizen.Network.Nsd
{
/// <summary>
/// </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>
/// 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();
/// </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>
/// 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();
</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>
/// </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)
/// 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()
/// </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>
/// </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)
/// 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>
/// 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>
/// </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>
/// 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()
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
}
/// <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>
/// <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>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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>
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()
/// 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>
--- /dev/null
+/*
+* 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;
+ }
+ }
+}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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
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;
}
/// <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);
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
internal static SensorEventStruct IntPtrToEventStruct(IntPtr unmanagedVariable)
{
- SensorEventStruct outStruct = (SensorEventStruct)Marshal.PtrToStructure(unmanagedVariable, typeof(SensorEventStruct));
+ SensorEventStruct outStruct = (SensorEventStruct)Marshal.PtrToStructure<SensorEventStruct>(unmanagedVariable);
return outStruct;
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// <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.
/// <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.
/// <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.
}
/// <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>
}
/// <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>
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)
{
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
--- /dev/null
+/*
+* 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);
+ }
+ }
+}
namespace Tizen.System
{
[EditorBrowsable(EditorBrowsableState.Never)]
- internal enum RuntimeInfoError
+ internal enum InformationError
{
None = ErrorCode.None,
InvalidParameter = ErrorCode.InvalidParameter,
}
[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");
}
{
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
}
[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);
}
}
* 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,
}
[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);
}
}
+++ /dev/null
-/*
-* 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; }
- }
-}
* 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.
Bluetooth = 2,
/// <summary>
/// Indicates whether Wi-Fi hotspot is enabled.
- /// <see cref="WifiStatus"/>
/// </summary>
WifiHotspot = 3,
/// <summary>
}
/// <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
+++ /dev/null
-/*
-* 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; }
}
}
--- /dev/null
+/*
+* 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;
+ }
+ }
+}
--- /dev/null
+/*
+* 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);
+ }
+ }
+}
+++ /dev/null
-/*
-* 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);
- }
- }
- }
- }
- }
-}
--- /dev/null
+/*
+* 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;
+ }
+ }
+ }
+}
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);
/// <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;
/// <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))
/// <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);
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;
}
/// <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);
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;
}
/// <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);
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;
}
/// <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);
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;
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
--- /dev/null
+/*
+* 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>();
+ }
+ }
+ }
+}
--- /dev/null
+/*
+* 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>();
+ }
+ }
+ }
+}
--- /dev/null
+/*
+* 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);
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+* 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);
+ }
+ }
+ }
+}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// 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()
/// {
/// 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()
/// {
/// 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()
/// {
/// 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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
/// 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 ();
/// </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);
/// </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);
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
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()
}
/// <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()
/// </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;
/// </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>
/// </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;
/// <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)
namespace Tizen.WebView
{
+ /// <summary>
+ /// This class provides properties for setting the preference of a specific WebView.
+ /// </summary>
public class Settings
{
private IntPtr _handle;
/// </summary>
Canceled,
/// <summary>
- /// Can't show page for this MIME Type
+ /// Can't show page for this MIME Type.
/// </summary>
CantSupportMimetype,
/// <summary>
/// </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>
/// </summary>
Authentication,
/// <summary>
- /// Web server has internal server error
+ /// Web server has internal server error.
/// </summary>
InternalServer,
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
<!-- Property Group for .NET Core Project -->
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>netcoreapp1.1</TargetFramework>
+ <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<!-- Property Group for Tizen Project -->
<!-- Property Group for .NET Core Project -->
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>netcoreapp1.1</TargetFramework>
+ <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<!-- Property Group for Tizen Project -->
--- /dev/null
+/*
+ * 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;
+ }
+ }
+}
--- /dev/null
+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!!!!!!!");
+ };
+ }
+ }
+}
--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+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!!!!!!!");
+ };
+ }
+ }
+}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>netstandard1.6</TargetFramework>
+ <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
--- /dev/null
+#!/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
--- /dev/null
+#!/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
+