[Files-Sharing] First part of the documentation (view and model) descritpion.
authorMichal Szczecinski <m.szczecinsk@samsung.com>
Tue, 24 Nov 2015 13:41:48 +0000 (14:41 +0100)
committerMichal Szczecinski <m.szczecinsk@samsung.com>
Wed, 2 Dec 2015 11:17:07 +0000 (12:17 +0100)
Change-Id: I225ff81c45267289b91774f046505bb13e822693
Signed-off-by: Michal Szczecinski <m.szczecinsk@samsung.com>
org.tizen.sampledescriptions/html/images/files-sharing-main_view.png [new file with mode: 0644]
org.tizen.sampledescriptions/html/images/files_sharing_application_structure.png [new file with mode: 0644]
org.tizen.sampledescriptions/html/images/files_sharing_sequence.png [new file with mode: 0644]
org.tizen.sampledescriptions/html/images/files_sharing_view.png [new file with mode: 0644]
org.tizen.sampledescriptions/html/mobile_n/files_sharing_sd_mn.htm [new file with mode: 0644]
org.tizen.sampledescriptions/html/mobile_n/sd_mn.htm

diff --git a/org.tizen.sampledescriptions/html/images/files-sharing-main_view.png b/org.tizen.sampledescriptions/html/images/files-sharing-main_view.png
new file mode 100644 (file)
index 0000000..b022742
Binary files /dev/null and b/org.tizen.sampledescriptions/html/images/files-sharing-main_view.png differ
diff --git a/org.tizen.sampledescriptions/html/images/files_sharing_application_structure.png b/org.tizen.sampledescriptions/html/images/files_sharing_application_structure.png
new file mode 100644 (file)
index 0000000..ec3f9fe
Binary files /dev/null and b/org.tizen.sampledescriptions/html/images/files_sharing_application_structure.png differ
diff --git a/org.tizen.sampledescriptions/html/images/files_sharing_sequence.png b/org.tizen.sampledescriptions/html/images/files_sharing_sequence.png
new file mode 100644 (file)
index 0000000..d768f63
Binary files /dev/null and b/org.tizen.sampledescriptions/html/images/files_sharing_sequence.png differ
diff --git a/org.tizen.sampledescriptions/html/images/files_sharing_view.png b/org.tizen.sampledescriptions/html/images/files_sharing_view.png
new file mode 100644 (file)
index 0000000..7c907df
Binary files /dev/null and b/org.tizen.sampledescriptions/html/images/files_sharing_view.png differ
diff --git a/org.tizen.sampledescriptions/html/mobile_n/files_sharing_sd_mn.htm b/org.tizen.sampledescriptions/html/mobile_n/files_sharing_sd_mn.htm
new file mode 100644 (file)
index 0000000..e3a439d
--- /dev/null
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+       <meta http-equiv="X-UA-Compatible" content="IE=9" />
+       <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+       <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+       <script type="text/javascript" src="../scripts/snippet.js"></script>
+       <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+       <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+       <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+       <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+
+       <title>Files-Sharing Sample Overview</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+       <div id="profile">
+               <p><img alt="Mobile native" src="../images/mobile_s_n.png"/></p>
+       </div>
+
+  <h1>Files-Sharing Sample Overview</h1>
+
+  <p>The Files-Sharing sample application demonstrates how you can use Bluetooth OPP (Object Push Profile) API to send media data between two devices.</p>
+  <p>The following figure illustrates the application view:</p>
+  <p class="figure">Figure: Main view</p>
+  <p align="center"><img alt="Main view" src="../images/files-sharing-main_view.png" />
+  </p>
+
+  <h2>Prerequisites</h2>
+  <p>To ensure proper application execution, the following privileges and features must be set:</p>
+  <ul>
+    <li><span style="font-family: Courier New,Courier,monospace">http://tizen.org/privilege/mediastorage</span>,</li>
+         <li><span style="font-family: Courier New,Courier,monospace">http://tizen.org/privilege/bluetooth</span>,</li>
+    <li><span style="font-family: Courier New,Courier,monospace">http://tizen.org/feature/network.bluetooth</span>,</li>
+    <li><span style="font-family: Courier New,Courier,monospace">http://tizen.org/feature/network.bluetooth.opp</span>.</li>
+  </ul>
+  <p>Additional prerequisites:</p>
+  <ul>
+    <li>Bluetooth adapter should be switched on,</li>
+    <li>connection with the paired device should be available.</li>
+  </ul>
+
+<h2>Implementation</h2>
+<p>The following figure illustrates the application structure:</p>
+<p class="figure">Figure: Main view</p>
+<p align="center"> <img alt="Sample structure" src="../images/files_sharing_application_structure.png" /></p>
+<p>The application uses a simple MVC (Model-View-Controller) architectural pattern. The application model consists of a media and Bluetooth module.</p>
+
+<h3>View</h3>
+<p>The view alignment is managed by an EDJE layout which is depicted in details below.</p>
+<p class="figure">Figure: Main view structure</p>
+<p align="center"> <img alt="Sample structure" src="../images/files_sharing_view.png" /></p>
+<p>The view is very simple. It consists of three types of widgets. The paired devices list is handled by an <span style="font-family: Courier New,Courier,monospace">elm_hoversel</span> widget. The files list is shown in an <span style="font-family: Courier New,Courier,monospace">elm_gengrid</span> widget. To send the selected files list, an <span style="font-family: Courier New,Courier,monospace">elm_button</span> is used.</p>
+
+<p>The view implementation is stored in the following files:</p>
+<ul>
+  <li><span style="font-family: Courier New,Courier,monospace">src/view/view.c</span>: The main view file. It creates a standard widgets set: a window, a conformant and a layout, as well as subwidgets shown in the figure above which are later inserted in the main layout.</li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/view/view_devices_selector.c</span>: The devices selector is used to choose the destination device.</li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/view/view_files_selector.c</span>: The files selector is an <span style="font-family: Courier New,Courier,monospace">elm_gengrid</span> widget used to show available pictures.</li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/view/files_selector_item.c</span>: The files selector item handles the view of each picture placed in the <span style="font-family: Courier New,Courier,monospace">elm_gengrid</span> widget.</li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/view/view_popup.c</span>: The popup view is responsible for displaying warnings and the file sending progress.</li>
+</ul>
+
+<h3>Model</h3>
+<p>The Model module deals directly with the application data. It is responsible for:</p>
+<ul>
+  <li>creating the media files list. In case of this sample application, only image files are used;</li>
+  <li>creating the paired devices list;</li>
+  <li>preparing the data structures used in the sample application.</li>
+</ul>
+
+<h4>Media module</h4>
+<p>The implementation of the media module that is responsible for acquiring the list of available images was taken from the Media sample application and its description can be found in Tizen SDK as well as in the Media API tutorial (<a href="https://developer.tizen.org/development/tutorials/native-application/content">Media Content Tutorial</a>).</p>
+
+<h4>Bluetooth module</h4>
+<p>The main tasks of the Bluetooth module:</p>
+<ul>
+  <li>initializing Bluetooth,</li>
+  <li>reading paired devices list,</li>
+  <li>sending files between devices,</li>
+  <li>monitoring the status of the connection (sending progress, errors that occured during the process).</li>
+</ul>
+
+<p>The Bluetooth module implementation is stored in the following files:</p>
+<ul>
+  <li><span style="font-family: Courier New,Courier,monospace">src/bt_module/bt_module.c</span>: The main file of the model. It is responsible for the Bluetooth adapter initialization and obtaining paired devices list.</li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/bt_module/bt_device.c</span>: It is responsible for bt_device data structure handling which holds additional device information such as the remote address. </li>
+  <li><span style="font-family: Courier New,Courier,monospace">src/bt_module/bt_devices_list.c</span>: The bt_devices_list holds the list of all available devices obtained from the Bluetooth API. The file provides the API to find a device in that list. </li>
+</ul>
+
+<p>The module is initialized in the <span style="font-family: Courier New,Courier,monospace">bt_module_init()</span> function which is described below.</p>
+<pre class="prettyprint">
+bool bt_module_init()
+{
+&nbsp;&nbsp;&nbsp;Eina_List *bt_devices_list = NULL;
+&nbsp;&nbsp;&nbsp;int ret = 0;
+&nbsp;&nbsp;&nbsp;ret = bt_initialize();
+&nbsp;&nbsp;&nbsp;if (ret != BT_ERROR_NONE) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Function below is used to print detailed error description in the Tizen SDK log tool.*/
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__bt_module_check_err("bt_initialize", ret);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;ret = bt_opp_client_initialize();
+&nbsp;&nbsp;&nbsp;if (ret != BT_ERROR_NONE) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__bt_module_check_err("bt_opp_client_initialize", ret);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*If opp client initialization fails, Bluetooth adapter must be freed.*/
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_deinitialize();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/*Function is used to find all paired devices.*/
+&nbsp;&nbsp;&nbsp;ret = bt_adapter_foreach_bonded_device(__bt_module_find_bonded_devices_cb, NULL);
+&nbsp;&nbsp;&nbsp;bt_devices_list = bt_devices_list_get();return true;
+}
+</pre>
+
+<p>The devices are added into the list in the callback function invoked by <span style="font-family: Courier New,Courier,monospace">bt_adapter_foreach_bonded_device()</span> function.</p>
+
+<pre class="prettyprint">
+static bool __bt_module_find_bonded_devices_cb(bt_device_info_s *device_info, void *user_data)
+{
+&nbsp;&nbsp;&nbsp;bt_dev_t *bt_dev = NULL;
+&nbsp;&nbsp;&nbsp;if (!device_info) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Print error message and return false.*/
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/*Create the device handle based on the data obtained from the callback.*/
+&nbsp;&nbsp;&nbsp;bt_dev = bt_device_create(device_info->remote_name, device_info->remote_address);
+&nbsp;&nbsp;&nbsp;if (!bt_dev) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*If creation fails, print error message and return false.*/
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;if (!bt_devices_list_append_device((const bt_dev_t *) bt_dev)) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*If bt_devices_list API returns error, created device will be removed here.*/
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_device_destroy(bt_dev);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;if (!controller_update_view(bt_dev)) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*If view update fails, error message will be printed and function returns false.*/
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;return true;
+}
+</pre>
+
+<p>The following figure illustrates the process of files sharing.</p>
+<p class="figure">Figure: Files sharing</p>
+<p align="center"> <img alt="Sample structure" src="../images/files_sharing_sequence.png" /></p>
+
+<p>Files exchange starts when the user presses the send button. Then, the view passes the selected files list and the device name to the controller module. The controller module uses the internal API to get the remote address for the specified device and uses the Bluetooth module to send the files. The <span style="font-family: Courier New,Courier,monospace">bt_module_send_files()</span> function which uses Bluetooth OPP API is described below.</p>
+
+<pre class="prettyprint">
+bool bt_module_send_files(Eina_List *files_list, const char *device_name)
+{
+&nbsp;&nbsp;&nbsp;Eina_List *it = NULL;
+&nbsp;&nbsp;&nbsp;const char *path = NULL;
+&nbsp;&nbsp;&nbsp;bt_dev_t *dev = NULL;
+&nbsp;&nbsp;&nbsp;const char *remote_addr = NULL;
+&nbsp;&nbsp;&nbsp;int ret = BT_ERROR_NONE;
+&nbsp;&nbsp;&nbsp;/*Find the device by name*/
+&nbsp;&nbsp;&nbsp;dev = bt_devices_list_get_device(device_name);
+&nbsp;&nbsp;&nbsp;/*Get the remote address of the device*/
+&nbsp;&nbsp;&nbsp;remote_addr = bt_device_get_remote_addr(dev);
+&nbsp;&nbsp;&nbsp;/*Each selected file is added into the OPP client.*/
+&nbsp;&nbsp;&nbsp;EINA_LIST_FOREACH (files_list, it, path) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret = bt_opp_client_add_file(path);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (ret != BT_ERROR_NONE) {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Check the status. If error occurs function releases used resources and returns false.*/
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/*Push added files and check the status and setup callbacks invoked on events occurred in the Bluetooth module.*/
+&nbsp;&nbsp;&nbsp;ret = bt_opp_client_push_files(remote_addr, __bt_module_responded_cb, __bt_module_progress_cb, __bt_module_push_finished_cb, NULL);
+&nbsp;&nbsp;&nbsp;if (ret != BT_ERROR_NONE) {
+&nbsp;&nbsp;&nbsp;/*Print errors and release used resources.*/
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;return true;
+}
+</pre>
+
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+</html>
index c69b28e..beb88b9 100644 (file)
@@ -5,47 +5,47 @@
        <meta http-equiv="X-UA-Compatible" content="IE=9" />
        <link rel="stylesheet" type="text/css" href="../css/styles.css" />
        <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
-       <script type="text/javascript" src="../scripts/snippet.js"></script>    
+       <script type="text/javascript" src="../scripts/snippet.js"></script>
        <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
        <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
        <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
        <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
 
-       <title>Mobile Native Sample Descriptions</title>  
+       <title>Mobile Native Sample Descriptions</title>
 </head>
 
 <body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
 
 <div id="toc-navigation">
-</div> 
+</div>
 
 <div id="container"><div id="contents"><div class="content">
        <div id="profile">
                <p><img alt="Mobile native" src="../images/mobile_s_n.png"/></p>
        </div>
-       
-  <h1>Mobile Native Sample Descriptions</h1> 
-   <p>To access general information about the native sample functionality and the content of the sample source files, click the sample name in the following tables.</p> 
-   
-   
-   <table border="1"> 
+
+  <h1>Mobile Native Sample Descriptions</h1>
+
+   <p>To access general information about the native sample functionality and the content of the sample source files, click the sample name in the following tables.</p>
+
+
+   <table border="1">
    <caption>
      Table: Mobile native samples in the Tizen SDK
-   </caption> 
-   <colgroup> 
-    <col /> 
-    <col /> 
-   </colgroup> 
-   <tbody> 
-    <tr> 
-     <th style="text-align:center;margin-left:auto;margin-right:auto;">Sample name</th> 
-     <th style="text-align:center;margin-left:auto;margin-right:auto;">Description</th> 
-    </tr> 
+   </caption>
+   <colgroup>
+    <col />
+    <col />
+   </colgroup>
+   <tbody>
+    <tr>
+     <th style="text-align:center;margin-left:auto;margin-right:auto;">Sample name</th>
+     <th style="text-align:center;margin-left:auto;margin-right:auto;">Description</th>
+    </tr>
 <tr>
         <td><a href="alarm_sd_mn.htm">Alarm</a></td>
         <td>Demonstrates how you can implement recurring and on-time alarms.</td>
-       </tr>   
+       </tr>
        <tr>
         <td><a href="appcommon_sd_mn.htm">Application Common</a></td>
         <td>Demonstrates how you can extract application-related information.</td>
      <td><a href="bundle_sd_mn.htm">Bundle</a></td>
      <td>Demonstrates how you can manipulate bundle objects.</td>
        </tr>
-       <tr> 
-     <td><a href="cairo_basic_sd_mn.htm">Cairo Basic</a></td> 
+       <tr>
+     <td><a href="cairo_basic_sd_mn.htm">Cairo Basic</a></td>
      <td>Demonstrates how you can implement the Cairo image backend.</td>
     </tr>
-       <tr> 
-     <td><a href="cairo_evasgl_sd_mn.htm">Cairo EvasGL</a></td> 
+       <tr>
+     <td><a href="cairo_evasgl_sd_mn.htm">Cairo EvasGL</a></td>
      <td>Demonstrates how you can implement the Cairo GL backend with the Evas_GL surface.</td>
-    </tr>      
+    </tr>
     <tr>
-     <td><a href="calculator_sd_mn.htm">Calculator</a></td> 
+     <td><a href="calculator_sd_mn.htm">Calculator</a></td>
      <td>Demonstrates how you can implement an advanced calculator application.</td>
     </tr>
-       <tr> 
-     <td><a href="contacts_sd_mn.htm">Contacts</a></td> 
+       <tr>
+     <td><a href="contacts_sd_mn.htm">Contacts</a></td>
      <td>Demonstrates how you can manage contacts.</td>
     </tr>
-       <tr> 
-     <td><a href="context_history_sd_mn.htm">Context History</a></td> 
+       <tr>
+     <td><a href="context_history_sd_mn.htm">Context History</a></td>
      <td>Demonstrates how you can retrieve device usage statistics using the <a href="../../../org.tizen.native.mobile.apireference/group__CAPI__CONTEXT__HISTORY__MODULE.html">Contextual History</a> API.</td>
-    </tr>      
-       <tr> 
-     <td><a href="context_trigger_sd_mn.htm">Context Trigger</a></td> 
+    </tr>
+       <tr>
+     <td><a href="context_trigger_sd_mn.htm">Context Trigger</a></td>
      <td>Demonstrates how you can manage contextual rules using the <a href="../../../org.tizen.native.mobile.apireference/group__CAPI__CONTEXT__TRIGGER__MODULE.html">Context Trigger</a> API.</td>
     </tr>
        <tr>
      <td><a href="data_control_provider_sd_mn.htm">Data-Control-Provider</a></td>
      <td>Demonstrates how you can implement a data control provider service using both SQL and map methods.</td>
     </tr>
-       <tr> 
-     <td><a href="drag_and_drop_sd_mn.htm">Drag and Drop</a></td> 
+       <tr>
+     <td><a href="drag_and_drop_sd_mn.htm">Drag and Drop</a></td>
      <td>Demonstrates how you can implement a drag-and-drop operation.</td>
-    </tr>      
-       <tr> 
-     <td><a href="efl_core_samples_sd_mn.htm">EFL Core</a></td> 
+    </tr>
+       <tr>
+     <td><a href="efl_core_samples_sd_mn.htm">EFL Core</a></td>
      <td>Demonstrates how you can use the EFL and Elementary libraries and related APIs in Tizen.</td>
     </tr>
-       <tr> 
-     <td><a href="eom_sd_mn.htm">EOM</a></td> 
+       <tr>
+     <td><a href="eom_sd_mn.htm">EOM</a></td>
      <td>Demonstrates how you can use the EOM mode with the <a href="../../../org.tizen.native.mobile.apireference/group__CAPI__UI__EOM__MODULE.html">External Output Manager</a> API.</td>
-    </tr>      
-       <tr> 
-     <td><a href="evas_gl_sd_mn.htm">EvasGLCube</a></td> 
+    </tr>
+       <tr>
+     <td><a href="evas_gl_sd_mn.htm">EvasGLCube</a></td>
      <td>Demonstrates how you can implement a cube that can be rotated on the screen through Evas_GL.</td>
     </tr>
        <tr>
         <td><a href="event_sd_mn.htm">Event</a></td>
         <td>Demonstrates how you can implement event listeners and publish custom events.</td>
        </tr>
-       <tr> 
-     <td><a href="file_manager_sd_mn.htm">File Manager</a></td> 
+       <tr>
+     <td><a href="file_manager_sd_mn.htm">File Manager</a></td>
      <td>Demonstrates how you can implement a complex view using EFL UI components and containers.</td>
     </tr>
-       <tr> 
-     <td><a href="glview11_cube_sd_mn.htm">GLView11Cube</a></td> 
+       <tr>
+     <td><a href="files_sharing_sd_mn.htm">Files Sharing</a></td>
+     <td>Demonstrates how you can implement a Files Sharing application using Bluetooth OPP protocol.</td>
+    </tr>
+       <tr>
+     <td><a href="glview11_cube_sd_mn.htm">GLView11Cube</a></td>
      <td>Demonstrates how you can use ElmGLView to create a 3D cube on the screen.</td>
     </tr>
-       <tr> 
-     <td><a href="glview_cube_sd_mn.htm">GLViewCube</a></td> 
+       <tr>
+     <td><a href="glview_cube_sd_mn.htm">GLViewCube</a></td>
      <td>Demonstrates how you can implement a simple UI and draw a rotating cube using simple vertex and fragment shaders.</td>
     </tr>
-       <tr> 
-     <td><a href="glview_shader_sd_mn.htm">GLViewShader</a></td> 
+       <tr>
+     <td><a href="glview_shader_sd_mn.htm">GLViewShader</a></td>
      <td>Demonstrates how you can render more complex geometric shapes with OpenGL&reg; ES and use Elementary GLView helper macros to port existing code.</td>
     </tr>
     <tr>
      <td><a href="gps_service_sd_mn.htm">GPS Service</a></td>
      <td>Demonstrates how you can implement a Tizen service providing geolocation data using the IPC mechanism from the Tizen API.</td>
     </tr>
-       <tr> 
-     <td><a href="hybridservice_sd_mn.htm">HybridServiceApp</a></td> 
+       <tr>
+     <td><a href="hybridservice_sd_mn.htm">HybridServiceApp</a></td>
      <td>Demonstrates how you can communicate with a Tizen Web application (<a href="../mobile_w/hybridwebapp_mw.htm">HybridWebApp</a>) to manage the timer for the Web application.</td>
     </tr>
-       <tr> 
-     <td><a href="imf_sd_mn.htm">IMF</a></td> 
+       <tr>
+     <td><a href="imf_sd_mn.htm">IMF</a></td>
      <td>Demonstrates how you can implement the default keyboard layout change.</td>
-    </tr>      
+    </tr>
        <tr>
        <td><a href="internationalization_sd_mn.htm">Internationalization</a></td>
         <td>Demonstrates how you can provide multilanguage support to the application using 2 different translation mechanisms.</td>
        </tr>
-       <tr> 
-     <td><a href="launchonevent_sd_mn.htm">LaunchOnEventServiceApp</a></td> 
+       <tr>
+     <td><a href="launchonevent_sd_mn.htm">LaunchOnEventServiceApp</a></td>
      <td>Demonstrates how you can use launch-on-event in your application.</td>
     </tr>
        <tr>
      <td><a href="layout_transitions_sd_mn.htm">Layout Transitions</a></td>
      <td>Demonstrates how you can implement an animated transition between different application views.</td>
     </tr>
-       <tr> 
-     <td><a href="lbs_geofence_sd_mn.htm">LBS Geofence</a></td> 
+       <tr>
+     <td><a href="lbs_geofence_sd_mn.htm">LBS Geofence</a></td>
      <td>Demonstrates how you can manage fences and places.</td>
     </tr>
-       <tr> 
-     <td><a href="lbs_maps_sd_mn.htm">LBS Maps</a></td> 
+       <tr>
+     <td><a href="lbs_maps_sd_mn.htm">LBS Maps</a></td>
      <td>Demonstrates how you can use map services, such as geocode, place search, and routing.</td>
     </tr>
        <tr>
      <td><a href="oauth_sd_mn.htm">LibOauth</a></td>
      <td>Demonstrates how you can  get access tokens from various resource owners, such as Twitter and Tumblr, who use the OAuth protocol RFC5849.</td>
     </tr>
-       <tr> 
-     <td><a href="lockscreen_sd_mn.htm">Lockscreen</a></td> 
+       <tr>
+     <td><a href="lockscreen_sd_mn.htm">Lockscreen</a></td>
      <td>Demonstrates how you can implement a screen locking mechanism.</td>
     </tr>
-       <tr> 
-     <td><a href="mediaapp_sd_mn.htm">Media App</a></td> 
+       <tr>
+     <td><a href="mediaapp_sd_mn.htm">Media App</a></td>
      <td>Demonstrates how you can develop media handling applications with the ability to manage different media sources.</td>
     </tr>
-       <tr> 
-     <td><a href="mediacontroller_client_sd_mn.htm">Media-controller-client</a></td> 
+       <tr>
+     <td><a href="mediacontroller_client_sd_mn.htm">Media-controller-client</a></td>
      <td>Demonstrates how you can create a custom media controller client type application.</td>
     </tr>
-       <tr> 
-     <td><a href="mediacontroller_server_sd_mn.htm">Media-controller-server</a></td> 
+       <tr>
+     <td><a href="mediacontroller_server_sd_mn.htm">Media-controller-server</a></td>
      <td>Demonstrates how you can create a custom media controller server type application.</td>
     </tr>
     <tr>
      <td><a href="metadata_editor_sd_mn.htm">Metadata Editor</a></td>
      <td>Demonstrates how you can retrieve and modify metadata.</td>
     </tr>
-       <tr> 
-     <td><a href="notificationmanager_sd_mn.htm">Notification Manager</a></td> 
+       <tr>
+     <td><a href="notificationmanager_sd_mn.htm">Notification Manager</a></td>
      <td>Demonstrates how you can present a notification to the user.</td>
     </tr>
        <tr>
     <tr>
      <td><a href="pedometer_sd_mn.htm">Pedometer</a></td>
      <td>Demonstrates how you can implement a simple pedometer.</td>
-    </tr>      
-       <tr> 
-     <td><a href="piano_sd_mn.htm">Piano</a></td> 
+    </tr>
+       <tr>
+     <td><a href="piano_sd_mn.htm">Piano</a></td>
      <td>Demonstrates how you can implement a complex view using EFL UI components with different EDC styles.</td>
     </tr>
        <tr>
         <td><a href="resource_management_sd_mn.htm">Resource Management</a></td>
         <td>Demonstrates how you can use the <a href="../../..//org.tizen.native.mobile.apireference/group__CAPI__RESOURCE__MANAGER__MODULE.html">Resource Manager</a> API together with the SDK&#39;s Resource Manager to benefit from task automation.</td>
        </tr>
-       <tr> 
-     <td><a href="sample_account_sd_mn.htm">Sample Account</a></td> 
+       <tr>
+     <td><a href="sample_account_sd_mn.htm">Sample Account</a></td>
      <td>Demonstrates how you can implement an account provider which can add and configure an account.</td>
     </tr>
-       <tr> 
-     <td><a href="scheduler_sd_mn.htm">Scheduler</a></td> 
+       <tr>
+     <td><a href="scheduler_sd_mn.htm">Scheduler</a></td>
      <td>Demonstrates how you can manage scheduling of calendar events and other calendar options.</td>
     </tr>
        <tr>
      <td>Demonstrates how you can implement an animated index connected with an Elm scroller component.</td>
     </tr>
 
-       <tr> 
-     <td><a href="selfcamera_sd_mn.htm">SelfCamera</a></td> 
+       <tr>
+     <td><a href="selfcamera_sd_mn.htm">SelfCamera</a></td>
      <td>Demonstrates how you can use the front camera in your application.</td>
     </tr>
-       <tr> 
-     <td><a href="sensorapp_sd_mn.htm">SensorApp</a></td> 
+       <tr>
+     <td><a href="sensorapp_sd_mn.htm">SensorApp</a></td>
      <td>Demonstrates how you can retrieve data from various Tizen sensor types.</td>
     </tr>
      <tr>
      <td><a href="tts_sd_mn.htm">TTS</a></td>
      <td>Demonstrates how you can use the TTS (Text-To-Speech) feature in your application.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_components_sd_mn.htm">UI Components</a></td>  
+       <tr>
+     <td><a href="ui_components_sd_mn.htm">UI Components</a></td>
      <td>Demonstrates how you can implement an interactive application GUI with basic Elementary UI components.</td>
-    </tr>      
+    </tr>
        <tr>
      <td><a href="voice_control_sd_mn.htm">Voice Control</a></td>
      <td>Demonstrates how you can use the <a href=".../../../org.tizen.native.mobile.apireference/group__CAPI__UIX__VOICE__CONTROL__MODULE.html">Voice Control</a> API to initialize, deinitialize, add, and remove voice commands.</td>
      <td><a href="volume_sd_mn.htm">Volume</a></td>
      <td>Demonstrates how you can acquire and set the device sound levels.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_app_store_sd_mn.htm">[UI Sample] ApplicationStore</a></td> 
+       <tr>
+     <td><a href="ui_app_store_sd_mn.htm">[UI Sample] ApplicationStore</a></td>
      <td>Demonstrates how you can implement an application store view with several boxes and buttons.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_calculator_sd_mn.htm">[UI Sample] Calculator</a></td> 
+       <tr>
+     <td><a href="ui_calculator_sd_mn.htm">[UI Sample] Calculator</a></td>
      <td>Demonstrates how you can implement a simple calculator application with complex views.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_clock_sd_mn.htm">[UI Sample] Clock</a></td> 
+       <tr>
+     <td><a href="ui_clock_sd_mn.htm">[UI Sample] Clock</a></td>
      <td>Demonstrates how you can implement a clock application with different views.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_email_sd_mn.htm">[UI Sample] Email</a></td> 
+       <tr>
+     <td><a href="ui_email_sd_mn.htm">[UI Sample] Email</a></td>
      <td>Demonstrates how you can implement a complex email application view.</td>
     </tr>
-       <tr> 
-     <td><a href="ui_gallery_sd_mn.htm">[UI Sample] Gallery</a></td> 
-     <td>Demonstrates how you can implement a gallery view to display images.</td> 
-    </tr>
-       <tr> 
-     <td><a href="ui_language_change_sd_mn.htm">[UI Sample] LanguageChange</a></td> 
-     <td>Demonstrates how you can implement an application that supports multiple languages and language change at runtime.</td> 
-    </tr>
-       <tr> 
-     <td><a href="ui_layout_samples_sd_mn.htm">[UI Sample] LayoutSample</a></td> 
-     <td>Demonstrates how you can implement a common layout for your application.</td> 
-    </tr>      
-       <tr> 
-     <td><a href="ui_message_bubble_sd_mn.htm">[UI Sample] MessageBubble</a></td> 
-     <td>Demonstrates how you can manage communication between Edje code and C code through EFL UI components and containers.</td> 
-    </tr>
-       <tr> 
-     <td><a href="ui_sns_sd_mn.htm">[UI Sample] SNS</a></td> 
-     <td>Demonstrates how you can implement a scrollable view with tables and buttons through EFL UI components and containers.</td>    
-    </tr>      
-       <tr> 
-     <td><a href="ui_setting_sd_mn.htm">[UI Sample] Setting</a></td> 
-     <td>Demonstrates how you can implement a Settings application with pop-up menus and different views through EFL UI components and containers. </td>  
-    </tr>      
-   </tbody> 
-  </table> 
+       <tr>
+     <td><a href="ui_gallery_sd_mn.htm">[UI Sample] Gallery</a></td>
+     <td>Demonstrates how you can implement a gallery view to display images.</td>
+    </tr>
+       <tr>
+     <td><a href="ui_language_change_sd_mn.htm">[UI Sample] LanguageChange</a></td>
+     <td>Demonstrates how you can implement an application that supports multiple languages and language change at runtime.</td>
+    </tr>
+       <tr>
+     <td><a href="ui_layout_samples_sd_mn.htm">[UI Sample] LayoutSample</a></td>
+     <td>Demonstrates how you can implement a common layout for your application.</td>
+    </tr>
+       <tr>
+     <td><a href="ui_message_bubble_sd_mn.htm">[UI Sample] MessageBubble</a></td>
+     <td>Demonstrates how you can manage communication between Edje code and C code through EFL UI components and containers.</td>
+    </tr>
+       <tr>
+     <td><a href="ui_sns_sd_mn.htm">[UI Sample] SNS</a></td>
+     <td>Demonstrates how you can implement a scrollable view with tables and buttons through EFL UI components and containers.</td>
+    </tr>
+       <tr>
+     <td><a href="ui_setting_sd_mn.htm">[UI Sample] Setting</a></td>
+     <td>Demonstrates how you can implement a Settings application with pop-up menus and different views through EFL UI components and containers. </td>
+    </tr>
+   </tbody>
+  </table>
+
+
 <script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
 <script type="text/javascript" src="../scripts/showhide.js"></script>
 </div></div></div>