[MediaContent] Deprecate unused APIs (#5473)
[platform/core/csapi/tizenfx.git] / src / Tizen.Content.MediaContent / Tizen.Content.MediaContent / MediaInfoCommand.cs
index f74d8b1..ef0303e 100644 (file)
@@ -18,22 +18,26 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Runtime.InteropServices;
 using System.Threading;
 using System.Threading.Tasks;
+using Tizen.System;
 
 namespace Tizen.Content.MediaContent
 {
     /// <summary>
-    /// Provides commands to manage media info and query related items in the database.
+    /// Provides commands to manage the media information and query related items in the database.
     /// </summary>
+    /// <since_tizen> 4 </since_tizen>
     public class MediaInfoCommand : MediaCommand
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="FolderCommand"/> class with the specified <see cref="MediaDatabase"/>.
         /// </summary>
-        /// <param name="database">A <see cref="MediaDatabase"/> that the commands run on.</param>
+        /// <param name="database">The <see cref="MediaDatabase"/> that the commands run on.</param>
         /// <exception cref="ArgumentNullException"><paramref name="database"/> is null.</exception>
-        /// <exception cref="ObjectDisposedException"><paramref name="database"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException"><paramref name="database"/> has already been disposed.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaInfoCommand(MediaDatabase database) : base(database)
         {
         }
@@ -41,29 +45,31 @@ namespace Tizen.Content.MediaContent
         /// <summary>
         /// Retrieves the number of the bookmarks added to the media.
         /// </summary>
-        /// <param name="mediaId">The media id to count bookmarks added to the media.</param>
-        /// <returns>The number of bookmarks.</returns>
+        /// <param name="mediaId">The media ID to count the bookmarks added to the media.</param>
+        /// <returns>The number of the bookmarks.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountBookmark(string mediaId)
         {
             return CountBookmark(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the number of the bookmarks added to the media with <see cref="CountArguments"/>.
+        /// Retrieves the number of the bookmarks added to the media with the <see cref="CountArguments"/>.
         /// </summary>
-        /// <param name="mediaId">The media id to count bookmarks added to the media.</param>
+        /// <param name="mediaId">The media ID to count the bookmarks added to the media.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
-        /// <returns>The number of bookmarks.</returns>
+        /// <returns>The number of the bookmarks.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountBookmark(string mediaId, CountArguments arguments)
         {
             ValidateDatabase();
@@ -76,29 +82,31 @@ namespace Tizen.Content.MediaContent
         /// <summary>
         /// Retrieves the bookmarks added to the media.
         /// </summary>
-        /// <param name="mediaId">The media id to select bookmarks added to the media.</param>
+        /// <param name="mediaId">The media ID to select the bookmarks added to the media.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<Bookmark> SelectBookmark(string mediaId)
         {
             return SelectBookmark(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the bookmarks added to the media with <see cref="SelectArguments"/>.
+        /// Retrieves the bookmarks added to the media with the <see cref="SelectArguments"/>.
         /// </summary>
-        /// <param name="mediaId">The media id to select bookmarks added to the media.</param>
+        /// <param name="mediaId">The media ID to select the bookmarks added to the media.</param>
         /// <param name="filter">The criteria to use to filter. This value can be null.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<Bookmark> SelectBookmark(string mediaId, SelectArguments filter)
         {
             ValidateDatabase();
@@ -109,33 +117,35 @@ namespace Tizen.Content.MediaContent
                 Bookmark.FromHandle);
         }
 
-
         /// <summary>
-        /// Retrieves the number of the face info added to or detected from the media.
+        /// Retrieves the number of the face information added to or detected from the media.
         /// </summary>
-        /// <param name="mediaId">The media id to count face info added to the media.</param>
-        /// <returns>The number of face info.</returns>
+        /// <param name="mediaId">The media ID to count face information added to the media.</param>
+        /// <returns>The number of the face information.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountFaceInfo(string mediaId)
         {
             return CountFaceInfo(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the number of the face info added to or detected from the media with filter.
+        /// Retrieves the number of the face information added to or detected from the media with filter.
         /// </summary>
-        /// <param name="mediaId">The media id to count face info added to the media.</param>
+        /// <param name="mediaId">The media ID to count the face information added to the media.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
-        /// <returns>The number of face info.</returns>
+        /// <returns>The number of the face information.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API11; Will be removed in API13.")]
         public int CountFaceInfo(string mediaId, CountArguments arguments)
         {
             ValidateDatabase();
@@ -146,31 +156,35 @@ namespace Tizen.Content.MediaContent
         }
 
         /// <summary>
-        /// Retrieves the face info added to or detected from the media.
+        /// Retrieves the face information added to or detected from the media.
         /// </summary>
-        /// <param name="mediaId">The media id to select face info added to the media.</param>
+        /// <param name="mediaId">The media ID to select face information added to the media.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API11; Will be removed in API13.")]
         public MediaDataReader<FaceInfo> SelectFaceInfo(string mediaId)
         {
             return SelectFaceInfo(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the face info added to or detected from the media with <see cref="SelectArguments"/>.
+        /// Retrieves the face information added to or detected from the media with the <see cref="SelectArguments"/>.
         /// </summary>
-        /// <param name="mediaId">The media id to select face info added to the media.</param>
+        /// <param name="mediaId">The media ID to select the face information added to the media.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API11; Will be removed in API13.")]
         public MediaDataReader<FaceInfo> SelectFaceInfo(string mediaId, SelectArguments arguments)
         {
             ValidateDatabase();
@@ -185,28 +199,30 @@ namespace Tizen.Content.MediaContent
         /// Retrieves the number of tags that the media has.
         /// </summary>
         /// <returns>The number of tags.</returns>
-        /// <param name="mediaId">The media id to count tags added to the media.</param>
+        /// <param name="mediaId">The media ID to count tags added to the media.</param>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountTag(string mediaId)
         {
             return CountTag(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the number of tags that the media has with <see cref="CountArguments"/>.
+        /// Retrieves the number of tags that the media has with the <see cref="CountArguments"/>.
         /// </summary>
-        /// <param name="mediaId">The media id to count tags added to the media.</param>
+        /// <param name="mediaId">The media ID to count tags added to the media.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
         /// <returns>The number of tags.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountTag(string mediaId, CountArguments arguments)
         {
             ValidateDatabase();
@@ -219,29 +235,31 @@ namespace Tizen.Content.MediaContent
         /// <summary>
         /// Retrieves the tags that the media has.
         /// </summary>
-        /// <param name="mediaId">The media id to select tags added to the media.</param>
+        /// <param name="mediaId">The media ID to select tags added to the media.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<Tag> SelectTag(string mediaId)
         {
             return SelectTag(mediaId, null);
         }
 
         /// <summary>
-        /// Retrieves the tags that the media has with <see cref="SelectArguments"/>.
+        /// Retrieves the tags that the media has with the <see cref="SelectArguments"/>.
         /// </summary>
-        /// <param name="mediaId">The media id to select tags added to the media.</param>
+        /// <param name="mediaId">The media ID to select tags added to the media.</param>
         /// <param name="filter">The criteria to use to filter. This value can be null.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<Tag> SelectTag(string mediaId, SelectArguments filter)
         {
             ValidateDatabase();
@@ -252,27 +270,28 @@ namespace Tizen.Content.MediaContent
                 Tag.FromHandle);
         }
 
-
         /// <summary>
-        /// Retrieves the number of the media info.
+        /// Retrieves the number of the media information.
         /// </summary>
-        /// <returns>The number of media info.</returns>
+        /// <returns>The number of the media information.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountMedia()
         {
             return CountMedia(null);
         }
 
         /// <summary>
-        /// Retrieves the number of the media info with <see cref="SelectArguments"/>.
+        /// Retrieves the number of the media information with the <see cref="SelectArguments"/>.
         /// </summary>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
-        /// <returns>The number of media info.</returns>
+        /// <returns>The number of media information.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountMedia(CountArguments arguments)
         {
             ValidateDatabase();
@@ -283,13 +302,14 @@ namespace Tizen.Content.MediaContent
         /// <summary>
         /// Retrieves the media.
         /// </summary>
-        /// <param name="mediaId">The media id to retrieve.</param>
+        /// <param name="mediaId">The media ID to retrieve.</param>
         /// <returns>The <see cref="MediaInfo"/> instance if the matched record was found in the database, otherwise null.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaInfo SelectMedia(string mediaId)
         {
             ValidateDatabase();
@@ -310,29 +330,31 @@ namespace Tizen.Content.MediaContent
         }
 
         /// <summary>
-        /// Retrieves the number of values grouped by the specified column with <see cref="SelectArguments"/>.
+        /// Retrieves the number of values grouped by the specified column with the <see cref="SelectArguments"/>.
         /// </summary>
         /// <param name="columnKey">The column key.</param>
         /// <returns>The number of groups.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentException"><paramref name="columnKey"/> is invalid.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountGroupBy(MediaInfoColumnKey columnKey)
         {
             return CountGroupBy(columnKey, null);
         }
 
         /// <summary>
-        /// Retrieves the number of values grouped by the specified column with <see cref="SelectArguments"/>.
+        /// Retrieves the number of values grouped by the specified column with the <see cref="SelectArguments"/>.
         /// </summary>
         /// <param name="columnKey">The column key.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
         /// <returns>The number of groups.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentException"><paramref name="columnKey"/> is invalid.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public int CountGroupBy(MediaInfoColumnKey columnKey, CountArguments arguments)
         {
             ValidateDatabase();
@@ -352,24 +374,26 @@ namespace Tizen.Content.MediaContent
         /// <param name="columnKey">The column key.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentException"><paramref name="columnKey"/> is invalid.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<string> SelectGroupBy(MediaInfoColumnKey columnKey)
         {
             return SelectGroupBy(columnKey, null);
         }
 
         /// <summary>
-        /// Retrieves the group values of the specified column. with <see cref="SelectArguments"/>.
+        /// Retrieves the group values of the specified column with the <see cref="SelectArguments"/>.
         /// </summary>
         /// <param name="columnKey">The column key.</param>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentException"><paramref name="columnKey"/> is invalid.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<string> SelectGroupBy(MediaInfoColumnKey columnKey, SelectArguments arguments)
         {
             ValidateDatabase();
@@ -396,21 +420,23 @@ namespace Tizen.Content.MediaContent
         /// </summary>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<MediaInfo> SelectMedia()
         {
             return SelectMedia(arguments: null);
         }
 
         /// <summary>
-        /// Retrieves the media with <see cref="SelectArguments"/>.
+        /// Retrieves the media with the <see cref="SelectArguments"/>.
         /// </summary>
         /// <param name="arguments">The criteria to use to filter. This value can be null.</param>
         /// <returns>The <see cref="MediaDataReader{TRecord}"/> containing the results.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaDataReader<MediaInfo> SelectMedia(SelectArguments arguments)
         {
             ValidateDatabase();
@@ -450,18 +476,75 @@ namespace Tizen.Content.MediaContent
         }
 
         /// <summary>
-        /// Deletes a media from the database.
+        /// Retrieves all matched ebook paths with given <paramref name="keyword"/>.
+        /// </summary>
+        /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
+        /// <param name="keyword">The keyword to search.</param>
+        /// <returns>A list of ebook paths which contain <paramref name="keyword"/>.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="keyword"/> is null.</exception>
+        /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
+        /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <since_tizen> 9 </since_tizen>
+        public MediaDataReader<string> SelectEbookPath(string keyword)
+        {
+            ValidateDatabase();
+
+            IntPtr path = IntPtr.Zero;
+            uint length = 0;
+
+            ValidationUtil.ValidateNotNullOrEmpty(keyword, nameof(keyword));
+
+            try
+            {
+                Interop.BookInfo.GetPathByKeyword(keyword, out path, out length).
+                    ThrowIfError("Failed to get path by keyword");
+
+                var list = new List<string>();
+                var current = path;
+                for (int i = 0; i < length; i++)
+                {
+                    list.Add(Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(current)));
+                    current = (IntPtr)((long)current + Marshal.SizeOf(typeof(IntPtr)));
+                }
+
+                return new MediaDataReader<string>(list);
+            }
+            finally
+            {
+                var current = path;
+                for (int i = 0; i < length; i++)
+                {
+                    Interop.Libc.Free(Marshal.ReadIntPtr(current));
+                    current = (IntPtr)((long)current + Marshal.SizeOf(typeof(IntPtr)));
+                }
+            }
+        }
+
+        /// <summary>
+        /// Deletes the media from the database.
         /// </summary>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
-        /// <param name="mediaId">The media id to delete.</param>
+        /// <param name="mediaId">The media ID to delete.</param>
         /// <returns>true if the matched record was found and deleted, otherwise false.</returns>
-        /// <remarks><see cref="MediaDatabase.ScanFile(string)"/> or <see cref="MediaDatabase.ScanFolderAsync(string)"/> can be used instead.</remarks>
-        /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <remarks>
+        /// The <see cref="MediaDatabase.ScanFile(string)"/> or the <see cref="MediaDatabase.ScanFolderAsync(string)"/> can be used instead.<br/>
+        /// Since API level 6, if the file related with the <paramref name="mediaId"/> in DB still exists in file system before calling this method,
+        /// <see cref="InvalidOperationException"/> will be thrown to keep consistency in DB.
+        /// </remarks>
+        /// <exception cref="InvalidOperationException">
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
+        ///     The file related with the <paramref name="mediaId"/> in DB still exists in file system. (Since API level 6)
+        /// </exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public bool Delete(string mediaId)
         {
             ValidateDatabase();
@@ -474,39 +557,58 @@ namespace Tizen.Content.MediaContent
                 return false;
             }
 
-            CommandHelper.Delete(Interop.MediaInfo.Delete, mediaId);
+            Interop.MediaInfo.GetMediaFromDB(mediaId, out var handle).
+                ThrowIfError("Failed to delete MediaInfo.");
+
+            var path = InteropHelper.GetString(handle, Interop.MediaInfo.GetFilePath);
+
+            // If we don't check file existence before calling `ScanFile` method,
+            // The inconsistency between DB and file system could be occurred.
+            if (File.Exists(path))
+            {
+                throw new InvalidOperationException("File still exists in file system. Remove it first.");
+            }
+
+            // Native 'delete' function was deprecated, so we need to use 'scan file' function instead of it.
+            Database.ScanFile(path);
+
             return true;
         }
 
         /// <summary>
-        /// Adds media to the database.
+        /// Adds the media to the database.
         /// </summary>
         /// <param name="path">The file path to add.</param>
         /// <returns>The <see cref="MediaInfo"/> instance that contains the record information in the database.</returns>
         /// <remarks>
-        ///     If the media already exists in the database, it returns existing information.\n
-        ///     \n
-        ///     <see cref="MediaDatabase.ScanFile(string)"/> or <see cref="MediaDatabase.ScanFolderAsync(string)"/> can be used instead.\n
-        ///     \n
-        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.\n
-        ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.
+        ///     If the media already exists in the database, it returns the existing information.<br/>
+        ///     <br/>
+        ///     The <see cref="MediaDatabase.ScanFile(string)"/> or the <see cref="MediaDatabase.ScanFolderAsync(string)"/> can be used instead.<br/>
+        ///     <br/>
+        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.<br/>
+        ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.<br/>
+        ///     <br/>
+        ///     If http://tizen.org/feature/content.scanning.others feature is not supported and the specified file is other-type,
+        ///     <see cref="NotSupportedException"/> will be thrown.
         /// </remarks>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
         /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
         /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
         /// <exception cref="ArgumentException">
-        ///     <paramref name="path"/> is a zero-length string, contains only white space.\n
-        ///     -or-\n
-        ///     <paramref name="path"/> contains a hidden path that starts with '.'.\n
-        ///     -or-\n
+        ///     <paramref name="path"/> is a zero-length string, contains only white space.<br/>
+        ///     -or-<br/>
+        ///     <paramref name="path"/> contains a hidden path that starts with '.'.<br/>
+        ///     -or-<br/>
         ///     <paramref name="path"/> contains a directory containing the ".scan_ignore" file.
         /// </exception>
         /// <exception cref="FileNotFoundException"><paramref name="path"/> does not exists.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public MediaInfo Add(string path)
         {
             ValidateDatabase();
@@ -571,11 +673,14 @@ namespace Tizen.Content.MediaContent
         /// Adds media files into the media database.
         /// </summary>
         /// <remarks>
-        ///     The paths that already exist in the database will be ignored.\n
-        ///     At most 300 items can be added at once.\n
-        ///     \n
-        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.\n
-        ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.
+        ///     The paths that already exist in the database will be ignored.<br/>
+        ///     At most 300 items can be added at once.<br/>
+        ///     <br/>
+        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.<br/>
+        ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.<br/>
+        ///     <br/>
+        ///     If http://tizen.org/feature/content.scanning.others feature is not supported and the specified file is other-type,
+        ///     <see cref="NotSupportedException"/> will be thrown.
         /// </remarks>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
         /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
@@ -583,18 +688,20 @@ namespace Tizen.Content.MediaContent
         /// <param name="paths">The paths of the media files to add.</param>
         /// <returns>A task that represents the asynchronous add operation.</returns>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="paths"/> is null.</exception>
         /// <exception cref="ArgumentException">
-        ///     <paramref name="paths"/> contains null.\n
-        ///     -or-\n
-        ///     <paramref name="paths"/> contains invalid path.\n
-        ///     -or-\n
+        ///     <paramref name="paths"/> contains null.<br/>
+        ///     -or-<br/>
+        ///     <paramref name="paths"/> contains the invalid path.<br/>
+        ///     -or-<br/>
         ///     The number of <paramref name="paths"/> is 300 or more items.
         /// </exception>
         /// <exception cref="FileNotFoundException"><paramref name="paths"/> contains a path that does not exist.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public async Task AddAsync(IEnumerable<string> paths)
         {
             ValidateDatabase();
@@ -602,7 +709,7 @@ namespace Tizen.Content.MediaContent
             ValidatePaths(paths);
 
             var pathArray = paths.ToArray();
-            var tcs = new TaskCompletionSource<bool>();
+            var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
 
             Interop.MediaInfo.InsertCompletedCallback callback = (error, _) =>
             {
@@ -625,111 +732,25 @@ namespace Tizen.Content.MediaContent
         }
 
         /// <summary>
-        /// Adds burst shot images into the media database.
+        /// Updates the media with the favorite value.
         /// </summary>
-        /// <param name="paths">The paths of the burst shot images to add.</param>
-        /// <returns>A task that represents the asynchronous add operation.</returns>
-        /// <remarks>
-        ///     The paths that already exist in the database.\n
-        ///     At most 300 items can be added at once.
-        ///     \n
-        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.\n
-        ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.
-        /// </remarks>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
-        /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
-        /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
-        /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
-        /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
-        /// <exception cref="ArgumentNullException"><paramref name="paths"/> is null.</exception>
-        /// <exception cref="ArgumentException">
-        ///     <paramref name="paths"/> contains null.\n
-        ///     -or-\n
-        ///     <paramref name="paths"/> contains invalid path.\n
-        ///     -or-\n
-        ///     The number of <paramref name="paths"/> is 300 or more items.
-        /// </exception>
-        /// <exception cref="FileNotFoundException"><paramref name="paths"/> contains a path that does not exist.</exception>
-        /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
-        public async Task AddBurstShotImagesAsync(IEnumerable<string> paths)
-        {
-            ValidateDatabase();
-
-            ValidatePaths(paths);
-
-            var tcs = new TaskCompletionSource<bool>();
-            string[] pathArray = paths.ToArray();
-
-            Interop.MediaInfo.InsertBurstShotCompletedCallback callback = (error, _) =>
-            {
-                if (error == MediaContentError.None)
-                {
-                    tcs.TrySetResult(true);
-                }
-                else
-                {
-                    tcs.TrySetException(error.AsException("Failed to add burst shot images"));
-                }
-            };
-
-            using (ObjectKeeper.Get(callback))
-            {
-                Interop.MediaInfo.BurstShotInsert(pathArray, pathArray.Length, callback).
-                    ThrowIfError("Failed to add burst shots to db");
-
-                await tcs.Task;
-            }
-        }
-
-        private static void SetUpdateValue<T>(Interop.MediaInfoHandle handle, T value,
-            Func<Interop.MediaInfoHandle, T, MediaContentError> func)
-        {
-            if (value != null)
-            {
-                func(handle, value).ThrowIfError("Failed to update");
-            }
-        }
-
-
-        private static void SetUpdateValue<T>(Interop.MediaInfoHandle handle, Nullable<T> value,
-            Func<Interop.MediaInfoHandle, T, MediaContentError> func) where T : struct
-        {
-            if (value.HasValue)
-            {
-                func(handle, value.Value).ThrowIfError("Failed to update");
-            }
-        }
-
-        /// <summary>
-        /// Updates a media with the specified values.
-        /// </summary>
-        /// <privilege>http://tizen.org/privilege/content.write</privilege>
-        /// <param name="mediaId">The media id to update.</param>
-        /// <param name="values">The values for update.</param>
+        /// <param name="mediaId">The media ID to update.</param>
+        /// <param name="value">The value indicating whether the media is favorite.</param>
         /// <returns>true if the matched record was found and updated, otherwise false.</returns>
-        /// <remarks>Only values set in <see cref="MediaInfoUpdateValues"/> are updated.</remarks>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
-        /// <exception cref="ArgumentNullException">
-        ///     <paramref name="mediaId"/> is null.\n
-        ///     -or-\n
-        ///     <paramref name="values"/> is null.
-        /// </exception>
+        /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="ArgumentException"><paramref name="mediaId"/> is a zero-length string, contains only white space.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
-        public bool Update(string mediaId, MediaInfoUpdateValues values)
+        /// <since_tizen> 4 </since_tizen>
+        public bool UpdateFavorite(string mediaId, bool value)
         {
             ValidateDatabase();
 
             ValidationUtil.ValidateNotNullOrEmpty(mediaId, nameof(mediaId));
 
-            if (values == null)
-            {
-                throw new ArgumentNullException(nameof(values));
-            }
-
             if (CommandHelper.Count(
                 Interop.MediaInfo.GetMediaCount, $"{MediaInfoColumns.Id}='{mediaId}'") == 0)
             {
@@ -745,12 +766,7 @@ namespace Tizen.Content.MediaContent
 
             try
             {
-                SetUpdateValue(handle, values.Weather, Interop.MediaInfo.SetWeather);
-                SetUpdateValue(handle, values.IsFavorite, Interop.MediaInfo.SetFavorite);
-                SetUpdateValue(handle, values.Provider, Interop.MediaInfo.SetProvider);
-                SetUpdateValue(handle, values.Category, Interop.MediaInfo.SetCategory);
-                SetUpdateValue(handle, values.LocationTag, Interop.MediaInfo.SetLocationTag);
-                SetUpdateValue(handle, values.AgeRating, Interop.MediaInfo.SetAgeRating);
+                Interop.MediaInfo.SetFavorite(handle, value).ThrowIfError("Failed to update");
 
                 Interop.MediaInfo.UpdateToDB(handle).ThrowIfError("Failed to update");
                 return true;
@@ -767,34 +783,35 @@ namespace Tizen.Content.MediaContent
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
         /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
         /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
-        /// <param name="mediaId">The media id to move.</param>
+        /// <param name="mediaId">The media ID to move.</param>
         /// <param name="newPath">The path that the media has been moved to.</param>
         /// <returns>true if the matched record was found and updated, otherwise false.</returns>
         /// <remarks>
-        ///     Usually, it is used after the media file is moved to another path.\n
-        ///     \n
-        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.\n
+        ///     Usually, it is used after the media file is moved to the another path.<br/>
+        ///     <br/>
+        ///     If you want to access internal storage, you should add privilege http://tizen.org/privilege/mediastorage.<br/>
         ///     If you want to access external storage, you should add privilege http://tizen.org/privilege/externalstorage.
         /// </remarks>
         /// <exception cref="InvalidOperationException">The <see cref="MediaDatabase"/> is disconnected.</exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException">
-        ///     <paramref name="mediaId"/> is null.\n
-        ///     -or-\n
+        ///     <paramref name="mediaId"/> is null.<br/>
+        ///     -or-<br/>
         ///     <paramref name="newPath"/> is null.
         /// </exception>
         /// <exception cref="ArgumentException">
-        ///     <paramref name="mediaId"/> is a zero-length string, contains only white space.\n
-        ///     -or-\n
-        ///     <paramref name="newPath"/> is a zero-length string, contains only white space.\n
-        ///     -or-\n
-        ///     <paramref name="newPath"/> contains a hidden directory that starts with '.'.\n
-        ///     -or-\n
+        ///     <paramref name="mediaId"/> is a zero-length string, contains only white space.<br/>
+        ///     -or-<br/>
+        ///     <paramref name="newPath"/> is a zero-length string, contains only white space.<br/>
+        ///     -or-<br/>
+        ///     <paramref name="newPath"/> contains a hidden directory that starts with '.'.<br/>
+        ///     -or-<br/>
         ///     <paramref name="newPath"/> contains a directory containing the ".scan_ignore" file.
         /// </exception>
         /// <exception cref="FileNotFoundException"><paramref name="newPath"/> does not exists.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <since_tizen> 4 </since_tizen>
         public bool Move(string mediaId, string newPath)
         {
             ValidateDatabase();
@@ -836,18 +853,18 @@ namespace Tizen.Content.MediaContent
 
         #region CreateThumbnailAsync
         /// <summary>
-        /// Creates a thumbnail image for the given media.
-        /// If a thumbnail already exists for the given media, the existing path will be returned.
+        /// Creates the thumbnail image for the given media.
+        /// If the thumbnail already exists for the given media, the existing path will be returned.
         /// </summary>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
-        /// <param name="mediaId">The media id to create thumbnail.</param>
+        /// <param name="mediaId">The media ID to create the thumbnail.</param>
         /// <returns>A task that represents the asynchronous operation. The task result contains the thumbnail path.</returns>
         /// <exception cref="InvalidOperationException">
-        ///     The <see cref="MediaDatabase"/> is disconnected.\n
-        ///     -or-\n
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
         ///     An internal error occurred while executing.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="RecordNotFoundException"><paramref name="mediaId"/> does not exist in the database.</exception>
@@ -856,29 +873,31 @@ namespace Tizen.Content.MediaContent
         /// </exception>
         /// <exception cref="FileNotFoundException">The file of the media does not exists; moved or deleted.</exception>
         /// <exception cref="UnsupportedContentException">
-        ///     Thumbnail is not available for the given media.\n
-        ///     -or-\n
-        ///     The media is in external usb storage(<see cref="MediaInfo.StorageType"/> is <see cref="StorageType.ExternalUsb"/>).
+        ///     The thumbnail is not available for the given media.<br/>
+        ///     -or-<br/>
+        ///     The media is in the external USB storage.
         /// </exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API10; Will be removed in API12. Please use CreateThumbnail instead.")]
         public Task<string> CreateThumbnailAsync(string mediaId)
         {
             return CreateThumbnailAsync(mediaId, CancellationToken.None);
         }
 
         /// <summary>
-        /// Creates a thumbnail image for the given media.
-        /// If a thumbnail already exists for the given media, the existing path will be returned.
+        /// Creates the thumbnail image for the given media.
+        /// If the thumbnail already exists for the given media, the existing path will be returned.
         /// </summary>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
-        /// <param name="mediaId">The media id to create thumbnail.</param>
+        /// <param name="mediaId">The media ID to create the thumbnail.</param>
         /// <param name="cancellationToken">The token to cancel the operation.</param>
         /// <returns>A task that represents the asynchronous operation. The task result contains the thumbnail path.</returns>
         /// <exception cref="InvalidOperationException">
-        ///     The <see cref="MediaDatabase"/> is disconnected.\n
-        ///     -or-\n
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
         ///     An internal error occurred while executing.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="RecordNotFoundException"><paramref name="mediaId"/> does not exist in the database.</exception>
@@ -887,10 +906,12 @@ namespace Tizen.Content.MediaContent
         /// </exception>
         /// <exception cref="FileNotFoundException">The file of the media does not exists; moved or deleted.</exception>
         /// <exception cref="UnsupportedContentException">
-        ///     Thumbnail is not available for the given media.\n
-        ///     -or-\n
-        ///     The media is in external usb storage(<see cref="MediaInfo.StorageType"/> is <see cref="StorageType.ExternalUsb"/>).
+        ///     The thumbnail is not available for the given media.<br/>
+        ///     -or-<br/>
+        ///     The media is in the external USB storage.
         /// </exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API10; Will be removed in API12. Please use CreateThumbnail instead.")]
         public Task<string> CreateThumbnailAsync(string mediaId, CancellationToken cancellationToken)
         {
             ValidateDatabase();
@@ -905,89 +926,140 @@ namespace Tizen.Content.MediaContent
 
             var tcs = new TaskCompletionSource<string>();
 
-            Interop.MediaInfo.GetMediaFromDB(mediaId, out var handle).ThrowIfError("Failed to create thumbnail");
-
-            if (handle.IsInvalid)
+            using (var handle = ValidateFile(mediaId))
             {
-                throw new RecordNotFoundException("Media does not exist.");
-            }
+                string thumbnailPath = null;
+                MediaContentError ret = MediaContentError.None;
+                Task thumbTask = null;
 
-            using (handle)
-            {
-                if (InteropHelper.GetValue<StorageType>(handle, Interop.MediaInfo.GetStorageType) == StorageType.ExternalUsb)
+                if (cancellationToken.CanBeCanceled)
                 {
-                    throw new UnsupportedContentException("The media is in external usb storage.");
-                }
-
-                var path = InteropHelper.GetString(handle, Interop.MediaInfo.GetFilePath);
+                    cancellationToken.Register(() =>
+                    {
+                        if (tcs.Task.IsCompleted)
+                        {
+                            return;
+                        }
 
-                if (File.Exists(path) == false)
-                {
-                    throw new FileNotFoundException($"The media file does not exist. Path={path}.", path);
+                        tcs.TrySetCanceled();
+                    });
                 }
 
-                using (RegisterCancelThumbnail(cancellationToken, tcs, handle))
-                using (var cbKeeper = ObjectKeeper.Get(GetCreateThumbnailCallback(tcs)))
+                thumbTask = Task.Factory.StartNew( () =>
                 {
-                    Interop.MediaInfo.CreateThumbnail(handle, cbKeeper.Target).ThrowIfError("Failed to create thumbnail");
+                    ret = Interop.MediaInfo.GenerateThumbnail(handle);
 
-                    return await tcs.Task;
-                }
+                    if (ret != MediaContentError.None)
+                    {
+                        tcs.TrySetException(ret.AsException("Failed to create thumbnail"));
+                    }
+                    else
+                    {
+                        thumbnailPath = InteropHelper.GetString(handle, Interop.MediaInfo.GetThumbnailPath, true);
+                        tcs.TrySetResult(thumbnailPath);
+                    }
+                }, cancellationToken,
+                    TaskCreationOptions.DenyChildAttach | TaskCreationOptions.LongRunning,
+                    TaskScheduler.Default);
+
+                return await tcs.Task;
             }
         }
+        #endregion
 
-        private static Interop.MediaInfo.ThumbnailCompletedCallback GetCreateThumbnailCallback(
-            TaskCompletionSource<string> tcs)
+        /// <summary>
+        /// Creates the thumbnail image for the given media.
+        /// If the thumbnail already exists for the given media, the existing path will be returned.
+        /// </summary>
+        /// <privilege>http://tizen.org/privilege/content.write</privilege>
+        /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
+        /// <param name="mediaId">The ID of the media for which the thumbnail will be created.</param>
+        /// <returns>A created thumbnail path.</returns>
+        /// <exception cref="InvalidOperationException">
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
+        ///     An internal error occurred while executing.
+        /// </exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
+        /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
+        /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
+        /// <exception cref="RecordNotFoundException"><paramref name="mediaId"/> does not exist in the database.</exception>
+        /// <exception cref="ArgumentException">
+        ///     <paramref name="mediaId"/> is a zero-length string, contains only white space.
+        /// </exception>
+        /// <exception cref="FileNotFoundException">The file of the media does not exists; moved or deleted.</exception>
+        /// <exception cref="UnsupportedContentException">
+        ///     The thumbnail is not available for the given media.<br/>
+        ///     -or-<br/>
+        ///     The media is in the external USB storage.
+        /// </exception>
+        /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <since_tizen> 10 </since_tizen>
+        public string CreateThumbnail(string mediaId)
         {
-            return (error, path, _) =>
+            ValidateDatabase();
+
+            ValidationUtil.ValidateNotNullOrEmpty(mediaId, nameof(mediaId));
+
+            using (var handle = ValidateFile(mediaId))
             {
-                if (error != MediaContentError.None)
-                {
-                    tcs.TrySetException(error.AsException("Failed to create thumbnail"));
-                }
-                else
-                {
-                    tcs.TrySetResult(path);
-                }
-            };
+                Interop.MediaInfo.GenerateThumbnail(handle).ThrowIfError("Failed to create thumbnail");
+
+                return InteropHelper.GetString(handle, Interop.MediaInfo.GetThumbnailPath, true);
+            }
         }
 
-        private static IDisposable RegisterCancelThumbnail(CancellationToken cancellationToken,
-            TaskCompletionSource<string> tcs, Interop.MediaInfoHandle handle)
+        private Interop.MediaInfoHandle ValidateFile(string mediaId)
         {
-            if (cancellationToken.CanBeCanceled == false)
+            Interop.MediaInfo.GetMediaFromDB(mediaId, out var handle).ThrowIfError("Failed to create thumbnail");
+
+            if (handle.IsInvalid)
             {
-                return null;
+                throw new RecordNotFoundException("Media does not exist.");
             }
 
-            return cancellationToken.Register(() =>
+            try
             {
-                if (tcs.Task.IsCompleted)
+                var path = InteropHelper.GetString(handle, Interop.MediaInfo.GetFilePath);
+
+                if (String.IsNullOrEmpty(path) || File.Exists(path) == false)
                 {
-                    return;
+                    throw new FileNotFoundException($"The media file does not exist. Path={path}.", path);
                 }
 
-                Interop.MediaInfo.CancelThumbnail(handle).ThrowIfError("Failed to cancel");
-                tcs.TrySetCanceled();
-            });
+                foreach (var extendedInternal in StorageManager.Storages.Where(s => s.StorageType == StorageArea.ExtendedInternal))
+                {
+                    if (path.Contains(extendedInternal.RootDirectory))
+                    {
+                        throw new UnsupportedContentException("The media is in external usb storage.");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                handle.Dispose();
+                throw ex;
+            }
+
+            return handle;
         }
-        #endregion
 
         #region DetectFaceAsync
         /// <summary>
         /// Detects faces from the given media.
-        /// If a thumbnail already exists for the given media, the existing path will be returned.
+        /// If the thumbnail already exists for the given media, the existing path will be returned.
         /// </summary>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
         /// <feature>http://tizen.org/feature/vision.face_recognition</feature>
-        /// <param name="mediaId">The media id to create thumbnail.</param>
+        /// <param name="mediaId">The media ID to create the thumbnail.</param>
         /// <returns>A task that represents the asynchronous add operation. The task result contains the number of faces detected.</returns>
         /// <exception cref="InvalidOperationException">
-        ///     The <see cref="MediaDatabase"/> is disconnected.\n
-        ///     -or-\n
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
         ///     An internal error occurred while executing.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="RecordNotFoundException"><paramref name="mediaId"/> does not exist in the database.</exception>
@@ -995,32 +1067,35 @@ namespace Tizen.Content.MediaContent
         ///     <paramref name="mediaId"/> is a zero-length string, contains only white space.
         /// </exception>
         /// <exception cref="FileNotFoundException">The file of the media does not exists; moved or deleted.</exception>
-        /// <exception cref="UnsupportedContentException">Feace detection is not available for the given media.</exception>
+        /// <exception cref="UnsupportedContentException">Face detection is not available for the given media.</exception>
         /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
         /// <exception cref="UnauthorizedAccessException">The caller has no required privilege.</exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API11; Will be removed in API13.")]
         public Task<int> DetectFaceAsync(string mediaId)
         {
             return DetectFaceAsync(mediaId, CancellationToken.None);
         }
 
         /// <summary>
-        /// Creates a thumbnail image for the given media.
-        /// If a thumbnail already exists for the given media, the existing path will be returned.
+        /// Creates the thumbnail image for the given media.
+        /// If the thumbnail already exists for the given media, the existing path will be returned.
         /// </summary>
         /// <remarks>
-        ///     Media in external storage is not supported, with the exception of MMC.
+        ///     Media in the external storage is not supported, with the exception of MMC.
+        ///     Only JPEG, PNG, BMP images are supported.
         /// </remarks>
         /// <privilege>http://tizen.org/privilege/content.write</privilege>
         /// <feature>http://tizen.org/feature/vision.face_recognition</feature>
-        /// <param name="mediaId">The media id to create thumbnail.</param>
+        /// <param name="mediaId">The media ID to create the thumbnail.</param>
         /// <param name="cancellationToken">The token to cancel the operation.</param>
         /// <returns>A task that represents the asynchronous operation. The task result contains the number of faces detected.</returns>
         /// <exception cref="InvalidOperationException">
-        ///     The <see cref="MediaDatabase"/> is disconnected.\n
-        ///     -or-\n
+        ///     The <see cref="MediaDatabase"/> is disconnected.<br/>
+        ///     -or-<br/>
         ///     An internal error occurred while executing.
         /// </exception>
-        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed of.</exception>
+        /// <exception cref="ObjectDisposedException">The <see cref="MediaDatabase"/> has already been disposed.</exception>
         /// <exception cref="MediaDatabaseException">An error occurred while executing the command.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="mediaId"/> is null.</exception>
         /// <exception cref="RecordNotFoundException"><paramref name="mediaId"/> does not exist in the database.</exception>
@@ -1029,11 +1104,13 @@ namespace Tizen.Content.MediaContent
         /// </exception>
         /// <exception cref="FileNotFoundException">The file of the media does not exists; moved or deleted.</exception>
         /// <exception cref="UnsupportedContentException">
-        ///     Face detection is not available for the given media.\n
-        ///     -or-\n
-        ///     The media is in external usb storage(<see cref="MediaInfo.StorageType"/> is <see cref="StorageType.ExternalUsb"/>).
+        ///     Face detection is not available for the given media.<br/>
+        ///     -or-<br/>
+        ///     The media is in the external USB storage.
         /// </exception>
         /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
+        /// <since_tizen> 4 </since_tizen>
+        [Obsolete("Deprecated since API11; Will be removed in API13.")]
         public Task<int> DetectFaceAsync(string mediaId, CancellationToken cancellationToken)
         {
             if (Features.IsSupported(Features.FaceRecognition) == false)
@@ -1062,14 +1139,17 @@ namespace Tizen.Content.MediaContent
 
             using (handle)
             {
-                if (InteropHelper.GetValue<StorageType>(handle, Interop.MediaInfo.GetStorageType) == StorageType.ExternalUsb)
+                if (InteropHelper.GetValue<MediaType>(handle, Interop.MediaInfo.GetMediaType) != MediaType.Image)
                 {
-                    throw new UnsupportedContentException("The media is in external usb storage.");
+                    throw new UnsupportedContentException("Only image is supported.");
                 }
 
-                if (InteropHelper.GetValue<MediaType>(handle, Interop.MediaInfo.GetMediaType) != MediaType.Image)
+                // Native P/Invoke function also check below case, but it returns invalid operation error.
+                // So we check it here to throw more proper exception.
+                string mimeType = InteropHelper.GetString(handle, Interop.MediaInfo.GetMimeType);
+                if (!mimeType.Equals("image/jpeg") && !mimeType.Equals("image/png") && !mimeType.Equals("image/bmp"))
                 {
-                    throw new UnsupportedContentException("Only image is supported.");
+                    throw new UnsupportedContentException($"{mimeType} is not supported. Only JPEG, PNG, BMP is supported.");
                 }
 
                 var path = InteropHelper.GetString(handle, Interop.MediaInfo.GetFilePath);
@@ -1082,7 +1162,13 @@ namespace Tizen.Content.MediaContent
                 using (RegisterCancelFaceDetection(cancellationToken, tcs, handle))
                 using (var cbKeeper = ObjectKeeper.Get(GetFaceDetectionCallback(tcs)))
                 {
-                    Interop.MediaInfo.StartFaceDetection(handle, cbKeeper.Target).ThrowIfError("Failed to detect faces");
+                    var ret = Interop.MediaInfo.StartFaceDetection(handle, cbKeeper.Target);
+                    if (ret == MediaContentError.InvalidParameter)
+                    {
+                        throw new UnsupportedContentException("The media is in external usb storage.");
+                    }
+
+                    ret.ThrowIfError("Failed to detect faces");
 
                     return await tcs.Task;
                 }