Apply new BT share UI for tizen 3.0 43/97643/1
authorDoHyun Pyun <dh79.pyun@samsung.com>
Fri, 11 Nov 2016 08:33:51 +0000 (17:33 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Tue, 15 Nov 2016 02:11:46 +0000 (11:11 +0900)
Change-Id: I41bb48eacbd97fbfe159b98cc7f221f7399df2dd
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
37 files changed:
CMakeLists.txt
data/edc/bt-share-layout.edc
data/edc/bt_share_icon_animation.edc [new file with mode: 0644]
data/edc/images.edc
data/images/bluetooth_download_00.png [new file with mode: 0644]
data/images/bluetooth_download_01.png [new file with mode: 0644]
data/images/bluetooth_download_02.png [new file with mode: 0644]
data/images/bluetooth_download_03.png [new file with mode: 0644]
data/images/bluetooth_download_04.png [new file with mode: 0644]
data/images/bluetooth_download_05.png [new file with mode: 0644]
data/images/bluetooth_download_complete.png [new file with mode: 0644]
data/images/bluetooth_download_failed.png [new file with mode: 0644]
data/images/bluetooth_inbound_transfer_failed.png [deleted file]
data/images/bluetooth_inbound_transfer_successed.png [deleted file]
data/images/bluetooth_outbound_transfer_failed.png [deleted file]
data/images/bluetooth_outbound_transfer_successed.png [deleted file]
data/images/bluetooth_upload_00.png [new file with mode: 0644]
data/images/bluetooth_upload_01.png [new file with mode: 0644]
data/images/bluetooth_upload_02.png [new file with mode: 0644]
data/images/bluetooth_upload_03.png [new file with mode: 0644]
data/images/bluetooth_upload_04.png [new file with mode: 0644]
data/images/bluetooth_upload_05.png [new file with mode: 0644]
data/images/bluetooth_upload_complete.png [new file with mode: 0644]
data/images/bluetooth_upload_failed.png [new file with mode: 0644]
packaging/org.tizen.bluetooth-share-ui.spec
src/applog.h
src/bt-share-ui-ipc.c
src/bt-share-ui-ipc.h
src/bt-share-ui-main.c
src/bt-share-ui-main.h [changed mode: 0755->0644]
src/bt-share-ui-popup.c [changed mode: 0755->0644]
src/bt-share-ui-popup.h
src/bt-share-ui-resource.h
src/bt-share-ui-view.c [changed mode: 0755->0644]
src/bt-share-ui-view.h
src/bt-share-ui-widget.c
src/bt-share-ui-widget.h

index 677c81f..29d90e2 100644 (file)
@@ -31,7 +31,6 @@ pkg_check_modules(pkgs REQUIRED
        efl-extension
        evas
        gobject-2.0
-       bluetooth-api
        aul
        capi-appfw-application
        capi-network-bluetooth
index 944e215..6f09f30 100644 (file)
 
 #define POPUP_TEXT_FONT_SIZE1 30
 #define POPUP_TEXT_FONT_SIZE2 24
-//#define POPUP_PROGRESSBAR_2TEXT_VIEW_LAYOUT_BG_MIN_INC 0 168
-#define POPUP_PROGRESSBAR_2TEXT_VIEW_LAYOUT_BG_MIN_INC 0 175
+#define POPUP_PROGRESSBAR_2TEXT_VIEW_LAYOUT_BG_MIN_INC 0 190
 #define POPUP_PROGRESSBAR_VIEW_LAYOUT_PADDING_INC 15 27
 #define POPUP_PROGRESSBAR_VIEW_LAYOUT_TEXT_FONT_SIZE_INC 0 38
 #define POPUP_PROGRESSBAR_VIEW_LAYOUT_SUBTEXT_FONT_SIZE_INC 0 32
-#define POPUP_PROGRESSBAR_VIEW_LAYOUT_BG_INC 0 69
+#define POPUP_PROGRESSBAR_VIEW_LAYOUT_BG_INC 0 7
+
+#define POPUP_PROCESSING_VIEW_LAYOUT_BG_MIN_INC 0 90
+#define POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_MIN_INC 36 36
+#define POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_MAX_INC 36 36
+#define POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_PADDING_AFTER_INC 32 90
+#define POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_TEXT_MIN_INC 0 90
+#define POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 32
 
 collections {
        base_scale: 1.8;
-       group {
-               name: "popup_2text_progressbar_view_layout";
+       group { name: "turning_on_view_layout";
                styles {
                        style {
-                               name: "popup_processing_style";
-                               base: "font=Tizen:style=Regular font_size="POPUP_TEXT_FONT_SIZE1" align=left color=#070707FF wrap=mixed text_class=tizen";
-                               // base: "font=Tizen:style=Regular align=left font_size="POPUP_TEXT_FONT_SIZE1" color=#FFFFFF color_class=T123 wrap=mixed ellipsis=1.0 text_class=T123";
-                               tag:  "br" "\n";
-                               tag:  "tab" "\t";
-                       }
-                       style {
-                               name: "popup_subtext_style";
-                               base: "font=Tizen:style=Regular font_size="POPUP_TEXT_FONT_SIZE2" align=left color=#070707FF wrap=mixed text_class=tizen";
-                               // base: "font=Tizen:style=Regular align=left font_size="POPUP_TEXT_FONT_SIZE2" color=#FFFFFF color_class=T024 wrap=mixed ellipsis=1.0 text_class=T024";
+                               name: "turning_on_processing_style";
+                               base: "font=Tizen:style=Regular align=left font_size="POPUP_TEXT_FONT_SIZE1" color=#000000 wrap=mixed ellipsis=1.0 text_class=tizen";
                                tag:  "br" "\n";
                                tag:  "tab" "\t";
                        }
@@ -45,225 +42,93 @@ collections {
                                name: "bg";
                                type: SPACER;
                                scale: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       min: POPUP_PROGRESSBAR_2TEXT_VIEW_LAYOUT_BG_MIN_INC;
-                                       fixed: 1 0;
+                               description { state: "default" 0.0;
+                               min: POPUP_PROCESSING_VIEW_LAYOUT_BG_MIN_INC;
+                               fixed: 1 0;
                                }
                        }
-                       part { name: "pad_l_t";
+                       part {
+                               name: "pad_l";
                                type: SPACER;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       min: POPUP_PROGRESSBAR_VIEW_LAYOUT_PADDING_INC;
-                                       max: POPUP_PROGRESSBAR_VIEW_LAYOUT_PADDING_INC;
-                                       fixed: 1 1;
-                                       rel2.relative: 0.0 0.0;
+                                       min: POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
                                        align: 0.0 0.0;
                                }
                        }
-                       part { name: "pad_r_t";
+                       part {
+                               name: "pad_r";
                                type: SPACER;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       min: POPUP_PROGRESSBAR_VIEW_LAYOUT_PADDING_INC;
-                                       max: POPUP_PROGRESSBAR_VIEW_LAYOUT_PADDING_INC;
-                                       fixed: 1 1;
-                                       rel1.relative: 1.0 1.0;
-                                       align: 1.0 1.0;
-                               }
-                       }
-                       part { name: "elm.text.description";
-                               type: TEXTBLOCK;
-                               scale: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       min: POPUP_PROGRESSBAR_VIEW_LAYOUT_TEXT_FONT_SIZE_INC;
-                                       fixed: 0 1;
-                                       rel1 {
-                                               relative: 1.0 1.0;
-                                               to: "pad_l_t";
-                                       }
-                                       rel2 {
-                                               relative: 0.0 1.0;
-                                               to_x: "pad_r_t";
-                                               to_y: "pad_l_t";
-                                       }
-                                       text {
-                                               style: "popup_processing_style";
-                                               min: 0 1;
-                                       }
-                                       align: 0.0 0.0;
+                                       min: POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
                                }
                        }
-                       part { name: "elm.subtext.description";
-                               type: TEXTBLOCK;
+                       part {
+                               name: "processing";
+                               type: SWALLOW;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       min: POPUP_PROGRESSBAR_VIEW_LAYOUT_SUBTEXT_FONT_SIZE_INC;
                                        fixed: 1 1;
+                                       min: POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_MIN_INC;
+                                       max: POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_MAX_INC;
                                        rel1 {
-                                               relative: 1.0 1.0;
-                                               to_x: "pad_l_t";
-                                               to_y: "elm.text.description";
+                                               relative: 1.0 0.0;
+                                               to_x: "pad_l";
                                        }
                                        rel2 {
                                                relative: 0.0 1.0;
-                                               to_x: "pad_r_t";
-                                               to_y: "elm.text.description";
-                                       }
-                                       text {
-                                               style: "popup_subtext_style";
-                                               min: 0 1;
+                                               to_x: "pad_r";
                                        }
-                                       align: 0.0 0.0;
+                                       align: 0.0 0.5;
                                }
                        }
                        part {
-                               name: "progressbar_bg";
+                               name: "pad_after_processing";
                                type: SPACER;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       fixed: 0 1;
-                                       min: POPUP_PROGRESSBAR_VIEW_LAYOUT_BG_INC;
+                                       fixed: 1 1;
+                                       min: POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_PADDING_AFTER_INC;
                                        rel1 {
-                                               relative: 1.0 1.0;
-                                               to_x: "pad_l_t";
-                                               to_y: "elm.subtext.description";
-                                               offset: 0 7;
-
-                                       }
-                                       rel2 {
-                                               relative: 0.0 1.0;
-                                               to_x: "pad_r_t";
-                                               to_y: "elm.subtext.description";
+                                               relative: 1.0 0.0;
+                                               to: "processing";
                                        }
-                                       align: 0.0 0.0;
+                                       rel2.to: "processing";
+                                       align: 0.0 0.5;
                                }
                        }
                        part {
-                               name: "progressbar";
-                               type: SWALLOW;
+                               name: "elm.text";
+                               type: TEXTBLOCK;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
+                                       min: POPUP_PROCESSING_SWALLOW_VIEW_LAYOUT_TEXT_MIN_INC;
                                        fixed: 0 1;
-                                       rel1.to: "progressbar_bg";
-                                       rel2.to: "progressbar_bg";
-                               }
-                       }
-               }
-       }
-
-
-       group { name: "progress_popup";
-               parts {
-                       part { name: "pad_t";
-                               type: SPACER;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       align: 0.5 0.0;
-                                       min: 0 BT_POPUP_PAD_H;
-                                       fixed: 0 1;
-                                       rel1 {
-                                               relative: 1.0 0.0;to_x: "pad_l";
-                                       }
-                                       rel2 {
-                                               relative: 0.0 0.0;to_x: "pad_r";
-                                       }
-                               }
-                       }
-                       part { name: "pad_l";
-                               type: SPACER;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       min: BT_POPUP_PAD_W 0;
-                                       max: BT_POPUP_PAD_W 0;
-                                       fixed: 1 0;
-                                       rel1 {
-                                               relative: 0.0 0.0;
-                                       }
-                                       rel2 {
-                                               relative: 0.0 1.0;
-                                       }
-                                       align: 0.0 0.0;
-                               }
-                       }
-                       part { name: "pad_r";
-                               type: SPACER;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       min: BT_POPUP_PAD_W 0;
-                                       max: BT_POPUP_PAD_W 0;
-                                       fixed: 1 0;
                                        rel1 {
                                                relative: 1.0 0.0;
-                                       }
-                                       rel2 {
-                                               relative: 1.0 1.0;
-                                       }
-                                       align: 1.0 0.0;
-                               }
-                       }
-
-                       part { name:"elm.swallow.content";
-                               type: SWALLOW;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       min: BT_POPUP_PROGRESSVIEW_CONTENT_MIN;
-                                       align: 0.5 0.5;
-                                       fixed: 1 0;
-                                       rel1 {
-                                               relative: 1.0 1.0;
-                                               to_x: "pad_l";
-                                               to_y: "pad_t";
-                                       }
-                                       rel2 {
-                                               relative: 0.0 0.0;
-                                               to_x: "pad_r";
-                                               to_y: "pad_pb";
-                                       }
-                               }
-                       }
-                       part { name: "elm.swallow.progressbar";
-                               type: SWALLOW;
-                               scale: 1;
-                               mouse_events: 1;
-                               repeat_events: 1;
-                               description { state: "default" 0.0;
-                                       align: 0.5 1.0;
-                                       min: BT_POPUP_PROGRESSVIEW_PROGRESS_MIN;
-                                       fixed: 1 1;
-                                       rel1 {
-                                               relative: 1.0 0.0;
-                                               to_x: "pad_l";
-                                               to_y: "pad_pb";
+                                               to: "pad_after_processing";
                                        }
                                        rel2 {
                                                relative: 0.0 1.0;
                                                to_x: "pad_r";
-                                               to_y: "pad_pb";
                                        }
-                               }
-                       }
-                       part { name: "pad_pb";
-                               type: SPACER;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       align: 0.5 1.0;
-                                       min: 320 55;
-                                       fixed: 1 1;
-                                       rel1 {
-                                               relative: 1.0 1.0;
-                                               to_x: "pad_l";
-                                       }
-                                       rel2 {
-                                               relative: 0.0 1.0;
-                                               to_x: "pad_r";
+                                       align: 0.0 0.5;
+                                       text {
+                                               style: "turning_on_processing_style";
+                                               min: 0 1;
                                        }
                                }
                        }
@@ -281,7 +146,7 @@ collections {
                                        state: "default" 0;
                                        rel1 { relative: 0 0; }
                                        rel2 { relative: 1 1; }
-                                       color: 20 107 147 255;
+                                       color_class: "B011";
                                }
                        }
 
@@ -338,5 +203,123 @@ collections {
                        }
                }
        }
+       group { name: "toolbar_button_ly";
+               parts {
+                       part { name: "bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                       }
+                       part {
+                               name: "left_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 80 0;
+                                       fixed: 1 0;
+                                       align: 0.0 0.0;
+                                       rel1.to: "bg";
+                                       rel2.to: "bg";
+                                       rel2.relative: 0.0 1.0;
+                               }
+                       }
+                       part{
+                               name: "right_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 80 0;
+                                       fixed: 1 0;
+                                       align: 1.0 0.0;
+                                       rel1 {
+                                               to: "bg";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2.to: "bg";
+                               }
+                       }
+                       part {
+                               name: "button";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative : 1.0 0.0;
+                                               to: "left_padding";
+                                       }
+                                       rel2 {
+                                               relative : 0.0 1.0;
+                                               to: "right_padding";
+                                       }
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+       }
+       group { name: "gl_custom_item";
+          parts {
+             part { name: "base";
+                type: SPACER;
+                scale: 1;
+                description { state: "default" 0.0;
+                   min: 0 120; //GENLIST_ITEM_1LINE_HEIGHT
+                }
+             }
+             part { name: "left_padding";
+                type: SPACER;
+                scale: 1;
+                description { state: "default" 0.0;
+                   min: 24 0;
+                   align: 0.0 0.0;
+                   rel1 { to: "base"; relative: 0.0 0.0; }
+                   rel2 { to: "base"; relative: 0.0 1.0; }
+                }
+             }
+             part { name: "right_padding";
+                type: SPACER;
+                scale: 1;
+                description { state: "default" 0.0;
+                   min: 24 0;
+                   align: 1.0 0.0;
+                   rel1 { to: "base"; relative: 1.0 0.0; }
+                   rel2 { to: "base"; relative: 1.0 1.0; }
+                }
+             }
+             part { name: "top_padding";
+                type: SPACER;
+                scale: 1;
+                description { state: "default" 0.0;
+                   min: 0 10;
+                   align: 0.0 0.0;
+                   rel1 { to_x: "left_padding"; to_y: "base"; relative: 1.0 0.0; }
+                   rel2 { to_x: "right_padding"; to_y: "base"; relative: 0.0 0.0; }
+                }
+             }
+             part { name: "elm.swallow.content";
+                type: SWALLOW;
+                scale: 1;
+                description { state: "default" 0.0;
+                   align: 0.5 0.0;
+                   rel1 { to: "top_padding"; relative: 0.0 1.0; }
+                   rel2 { to: "bottom_padding"; relative: 1.0 0.0; }
+                }
+             }
+             part { name: "bottom_padding";
+                type: SPACER;
+                scale: 1;
+                description { state: "default" 0.0;
+                   min: 0 10;
+                   align: 0.5 1.0;
+                   rel1 { to: "base"; relative: 0.0 1.0; }
+                   rel2 { to: "base"; relative: 1.0 1.0; }
+                }
+             }
+          }
+       }
 }
-
diff --git a/data/edc/bt_share_icon_animation.edc b/data/edc/bt_share_icon_animation.edc
new file mode 100644 (file)
index 0000000..435ce01
--- /dev/null
@@ -0,0 +1,178 @@
+#define LEFT_PADDING_WIDTH     32
+#define ICON_SIZE 64 64
+#define TIMER_INTERVAL 0.3
+
+#define DSC_FROM_L( STATE, PARAM ) \
+   description { state: STATE; \
+      fixed: 1 0; \
+      align: 0.0 0.5; \
+      rel2.relative: 0.0 1.0; \
+      PARAM \
+   }
+
+#define DSC_FROM_R( STATE, PARAM ) \
+   description { state: STATE; \
+      fixed: 1 0; \
+      align: 1.0 0.5; \
+      rel1.relative: 1 0; \
+      PARAM \
+   }
+
+#define LR_PADDING() \
+       part { \
+               name: "elm.padding.left"; \
+               type: SPACER; \
+               scale: 1; \
+               DSC_FROM_L("default" 0.0, \
+                       min: LEFT_PADDING_WIDTH 0; \
+                       max: LEFT_PADDING_WIDTH -1; \
+               ) \
+       } \
+       part { \
+               name: "elm.padding.right"; \
+               type: SPACER; \
+               scale: 1; \
+               DSC_FROM_R("default" 0.0, \
+                       min: 0 0; \
+                       max: 0 -1; \
+               ) \
+       }
+
+#define DESCRIPTION( STATE, NORMAL ) \
+       description { state: STATE; \
+               inherit: "default" 0.0; \
+               image { \
+                       normal: NORMAL; \
+                       border: 0 0 0 0; \
+                       border_scale: 1; \
+               } \
+               visible: 1; \
+               color_class: "AO002"; \
+       }
+
+#define ROTATE_DESCRIPTION( STATE,  ANGLE) \
+       description { state: STATE; \
+               inherit: "default" 0.0; \
+               map { \
+                       on: 1; \
+                       smooth: 0; \
+                       rotation { \
+                               z: ANGLE; \
+                       } \
+               } \
+               color_class: "AO002"; \
+       }
+
+#define PROGRAM(NAME, STATE, INTERVAL, AFTER) \
+       program { name: NAME; \
+               action: STATE_SET STATE; \
+               target: "elm.image.icon.ani"; \
+               transition: LINEAR INTERVAL; \
+               after: AFTER; \
+       }
+
+#define IMAGES( PARAM ) \
+       images { \
+               image: "bluetooth_" ## PARAM ## "_00.png" COMP; \
+               image: "bluetooth_" ## PARAM ## "_01.png" COMP; \
+               image: "bluetooth_" ## PARAM ## "_02.png" COMP; \
+               image: "bluetooth_" ## PARAM ## "_03.png" COMP; \
+               image: "bluetooth_" ## PARAM ## "_04.png" COMP; \
+               image: "bluetooth_" ## PARAM ## "_05.png" COMP; \
+       }
+
+collections {
+       base_scale: 2.6;
+
+       group {
+               name: "bt_share_download";
+
+               IMAGES( "download" )
+
+               parts {
+
+                       LR_PADDING()
+
+                       part {
+                               name: "elm.image.icon.ani";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 1 0; to_x: "elm.padding.left"; }
+                                       rel2 { relative: 0 1; to_x: "elm.padding.right"; }
+                                       min: ICON_SIZE;
+                                       max: ICON_SIZE;
+                                       color_class: "W0114";
+                               }
+
+                               DESCRIPTION( "downloading0" 0.0, "bluetooth_download_00.png" )
+                               DESCRIPTION( "downloading1" 0.0, "bluetooth_download_01.png" )
+                               DESCRIPTION( "downloading2" 0.0, "bluetooth_download_02.png" )
+                               DESCRIPTION( "downloading3" 0.0, "bluetooth_download_03.png" )
+                               DESCRIPTION( "downloading4" 0.0, "bluetooth_download_04.png" )
+                               DESCRIPTION( "downloading5" 0.0, "bluetooth_download_05.png" )
+                       }
+               }
+
+               programs {
+                       program {
+                               signal: "load";
+                               source: "";
+                               after: "animation0";
+                       }
+                       PROGRAM("animation0", "downloading0" 0.0, 0.0, "animation1")
+                       PROGRAM("animation1", "downloading1" 0.0, TIMER_INTERVAL, "animation2")
+                       PROGRAM("animation2", "downloading2" 0.0, TIMER_INTERVAL, "animation3")
+                       PROGRAM("animation3", "downloading3" 0.0, TIMER_INTERVAL, "animation4")
+                       PROGRAM("animation4", "downloading4" 0.0, TIMER_INTERVAL, "animation5")
+                       PROGRAM("animation5", "downloading5" 0.0, TIMER_INTERVAL, "animation0")
+               }
+       }
+
+       group {
+               name: "bt_share_upload";
+
+               IMAGES( "upload" )
+
+               parts {
+
+                       LR_PADDING()
+
+                       part {
+                               name: "elm.image.icon.ani";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 1 0; to_x: "elm.padding.left"; }
+                                       rel2 { relative: 0 1; to_x: "elm.padding.right"; }
+                                       min: ICON_SIZE;
+                                       max: ICON_SIZE;
+                                       color_class: "W0114";
+                               }
+
+                               DESCRIPTION( "uploading0" 0.0, "bluetooth_upload_00.png" )
+                               DESCRIPTION( "uploading1" 0.0, "bluetooth_upload_01.png" )
+                               DESCRIPTION( "uploading2" 0.0, "bluetooth_upload_02.png" )
+                               DESCRIPTION( "uploading3" 0.0, "bluetooth_upload_03.png" )
+                               DESCRIPTION( "uploading4" 0.0, "bluetooth_upload_04.png" )
+                               DESCRIPTION( "uploading5" 0.0, "bluetooth_upload_05.png" )
+                       }
+               }
+
+               programs {
+                       program {
+                               signal: "load";
+                               source: "";
+                               after: "animation0";
+                       }
+                       PROGRAM("animation0", "uploading0" 0.0, 0.0, "animation1")
+                       PROGRAM("animation1", "uploading1" 0.0, TIMER_INTERVAL, "animation2")
+                       PROGRAM("animation2", "uploading2" 0.0, TIMER_INTERVAL, "animation3")
+                       PROGRAM("animation3", "uploading3" 0.0, TIMER_INTERVAL, "animation4")
+                       PROGRAM("animation4", "uploading4" 0.0, TIMER_INTERVAL, "animation5")
+                       PROGRAM("animation5", "uploading5" 0.0, TIMER_INTERVAL, "animation0")
+               }
+       }
+}
index 89c0dfb..2b88bd9 100644 (file)
@@ -2,8 +2,8 @@
 
 collections {
    base_scale: 1.8;
-   RESOURCE_IMAGE_TRANSFER("bluetooth_inbound_transfer_failed.png");
-   RESOURCE_IMAGE_TRANSFER("bluetooth_inbound_transfer_successed.png");
-   RESOURCE_IMAGE_TRANSFER("bluetooth_outbound_transfer_failed.png");
-   RESOURCE_IMAGE_TRANSFER("bluetooth_outbound_transfer_successed.png");
+   RESOURCE_IMAGE_TRANSFER("bluetooth_download_failed.png");
+   RESOURCE_IMAGE_TRANSFER("bluetooth_download_complete.png");
+   RESOURCE_IMAGE_TRANSFER("bluetooth_upload_failed.png");
+   RESOURCE_IMAGE_TRANSFER("bluetooth_upload_complete.png");
 }
diff --git a/data/images/bluetooth_download_00.png b/data/images/bluetooth_download_00.png
new file mode 100644 (file)
index 0000000..a172fa8
Binary files /dev/null and b/data/images/bluetooth_download_00.png differ
diff --git a/data/images/bluetooth_download_01.png b/data/images/bluetooth_download_01.png
new file mode 100644 (file)
index 0000000..2a19028
Binary files /dev/null and b/data/images/bluetooth_download_01.png differ
diff --git a/data/images/bluetooth_download_02.png b/data/images/bluetooth_download_02.png
new file mode 100644 (file)
index 0000000..e77b06a
Binary files /dev/null and b/data/images/bluetooth_download_02.png differ
diff --git a/data/images/bluetooth_download_03.png b/data/images/bluetooth_download_03.png
new file mode 100644 (file)
index 0000000..cf943f9
Binary files /dev/null and b/data/images/bluetooth_download_03.png differ
diff --git a/data/images/bluetooth_download_04.png b/data/images/bluetooth_download_04.png
new file mode 100644 (file)
index 0000000..c277c02
Binary files /dev/null and b/data/images/bluetooth_download_04.png differ
diff --git a/data/images/bluetooth_download_05.png b/data/images/bluetooth_download_05.png
new file mode 100644 (file)
index 0000000..245f811
Binary files /dev/null and b/data/images/bluetooth_download_05.png differ
diff --git a/data/images/bluetooth_download_complete.png b/data/images/bluetooth_download_complete.png
new file mode 100644 (file)
index 0000000..461ca3f
Binary files /dev/null and b/data/images/bluetooth_download_complete.png differ
diff --git a/data/images/bluetooth_download_failed.png b/data/images/bluetooth_download_failed.png
new file mode 100644 (file)
index 0000000..ecef32a
Binary files /dev/null and b/data/images/bluetooth_download_failed.png differ
diff --git a/data/images/bluetooth_inbound_transfer_failed.png b/data/images/bluetooth_inbound_transfer_failed.png
deleted file mode 100644 (file)
index 303e974..0000000
Binary files a/data/images/bluetooth_inbound_transfer_failed.png and /dev/null differ
diff --git a/data/images/bluetooth_inbound_transfer_successed.png b/data/images/bluetooth_inbound_transfer_successed.png
deleted file mode 100644 (file)
index 23754e6..0000000
Binary files a/data/images/bluetooth_inbound_transfer_successed.png and /dev/null differ
diff --git a/data/images/bluetooth_outbound_transfer_failed.png b/data/images/bluetooth_outbound_transfer_failed.png
deleted file mode 100644 (file)
index a668c13..0000000
Binary files a/data/images/bluetooth_outbound_transfer_failed.png and /dev/null differ
diff --git a/data/images/bluetooth_outbound_transfer_successed.png b/data/images/bluetooth_outbound_transfer_successed.png
deleted file mode 100644 (file)
index 157f7bb..0000000
Binary files a/data/images/bluetooth_outbound_transfer_successed.png and /dev/null differ
diff --git a/data/images/bluetooth_upload_00.png b/data/images/bluetooth_upload_00.png
new file mode 100644 (file)
index 0000000..87262c9
Binary files /dev/null and b/data/images/bluetooth_upload_00.png differ
diff --git a/data/images/bluetooth_upload_01.png b/data/images/bluetooth_upload_01.png
new file mode 100644 (file)
index 0000000..5b8b7f2
Binary files /dev/null and b/data/images/bluetooth_upload_01.png differ
diff --git a/data/images/bluetooth_upload_02.png b/data/images/bluetooth_upload_02.png
new file mode 100644 (file)
index 0000000..3339605
Binary files /dev/null and b/data/images/bluetooth_upload_02.png differ
diff --git a/data/images/bluetooth_upload_03.png b/data/images/bluetooth_upload_03.png
new file mode 100644 (file)
index 0000000..335b5a8
Binary files /dev/null and b/data/images/bluetooth_upload_03.png differ
diff --git a/data/images/bluetooth_upload_04.png b/data/images/bluetooth_upload_04.png
new file mode 100644 (file)
index 0000000..7c2f798
Binary files /dev/null and b/data/images/bluetooth_upload_04.png differ
diff --git a/data/images/bluetooth_upload_05.png b/data/images/bluetooth_upload_05.png
new file mode 100644 (file)
index 0000000..f84453b
Binary files /dev/null and b/data/images/bluetooth_upload_05.png differ
diff --git a/data/images/bluetooth_upload_complete.png b/data/images/bluetooth_upload_complete.png
new file mode 100644 (file)
index 0000000..a2449be
Binary files /dev/null and b/data/images/bluetooth_upload_complete.png differ
diff --git a/data/images/bluetooth_upload_failed.png b/data/images/bluetooth_upload_failed.png
new file mode 100644 (file)
index 0000000..72966d9
Binary files /dev/null and b/data/images/bluetooth_upload_failed.png differ
index 979a85e..158a163 100755 (executable)
@@ -3,7 +3,7 @@
 
 Name:       org.tizen.bluetooth-share-ui
 Summary:    bluetooth share UI application
-Version:    0.0.89
+Version:    0.1.0
 Release:    1
 Group:      TO_BE_FILLED
 License:    Flora-1.1
@@ -24,7 +24,6 @@ BuildRequires:  pkgconfig(edje)
 BuildRequires:  pkgconfig(elementary)
 BuildRequires:  pkgconfig(efl-extension)
 BuildRequires:  pkgconfig(evas)
-BuildRequires:  pkgconfig(bluetooth-api)
 BuildRequires:  pkgconfig(aul)
 BuildRequires:  pkgconfig(capi-appfw-application)
 BuildRequires:  pkgconfig(capi-network-bluetooth)
index 2acc160..a2fdffd 100644 (file)
@@ -29,9 +29,6 @@ extern "C" {
 #endif
 
 /*
- * warn_if(exrp, fmt, ...)
- *   If expr is true, The fmt string is printed using ERR().
- *
  * ret_if(), retv_if(), retm_if(), retvm_if()
  *   If expr is true, current function return.
  *   Postfix 'v' means that it has a return value and
@@ -61,11 +58,6 @@ extern "C" {
 #define        FN_START DBG("[ENTER FUNC]");
 #define        FN_END DBG("[EXIT FUNC]");
 
-#define warn_if(expr, fmt, arg...) do { \
-               if (expr) { \
-                       ERR(fmt, ##arg); \
-               } \
-       } while (0)
 #define ret_if(expr) do { \
                if (expr) { \
                        return; \
index 53d3597..e06d9a0 100644 (file)
@@ -26,6 +26,7 @@
 #include <glib.h>
 #include <stdlib.h>
 #include <string.h>
+#include <notification.h>
 #include <bluetooth-share-api.h>
 #include "applog.h"
 #include "bt-share-ui-main.h"
 #include "bt-share-ui-view.h"
 #include "bt-share-ui-popup.h"
 #include "bt-share-ui-resource.h"
-
+#include "bt-share-ui-widget.h"
 
 #define BT_ADDRESS_LENGTH_MAX  6
 #define DBUS_CORE_APPS_PATH "/Org/Tizen/Coreapps/home/raise"
 #define DBUS_CORE_APPS_INTERFACE "org.tizen.coreapps.home.raise"
 #define DBUS_CORE_APPS_MEMBER "homeraise"
 
+static gboolean opc_launched_session;
+
+void _bt_set_opc_launched_session(gboolean value)
+{
+       opc_launched_session = value;
+}
 
 static void __handle_opp_client_signal(void *data, DBusMessage *msg)
 {
-       bluetooth_event_param_t event_info = { 0, };
-       int result = BLUETOOTH_ERROR_NONE;
+       bt_share_event_param_t event_info = { 0, };
+       int result = BT_SHARE_UI_ERROR_NONE;
        const char *member = dbus_message_get_member(msg);
 
        retm_if(data == NULL, "Invalid argument: data is NULL\n");
        retm_if(msg == NULL, "Invalid argument: msg is NULL\n");
-
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       retm_if(ad->tr_type == BT_TR_INBOUND, "Invalid tr_type: BT_TR_INBOUND");
        if (dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_SIGNAL)
                return;
 
@@ -64,7 +72,7 @@ static void __handle_opp_client_signal(void *data, DBusMessage *msg)
        if (strcasecmp(member, BT_OPP_CONNECTED) == 0) {
                char *address = NULL;
                int request_id = 0;
-
+               DBG("BT_OPP_CONNECTED signal");
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
                        DBUS_TYPE_STRING, &address,
@@ -73,19 +81,60 @@ static void __handle_opp_client_signal(void *data, DBusMessage *msg)
                        ERR("Unexpected parameters in signal");
                        return;
                }
-               event_info.event = BLUETOOTH_EVENT_OPC_CONNECTED;
+               event_info.event = BT_SHARE_UI_EVENT_OPC_CONNECTED;
                event_info.param_data = address;
                event_info.result = result;
                event_info.user_data = data;
+               DBG("Event BT_SHARE_UI_EVENT_OPC_CONNECTED");
+               _bt_share_ui_event_handler(BT_SHARE_UI_EVENT_OPC_CONNECTED,
+                               &event_info, event_info.user_data);
+       } else if (strcasecmp(member, BT_TRANSFER_STARTED) == 0) {
+               char *file_path = NULL;
+               char *file_name = NULL;
+               char *device_addr = NULL;
+               int request_id = 0;
+               guint64 size = 0;
+               bt_share_transfer_info_t transfer_info;
+
+               if (!dbus_message_get_args(msg, NULL,
+                       DBUS_TYPE_INT32, &result,
+                       DBUS_TYPE_STRING, &device_addr,
+                       DBUS_TYPE_STRING, &file_path,
+                       DBUS_TYPE_UINT64, &size,
+                       DBUS_TYPE_INT32, &request_id,
+                       DBUS_TYPE_INVALID)) {
+                       ERR("Unexpected parameters in signal");
+                       return;
+               }
+
+               file_name = g_path_get_basename(file_path);
+               DBG("file_name:%s file_path:%s", file_name, file_path);
+
+               memset(&transfer_info, 0x00, sizeof(bt_share_transfer_info_t));
+
+               transfer_info.device_addr = g_strdup(device_addr);
+               transfer_info.filename = g_strdup(file_name);
+               transfer_info.size = size;
+               transfer_info.percentage = 0;
 
-               _bt_share_ui_event_handler(BLUETOOTH_EVENT_OPC_CONNECTED,
+               event_info.event = BT_SHARE_UI_EVENT_OPC_TRANSFER_STARTED;
+               event_info.param_data = &transfer_info;
+               event_info.result = result;
+               event_info.user_data = data;
+
+               _bt_share_ui_event_handler(
+                               BT_SHARE_UI_EVENT_OPC_TRANSFER_STARTED,
                                &event_info, event_info.user_data);
+
+               g_free(transfer_info.device_addr);
+               g_free(transfer_info.filename);
+               g_free(file_name);
        } else if (strcasecmp(member, BT_TRANSFER_PROGRESS) == 0) {
                char *file_name = NULL;
                int request_id = 0;
                guint64 size = 0;
                int progress = 0;
-               bt_opc_transfer_info_t transfer_info;
+               bt_share_transfer_info_t transfer_info;
 
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
@@ -98,33 +147,32 @@ static void __handle_opp_client_signal(void *data, DBusMessage *msg)
                        return;
                }
 
-               memset(&transfer_info, 0x00, sizeof(bt_opc_transfer_info_t));
+               memset(&transfer_info, 0x00, sizeof(bt_share_transfer_info_t));
 
                transfer_info.filename = g_strdup(file_name);
                transfer_info.size = size;
                transfer_info.percentage = progress;
 
-               event_info.event = BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS;
+               event_info.event = BT_SHARE_UI_EVENT_OPC_TRANSFER_PROGRESS;
                event_info.param_data = &transfer_info;
                event_info.result = result;
                event_info.user_data = data;
 
                _bt_share_ui_event_handler(
-                               BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS,
+                               BT_SHARE_UI_EVENT_OPC_TRANSFER_PROGRESS,
                                &event_info, event_info.user_data);
 
                g_free(transfer_info.filename);
        } else if (strcasecmp(member, BT_TRANSFER_COMPLETED) == 0) {
                char *file_name = NULL;
-               char *address = NULL;
-
+               char *device_addr = NULL;
                int request_id = 0;
                guint64 size = 0;
-               bt_opc_transfer_info_t transfer_info;
+               bt_share_transfer_info_t transfer_info;
 
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_STRING, &address,
+                       DBUS_TYPE_STRING, &device_addr,
                        DBUS_TYPE_STRING, &file_name,
                        DBUS_TYPE_UINT64, &size,
                        DBUS_TYPE_INT32, &request_id,
@@ -133,33 +181,58 @@ static void __handle_opp_client_signal(void *data, DBusMessage *msg)
                        return;
                }
 
-               memset(&transfer_info, 0x00, sizeof(bt_opc_transfer_info_t));
+               memset(&transfer_info, 0x00, sizeof(bt_share_transfer_info_t));
 
+               transfer_info.device_addr = g_strdup(device_addr);
                transfer_info.filename = g_strdup(file_name);
                transfer_info.size = size;
 
-               event_info.event = BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE;
+               event_info.event = BT_SHARE_UI_EVENT_OPC_TRANSFER_COMPLETE;
                event_info.param_data = &transfer_info;
                event_info.result = result;
                event_info.user_data = data;
 
                _bt_share_ui_event_handler(
-                               BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE,
+                               BT_SHARE_UI_EVENT_OPC_TRANSFER_COMPLETE,
                                &event_info, event_info.user_data);
 
+               g_free(transfer_info.device_addr);
                g_free(transfer_info.filename);
+       } else if (strcasecmp(member, BT_OPP_CLIENT_DISCONNECTED) == 0) {
+               DBG("BT_OPP_CLIENT_DISCONNECTED signal");
+               char *device_addr = NULL;
+               int request_id = 0;
+
+               if (!dbus_message_get_args(msg, NULL,
+                       DBUS_TYPE_INT32, &result,
+                       DBUS_TYPE_STRING, &device_addr,
+                       DBUS_TYPE_INT32, &request_id,
+                       DBUS_TYPE_INVALID)) {
+                       ERR("Unexpected parameters in signal");
+                       return;
+               }
+
+               event_info.event = BT_SHARE_UI_EVENT_OPC_DISCONNECTED;
+               event_info.param_data = device_addr;
+               event_info.result = result;
+               event_info.user_data = data;
+
+               _bt_share_ui_event_handler(
+                               BT_SHARE_UI_EVENT_OPC_DISCONNECTED,
+                               &event_info, event_info.user_data);
        }
 }
 
 static void __handle_obex_server_signal(void *data, DBusMessage *msg)
 {
-       bluetooth_event_param_t event_info = { 0, };
-       int result = BLUETOOTH_ERROR_NONE;
+       bt_share_event_param_t event_info = { 0, };
+       int result = BT_SHARE_UI_ERROR_NONE;
        const char *member = dbus_message_get_member(msg);
 
        retm_if(data == NULL, "Invalid argument: data is NULL\n");
        retm_if(msg == NULL, "Invalid argument: msg is NULL\n");
-
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       retm_if(ad->tr_type == BT_TR_OUTBOUND, "Invalid tr_type: BT_TR_OUTBOUND");
        if (dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_SIGNAL)
                return;
 
@@ -178,7 +251,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                int transfer_id = 0;
                int server_type = 0; /* bt_server_type_t */
                guint64 size = 0;
-               bt_obex_server_transfer_info_t transfer_info;
+               bt_share_server_transfer_info_t transfer_info;
 
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
@@ -195,7 +268,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                }
 
                memset(&transfer_info, 0x00,
-                       sizeof(bt_obex_server_transfer_info_t));
+                       sizeof(bt_share_server_transfer_info_t));
 
                transfer_info.device_name = g_strdup(device_name);
                transfer_info.address = g_strdup(device_addr);
@@ -205,13 +278,13 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                transfer_info.transfer_id = transfer_id;
                transfer_info.percentage = 0;
 
-               event_info.event = BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED;
+               event_info.event = BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_STARTED;
                event_info.param_data = &transfer_info;
                event_info.result = result;
                event_info.user_data = data;
 
                _bt_share_ui_event_handler(
-                               BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED,
+                               BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_STARTED,
                                &event_info, event_info.user_data);
 
                g_free(transfer_info.device_name);
@@ -227,7 +300,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                int progress = 0;
                int server_type = 0; /* bt_server_type_t */
                guint64 size = 0;
-               bt_obex_server_transfer_info_t transfer_info;
+               bt_share_server_transfer_info_t transfer_info;
 
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
@@ -245,7 +318,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                }
 
                memset(&transfer_info, 0x00,
-                       sizeof(bt_obex_server_transfer_info_t));
+                       sizeof(bt_share_server_transfer_info_t));
 
                transfer_info.device_name = g_strdup(device_name);
                transfer_info.address = g_strdup(device_addr);
@@ -255,13 +328,13 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                transfer_info.transfer_id = transfer_id;
                transfer_info.percentage = progress;
 
-               event_info.event = BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_PROGRESS;
+               event_info.event = BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_PROGRESS;
                event_info.param_data = &transfer_info;
                event_info.result = result;
                event_info.user_data = data;
 
                _bt_share_ui_event_handler(
-                               BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_PROGRESS,
+                               BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_PROGRESS,
                                &event_info, event_info.user_data);
 
                g_free(transfer_info.device_name);
@@ -277,7 +350,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                int transfer_id = 0;
                int server_type = 0; /* bt_server_type_t */
                guint64 size = 0;
-               bt_obex_server_transfer_info_t transfer_info;
+               bt_share_server_transfer_info_t transfer_info;
 
                if (!dbus_message_get_args(msg, NULL,
                        DBUS_TYPE_INT32, &result,
@@ -295,7 +368,7 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                }
 
                memset(&transfer_info, 0x00,
-                               sizeof(bt_obex_server_transfer_info_t));
+                               sizeof(bt_share_server_transfer_info_t));
 
                transfer_info.filename = g_strdup(file_name);
                transfer_info.type = g_strdup(type);
@@ -305,13 +378,13 @@ static void __handle_obex_server_signal(void *data, DBusMessage *msg)
                transfer_info.file_size = size;
                transfer_info.transfer_id = transfer_id;
 
-               event_info.event = BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_COMPLETED;
+               event_info.event = BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_COMPLETED;
                event_info.param_data = &transfer_info;
                event_info.result = result;
                event_info.user_data = data;
 
                _bt_share_ui_event_handler(
-                               BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_COMPLETED,
+                               BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_COMPLETED,
                                &event_info, event_info.user_data);
 
                g_free(transfer_info.filename);
@@ -344,6 +417,55 @@ static void __handle_update_view_signal(void *data, DBusMessage * msg)
        _bt_share_ui_handle_update_view(ad, db);
 }
 
+static void __handle_opp_disconnect_signal(void *data, DBusMessage * msg)
+{
+       DBG("+");
+       bt_share_event_param_t event_info = { 0, };
+       bt_share_server_transfer_info_t transfer_info = { 0, };
+       char *address = NULL;
+       char *member = NULL;
+       int result = BT_SHARE_UI_ERROR_NONE;
+       int transfer_id = -1;
+
+       retm_if(data == NULL, "Invalid argument: data is NULL\n");
+       retm_if(msg == NULL, "Invalid argument: msg is NULL\n");
+
+       member = (char *)dbus_message_get_member(msg);
+       retm_if(member == NULL, "Invalid argument: member is NULL\n");
+
+       if (strcasecmp(member, BT_OPP_CLIENT_DISCONNECTED) == 0) {
+               DBG("BT_OPP_CLIENT_DISCONNECTED");
+               event_info.event = BT_SHARE_UI_EVENT_OPC_DISCONNECTED;
+       } else if (strcasecmp(member, BT_OPP_SERVER_DISCONNECTED) == 0) {
+               DBG("BT_OPP_SERVER_DISCONNECTED");
+               event_info.event = BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_DISCONNECTED;
+       } else {
+               DBG("Unhandled Signal");
+               return;
+       }
+
+       if (!dbus_message_get_args(msg, NULL,
+                       DBUS_TYPE_INT32, &result,
+                       DBUS_TYPE_STRING, &address,
+                       DBUS_TYPE_INT32, &transfer_id,
+                       DBUS_TYPE_INVALID)) {
+               ERR("get_args failed");
+               return;
+       }
+
+       transfer_info.file_path = address;
+       transfer_info.transfer_id = transfer_id;
+
+       event_info.result = result;
+       event_info.user_data = data;
+       event_info.param_data = &transfer_info;
+
+       _bt_share_ui_event_handler(event_info.event, &event_info,
+                       event_info.user_data);
+
+       DBG("-");
+}
+
 static void __handle_home_key_signal(void *data, DBusMessage *msg)
 {
        const char *member;
@@ -363,46 +485,126 @@ static void __handle_home_key_signal(void *data, DBusMessage *msg)
 
        DBG("Received signal : %s", member);
 
-       if (strcasecmp(member, DBUS_CORE_APPS_MEMBER) == 0) {
+       if (strcasecmp(member, DBUS_CORE_APPS_MEMBER) == 0)
                _bt_terminate_app();
-       }
 }
 
 static void __bt_add_tr_data_list(bt_share_appdata_t *ad, int transfer_type)
 {
        GSList *list = NULL;
+       GSList *next = NULL;
        sqlite3 *db = NULL;
        bt_tr_data_t *info = NULL;
+       bt_tr_data_t *tr_data = NULL;
+       int success = 0;
+       int failed = 0;
        int len = 0;
        int i;
+       retm_if(!ad, "ad is NULL!");
+
+       GSList *tr_data_list = ad->tr_data_list;
+       retm_if(!tr_data_list, "tr_data_list is NULL!");
+
+       Elm_Object_Item *git = elm_genlist_item_next_get(ad->file_title_item);
 
        db = bt_share_open_db();
        if (!db)
                return;
 
-       list = bt_share_get_completed_tr_data_list(db, transfer_type);
-       if (list == NULL) {
-               bt_share_close_db(db);
-               return;
-       }
+       list = bt_share_get_all_tr_data_by_sid(db, transfer_type,
+                       ad->transfer_info->device_address, ad->transfer_info->db_sid);
        bt_share_close_db(db);
+       retm_if(!list, "fail to get tr list!");
 
        /* Append new tr data to tr_data_list */
        len = g_slist_length(list);
+       next = list;
        for (i = 0; i < len; i++) {
-               info = list->data;
+               info = next->data;
+
+               if (info == NULL) {
+                       next = g_slist_next(next);
+                       if (tr_data_list)
+                               tr_data_list = g_slist_next(tr_data_list);
+                       if (git)
+                               git = elm_genlist_item_next_get(git);
+
+                       if (next == NULL)
+                               break;
+                       else
+                               continue;
+               }
+
+               if (info->tr_status == BT_TRANSFER_SUCCESS)
+                       success++;
+               else if (info->tr_status == BT_TRANSFER_FAIL)
+                       failed++;
+
+               DBG_SECURE("ID :%d Status:%d Filename :%s", info->id,
+                               info->tr_status, info->file_path);
+
+
                if (transfer_type == BT_TR_OUTBOUND &&
-                               info->id > ad->outbound_latest_id)
-                       ad->tr_data_list = g_slist_append(ad->tr_data_list, info);
-               else if (transfer_type == BT_TR_INBOUND &&
-                               info->id > ad->inbound_latest_id)
-                       ad->tr_data_list = g_slist_append(ad->tr_data_list, info);
-
-               list = g_slist_next(list);
-               if (list == NULL)
-                       return;
+                               info->id > ad->outbound_latest_id) {
+                       tr_data = g_new0(bt_tr_data_t, 1);
+                       tr_data->id = info->id;
+                       tr_data->sid = info->sid;
+                       tr_data->tr_status = info->tr_status;
+                       tr_data->file_path = g_strdup(info->file_path);
+                       tr_data->dev_name = g_strdup(info->dev_name);
+                       tr_data->timestamp = info->timestamp;
+                       tr_data->addr = g_strdup(info->addr);
+                       tr_data->type = g_strdup(info->type);
+                       tr_data->content = g_strdup(info->content);
+                       tr_data->size = info->size;
+                       ad->tr_data_list = g_slist_append(ad->tr_data_list, tr_data);
+               } else if (transfer_type == BT_TR_INBOUND &&
+                               info->id > ad->inbound_latest_id) {
+                       tr_data = g_new0(bt_tr_data_t, 1);
+                       tr_data->id = info->id;
+                       tr_data->sid = info->sid;
+                       tr_data->tr_status = info->tr_status;
+                       tr_data->file_path = g_strdup(info->file_path);
+                       tr_data->dev_name = g_strdup(info->dev_name);
+                       tr_data->timestamp = info->timestamp;
+                       tr_data->addr = g_strdup(info->addr);
+                       tr_data->type = g_strdup(info->type);
+                       tr_data->content = g_strdup(info->content);
+                       tr_data->size = info->size;
+                       ad->tr_data_list = g_slist_append(ad->tr_data_list, tr_data);
+               } else {
+                       // Update data in list
+                       bt_tr_data_t *list_info = NULL;
+                       list_info = tr_data_list->data;
+                       if (list_info->id == info->id) {
+                               list_info->timestamp = info->timestamp;
+                               list_info->tr_status = info->tr_status;
+                               list_info->size = info->size;
+                               if (list_info->type == NULL)
+                                       list_info->type = g_strdup(info->type);
+
+                               if (list_info->tr_status == BT_TRANSFER_ONGOING)
+                                       ad->current_item = git;
+                       }
+               }
+
+               next = g_slist_next(next);
+               if (next == NULL)
+                       break;
+
+               if (tr_data_list)
+                       tr_data_list = g_slist_next(tr_data_list);
+               if (git)
+                       git = elm_genlist_item_next_get(git);
        }
 
+       ad->transfer_info->success = success;
+       ad->transfer_info->failed = failed;
+       DBG("SUCCESS:%d, FAILED:%d", success, failed);
+       if (ad->status_item)
+               elm_genlist_item_fields_update(ad->status_item, "*",
+                               ELM_GENLIST_ITEM_FIELD_TEXT);
+
        bt_share_release_tr_data_list(list);
 }
 
@@ -421,7 +623,7 @@ void _bt_signal_init(bt_share_appdata_t *ad)
                                       NULL,
                                       BT_OPP_CLIENT_PATH,
                                       BT_EVENT_SERVICE,
-                                      BT_TRANSFER_CONNECTED,
+                                      BT_OPP_CONNECTED,
                                       __handle_opp_client_signal, ad);
        retm_if(sh == NULL, "Connect Event register failed\n");
        ad->client_connected_sh = sh;
@@ -430,6 +632,15 @@ void _bt_signal_init(bt_share_appdata_t *ad)
                                       NULL,
                                       BT_OPP_CLIENT_PATH,
                                       BT_EVENT_SERVICE,
+                                      BT_TRANSFER_STARTED,
+                                      __handle_opp_client_signal, ad);
+       retm_if(sh == NULL, "started Event register failed\n");
+       ad->client_started_sh = sh;
+
+       sh = e_dbus_signal_handler_add(conn,
+                                      NULL,
+                                      BT_OPP_CLIENT_PATH,
+                                      BT_EVENT_SERVICE,
                                       BT_TRANSFER_PROGRESS,
                                       __handle_opp_client_signal, ad);
        retm_if(sh == NULL, "progress Event register failed\n");
@@ -448,6 +659,15 @@ void _bt_signal_init(bt_share_appdata_t *ad)
                                       NULL,
                                       BT_OPP_SERVER_PATH,
                                       BT_EVENT_SERVICE,
+                                      BT_TRANSFER_STARTED,
+                                      __handle_obex_server_signal, ad);
+       retm_if(sh == NULL, "started Event register failed\n");
+       ad->server_started_sh = sh;
+
+       sh = e_dbus_signal_handler_add(conn,
+                                      NULL,
+                                      BT_OPP_SERVER_PATH,
+                                      BT_EVENT_SERVICE,
                                       BT_TRANSFER_PROGRESS,
                                       __handle_obex_server_signal, ad);
        retm_if(sh == NULL, "progress Event register failed\n");
@@ -473,6 +693,24 @@ void _bt_signal_init(bt_share_appdata_t *ad)
        ad->update_sh = sh;
 
        sh = e_dbus_signal_handler_add(conn,
+                                          NULL,
+                                          BT_SHARE_ENG_OBJECT,
+                                          BT_SHARE_ENG_INTERFACE,
+                                          BT_OPP_CLIENT_DISCONNECTED,
+                                          __handle_opp_disconnect_signal, ad);
+       retm_if(sh == NULL, "Disconnected Event register failed\n");
+       ad->client_disconnected_sh = sh;
+
+       sh = e_dbus_signal_handler_add(conn,
+                                          NULL,
+                                          BT_SHARE_ENG_OBJECT,
+                                          BT_SHARE_ENG_INTERFACE,
+                                          BT_OPP_SERVER_DISCONNECTED,
+                                          __handle_opp_disconnect_signal, ad);
+       retm_if(sh == NULL, "Disconnected Event register failed\n");
+       ad->server_disconnected_sh = sh;
+
+       sh = e_dbus_signal_handler_add(conn,
                                        NULL,
                                        DBUS_CORE_APPS_PATH,
                                        DBUS_CORE_APPS_INTERFACE,
@@ -486,28 +724,64 @@ void _bt_signal_init(bt_share_appdata_t *ad)
        return;
 }
 
-
 void _bt_signal_deinit(bt_share_appdata_t *ad)
 {
        ret_if(ad == NULL);
 
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->client_connected_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->client_progress_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->client_completed_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->server_progress_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->server_completed_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->update_sh);
-       e_dbus_signal_handler_del(ad->dbus_conn, ad->app_core_sh);
+       if (ad->client_connected_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->client_connected_sh);
+               ad->client_connected_sh = NULL;
+       }
+       if (ad->client_started_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->client_started_sh);
+               ad->client_started_sh = NULL;
+       }
+       if (ad->client_progress_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->client_progress_sh);
+               ad->client_progress_sh = NULL;
+       }
+       if (ad->client_completed_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->client_completed_sh);
+               ad->client_completed_sh = NULL;
+       }
+       if (ad->server_started_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->server_started_sh);
+               ad->server_started_sh = NULL;
+       }
+       if (ad->server_progress_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->server_progress_sh);
+               ad->server_progress_sh = NULL;
+       }
+       if (ad->server_completed_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->server_completed_sh);
+               ad->server_completed_sh = NULL;
+       }
+       if (ad->client_disconnected_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->client_disconnected_sh);
+               ad->client_disconnected_sh = NULL;
+       }
+       if (ad->server_disconnected_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->server_disconnected_sh);
+               ad->server_disconnected_sh = NULL;
+       }
+       if (ad->update_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->update_sh);
+               ad->update_sh = NULL;
+       }
+       if (ad->app_core_sh) {
+               e_dbus_signal_handler_del(ad->dbus_conn, ad->app_core_sh);
+               ad->app_core_sh = NULL;
+       }
        return;
 }
 
 int _bt_abort_signal_send(bt_share_appdata_t *ad,
-                               bt_share_popup_data_t *pb_data)
+               bt_share_abort_data_t *abort_data)
 {
        DBG("+");
        DBusMessage *msg = NULL;
 
-       retvm_if(pb_data == NULL, -1,
+       retvm_if(abort_data == NULL, -1,
                 "progressbar data is NULL\n");
        retvm_if(ad->dbus_conn == NULL, -1,
                 "Invalid argument: ad->dbus_conn is NULL\n");
@@ -519,8 +793,8 @@ int _bt_abort_signal_send(bt_share_appdata_t *ad,
        retvm_if(msg == NULL, -1, "msg is NULL\n");
 
        if (!dbus_message_append_args(msg,
-                       DBUS_TYPE_STRING, &pb_data->transfer_type,
-                       DBUS_TYPE_INT32, &pb_data->transfer_id,
+                       DBUS_TYPE_STRING, &abort_data->transfer_type,
+                       DBUS_TYPE_INT32, &abort_data->transfer_id,
                        DBUS_TYPE_INVALID)) {
                ERR("Abort sending failed");
                dbus_message_unref(msg);
@@ -529,8 +803,8 @@ int _bt_abort_signal_send(bt_share_appdata_t *ad,
 
        ad->opp_transfer_abort = TRUE; /* Transfer aborted by user */
 
-       INFO("pb_data->transfer_type = %s", pb_data->transfer_type);
-       INFO("pb_data->transfer_id = %d", pb_data->transfer_id);
+       INFO("abort_data->transfer_type = %s", abort_data->transfer_type);
+       INFO("abort_data->transfer_id = %d", abort_data->transfer_id);
 
        e_dbus_message_send(ad->dbus_conn, msg, NULL, -1, NULL);
        dbus_message_unref(msg);
@@ -558,7 +832,7 @@ static void __bt_conv_addr_string_to_addr_type(char *addr,
        }
 }
 
-int _bt_share_ui_ipc_retry_send(bt_share_appdata_t *ad, bt_tr_data_t *info)
+int _bt_share_ui_retry_failed(bt_share_appdata_t *ad)
 {
        DBG("+");
        DBusMessage *msg = NULL;
@@ -566,58 +840,73 @@ int _bt_share_ui_ipc_retry_send(bt_share_appdata_t *ad, bt_tr_data_t *info)
        DBusMessageIter array_iter;
        DBusMessageIter file_iter;
        DBusMessageIter filepath_iter;
-       const char *bd_addr = NULL;
-       char **file_path;
+       char *bd_addr = NULL;
+       char **file_path = NULL;
        int i;
+       int count;
+       bt_tr_data_t *info = NULL;
+       int files_count;
+       int valid_files_count;
+       GSList *current = NULL;
+       GSList *failed = NULL;
 
-       retvm_if(info == NULL, -1, "Invalid argument: info is NULL\n");
+       DBG_SECURE("Device:%s SID:%s", ad->transfer_info->device_address,
+                       ad->transfer_info->db_sid);
 
-       retvm_if(ad->dbus_conn == NULL, -1,
-                       "Invalid argument: ad->dbus_conn is NULL\n");
+       failed = ad->tr_data_list;
 
-       bd_addr = (char *)calloc(sizeof(char), BT_ADDRESS_LENGTH_MAX);
-       if (bd_addr == NULL) {
-               return -1;
-       }
+       retvm_if(failed == NULL, -1, "Invalid argument: info is NULL\n");
 
-       __bt_conv_addr_string_to_addr_type((char *)bd_addr, info->addr);
-       DBG("%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
-               bd_addr[0], bd_addr[1], bd_addr[2],
-               bd_addr[3], bd_addr[4], bd_addr[5]);
+       retvm_if(ad->dbus_conn == NULL, -1,
+                       "Invalid argument: ad->dbus_conn is NULL\n");
 
+       files_count = g_slist_length(failed);
        msg = dbus_message_new_signal(BT_SHARE_ENG_OBJECT,
                                                BT_SHARE_UI_INTERFACE,
                                                BT_SHARE_UI_SIGNAL_SEND_FILE);
+
        if (msg == NULL) {
                ERR("msg is NULL");
-               free((void *)bd_addr);
                return -1;
        }
 
-       if (!g_utf8_validate(info->file_path, -1, NULL)) {
-               ERR("Invalid filepath");
-               free((void *)bd_addr);
+       bd_addr = g_new0(char, BT_ADDRESS_LENGTH_MAX);
+       __bt_conv_addr_string_to_addr_type((char *)bd_addr,
+                       ad->transfer_info->device_address);
 
-               _bt_create_info_popup(ad, BT_STR_INFORMATION,
-                       BT_STR_UNABLE_TO_SEND);
+       file_path = g_new0(char *, files_count);
+       current = failed;
+       count = 0;
+       DBG("Total files: %d", files_count);
 
-               return -1;
-       }
-/* file validation check begin*/
+       while (current && (count < files_count)) {
+               info = current->data;
 
-       if (access(info->file_path, F_OK) != 0) {
-               ERR("access failed. May be file is deleted from the Device");
-               free((void *)bd_addr);
+               if (info->tr_status != BT_TRANSFER_FAIL) {
+                       current = g_slist_next(current);
+                       continue;
+               }
 
-               _bt_create_info_popup(ad, BT_STR_INFORMATION,
-                       BT_STR_FILE_NOT_EXIST);
+               /* check for valid utf8 file*/
+               if (!g_utf8_validate(info->file_path, -1, NULL)) {
+                       ERR_SECURE("Invalid filepath: %s", info->file_path);
+                       notification_status_message_post(BT_STR_UNABLE_TO_SEND);
+                       goto done;
+               }
 
-               return 0;
-       }
-/* file validation check end*/
+               /* file validation check begin*/
+               if (access(info->file_path, F_OK) != 0) {
+                       ERR_SECURE("access failed for %s. May be file is deleted from the Device", info->file_path);
+                       notification_status_message_post(BT_STR_FILE_NOT_EXIST);
+                       goto done;
+               }
+               /* file validation check end*/
+
+               file_path[count] = g_strdup(info->content);
 
-       file_path = g_new0(char *, 1);
-       file_path[0] = g_strdup(info->content);
+               current = g_slist_next(current);
+               count++;
+       }
 
        dbus_message_iter_init_append(msg, &iter);
 
@@ -630,37 +919,48 @@ int _bt_share_ui_ipc_retry_send(bt_share_appdata_t *ad, bt_tr_data_t *info)
        }
        dbus_message_iter_close_container(&iter, &array_iter);
 
-       dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,
-                                               &info->dev_name);
-       dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,
-                                               &info->type);
+       if (info) {
+               dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,
+                                                       &info->dev_name);
+               dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,
+                                                       &info->type);
+       }
 
        dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
                                DBUS_TYPE_ARRAY_AS_STRING
                                DBUS_TYPE_BYTE_AS_STRING, &file_iter);
 
-       dbus_message_iter_open_container(&file_iter, DBUS_TYPE_ARRAY,
-                               DBUS_TYPE_BYTE_AS_STRING, &filepath_iter);
-
-       for (i = 0; i < strlen(file_path[0]); i++) {
-               dbus_message_iter_append_basic(&filepath_iter,
-                               DBUS_TYPE_BYTE, &file_path[0][i]);
+       if (file_path) {
+               valid_files_count = count;
+               for (count = 0; count < valid_files_count; count++) {
+                       int file_length;
+                       dbus_message_iter_open_container(&file_iter, DBUS_TYPE_ARRAY,
+                                       DBUS_TYPE_BYTE_AS_STRING, &filepath_iter);
+                       file_length = strlen(file_path[count]);
+                       for (i = 0; i < file_length; i++) {
+                               dbus_message_iter_append_basic(&filepath_iter, DBUS_TYPE_BYTE,
+                                               &file_path[count][i]);
+                       }
+                       dbus_message_iter_close_container(&file_iter, &filepath_iter);
+               }
        }
-
-       dbus_message_iter_close_container(&file_iter, &filepath_iter);
        dbus_message_iter_close_container(&iter, &file_iter);
 
        e_dbus_message_send(ad->dbus_conn, msg, NULL, -1, NULL);
+
+done:
        dbus_message_unref(msg);
-       free((void *)bd_addr);
-       g_free(file_path[0]);
-       g_free(file_path);
+       g_free(bd_addr);
+       if (file_path) {
+               for (count = 0; count < files_count; count++)
+                       g_free(file_path[count]);
+               g_free(file_path);
+       }
 
        DBG("-");
        return 0;
 }
 
-
 int _bt_share_ui_ipc_info_update(bt_share_appdata_t *ad, int uid)
 {
        DBG("+");
@@ -707,7 +1007,7 @@ void _bt_share_ui_handle_update_view(bt_share_appdata_t *ad,
        GSList *list_iter = NULL;
        bt_tr_data_t *info = NULL;
        int transfer_type;
-
+       Elm_Object_Item *git;
        DBG("+");
 
        if (g_strcmp0(table, BT_INBOUND_TABLE) == 0)
@@ -724,22 +1024,37 @@ void _bt_share_ui_handle_update_view(bt_share_appdata_t *ad,
        if (transfer_type == BT_TR_INBOUND && ad->tr_type == BT_TR_INBOUND) {
                while (NULL != list_iter) {
                        info = list_iter->data;
-                       if (info->id > ad->inbound_latest_id)
-                               _bt_prepend_genlist_tr_data_item
+                       if (info->id > ad->inbound_latest_id) {
+                               _bt_genlist_append_tr_data_item
                                                (ad, info, transfer_type);
+                       }
+
                        list_iter = g_slist_next(list_iter);
                }
        } else if (transfer_type == BT_TR_OUTBOUND &&
                ad->tr_type == BT_TR_OUTBOUND) {
                while (NULL != list_iter) {
                        info = list_iter->data;
-                       if (info->id > ad->outbound_latest_id)
-                               _bt_prepend_genlist_tr_data_item
+                       if (info->id > ad->outbound_latest_id) {
+                               _bt_genlist_append_tr_data_item
                                                (ad, info, transfer_type);
+                       }
                        list_iter = g_slist_next(list_iter);
                }
        }
 
+       /* Update Finished and Processing Items */
+       if (ad->current_item) {
+               _bt_share_genlist_item_content_update(ad->current_item, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_ICON);
+               _bt_share_genlist_item_text_update(ad->current_item, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_TEXT);
+               _bt_share_genlist_item_text_update(ad->current_item, BT_SHARE_ITEM_PART_FILE_SIZE);
+
+               git = elm_genlist_item_prev_get(ad->current_item);
+               _bt_share_genlist_item_content_update(git, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_ICON);
+               _bt_share_genlist_item_text_update(git, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_TEXT);
+               _bt_share_genlist_item_text_update(git, BT_SHARE_ITEM_PART_FILE_SIZE);
+       }
+
        evas_object_show(ad->tr_genlist);
        DBG("-");
 }
@@ -749,79 +1064,83 @@ static void __bt_share_ui_handle_progress(bt_share_appdata_t *ad,
                                        gboolean completed, int error_type)
 {
 
-       if (completed == FALSE) {
-               _bt_update_progress_popup(ad, transfer_id, name, percentage);
-       } else {
-               if (error_type == BLUETOOTH_ERROR_NONE) {
-                       if (ad->progress_popup &&
-                                       (ad->pb_transfer_id == transfer_id))
-                               _bt_destroy_progress_popup(ad);
-               } else {
-                       DBG("Don,t terminate. Warning Popup will be shown.");
-               }
-       }
+       if (completed == FALSE)
+               _bt_update_progressbar(ad, transfer_id, name, percentage);
 }
 static void __bt_share_ui_handle_error(bt_share_appdata_t *ad, int error_type,
                                                bt_share_tr_type_e trans_type)
 {
-
        DBG("Error type : %d", error_type);
 
        switch (error_type) {
-       case BLUETOOTH_ERROR_NOT_CONNECTED:
-               _bt_destroy_progress_popup(ad);
-               _bt_create_info_popup(ad, BT_STR_INFORMATION,
-                       BT_STR_UNABLE_TO_SEND);
+       case BT_SHARE_UI_ERROR_NOT_CONNECTED:
+               _bt_create_info_popup(ad, BT_STR_UNABLE_TO_SEND);
                break;
-       case BLUETOOTH_ERROR_CANCEL:
-               _bt_destroy_progress_popup(ad);
+       case BT_SHARE_UI_ERROR_CANCEL:
                DBG("opp_transfer_abort by user:%d, trans_type = %d",
                        ad->opp_transfer_abort, ad->tr_type);
-               if (ad->ft_type != BT_FT_RETRY_POPUP &&
-                       ad->ft_type != BT_FT_SENT_POPUP &&
-                       ad->ft_type != BT_FT_FILE_NOT_EXIST &&
-                       (trans_type == BT_TR_INBOUND) &&
+               if ((trans_type == BT_TR_INBOUND) &&
                        !ad->opp_transfer_abort)
-                       _bt_create_info_popup(ad, BT_STR_INFORMATION,
-                               BT_STR_UNABLE_TO_RECEIVE);
+                       _bt_create_info_popup(ad, BT_STR_UNABLE_TO_RECEIVE);
                else if (!ad->opp_transfer_abort &&
                                        (trans_type == BT_TR_OUTBOUND))
-                       _bt_create_info_popup(ad, BT_STR_INFORMATION,
-                               BT_STR_UNABLE_TO_SEND);
+                       _bt_create_info_popup(ad, BT_STR_UNABLE_TO_SEND);
                ad->opp_transfer_abort = FALSE;
                break;
-       case BLUETOOTH_ERROR_CANCEL_BY_USER:
-       case BLUETOOTH_ERROR_ACCESS_DENIED:
-       case BLUETOOTH_ERROR_OUT_OF_MEMORY:
-       case BLUETOOTH_ERROR_INTERNAL:
-               _bt_destroy_progress_popup(ad);
-               break;
        default:
                break;
        }
 }
 
-void _bt_share_ui_event_handler(int event, bluetooth_event_param_t *param,
+void _bt_share_ui_event_handler(int event, bt_share_event_param_t *param,
                               void *user_data){
 
-       bt_obex_server_transfer_info_t *transfer_info;
-       bt_opc_transfer_info_t *client_info;
+       FN_START;
+       bt_share_server_transfer_info_t *transfer_info = NULL;
+       bt_share_transfer_info_t *client_info = NULL;
        char *name = NULL;
        int percentage = 0;
        bt_share_appdata_t *ad = (bt_share_appdata_t *)user_data;
 
        switch (event) {
-       case BLUETOOTH_EVENT_OPC_CONNECTED:
-               INFO("BLUETOOTH_EVENT_OPC_CONNECTED");
-               if (param->result != BLUETOOTH_ERROR_NONE) {
+       case BT_SHARE_UI_EVENT_OPC_CONNECTED:
+               INFO("BT_SHARE_UI_EVENT_OPC_CONNECTED");
+               if (param->result != BT_SHARE_UI_ERROR_NONE) {
                        __bt_share_ui_handle_error(ad, param->result,
                                        BT_TR_OUTBOUND);
                        _bt_share_ui_handle_update_view(ad, BT_OUTBOUND_TABLE);
                }
+
+               /* Set to false when new Outbound OPP session is started*/
+               opc_launched_session = FALSE;
+               break;
+
+       case BT_SHARE_UI_EVENT_OPC_TRANSFER_STARTED:
+               if (opc_launched_session == FALSE) {
+                       /* Do not process events for new OPP Session */
+                       INFO("TRANSFER_STARTED: Different Obex Session");
+                       return;
+               }
+
+               INFO("BT_SHARE_UI_EVENT_OPC_TRANSFER_STARTED");
+               if (param->result == BT_SHARE_UI_ERROR_NONE) {
+                       client_info = (bt_share_transfer_info_t *)param->param_data;
+                       if (client_info) {
+                               _bt_share_ui_handle_update_view(ad, BT_OUTBOUND_TABLE);
+                               _bt_share_ui_handle_transfer_started(ad,
+                                       client_info->device_addr, client_info->filename,
+                                       client_info->size, 0, BT_TR_OUTBOUND);
+                       }
+               }
                break;
 
-       case BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS:
-               client_info = (bt_opc_transfer_info_t *)param->param_data;
+       case BT_SHARE_UI_EVENT_OPC_TRANSFER_PROGRESS:
+               if (opc_launched_session == FALSE) {
+                       /* Do not process events for new OPP Session */
+                       return;
+               }
+
+               client_info = (bt_share_transfer_info_t *)param->param_data;
 
                name =  strrchr(client_info->filename, '/');
                if (name)
@@ -831,22 +1150,33 @@ void _bt_share_ui_event_handler(int event, bluetooth_event_param_t *param,
 
                percentage = client_info->percentage;
                __bt_share_ui_handle_progress(ad, 0, name, percentage,
-                                       FALSE, BLUETOOTH_ERROR_NONE);
+                                       FALSE, BT_SHARE_UI_ERROR_NONE);
                break;
 
-       case BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE:
-               INFO("BT_SHARE_EVENT_OPC_TRANSFER_COMPLETE ");
-               client_info = (bt_opc_transfer_info_t *)param->param_data;
+       case BT_SHARE_UI_EVENT_OPC_TRANSFER_COMPLETE:
+               if (opc_launched_session == FALSE) {
+                       /* Do not process events for new OPP Session */
+                       INFO("TRANSFER_COMPLETE: Different Obex Session");
+                       return;
+               }
+
+               INFO("BT_SHARE_UI_EVENT_OPC_TRANSFER_COMPLETE ");
+               client_info = (bt_share_transfer_info_t *)param->param_data;
 
-               if (param->result != BLUETOOTH_ERROR_NONE) {
+               if (g_strcmp0(ad->transfer_info->device_address, client_info->device_addr))
+                       return;
+
+               if (param->result != BT_SHARE_UI_ERROR_NONE) {
                        __bt_share_ui_handle_error(ad, param->result,
                                        BT_TR_OUTBOUND);
-
                        if (ad->tr_view)
                                _bt_share_ui_handle_update_view(ad, BT_OUTBOUND_TABLE);
                        else if (ad->info_popup == NULL)
                                _bt_terminate_app();
 
+                       _bt_share_ui_handle_transfer_complete(ad, client_info->device_addr,
+                                       BT_TR_OUTBOUND);
+
                        return;
                }
 
@@ -868,49 +1198,128 @@ void _bt_share_ui_event_handler(int event, bluetooth_event_param_t *param,
                else
                        _bt_share_ui_handle_update_view(ad, BT_OUTBOUND_TABLE);
 
+               _bt_share_ui_handle_transfer_complete(ad, client_info->device_addr,
+                               BT_TR_OUTBOUND);
+
+               break;
+       case BT_SHARE_UI_EVENT_OPC_DISCONNECTED: {
+               GSList *failed = NULL;
+               sqlite3 *db = NULL;
+
+               INFO("BT_SHARE_UI_EVENT_OPC_DISCONNECTED");
+
+               db = bt_share_open_db();
+               retm_if(!db, "fail to open db!");
+
+               failed = bt_share_get_failed_tr_data_by_sid(db,
+                               ad->tr_type, ad->transfer_info->device_address,
+                               ad->transfer_info->db_sid);
+               bt_share_close_db(db);
+
+               if (failed) {
+                       /* Some failed items are there */
+                       elm_object_text_set(ad->toolbar_button,
+                                               BT_STR_RESEND_FAILED_FILES);
+                       elm_object_disabled_set(ad->toolbar_button, FALSE);
+                       /*free list*/
+                       bt_share_release_tr_data_list(failed);
+               } else
+                       _bt_share_delete_toolbar_button(ad);
+               ad->launch_mode = BT_LAUNCH_TRANSFER_LIST;
+
+               _bt_share_ui_handle_transfer_disconnected(ad, BT_TR_OUTBOUND);
+               _bt_share_ui_handle_update_view(ad, BT_OUTBOUND_TABLE);
+
+               elm_genlist_realized_items_update(ad->tr_genlist);
+
                break;
+       }
+       case BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_STARTED:
+               INFO("BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_STARTED");
+               if (param->result == BT_SHARE_UI_ERROR_NONE) {
+                       transfer_info = param->param_data;
 
-       case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_PROGRESS:
-               if (param->result == BLUETOOTH_ERROR_NONE) {
+                       if (transfer_info->transfer_id != ad->transfer_info->transfer_id) {
+                               /* Different session */
+                               INFO("TRANSFER_STARTED: Different Session");
+                               return;
+                       }
+
+                       _bt_share_ui_handle_transfer_started(ad, transfer_info->address,
+                                       transfer_info->filename, transfer_info->file_size, transfer_info->transfer_id,
+                                       BT_TR_INBOUND);
+               }
+               break;
+       case BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_PROGRESS:
+               if (param->result == BT_SHARE_UI_ERROR_NONE) {
                        transfer_info = param->param_data;
+
+                       if (transfer_info->transfer_id != ad->transfer_info->transfer_id) {
+                               /* Different session */
+                               return;
+                       }
                        __bt_share_ui_handle_progress(ad,
                                        transfer_info->transfer_id,
                                        transfer_info->filename,
                                        transfer_info->percentage,
-                                       FALSE, BLUETOOTH_ERROR_NONE);
+                                       FALSE, BT_SHARE_UI_ERROR_NONE);
                }
                break;
 
-       case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_COMPLETED:
-               INFO("BT_EVENT_OBEX_TRANSFER_COMPLETED ");
+       case BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_COMPLETED:
+               INFO("BT_SHARE_UI_EVENT_OBEX_TRANSFER_COMPLETED ");
 
-               if (param->result != BLUETOOTH_ERROR_NONE) {
+               transfer_info = param->param_data;
+               if (g_strcmp0(ad->transfer_info->device_address, transfer_info->address))
+                       return;
+
+               if (transfer_info->transfer_id != ad->transfer_info->transfer_id) {
+                       /* Different session */
+                       INFO("TRANSFER_STARTED: Different Session");
+                       return;
+               }
+
+               if (param->result != BT_SHARE_UI_ERROR_NONE) {
                        __bt_share_ui_handle_error(ad, param->result,
                                        BT_TR_INBOUND);
-
                        if (ad->tr_view)
                                _bt_share_ui_handle_update_view(ad,
                                                BT_INBOUND_TABLE);
 
+                       _bt_share_ui_handle_transfer_complete(ad, transfer_info->address,
+                                       BT_TR_INBOUND);
                        return;
                }
 
-               transfer_info = param->param_data;
-
-               __bt_share_ui_handle_progress(ad, transfer_info->transfer_id,
-               transfer_info->filename,
-               transfer_info->percentage, TRUE, param->result);
-
                if (ad->tr_view == NULL)
                        _bt_terminate_app();
                else
                        _bt_share_ui_handle_update_view(ad, BT_INBOUND_TABLE);
 
+               _bt_share_ui_handle_transfer_complete(ad, transfer_info->address,
+                               BT_TR_INBOUND);
                break;
 
+       case BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_DISCONNECTED: {
+               DBG("BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_DISCONNECTED");
+               transfer_info = param->param_data;
+               INFO("transfer_info->transfer_id: [%d]", transfer_info->transfer_id);
+               INFO("ad->transfer_info->transfer_id: [%d]", ad->transfer_info->transfer_id);
+               if (transfer_info->transfer_id == ad->transfer_info->transfer_id) {
+                       DBG("Same session");
+                       _bt_share_delete_toolbar_button(ad);
+                       _bt_share_ui_handle_transfer_disconnected(ad, BT_TR_INBOUND);
+
+                       _bt_share_ui_handle_update_view(ad, BT_INBOUND_TABLE);
+                       elm_genlist_realized_items_update(ad->tr_genlist);
+               }
+       }
+       break;
+
        default:
                DBG("Unhandled event %x", event);
                break;
        }
+       FN_END;
 
 }
index 4552bea..7eedbd2 100644 (file)
@@ -29,18 +29,14 @@ extern "C" {
 #endif
 
 #include "bluetooth-share-api.h"
-#include <bluetooth-api.h>
 
 #define BT_SHARE_UI_INTERFACE "User.BluetoothShare.UI"
 #define BT_SHARE_UI_SIGNAL_OPPABORT "opp_abort"
-#define BT_SHARE_UI_SIGNAL_GET_TR_DATA "get_data"
 #define BT_SHARE_UI_SIGNAL_SEND_FILE "send_file"
 #define BT_SHARE_UI_SIGNAL_INFO_UPDATE "info_update"
 
 #define BT_SHARE_ENG_INTERFACE "User.BluetoothShare.Engine"
 #define BT_SHARE_ENG_OBJECT "/org/projectx/transfer_info"
-#define BT_SHARE_ENG_SIGNAL_PROGRESS "transfer_progress"
-#define BT_SHARE_ENG_SIGNAL_ERROR "error_type"
 #define BT_SHARE_ENG_SIGNAL_UPDATE_VIEW "update_view"
 #define BT_INBOUND_TABLE       "inbound"
 #define BT_OUTBOUND_TABLE      "outbound"
@@ -49,37 +45,112 @@ extern "C" {
 #define BT_OPP_CLIENT_PATH "/org/projectx/bt/opp_client"
 #define BT_OPP_SERVER_PATH "/org/projectx/bt/opp_server"
 #define BT_OPP_CONNECTED "OppConnected"
+#define BT_OPP_CLIENT_DISCONNECTED "ShareOppClientDisconnected"
+#define BT_OPP_SERVER_DISCONNECTED "ShareOppServerDisconnected"
 #define BT_TRANSFER_STARTED "TransferStarted"
 #define BT_TRANSFER_PROGRESS "TransferProgress"
 #define BT_TRANSFER_COMPLETED "TransferCompleted"
-#define BT_TRANSFER_CONNECTED "TransferConnected"
 
+#define BT_SHARE_UI_EVENT_BASE            ((int)(0x0000))              /**< No event */
+#define BT_SHARE_UI_EVENT_GAP_BASE        ((int)(BT_SHARE_UI_EVENT_BASE + 0x0010))
+                                                               /**< Base ID for GAP Event */
+#define BT_SHARE_UI_EVENT_SDP_BASE        ((int)(BT_SHARE_UI_EVENT_GAP_BASE + 0x0020))
+                                                               /**< Base ID for SDP events */
+#define BT_SHARE_UI_EVENT_RFCOMM_BASE     ((int)(BT_SHARE_UI_EVENT_SDP_BASE + 0x0020))
+                                                               /**< Base ID for RFCOMM events */
+#define BT_SHARE_UI_EVENT_NETWORK_BASE     ((int)(BT_SHARE_UI_EVENT_RFCOMM_BASE + 0x0020))
+                                                               /**< Base ID for NETWORK events */
+#define BT_SHARE_UI_EVENT_HDP_BASE     ((int)(BT_SHARE_UI_EVENT_NETWORK_BASE + 0x0020))
+                                                               /**< Base ID for HDP events */
+#define BT_SHARE_UI_EVENT_OPC_BASE  ((int)(BT_SHARE_UI_EVENT_HDP_BASE + 0x0020))
+                                                               /**< Base ID for OPC events */
+#define BT_SHARE_UI_EVENT_OBEX_SERVER_BASE ((int)(BT_SHARE_UI_EVENT_OPC_BASE + 0x0020))
+                                                               /**< Base ID for Obex Server events */
+
+#define BT_SHARE_UI_ERROR_BASE                   ((int)0)              /**< Error code base */
+#define BT_SHARE_UI_ERROR_NONE                   ((int)0)              /**< No error #0 */
+#define BT_SHARE_UI_ERROR_CANCEL                 ((int)BT_SHARE_UI_ERROR_BASE - 0x01)
+#define BT_SHARE_UI_ERROR_NOT_CONNECTED          ((int)BT_SHARE_UI_ERROR_BASE - 0x15)
+#define BT_SHARE_UI_ERROR_CANCEL_BY_USER         ((int)BT_SHARE_UI_ERROR_BASE - 0x1b)
+
+/**
+ * Bluetooth share event type
+ */
+typedef enum {
+       BT_SHARE_UI_EVENT_OPC_CONNECTED = BT_SHARE_UI_EVENT_OPC_BASE,
+                                                               /* OPC Connected event */
+       BT_SHARE_UI_EVENT_OPC_DISCONNECTED,             /* OPC Disonnected event */
+       BT_SHARE_UI_EVENT_OPC_TRANSFER_STARTED, /* OPC Transfer started event */
+       BT_SHARE_UI_EVENT_OPC_TRANSFER_PROGRESS,        /* OPC Transfer progress event */
+       BT_SHARE_UI_EVENT_OPC_TRANSFER_COMPLETE,        /* OPC Transfer Complete event */
+
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_AUTHORIZE = BT_SHARE_UI_EVENT_OBEX_SERVER_BASE,
+                                                               /* Obex server authorize event*/
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_STARTED, /* Obex Server transfer started event*/
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_PROGRESS,/* Obex Server transfer progress event*/
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_COMPLETED,/* Obex Server transfer complete event*/
+       BT_SHARE_UI_EVENT_OBEX_SERVER_CONNECTION_AUTHORIZE,
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_CONNECTED, /* Obex Transfer connected event */
+       BT_SHARE_UI_EVENT_OBEX_SERVER_TRANSFER_DISCONNECTED, /* Obex Transfer disconnected event */
+} bt_share_ui_event_type_t;
+
+/**
+ * Server type
+ */
 typedef enum {
-       BT_TR_ONGOING = -1,
-       BT_TR_SUCCESS,
-       BT_TR_FAIL
-} bt_app_tr_status_t;
+       OPP_SERVER = 0x0,
+       FTP_SERVER
+} bt_share_server_type_t;
 
+/**
+ * Stucture to hold event information
+ */
 typedef struct {
-       int uid;
-       int tr_status;
+       int event;      /**< event type */
+       int result;     /**< Success or error value */
+       void *param_data;
+                       /**<parameter data pointer */
+       void *user_data;
+} bt_share_event_param_t;
+
+/**
+ * Stucture to OPP client transfer information
+ */
+typedef struct {
+       char *device_addr;
+       char *filename;
+       unsigned long size;
+       int percentage;
+} bt_share_transfer_info_t;
+
+/**
+ * Stucture to OPP/FTP server transfer information
+ */
+typedef struct {
+       char *filename;
        char *device_name;
-       char *filepath;
-       int timestamp;
-       char *addr;
-} bt_tr_info_t;
+       char *file_path;
+       char *type;
+       int transfer_id;
+       unsigned long file_size;
+       int percentage;
+       bt_share_server_type_t server_type;
+       char *address;
+       unsigned char *contact_auth_info;
+} bt_share_server_transfer_info_t;
+
 
 void _bt_signal_init(bt_share_appdata_t *ad);
 void _bt_signal_deinit(bt_share_appdata_t *ad);
-int _bt_share_ui_ipc_retry_send(bt_share_appdata_t *ad, bt_tr_data_t *info);
 int _bt_share_ui_ipc_info_update(bt_share_appdata_t *ad, int uid);
 int _bt_abort_signal_send(bt_share_appdata_t *ad,
-                         bt_share_popup_data_t *pb_data);
-void _bt_share_ui_event_handler(int event, bluetooth_event_param_t *param,
+               bt_share_abort_data_t *abort_data);
+void _bt_share_ui_event_handler(int event, bt_share_event_param_t *param,
                               void *user_data);
 void  _bt_share_ui_handle_update_view(bt_share_appdata_t *ad,
                                                char *table);
-
+int _bt_share_ui_retry_failed(bt_share_appdata_t *ad);
+void _bt_set_opc_launched_session(gboolean value);
 #ifdef __cplusplus
 }
 #endif
index 4f86fd3..889772d 100644 (file)
 #include "bt-share-ui-popup.h"
 #include "bt-share-ui-ipc.h"
 #include "bt-share-ui-resource.h"
+#include "bt-share-ui-widget.h"
 #include <bluetooth-share-api.h>
 #include <bluetooth.h>
+#include <bluetooth_internal.h>
 #include <bundle_internal.h>
 
 bt_share_appdata_t *app_state = NULL;
@@ -58,165 +60,211 @@ static void __bt_lang_changed_cb(app_event_info_h event_info, void *data)
 
        bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
 
-       if (ad->tr_genlist) {
+       if (ad->tr_genlist)
                elm_genlist_realized_items_update(ad->tr_genlist);
-       }
 
-       if (ad->navi_it) {
-               elm_object_item_text_set(ad->navi_it,
-                                       (ad->tr_type == BT_TR_INBOUND) ?
-                                       BT_STR_RECEIVED_FILES :
-                                       BT_STR_SENT_FILES);
-               Evas_Object *nocontents = elm_object_item_part_content_get(
-                                       ad->navi_it,
-                                       "elm.swallow.content");
-               elm_object_part_text_set(nocontents, "elm.text",
-                                       BT_STR_NO_TRANSFER_HISTORY);
-       }
+       if (ad->toolbar_button) {
+               DBG("Changing language for toolbar_button: ad->launch_mode: %d",
+                               ad->launch_mode);
 
-       if (ad->ft_popup) {
-               _bt_lang_changed_ft_popup(ad);
+               if ((ad->tr_type == BT_TR_INBOUND) || (ad->launch_mode == BT_LAUNCH_ONGOING))
+                       elm_object_text_set(ad->toolbar_button, BT_STR_STOP);
+               else
+                       elm_object_text_set(ad->toolbar_button, BT_STR_RESEND_FAILED_FILES);
        }
 
-       if (ad->progress_popup) {
-               _bt_lang_changed_progress_popup(ad);
-       }
 }
 
-static int __bt_parse_launch_mode(bt_share_appdata_t *ad, bundle *b)
+static bt_share_launch_mode_t __bt_parse_launch_mode(bt_share_appdata_t *ad, bundle *b)
 {
        const char *launch_type = NULL;
-
+       bt_share_launch_mode_t launch_mode = BT_LAUNCH_NONE;
        retvm_if(ad == NULL, -1, "Invalid param");
        retvm_if(b == NULL, -1, "Invalid param");
 
        launch_type = bundle_get_val(b, "launch-type");
        retv_if(!launch_type, -1);
 
-       if (!strcasecmp(launch_type, "ongoing")) {
-               ad->launch_mode = BT_LAUNCH_ONGOING;
-       } else if (!strcasecmp(launch_type, "warning_popup")) {
-               ad->launch_mode = BT_LAUNCH_WARNING_POPUP;
-       } else if (!strcasecmp(launch_type, "transfer_list")) {
-               ad->launch_mode = BT_LAUNCH_TRANSFER_LIST;
-       } else {
+       if (!strcasecmp(launch_type, "ongoing"))
+               launch_mode = BT_LAUNCH_ONGOING;
+       else if (!strcasecmp(launch_type, "transfer_list"))
+               launch_mode = BT_LAUNCH_TRANSFER_LIST;
+       else
                ERR("Invalid bundle value");
-               return -1;
-       }
-       return 0;
+
+       return launch_mode;
+}
+
+static void __bt_share_free_tr_data(bt_share_transfer_data_t *tr_data)
+{
+       FN_START;
+       ret_if(tr_data == NULL);
+
+       g_free((char *) tr_data->device_name);
+       g_free((char *) tr_data->device_address);
+       g_free((char *) tr_data->transfer_type);
+       g_free((char *) tr_data->db_sid);
+       g_free((char *) tr_data->filename);
+       g_free(tr_data);
+       FN_END;
 }
 
-static int __bt_share_launch_handler(bt_share_appdata_t *ad, bundle *b)
+static int __bt_share_launch_handler(bt_share_appdata_t *ad, bundle *b,
+                                               bt_share_launch_mode_t launch_mode)
 {
-       INFO("+");
-       bt_share_popup_data_t *pb_data = NULL;
-       const char *str = NULL;
+       FN_START;
        const char *transfer_type = NULL;
        const char *temp = NULL;
+       unsigned char tranferred;
        int tr_type = 0;
        sqlite3 *db = NULL;
-       bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
 
        retvm_if(ad == NULL, -1, "Invalid param");
        retvm_if(b == NULL, -1, "Invalid param");
 
-       if (ad->launch_mode == BT_LAUNCH_ONGOING) {
-               INFO("BT_LAUNCH_ONGOING");
-
-               /*Check adapter state, if disabled then return */
-               if (bt_adapter_get_state(&bt_state) == BT_ERROR_NONE) {
-                       if (bt_state == BT_ADAPTER_DISABLED) {
-                               DBG("Adapter disabled, returning");
-                               return 0;
-                       }
-               } else
-                       ERR("bt_adapter_get_state() failed");
-
+       if (launch_mode == BT_LAUNCH_TRANSFER_LIST ||
+               launch_mode == BT_LAUNCH_ONGOING) {
+               INFO("%s", launch_mode == BT_LAUNCH_TRANSFER_LIST ?
+                               "BT_LAUNCH_TRANSFER_LIST" : "BT_LAUNCH_ONGOING");
+               bt_share_transfer_data_t *transfer_data = NULL;
 
-
-               if (ad->tr_view == NULL) {
-                       Evas_Object *e = NULL;
-                       Ecore_Evas *ee = NULL;
-                       e = evas_object_evas_get(ad->win);
-                       ee = ecore_evas_ecore_evas_get(e);
-                       ecore_evas_name_class_set(ee,"APP_POPUP","APP_POPUP");
-               }
-
-               pb_data = g_new0(bt_share_popup_data_t, 1);
-               pb_data->filename = g_strdup(bundle_get_val(b, "filename"));
-               pb_data->percentage = g_strdup(bundle_get_val(b, "percentage"));
-               pb_data->transfer_type = g_strdup(
-                               bundle_get_val(b, "transfer_type"));
-               temp = bundle_get_val(b, "transfer_id");
-               if (temp != NULL)
-                       pb_data->transfer_id = atoi(temp);
-               if (g_strcmp0(pb_data->transfer_type, "outbound") == 0) {
-                       pb_data->progress_cnt = g_strdup(bundle_get_val(b, "progress_cnt"));
-                       INFO("progress cnt : %s", pb_data->progress_cnt);
-                       ad->ft_type = BT_FT_SENT_POPUP;
-               }
-
-               INFO_SECURE("filename %s", pb_data->filename);
-               INFO("percentage %s", pb_data->percentage);
-               INFO("transfer_type %s", pb_data->transfer_type);
-               INFO("transfer_id %d", pb_data->transfer_id);
-               /* Notificaton id of ongoing item */
-               if (ad->progress_popup)
-                       _bt_destroy_progress_popup(ad);
-               ad->progress_popup = _bt_create_progress_popup(pb_data);
-               retvm_if (ad->progress_popup == NULL, -1, "fail to create progress popup");
-
-               evas_object_data_set(ad->progress_popup, "progressbar_data", pb_data);
-       } else if (ad->launch_mode == BT_LAUNCH_WARNING_POPUP) {
-               INFO("BT_LAUNCH_WARNING_POPUP");
-               if (ad->progress_popup)
-                       _bt_destroy_progress_popup(ad);
-               str = bundle_get_val(b, "message");
-               _bt_create_extinctive_info_popup(ad, BT_STR_INFORMATION, str);
-       } else if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST) {
-               INFO("BT_LAUNCH_TRANSFER_LIST");
                elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
                elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
 
-               if (ad->progress_popup)
-                       _bt_destroy_progress_popup(ad);
                transfer_type = bundle_get_val(b, "transfer_type");
-               retvm_if (!transfer_type, -1, "Invalid transfer type!");
+               retvm_if(!transfer_type, -1, "Invalid transfer type!");
 
                if (!strcmp(transfer_type, "outbound"))
                        tr_type = BT_TR_OUTBOUND;
                else
                        tr_type = BT_TR_INBOUND;
 
-               retvm_if(ad->tr_view && ad->tr_type == tr_type, 0,
-                       "same view. no need to create transfer view!");
+               /* Open the DB */
+               db = bt_share_open_db();
+               retvm_if(!db, -1, "fail to open db!");
+
+               /* Create Transfer Data */
+               transfer_data = g_new0(bt_share_transfer_data_t, 1);
+               transfer_data->device_name = g_strdup(bundle_get_val(b, "device_name"));
+               transfer_data->device_address = g_strdup(bundle_get_val(b, "device_addr"));
+               transfer_data->transfer_type = g_strdup(bundle_get_val(b, "transfer_type"));
+               transfer_data->db_sid = g_strdup(bundle_get_val(b, "db_sid"));
+
+               INFO("Create Transfer data - Name: %s, Address :%s, type: %s, SID: %s",
+                               transfer_data->device_name, transfer_data->device_address,
+                               transfer_data->transfer_type, transfer_data->db_sid);
+
+               if (launch_mode == BT_LAUNCH_TRANSFER_LIST) {
+                       temp = bundle_get_val(b, "transfer_id");
+                       if (temp != NULL) {
+                               transfer_data->transfer_id = atoi(temp);
+                               INFO_SECURE("Transfer ID: %d", transfer_data->transfer_id);
+
+                               if (tr_type == BT_TR_INBOUND) {
+                                       int noti_id;
+                                       DBG("INBOUND TRANSFER");
+
+                                       /* Check if noti_id is updated or not. If noti_id is not updated it means
+                                        * it's an ongoing transfer. If its an ongoing transfer then redirect it to
+                                        * progress view, otherwise just launch the transfer list.
+                                        */
+                                       noti_id = bt_share_get_noti_id(db, BT_DB_INBOUND, transfer_data->db_sid);
+
+                                       DBG("noti_id: [%d]", noti_id);
+                                       /* Get transfer progress only if its an ongoing transfer. */
+                                       if (!noti_id && bt_opp_get_transfer_progress(BT_TRANSFER_INBOUND,
+                                                       transfer_data->transfer_id, &tranferred) == 0) {
+                                               DBG("INBOUND ONGOING TRANSFER");
+                                               launch_mode = BT_LAUNCH_ONGOING;
+                                               transfer_data->percentage = tranferred;
+
+                                               transfer_data->filename = g_strdup(bundle_get_val(b, "filename"));
+                                               INFO_SECURE("File Name: %s", transfer_data->filename);
+                                       }
+                               }
+                       }
+                       _bt_set_opc_launched_session(FALSE);
+               } else {
+                       /* Create Progress Data */
+                       transfer_data->filename = g_strdup(bundle_get_val(b, "filename"));
+                       INFO_SECURE("Create Progress Data : File Name: %s", transfer_data->filename);
+                       temp = bundle_get_val(b, "size");
+                       if (temp != NULL)
+                               transfer_data->size = atol(temp);
+                       temp = bundle_get_val(b, "transfer_id");
+                       if (temp != NULL) {
+                               transfer_data->transfer_id = atoi(temp);
+                               INFO_SECURE("Transfer ID: %d", transfer_data->transfer_id);
+                       }
+
+                       temp = bundle_get_val(b, "progress_cnt");
+                       if (temp != NULL) {
+                               int current, total;
+                               INFO("PROGRESS TEXT: %s", temp);
+                               sscanf(temp, "[%d/%d]", &current, &total);
+                               transfer_data->current_file = current;
+                               transfer_data->total_files = total;
+                       }
+                       INFO("File Progress: [%d/%d]", transfer_data->current_file,
+                                       transfer_data->total_files);
+
+                       if (tr_type == BT_TR_OUTBOUND) {
+                               bt_opp_get_transfer_progress(BT_TRANSFER_OUTBOUND,
+                                               -1, &tranferred);
+                               _bt_set_opc_launched_session(TRUE);
+                       } else {
+                               bt_opp_get_transfer_progress(BT_TRANSFER_INBOUND,
+                                               transfer_data->transfer_id, &tranferred);
+                       }
+                       transfer_data->percentage = tranferred;
+               }
+
+               if (ad->tr_view && ad->tr_type == tr_type && ad->launch_mode == launch_mode &&
+                                       g_strcmp0(ad->db_sid, transfer_data->db_sid) == 0) {
+                       ERR("Same view. no need to create transfer view!");
+
+                       /* Show the TOP of List */
+                       elm_genlist_item_show(ad->device_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+                       __bt_share_free_tr_data(transfer_data);
+                       bt_share_close_db(db);
+                       return 0;
+               }
+
+               __bt_share_free_tr_data(ad->transfer_info);
+               ad->transfer_info = transfer_data;
+               transfer_data->success = 0;
+               transfer_data->failed = 0;
+               ad->launch_mode = launch_mode;
 
-               INFO("Transfer type : %s", transfer_type);
                ad->tr_type = tr_type;
 
                /* Get data from share DB */
-               db = bt_share_open_db();
-               retvm_if(!db, -1, "fail to open db!");
+               if (ad->db_sid) {
+                       g_free(ad->db_sid);
+                       ad->db_sid = NULL;
+               }
+               ad->db_sid = g_strdup(transfer_data->db_sid);
+               INFO_SECURE("Device Address: %s", transfer_data->device_address);
+               ad->tr_data_list = bt_share_get_all_tr_data_by_sid(db,
+                               ad->tr_type, transfer_data->device_address,
+                               transfer_data->db_sid);
 
-               ad->tr_data_list = bt_share_get_completed_tr_data_list(db, ad->tr_type);
                bt_share_close_db(db);
 
-               if (ad->tr_data_list)
-                       _bt_create_transfer_view(ad);
-               else
-                       _bt_nocontent_set(ad, TRUE);
+               _bt_create_transfer_view(ad);
 
        } else {
                ERR("Invalid bundle value");
                return -1;
        }
 
+       FN_END;
        return 0;
 }
 
 static bool __app_create(void *data)
 {
-       INFO(" __app_create");
+       FN_START;
        bt_share_appdata_t *ad = data;
        Evas_Object *win = NULL;
        int ret;
@@ -236,6 +284,7 @@ static bool __app_create(void *data)
 
        if (bt_adapter_get_state(&status) != BT_ERROR_NONE)
                ERR("bt_adapter_get_state() failed!");
+       DBG("bt_status : %d", status);
 
        ad->bt_status = status;
 
@@ -244,6 +293,7 @@ static bool __app_create(void *data)
            bt_adapter_set_state_changed_cb(_bt_cb_state_changed, (void *)ad);
        if (ret != BT_ERROR_NONE)
                ERR("bt_adapter_set_state_changed_cb failed");
+       FN_END;
        return true;
 }
 
@@ -253,58 +303,25 @@ static void __app_service(app_control_h app_control, void *user_data)
        bt_share_appdata_t *ad = user_data;
        int ret;
        bundle *b = NULL;
+       bt_share_launch_mode_t launch_mode;
        ret_if(ad == NULL);
 
        ret = app_control_export_as_bundle(app_control, &b);
 
-       if (ad->dbus_conn == NULL) {
+       if (ad->dbus_conn == NULL)
                _bt_signal_init(ad);
-       }
 
-       if(__bt_parse_launch_mode(ad, b) == -1) {
+       launch_mode = __bt_parse_launch_mode(ad, b);
+       if (launch_mode == BT_LAUNCH_NONE) {
                if (b)
                        bundle_free(b);
                return;
        }
 
-       if (ad->launch_mode == BT_LAUNCH_ONGOING ||
-               ad->launch_mode == BT_LAUNCH_WARNING_POPUP) {
-               if (ad->tr_view == NULL) {
-                       if (elm_win_alpha_get(ad->win) == FALSE) {
-                               elm_win_alpha_set(ad->win, TRUE);
-                               int ret = 0;
-#if 0
-                               Display *dpy;
-                               Window win;
-
-                               dpy = ecore_x_display_get();
-                               win = elm_win_xwindow_get(ad->win);
-
-                               ret = utilx_set_window_opaque_state(dpy,
-                                               win, UTILX_OPAQUE_STATE_ON);
-#endif
-
-                               if (!ret)
-                               {
-                                       ERR("Error! Failed to set opaque state.");
-                               }
-                       }
-               }
-       } else if (elm_win_alpha_get(ad->win))
-               elm_win_alpha_set(ad->win, FALSE);
-
-
-       /* Set rotation Callback */
-       if (elm_win_wm_rotation_supported_get(ad->win)) {
-               int rots[4] = { 0, 90, 180, 270 };
-               elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
-       }
-
-       ret = __bt_share_launch_handler(ad, b);
+       ret = __bt_share_launch_handler(ad, b, launch_mode);
        if (ret < 0)
                _bt_terminate_app();
 
-
        evas_object_show(ad->win);
        elm_win_activate(ad->win);
        bundle_free(b);
@@ -312,21 +329,46 @@ static void __app_service(app_control_h app_control, void *user_data)
 
 static void __app_terminate(void *data)
 {
-       INFO("__app_terminate ");
+       FN_START;
        bt_share_appdata_t *ad = data;
        int err;
 
        _bt_destroy_info_popup(ad);
        _bt_signal_deinit(ad);
 
+       if (ad->tr_device_itc) {
+               elm_genlist_item_class_free(ad->tr_device_itc);
+               ad->tr_device_itc = NULL;
+       }
+       if (ad->tr_status_itc) {
+               elm_genlist_item_class_free(ad->tr_status_itc);
+               ad->tr_status_itc = NULL;
+       }
+       if (ad->tr_progress_itc) {
+               elm_genlist_item_class_free(ad->tr_progress_itc);
+               ad->tr_progress_itc = NULL;
+       }
+       if (ad->tr_file_title_itc) {
+               elm_genlist_item_class_free(ad->tr_file_title_itc);
+               ad->tr_file_title_itc = NULL;
+       }
        if (ad->tr_data_itc) {
                elm_genlist_item_class_free(ad->tr_data_itc);
                ad->tr_data_itc = NULL;
        }
+       if (ad->transfer_info) {
+               __bt_share_free_tr_data(ad->transfer_info);
+               ad->transfer_info = NULL;
+       }
 
-       if (ad->win)
-               evas_object_del(ad->win);
-
+       if (ad->idler) {
+               ecore_idler_del(ad->idler);
+               ad->idler = NULL;
+       }
+       if (ad->db_sid) {
+               g_free(ad->db_sid);
+               ad->db_sid = NULL;
+       }
        err = bt_adapter_unset_state_changed_cb();
        if (err != BT_ERROR_NONE)
                ERR("unset of state change cb  failed: %d", err);
@@ -334,8 +376,7 @@ static void __app_terminate(void *data)
        err = bt_deinitialize();
        if (err != BT_ERROR_NONE)
                ERR("bt_deinitialize failed: %d", err);
-
-
+       FN_END;
 }
 
 static void __app_pause(void *data)
@@ -366,9 +407,8 @@ EXPORT int main(int argc, char *argv[])
 
        DBG("ui_app_main() is called.");
        int ret = ui_app_main(argc, argv, &callback, &app_data);
-       if (ret != APP_ERROR_NONE) {
+       if (ret != APP_ERROR_NONE)
                ERR("ui_app_main() is failed. err = %d", ret);
-       }
 
        DBG("End bluetooth-share-ui main()");
        return ret;
old mode 100755 (executable)
new mode 100644 (file)
index 5a54113..cd0881f
@@ -46,7 +46,7 @@ extern "C" {
 #define EDJDIR "/usr/apps/org.tizen.bluetooth-share-ui/res/edje"
 #define        EDJFILE EDJDIR"/bt-share-layout.edj"
 #define EDJ_IMAGES     EDJDIR "/images.edj"
-
+#define EDJ_BT_ICON_ANIMATION EDJDIR "/bt_share_icon_animation.edj"
 #endif
 
 
@@ -55,86 +55,108 @@ typedef enum {
        BT_TR_INBOUND
 } bt_share_tr_type_e;
 
-typedef enum {
-       CSC_DCM,
-       CSC_FTM,
-} bt_share_csc_type_t;
-
-typedef enum {
-       BT_FT_RECV_FAIL_POPUP,
-       BT_FT_RECV_SUCCESS_POPUP,
-       BT_FT_SENT_POPUP,
-       BT_FT_RETRY_POPUP,
-       BT_FT_FILE_NOT_EXIST
-} bt_share_ft_popup_type_e;
+typedef struct {
+       const char *transfer_type;
+       int transfer_id;
+} bt_share_abort_data_t;
 
 typedef struct {
-       const char *filename;
-       const char *percentage;
+       /* common fields */
+       const char *device_name;
+       const char *device_address;
        const char *transfer_type;
-       const char *progress_cnt;
+       const char *db_sid;
+       /* Progress specific */
+       const char *filename;
+       char percentage;
+       int current_file;
+       int total_files;
+       unsigned long size;
        int transfer_id;
-} bt_share_popup_data_t;
+       /* Transfer specific */
+       int success;
+       int failed;
+} bt_share_transfer_data_t;
 
 typedef struct {
        bt_tr_data_t *tr_data;
        gboolean highlighted;
+       gboolean tr_inbound;
 } bt_gl_data_t;
 
 typedef enum {
-       BT_LAUNCH_ONGOING = 0x00,
-       BT_LAUNCH_WARNING_POPUP = 0x01,
-       BT_LAUNCH_TRANSFER_LIST = 0x02,
+       BT_LAUNCH_NONE = -1,
+       BT_LAUNCH_ONGOING,
+       BT_LAUNCH_TRANSFER_LIST
 } bt_share_launch_mode_t;
 
 typedef struct {
        bt_share_launch_mode_t launch_mode;
        bt_adapter_state_e bt_status;
        Evas_Object *win;
+       Eina_List *table;
        Evas_Object *bg;
        Evas_Object *conform;
        Evas_Object *tr_view;
        Evas_Object *navi_fr;
        Elm_Object_Item *navi_it;
-       Evas_Object *toolbar_btn;
+       Evas_Object *toolbar_button;
+       Evas_Object *toolbar_ly;
+
+       /* Transfer Information */
+       bt_share_transfer_data_t *transfer_info;
 
-       /*  Progress Popup */
        Evas_Object *progress_layout;
-       Evas_Object *progress_popup;
-       Evas_Object *pb;
-       int pb_transfer_id;
-       bt_share_popup_data_t *progress_data;
+       Evas_Object *progressbar;
+       Elm_Object_Item *device_item;
+       Elm_Object_Item *progress_item;
+       Elm_Object_Item *status_item;
+       Elm_Object_Item *file_title_item;
+       Elm_Object_Item *current_item;
 
-       /* File transfer status popup*/
-       Evas_Object *ft_popup;
-       bt_share_ft_popup_type_e ft_type;
-       bt_tr_data_t *ft_info;
+       /* Turning on popup */
+       Evas_Object *turning_on_popup;
 
        /* Information Popup */
        Evas_Object *info_popup;
 
        /* Transfer data list*/
        Evas_Object *tr_genlist;
+       Elm_Genlist_Item_Class *tr_device_itc;
+       Elm_Genlist_Item_Class *tr_status_itc;
+       Elm_Genlist_Item_Class *tr_progress_itc;
+       Elm_Genlist_Item_Class *tr_file_title_itc;
        Elm_Genlist_Item_Class *tr_data_itc;
-       Elm_Object_Item *selected_item;
+
        GSList *tr_data_list;
 
-       /* Timer Handler */
-       int timer;
+       /* Idler */
+       Ecore_Idler *idler;
 
        E_DBus_Connection *dbus_conn;
+       /* Events from Service for OPP Client*/
        E_DBus_Signal_Handler *client_connected_sh;
+       E_DBus_Signal_Handler *client_started_sh;
        E_DBus_Signal_Handler *client_progress_sh;
        E_DBus_Signal_Handler *client_completed_sh;
+       /* Events from Service for OPP Server*/
+       E_DBus_Signal_Handler *server_started_sh;
        E_DBus_Signal_Handler *server_progress_sh;
        E_DBus_Signal_Handler *server_completed_sh;
+       /* Events from Bluetooth-Share*/
        E_DBus_Signal_Handler *update_sh;
+       E_DBus_Signal_Handler *client_disconnected_sh;
+       E_DBus_Signal_Handler *server_disconnected_sh;
+       /* Events from Appcore*/
        E_DBus_Signal_Handler *app_core_sh;
 
        bt_share_tr_type_e tr_type;
+       char *db_sid;
+
        int inbound_latest_id;
        int outbound_latest_id;
        bool opp_transfer_abort;
+       bool send_after_turning_on;
 } bt_share_appdata_t;
 
 #ifdef __cplusplus
old mode 100755 (executable)
new mode 100644 (file)
index 8d5db96..24516c3
@@ -35,7 +35,6 @@
 #include <app.h>
 #include <bluetooth-share-api.h>
 #include <notification.h>
-#include <E_DBus.h>
 
 #include "applog.h"
 #include "bt-share-ui-view.h"
 #include "bt-share-ui-widget.h"
 #include "bt-share-ui-main.h"
 
-#define NEW_LINE       "\n"
-
 extern bt_share_appdata_t *app_state;
 
-
-static void __bt_destroy_ft_popup(bt_share_appdata_t *ad)
-{
-       DBG("");
-       ret_if(ad == NULL);
-
-       if (ad->ft_popup) {
-               DBG("delete ft_popup");
-               evas_object_del(ad->ft_popup);
-               ad->ft_popup = NULL;
-       }
-
-       return;
-}
-
-static void __bt_ft_retry_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       DBG("+");
-
-       ret_if(data == NULL);
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = (bt_tr_data_t *)data;
-
-       __bt_destroy_ft_popup(ad);
-
-       if (ad->bt_status == BT_ADAPTER_ENABLED) {
-               if (!_bt_share_ui_ipc_retry_send(ad, info)) {
-                       INFO(" info->id %d", info->id);
-                       _bt_share_ui_ipc_info_update(ad, info->id);
-                       _bt_delete_selected_item(ad);
-               }
-       }
-
-       DBG("-");
-       return;
-}
-
-static void __bt_ft_retry_cancel_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       DBG("+");
-
-       ret_if(data == NULL);
-       bt_share_appdata_t *ad = app_state;
-
-       __bt_destroy_ft_popup(ad);
-
-       DBG("-");
-       return;
-}
-
-static void __bt_ft_retry_mouseup_cb(void *data,
-                       Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Up *ev = event_info;
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = (bt_tr_data_t *)data;
-
-       DBG("Mouse event callback function is called +");
-       if (ev->button == 3) {
-               __bt_destroy_ft_popup(ad);
-               _bt_share_ui_ipc_info_update(ad, info->id);
-       }
-
-       DBG("Mouse event callback -");
-}
-
-static void __bt_ft_ok_popup_cb(void *data, Evas_Object *obj,
-                       void *event_info)
-{
-       DBG(" +");
-       ret_if(data == NULL);
-       ret_if(!obj);
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = (bt_tr_data_t *)data;
-
-       const char *text = elm_object_text_get(obj);
-
-       if (!g_strcmp0(text, BT_STR_RETRY)) {
-               __bt_ft_retry_ok_cb(data, obj, event_info);
-               return;
-       }
-
-       __bt_destroy_ft_popup(ad);
-
-       if (ad->bt_status == BT_ADAPTER_DISABLED)
-               _bt_update_tr_notification(info);
-       else /*Adapter enabled case */
-               _bt_share_ui_ipc_info_update(ad, info->id);
-
-       _bt_delete_selected_item(ad);
-
-       DBG("-");
-       return;
-}
-
-static void __bt_ft_ok_mouseup_cb(void *data,
-                       Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Up *ev = event_info;
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = (bt_tr_data_t *)data;
-
-       DBG("Mouse event callback function is called +");
-
-       if (ev->button == 3) {
-               __bt_destroy_ft_popup(ad);
-               _bt_share_ui_ipc_info_update(ad, info->id);
-               _bt_delete_selected_item(ad);
-       }
-       DBG("Mouse event callback -");
-}
-
-static Evas_Object *__bt_create_popup_layout(Evas_Object *parent, bt_share_appdata_t *ad)
-{
-       Evas_Object *layout = NULL;
-
-       layout = elm_layout_add(parent);
-       elm_layout_file_set(layout, EDJFILE, "ft_popup");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
-                                        EVAS_HINT_EXPAND);
-       ad->progress_layout = layout;
-       return layout;
-}
-
-static Evas_Object *__bt_create_progressbar(Evas_Object *parent, bt_share_appdata_t *ad)
-{
-       Evas_Object *progressbar = NULL;
-       progressbar = elm_progressbar_add(parent);
-       elm_object_style_set(progressbar, "list_progress");
-       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
-       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
-       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       elm_object_signal_emit(progressbar, "elm,units,show", "elm");
-       elm_progressbar_value_set(progressbar, 0.0);
-       evas_object_show(progressbar);
-       return progressbar;
-}
-
-static Evas_Object *__bt_create_popup_pb_layout(Evas_Object *parent, bt_share_appdata_t *ad)
-{
-       Evas_Object *layout = NULL;
-
-       layout = elm_layout_add(parent);
-       elm_layout_file_set(layout, EDJFILE, "popup_2text_progressbar_view_layout");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
-                                        EVAS_HINT_EXPAND);
-       ad->progress_layout = layout;
-       return layout;
-}
-
-Evas_Object *_bt_create_ft_popup(bt_share_ft_popup_type_e type, bt_tr_data_t *info)
-{
-       DBG(" +");
-       bt_share_appdata_t *ad = app_state;
-       Evas_Object *popup = NULL;
-       char msg[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-       char tmp[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-       char *name = NULL;
-       char *markup_text = NULL;
-       char *stms_str = NULL;
-
-       if (info->file_path == NULL) {
-               ERR("Invalid data");
-               return NULL;
-       }
-
-       popup = elm_popup_add(ad->win);
-       evas_object_size_hint_weight_set(popup,
-                                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       INFO("Popup type : %d", type);
-       ad->ft_type = type;
-       ad->ft_info = info;
-
-       if (type == BT_FT_SENT_POPUP) {
-               DBG("BT_FT_SENT_POPUP");
-               elm_object_part_text_set(popup, "title,text", BT_STR_SENT_FILES);
-               char file_size_str[BT_FILE_SIZE_STR] = { 0 };
-
-               stms_str = BT_STR_TO_S;
-               snprintf(msg, sizeof(msg), stms_str, info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               /* file size */
-               if (info->size < 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dB", info->size);
-               else if (info->size > 1024 * 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dMB", info->size / (1024 * 1024));
-               else
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dKB", info->size / 1024);
-
-               stms_str = BT_STR_FILE_SIZE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, file_size_str);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(popup, markup_text);
-       } else if (type == BT_FT_RECV_SUCCESS_POPUP) {
-               DBG("BT_FT_RECV_SUCCESS_POPUP");
-               elm_object_part_text_set(popup, "title,text", BT_STR_RECEIVED_FILES);
-               char file_size_str[BT_FILE_SIZE_STR] = { 0 };
-
-               stms_str = BT_STR_FROM_S;
-               snprintf(msg, sizeof(msg), stms_str, info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               /* file size */
-               if (info->size < 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dB", info->size);
-               else if (info->size > 1024 * 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dMB", info->size / (1024 * 1024));
-               else
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dKB", info->size / 1024);
-
-               stms_str = BT_STR_FILE_SIZE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, file_size_str);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(popup, markup_text);
-       } else if (type == BT_FT_RECV_FAIL_POPUP) {
-               DBG("BT_FT_RECV_FAIL_POPUP");
-               elm_object_part_text_set(popup, "title,text", BT_STR_UNABLE_TO_RECEIVED_FILES);
-
-               g_strlcat(msg, BT_STR_FILE_NOT_RECV, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, info->file_path);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(popup, markup_text);
-       } else if (type == BT_FT_FILE_NOT_EXIST) {
-               elm_object_part_text_set(popup, "title,text", BT_STR_RECEIVED_FILES);
-               __bt_create_popup_layout(popup, ad);
-
-               g_strlcat(msg, BT_STR_FILE_NOT_EXIST, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, info->file_path);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(popup, markup_text);
-       } else  if (type == BT_FT_RETRY_POPUP) {
-               elm_object_part_text_set(popup, "title,text", BT_STR_UNABLE_TO_SEND_FILES);
-
-               stms_str = BT_STR_SEND_FAIL_TO_S;
-               snprintf(msg, sizeof(msg), stms_str, info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(popup, markup_text);
-       }
-
-       evas_object_show(popup);
-
-       if (type == BT_FT_RETRY_POPUP) {
-               if (ad->bt_status == BT_ADAPTER_DISABLED ||
-                       access(info->file_path, F_OK) != 0) {
-                       _bt_create_button(popup,  "popup", "button1",
-                                       BT_STR_OK, NULL, __bt_ft_ok_popup_cb, info);
-               } else {
-                       _bt_create_button(popup, "popup", "button1",
-                                       BT_STR_RETRY, NULL, __bt_ft_retry_ok_cb, info);
-               }
-               eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-                               __bt_ft_retry_cancel_cb, info);
-               evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
-                               __bt_ft_retry_mouseup_cb, info);
-       } else {
-               _bt_create_button(popup, "popup", "button1",
-                               BT_STR_OK, NULL, __bt_ft_ok_popup_cb, info);
-               eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-                               __bt_ft_ok_popup_cb, info);
-               evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
-                               __bt_ft_ok_mouseup_cb, info);
-       }
-
-       if(markup_text)
-               free(markup_text);
-
-       DBG("-");
-       return popup;
-}
-
-void _bt_lang_changed_ft_popup(bt_share_appdata_t *ad)
-{
-       DBG(" +");
-       char msg[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-       char tmp[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-       char *name = NULL;
-       char *markup_text = NULL;
-       char *stms_str = NULL;
-       Evas_Object *btn1 = NULL;
-
-       if (ad->ft_type == BT_FT_SENT_POPUP) {
-               elm_object_part_text_set(ad->ft_popup, "title,text", BT_STR_SENT_FILES);
-               char file_size_str[BT_FILE_SIZE_STR] = { 0 };
-
-               stms_str = BT_STR_FROM_S;
-               snprintf(msg, sizeof(msg), stms_str, ad->ft_info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(ad->ft_info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = ad->ft_info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               /* file size */
-               if (ad->ft_info->size < 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dB", ad->ft_info->size);
-               else if (ad->ft_info->size > 1024 * 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dMB", ad->ft_info->size / (1024 * 1024));
-               else
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dKB", ad->ft_info->size / 1024);
-
-               stms_str = BT_STR_FILE_SIZE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, file_size_str);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(ad->ft_popup, markup_text);
-       } else if (ad->ft_type == BT_FT_RECV_SUCCESS_POPUP) {
-               elm_object_part_text_set(ad->ft_popup, "title,text", BT_STR_RECEIVED_FILES);
-               char file_size_str[BT_FILE_SIZE_STR] = { 0 };
-
-               stms_str = BT_STR_FROM_S;
-               snprintf(msg, sizeof(msg), stms_str, ad->ft_info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(ad->ft_info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = ad->ft_info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               /* file size */
-               if (ad->ft_info->size < 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dB", ad->ft_info->size);
-               else if (ad->ft_info->size > 1024 * 1024)
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dMB", ad->ft_info->size / (1024 * 1024));
-               else
-                       snprintf(file_size_str, sizeof(file_size_str),
-                               "%dKB", ad->ft_info->size / 1024);
-
-               stms_str = BT_STR_FILE_SIZE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, file_size_str);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(ad->ft_popup, markup_text);
-       } else if (ad->ft_type == BT_FT_RECV_FAIL_POPUP) {
-               elm_object_part_text_set(ad->ft_popup, "title,text", BT_STR_UNABLE_TO_RECEIVED_FILES);
-
-               g_strlcat(msg, BT_STR_FILE_NOT_RECV, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, ad->ft_info->file_path);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               stms_str = BT_STR_FAIL_S;
-               snprintf(tmp, sizeof(tmp), stms_str, BT_STR_TR_CANCELLED);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(ad->ft_popup, markup_text);
-       } else if (ad->ft_type == BT_FT_FILE_NOT_EXIST) {
-               elm_object_part_text_set(ad->ft_popup, "title,text", BT_STR_RECEIVED_FILES);
-
-               g_strlcat(msg, BT_STR_FILE_NOT_EXIST, BT_GLOBALIZATION_STR_LENGTH);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, ad->ft_info->file_path);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(ad->ft_popup, markup_text);
-       } else  if (ad->ft_type == BT_FT_RETRY_POPUP) {
-               elm_object_part_text_set(ad->ft_popup, "title,text", BT_STR_UNABLE_TO_SEND_FILES);
-
-               stms_str = BT_STR_SEND_FAIL_TO_S;
-               snprintf(msg, sizeof(msg), stms_str, ad->ft_info->dev_name);
-               g_strlcat(msg, NEW_LINE, BT_GLOBALIZATION_STR_LENGTH);
-
-               name = strrchr(ad->ft_info->file_path, '/');
-               if (name != NULL)
-                       name++;
-               else
-                       name = ad->ft_info->file_path;
-
-               stms_str = BT_STR_FILE_S;
-               snprintf(tmp, sizeof(tmp), stms_str, name);
-               g_strlcat(msg, tmp, BT_GLOBALIZATION_STR_LENGTH);
-
-               markup_text = elm_entry_utf8_to_markup(msg);
-               elm_object_text_set(ad->ft_popup, markup_text);
-       }
-
-       if (ad->ft_type == BT_FT_RETRY_POPUP) {
-               btn1 = elm_object_part_content_get(ad->ft_popup, "button1");
-               if (ad->bt_status == BT_ADAPTER_DISABLED) {
-                       if (btn1)
-                               elm_object_text_set(btn1, BT_STR_OK);
-               } else {
-                       if (btn1)
-                               elm_object_text_set(btn1, BT_STR_RETRY);
-               }
-       } else {
-               btn1 = elm_object_part_content_get(ad->ft_popup, "button1");
-               if (btn1)
-                       elm_object_text_set(btn1, BT_STR_OK);
-       }
-
-       if(markup_text)
-               free(markup_text);
-
-       DBG(" -");
-}
-
-static void __bt_progress_ok_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       DBG(" +");
-       ret_if(data == NULL);
-
-       bt_share_appdata_t *ad = NULL;
-
-       ad = (bt_share_appdata_t *)data;
-
-       _bt_destroy_progress_popup(ad);
-
-       if (ad->tr_view == NULL)
-               _bt_terminate_app();
-
-       DBG("-");
-       return;
-}
-
-static void __bt_progress_cancel_cb(void *data, Evas_Object *obj,
-                                               void *event_info)
-{
-       DBG(" +");
-       ret_if(data == NULL);
-
-       bt_share_appdata_t *ad = NULL;
-       bt_share_popup_data_t *pb_data = NULL;
-
-       ad = (bt_share_appdata_t *)data;
-       pb_data = evas_object_data_get(ad->progress_popup, "progressbar_data");
-       _bt_abort_signal_send(ad, pb_data);
-
-       _bt_destroy_progress_popup(ad);
-
-       if (ad->tr_view == NULL)
-               _bt_terminate_app();
-
-       DBG("-");
-       return;
-}
-
-static void __bt_progress_mouseup_cb(void *data,
-                       Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Up *ev = event_info;
-       bt_share_appdata_t *ad = NULL;
-       bt_share_popup_data_t *pb_data = NULL;
-
-       ad = (bt_share_appdata_t *)data;
-       pb_data = evas_object_data_get(ad->progress_popup, "progressbar_data");
-
-       DBG("Mouse event callback function is called +");
-
-       if (ev->button == 3) {
-               _bt_abort_signal_send(ad, pb_data);
-               _bt_destroy_progress_popup(ad);
-
-               if (ad->tr_view == NULL)
-                       _bt_terminate_app();
-       }
-       DBG("Mouse event callback -");
-}
-
-Evas_Object *_bt_create_progress_popup(bt_share_popup_data_t *data)
-{
-       DBG(" +");
-       retv_if(data == NULL, NULL);
-       Evas_Object *popup = NULL;
-       Evas_Object *layout = NULL;
-       Evas_Object *progressbar = NULL;
-       bt_share_appdata_t *ad = app_state;
-       char temp[BT_PERCENT_STR_LEN] = { 0 };
-       float i = 0.0;
-       int tmp = 0;
-       char *markup_text = NULL;
-
-       popup = elm_popup_add(ad->win);
-       evas_object_size_hint_weight_set(popup,
-                                EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       layout = __bt_create_popup_pb_layout(popup, ad);
-
-       elm_object_part_text_set(popup, "title,text", (!strcmp(data->transfer_type, "outbound")) ?
-                                       BT_STR_SEND_FILES : BT_STR_RECEIVE_FILES);
-       elm_object_part_text_set(layout, "elm.text.description", (!strcmp(data->transfer_type, "outbound")) ?
-                                               BT_STR_SENDING : BT_STR_RECEIVING);
-
-       markup_text = elm_entry_utf8_to_markup(data->filename);
-       elm_object_part_text_set(layout, "elm.subtext.description", markup_text);
-
-       if(markup_text)
-               free(markup_text);
-
-       progressbar = __bt_create_progressbar(popup, ad);
-       elm_object_part_content_set(layout, "progressbar", progressbar);
-       ad->pb = progressbar;
-
-       tmp = atoi(data->percentage);
-       elm_progressbar_unit_format_set(ad->pb, NULL);
-       i = (float)tmp / (float)100.0;
-       elm_progressbar_value_set(ad->pb, i);
-       evas_object_show(ad->pb);
-
-       snprintf(temp, BT_PERCENT_STR_LEN, "%d%%", tmp);
-       elm_object_part_text_set(progressbar,"elm.text.bottom.left", temp);
-       elm_object_signal_emit(progressbar, "elm.text.bottom.show", "elm");
-
-       ad->pb_transfer_id = data->transfer_id;
-       elm_object_content_set(popup, layout);
-
-       _bt_create_button(popup, "popup", "button1",
-                       BT_STR_RESUME, NULL, __bt_progress_ok_cb, ad);
-       _bt_create_button(popup, "popup", "button2",
-                       BT_STR_CANCEL, NULL, __bt_progress_cancel_cb, ad);
-       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-                       __bt_progress_ok_cb, ad);
-       evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
-                       __bt_progress_mouseup_cb, ad);
-
-       evas_object_show(popup);
-
-       DBG("-");
-       ad->progress_data = data;
-       return popup;
-}
-
-int _bt_destroy_progress_popup(bt_share_appdata_t *ad)
-{
-       DBG("+");
-
-       retvm_if(ad == NULL, 0,
-                "Invalid argument: ad is NULL");
-       bt_share_popup_data_t *pb_data = NULL;
-
-       if (ad->progress_popup) {
-               pb_data = evas_object_data_get(ad->progress_popup,
-                               "progressbar_data");
-               if (pb_data) {
-                       g_free((gpointer)pb_data->filename);
-                       g_free((gpointer)pb_data->percentage);
-                       g_free((gpointer)pb_data->transfer_type);
-                       g_free((gpointer)pb_data);
-               }
-
-               evas_object_del(ad->progress_popup);
-               ad->progress_popup = NULL;
-       }
-
-       DBG("-");
-       return 0;
-}
-
-void _bt_lang_changed_progress_popup(bt_share_appdata_t *ad)
-{
-       DBG(" +");
-       ret_if(ad == NULL);
-       Evas_Object *btn1 = NULL;
-       Evas_Object *btn2 = NULL;
-
-       elm_object_part_text_set(ad->progress_popup, "title,text",
-                                       (!strcmp(ad->progress_data->transfer_type, "outbound")) ?
-                                       BT_STR_SEND_FILES : BT_STR_RECEIVE_FILES);
-       elm_object_part_text_set(ad->progress_layout, "elm.text.description",
-                                       (!strcmp(ad->progress_data->transfer_type, "outbound")) ?
-                                       BT_STR_SENDING : BT_STR_RECEIVING);
-
-       btn1 = elm_object_part_content_get(ad->progress_popup, "button1");
-       if (btn1)
-               elm_object_text_set(btn1, BT_STR_RESUME);
-       btn2 = elm_object_part_content_get(ad->progress_popup, "button2");
-       if (btn2)
-               elm_object_text_set(btn2, BT_STR_CANCEL);
-
-       DBG(" -");
-}
-
-int _bt_update_progress_popup(bt_share_appdata_t *ad,
+int _bt_update_progressbar(bt_share_appdata_t *ad,
                        int transfer_id, const char *name, int percentage)
 {
-       char temp[BT_PERCENT_STR_LEN] = {0};
-
        retvm_if(ad == NULL, 0, "Invalid argument: ad is NULL");
-       retvm_if(ad->pb_transfer_id != transfer_id, 0, "Invalid transfer_id!");
-       retvm_if(!ad->progress_popup, 0, "No progress_popup!");
-
-       float i = 0.0;
-       i = (float)(percentage) / (float)100.0;
-       elm_progressbar_value_set(ad->pb, i);
-       evas_object_show(ad->pb);
+       retvm_if(ad->transfer_info == NULL, 0, "Invalid argument: transfer_info is NULL");
+       retvm_if(ad->transfer_info->transfer_id != transfer_id, 0, "Invalid transfer_id!");
+
+       if (ad->transfer_info) {
+               ad->transfer_info->percentage = percentage;
+               if (ad->progress_item && ad->progressbar) {
+                       float i;
+                       i = (float)(percentage) / (float)100.0;
+                       elm_progressbar_value_set(ad->progressbar, i);
+
+                       elm_object_part_text_set(ad->progressbar, "elm.text.bottom.left",
+                                       g_strdup_printf("%d%%", percentage));
+               }
 
-       snprintf(temp, BT_PERCENT_STR_LEN, "%d%%", percentage);
-       elm_object_part_text_set(ad->pb,"elm.text.bottom.left", temp);
-       elm_object_signal_emit(ad->pb, "elm,bottom,text,show", "elm");
+       }
        return 0;
 }
 
-
 static gboolean __bt_info_popup_timer_cb(void *data, Evas_Object *obj,
                                    void *event_info)
 {
@@ -733,21 +77,21 @@ static gboolean __bt_info_popup_timer_cb(void *data, Evas_Object *obj,
 
        _bt_destroy_info_popup(ad);
 
-       if (ad->tr_view == NULL) {
+       if (ad->tr_view == NULL)
                _bt_terminate_app();
-       }
+
        DBG("-");
        return FALSE;
 }
 
 Evas_Object *_bt_create_info_popup(bt_share_appdata_t *ad,
-                                       const char *title, const char *text)
+                                       const char *text)
 {
-       DBG("+");
+       FN_START;
        Evas_Object *popup = NULL;
 
-       retv_if((!ad || !title || !text), NULL);
-       retv_if (ad->info_popup != NULL, NULL);
+       retv_if((!ad || !text), NULL);
+       retv_if(ad->info_popup != NULL, NULL);
 
        popup = elm_popup_add(ad->win);
        elm_object_style_set(popup, "toast");
@@ -755,12 +99,12 @@ Evas_Object *_bt_create_info_popup(bt_share_appdata_t *ad,
                                         EVAS_HINT_EXPAND);
 
        eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-                       eext_popup_back_cb, NULL);
-       elm_object_text_set(popup, text);
+                       (Evas_Smart_Cb)__bt_info_popup_timer_cb, ad);
+       elm_object_part_text_set(popup, "elm.text", text);
        evas_object_smart_callback_add(popup, "block,clicked",
                        (Evas_Smart_Cb)__bt_info_popup_timer_cb, ad);
 
-       if(!elm_config_access_get()) {
+       if (!elm_config_access_get()) {
                elm_popup_timeout_set(popup, BT_INFO_POPUP_TIMEOUT_IN_SEC);
                evas_object_smart_callback_add(popup, "timeout",
                        (Evas_Smart_Cb) __bt_info_popup_timer_cb, ad);
@@ -772,64 +116,100 @@ Evas_Object *_bt_create_info_popup(bt_share_appdata_t *ad,
        evas_object_show(popup);
        ad->info_popup = popup;
 
-       DBG("-");
+       FN_END;
        return popup;
 }
 
-static gboolean __bt_extinctive_info_popup_timer_cb(void *data,
-                               Evas_Object *obj, void *event_info)
+static void
+__bt_share_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       bt_share_appdata_t *ad;
-       ad = (bt_share_appdata_t *)data;
-       retv_if(ad == NULL, FALSE);
+       elm_popup_dismiss(obj);
+}
 
-       _bt_destroy_info_popup(ad);
+static void
+__bt_share_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_popup_dismiss(obj);
+}
 
-       if (!ad->tr_view)
-               _bt_terminate_app();
+static void
+__bt_share_popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+}
 
-       return FALSE;
+static void
+__bt_share_progressbar_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Ecore_Timer *timer = data;
+       ecore_timer_del(timer);
 }
 
-Evas_Object *_bt_create_extinctive_info_popup(bt_share_appdata_t *ad,
-                               const char *title, const char *text)
+static Eina_Bool
+__bt_share_progressbar_timer_cb(void *data)
 {
-       DBG("+");
-       Evas_Object *popup = NULL;
+       retv_if(!data, ECORE_CALLBACK_CANCEL);
 
-       retv_if((!ad || !title || !text), NULL);
+       Evas_Object *popup = data;
+       Evas_Object *progressbar = evas_object_data_get(popup, "progressbar");
+       double value;
 
-       if (ad->info_popup != NULL)
-               return NULL;
+       value = elm_progressbar_value_get(progressbar);
+       if (value == 1.0) {
+               evas_object_data_del(popup, "timer");
+               evas_object_del(popup);
+               return ECORE_CALLBACK_CANCEL;
+       }
+       value = value + 0.01;
+       elm_progressbar_value_set(progressbar, value);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+Evas_Object *_bt_share_add_turning_on_popup(bt_share_appdata_t *ad)
+{
+       FN_START;
+       retv_if(ad == NULL, NULL);
+       Evas_Object *popup = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *progressbar = NULL;
+       Ecore_Timer *timer = NULL;
 
        popup = elm_popup_add(ad->win);
-       elm_object_style_set(popup, "toast");
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
-                                        EVAS_HINT_EXPAND);
+       elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
-       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
-                       eext_popup_back_cb, NULL);
-       elm_object_text_set(popup, text);
-       evas_object_smart_callback_add(popup, "block,clicked",
-                       (Evas_Smart_Cb)__bt_extinctive_info_popup_timer_cb, ad);
+       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, __bt_share_popup_hide_cb, NULL);
+       evas_object_smart_callback_add(popup, "dismissed", __bt_share_popup_hide_finished_cb, NULL);
+       evas_object_smart_callback_add(popup, "block,clicked", __bt_share_popup_block_clicked_cb, NULL);
 
-       if(!elm_config_access_get()) {
-               elm_popup_timeout_set(popup, BT_INFO_POPUP_TIMEOUT_IN_SEC);
-               evas_object_smart_callback_add(popup, "timeout",
-                       (Evas_Smart_Cb) __bt_extinctive_info_popup_timer_cb, ad);
-       } else {
-               evas_object_smart_callback_add(popup, "access,read,stop",
-                       (Evas_Smart_Cb) __bt_extinctive_info_popup_timer_cb, ad);
-       }
+       /* layout */
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, EDJFILE, "turning_on_view_layout");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(layout, "elm.text", BT_STR_TURNING_ON_BLUETOOTH_ING);
+
+       progressbar = elm_progressbar_add(layout);
+       elm_object_style_set(progressbar, "process_medium");
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_object_part_content_set(layout, "processing", progressbar);
+       timer = ecore_timer_add(0.1, __bt_share_progressbar_timer_cb, popup);
+
+       elm_object_content_set(popup, layout);
+
+       evas_object_data_set(popup, "progressbar", progressbar);
+       evas_object_data_set(popup, "timer", timer);
+       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
+                       __bt_share_progressbar_popup_del_cb, timer);
 
        evas_object_show(popup);
-       ad->info_popup = popup;
 
-       DBG("-");
+       FN_END;
        return popup;
 }
 
-
 int _bt_destroy_info_popup(bt_share_appdata_t *ad)
 {
        DBG("+");
index 8d8bed3..27ed7be 100644 (file)
@@ -31,34 +31,15 @@ extern "C" {
 #include <bluetooth-share-api.h>
 #include "bt-share-ui-main.h"
 
-
-#define BT_POPUP_TEXT_LEN \
-               (BT_GLOBALIZATION_STR_LENGTH + BT_FILE_NAME_LEN_MAX)
-#define BT_PERCENT_STR_LEN 5
-#define BT_MIME_TYPE_MAX_LEN   20
 #define BT_FILE_SIZE_STR 10
 #define BT_INFO_POPUP_TIMEOUT_IN_SEC 2
 
+Evas_Object *_bt_share_add_turning_on_popup(bt_share_appdata_t *ad);
 
-Evas_Object *_bt_create_ft_popup(bt_share_ft_popup_type_e type,
-                                       bt_tr_data_t *info);
-
-void _bt_lang_changed_ft_popup(bt_share_appdata_t *ad);
-
-Evas_Object *_bt_create_progress_popup(bt_share_popup_data_t *data);
-void _bt_lang_changed_progress_popup(bt_share_appdata_t *ad);
-
-int _bt_update_progress_popup(bt_share_appdata_t *ad, int transfer_id,
+int _bt_update_progressbar(bt_share_appdata_t *ad, int transfer_id,
                                        const char *name, int percentage);
 
-int _bt_destroy_progress_popup(bt_share_appdata_t *ad);
-
-
-Evas_Object *_bt_create_info_popup(bt_share_appdata_t *ad, const char *title,
-                                       const char *text);
-
-Evas_Object *_bt_create_extinctive_info_popup(bt_share_appdata_t *ad,
-                                       const char *title, const char *text);
+Evas_Object *_bt_create_info_popup(bt_share_appdata_t *ad, const char *text);
 
 int _bt_destroy_info_popup(bt_share_appdata_t *ad);
 
index 8bcc941..ae310b3 100644 (file)
@@ -37,79 +37,85 @@ extern "C" {
 #define BT_PKGNAME "org.tizen.bluetooth-share-ui"
 #define BT_PREFIX "/usr/apps/"BT_PKGNAME
 
-#define BT_ICON_RECV_FAIL      "bluetooth_inbound_transfer_failed.png"
-#define BT_ICON_RECV_PASS      "bluetooth_inbound_transfer_successed.png"
-#define BT_ICON_SEND_FAIL      "bluetooth_outbound_transfer_failed.png"
-#define BT_ICON_SEND_PASS      "bluetooth_outbound_transfer_successed.png"
+#define BT_ICON_RECV_FAIL      "bluetooth_download_failed.png"
+#define BT_ICON_RECV_PASS      "bluetooth_download_complete.png"
+#define BT_ICON_SEND_FAIL      "bluetooth_upload_failed.png"
+#define BT_ICON_SEND_PASS      "bluetooth_upload_complete.png"
 
-#define BT_STR_MEMORY_FULL     \
-       dgettext(BT_COMMON_PKG, "IDS_BT_POP_MEMORYFULL")
 #define BT_STR_UNABLE_TO_SEND  \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_SENDINGFAIL")
-#define BT_STR_FT      \
-       dgettext(BT_COMMON_PKG, "IDS_ST_BODY_TRANSFER_FILES")
-#define BT_STR_SEND_FILES \
-       dgettext(BT_COMMON_PKG, "IDS_SMT_POP_SEND_FILES")
+
 #define BT_STR_SENDING \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_SENDING_ING")
 #define BT_STR_RECEIVING       \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_RECEIVING_ING")
-#define BT_STR_CLR_LIST        \
-       dgettext(BT_COMMON_PKG, "IDS_BT_BODY_CLEAR_LIST")
 #define BT_STR_FILE_NOT_EXIST  \
-       dgettext(BT_COMMON_PKG, "IDS_BT_POP_FILE_DOES_NOT_EXIST")
-#define BT_STR_NO_TRANSFER_HISTORY     \
-       dgettext(BT_COMMON_PKG, "IDS_BT_BODY_NO_TRANSFER_HISTORY")
-#define BT_STR_SEND_FAIL_TO_S  \
-       dgettext(BT_COMMON_PKG, "IDS_BT_BODY_SENDING_FAILED_TO_PS")
+       dgettext(BT_COMMON_PKG, "IDS_BT_TPOP_FILE_NOT_FOUND")
 #define BT_STR_FILE_NOT_RECV   \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_FILE_NOT_RECEIVED")
 #define BT_STR_FILE_S  \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_FILE_C_PS")
 #define BT_STR_FAIL_S  \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_FAILURE_REASON_C_PS")
-#define BT_STR_TO_S    \
-       dgettext(BT_COMMON_PKG, "IDS_BT_POP_TO_C_PS")
-#define BT_STR_FILE_TYPE_S     \
-       dgettext(BT_COMMON_PKG, "IDS_BT_POP_FILE_TYPE_C_PS")
 #define BT_STR_FILE_SIZE_S     \
        dgettext(BT_COMMON_PKG, "IDS_BT_POP_FILE_SIZE_C_PS")
 #define BT_STR_FROM_S  \
        dgettext(BT_COMMON_PKG, "IDS_BT_HEADER_FROM_C_PS")
-#define BT_STR_TR_CANCELLED    \
-       dgettext(BT_COMMON_PKG, "IDS_BT_POP_TRANSFER_CANCELLED")
 #define BT_STR_UNABLE_TO_RECEIVE       \
        dgettext(BT_COMMON_PKG, "IDS_BT_BODY_UNABLE_TO_RECEIVE")
 #define BT_STR_SENT_FILES      \
        dgettext(BT_COMMON_PKG, "IDS_BT_HEADER_SENT_FILES")
 #define BT_STR_RECEIVED_FILES  \
        dgettext(BT_COMMON_PKG, "IDS_BT_OPT_RECEIVED_FILES")
-#define BT_STR_RECEIVE_FILES   \
-       dgettext(BT_COMMON_PKG, "IDS_BT_HEADER_RECEIVE_FILES_ABB")
 #define BT_STR_UNABLE_TO_RECEIVED_FILES        \
        dgettext(BT_COMMON_PKG, "IDS_BT_HEADER_UNABLE_TO_RECEIVE_FILES_ABB")
-#define BT_STR_UNABLE_TO_SEND_FILES    \
-       dgettext(BT_COMMON_PKG, "IDS_BT_HEADER_UNABLE_TO_SEND_FILES_ABB")
 #define BT_STR_UNABLE_TO_FIND_APPLICATION      \
        dgettext(BT_COMMON_PKG, "IDS_MF_TPOP_UNABLE_TO_FIND_APPLICATION_TO_PERFORM_THIS_ACTION")
-#define BT_STR_TR_COPIED_STATUS \
-       dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_P1SD_FILES_COPIED_P2SD_FAILED_ABB")
 #define BT_STR_TR_1FILE_COPIED_STATUS \
        dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_1_FILE_COPIED_PD_FAILED_ABB")
-
-#define BT_STR_INFORMATION dgettext(BT_COMMON_PKG, "IDS_ST_BODY_INFORMATION")
-#define BT_STR_OK dgettext(BT_COMMON_PKG, "IDS_BT_BUTTON_OK")
-#define BT_STR_HIDE dgettext(BT_COMMON_PKG, "IDS_CST_OPT_HIDE")
-#define BT_STR_RESUME dgettext(BT_COMMON_PKG, "IDS_MAPS_POP_RESUME")
-#define BT_STR_CANCEL dgettext(BT_COMMON_PKG, "IDS_BR_SK_CANCEL")
-#define BT_STR_CLOSE dgettext(BT_COMMON_PKG, "IDS_CAM_SK_CLOSE")
-#define BT_STR_YESTERDAY dgettext(BT_COMMON_PKG, "IDS_ST_BODY_YESTERDAY")
-#define BT_STR_RETRY dgettext(BT_COMMON_PKG, "IDS_ST_BUTTON_RETRY")
+#define BT_STR_DEVICENAME   dgettext(BT_COMMON_PKG, "IDS_BT_BODY_DEVICENAME")
+#define BT_STR_RECEIVING_FAILED   dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_RECEIVING_FAILED")
+#define BT_STR_FILE_RECEIVED   dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_FILE_RECEIVED")
+#define BT_STR_SENDING_FAILED   dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_SENDING_FAILED")
+#define BT_STR_FILE_SENT   dgettext(BT_COMMON_PKG, "IDS_BT_MBODY_FILE_SENT")
+#define BT_STR_FILE_LIST dgettext(BT_COMMON_PKG, "IDS_FV_HEADER_FILE_LIST")
+#define BT_STR_RECEIVED dgettext(BT_COMMON_PKG, "IDS_MSG_BUTTON_RECEIVED_M_MESSAGE")
+#define BT_STR_SENT dgettext(BT_COMMON_PKG, "IDS_MSG_BODY_SENT_ABB")
+#define BT_STR_FAILED dgettext(BT_COMMON_PKG, "IDS_EMAIL_BODY_FAILED_M_STATUS")
+#define BT_STR_STOP dgettext(BT_COMMON_PKG, "IDS_BT_SK4_STOP")
+#define BT_STR_WAITING dgettext(BT_COMMON_PKG, "IDS_ST_BODY_WAITING_ING")
+#define BT_STR_RESEND_FAILED_FILES dgettext(BT_COMMON_PKG, "IDS_WIFI_POP_RESEND_FAILED_FILES")
+#define BT_STR_VCF_FILES_ARE_TEMPORARY_AND_CANT_BE_OPENED dgettext(BT_COMMON_PKG, "IDS_BT_TPOP_VCF_FILES_ARE_TEMPORARY_AND_CANT_BE_OPENED")
+#define BT_STR_RECEIVED_VCF_FILE_ALREADY_IMPORTED_TO_CONTACTS dgettext(BT_COMMON_PKG, "IDS_BT_TPOP_RECEIVED_VCF_FILE_ALREADY_IMPORTED_TO_CONTACTS")
+#define BT_STR_PD_RECEIVED dgettext(BT_COMMON_PKG, "IDS_SAS_SBODY_PD_RECEIVED")
+#define BT_STR_PD_SENT dgettext(BT_COMMON_PKG, "IDS_WIFI_SBODY_PD_SENT_M_STATUS")
+#define BT_STR_PD_FAILED dgettext(BT_COMMON_PKG, "IDS_WIFI_SBODY_PD_FAILED")
+#define BT_STR_TURNING_ON_BLUETOOTH_ING \
+       dgettext(BT_COMMON_PKG, "IDS_BT_BODY_TURNING_ON_BLUETOOTH_ING")
 
 /* Access information */
 #define BT_STR_ACCES_INFO_MAX_LEN 512
 #define BT_STR_ACC_ICON "Icon"
-#define BT_STR_ACC_TITLE "Title"
+
+/* Length of Strings*/
+#define BT_STR_PROGRESS_MAX_LEN 30
+
+/* Genlist item parts */
+#define BT_SHARE_ITEM_PART_DEVICE_NAME_TITLE "elm.text"
+#define BT_SHARE_ITEM_PART_DEVICE_NAME "elm.text.sub"
+
+#define BT_SHARE_ITEM_PART_TRANSFER_TYPE_TITLE "elm.text"
+#define BT_SHARE_ITEM_PART_TRANSFER_STATUS "elm.text.sub"
+
+#define BT_SHARE_ITEM_PART_PROGRESSBAR_FILE_NAME "elm.text.main"
+#define BT_SHARE_ITEM_PART_PROGRESSBAR_ICON "elm.swallow.content"
+
+#define BT_SHARE_ITEM_PART_FILE_LIST_TITLE "elm.text"
+
+#define BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_ICON "elm.swallow.icon"
+#define BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_TEXT "elm.text.sub"
+#define BT_SHARE_ITEM_PART_FILE_NAME "elm.text"
+#define BT_SHARE_ITEM_PART_FILE_SIZE "elm.text.sub.end"
 
 #ifdef __cplusplus
 }
old mode 100755 (executable)
new mode 100644 (file)
index 8118bfe..6a5c20b
 #include <vconf.h>
 #include <vconf-keys.h>
 #include <bluetooth-share-api.h>
-#include <bluetooth-api.h>
+#include <bluetooth_internal.h>
 #include <notification.h>
-#if 0
-#include <app_extension.h>
-#endif
-#include <notification_list.h>
 #include <notification_internal.h>
+#include <notification_list.h>
 
 #include "applog.h"
 #include "bt-share-ui-view.h"
 #include "bt-share-ui-widget.h"
 #include "bt-share-ui-main.h"
 
+#define NOTI_OPS_APP_ID        "bluetooth-share-opp-server"
+#define NOTI_OPC_APP_ID        "bluetooth-share-opp-client"
+
+#define BT_DEFAULT_MEM_PHONE 0
+#define BT_DEFAULT_MEM_MMC 1
 
-#define BT_TIMESTAMP_LEN_MAX 18
 #define BT_DOWNLOAD_PHONE_FOLDER "/opt/usr/media/Downloads"
 #define BT_DOWNLOAD_MMC_FOLDER "/opt/storage/sdcard/Downloads"
-#define BT_FILE_PATH_LEN_MAX   (4096 + 10)
+#define BT_CONTACT_SHARE_TMP_DIR BT_DOWNLOAD_PHONE_FOLDER "/.bluetooth"
 
 extern bt_share_appdata_t *app_state;
-static char *month_str[] = {
-       "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-       "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
 
-static void __bt_more_menu_cb(void *data,
-                               Evas_Object *obj, void *event_info);
+static Evas_Object *__bt_add_tr_data_genlist(Evas_Object *parent,
+                                                 bt_share_appdata_t *ad);
 
-Evas_Object *_bt_create_win(const char *name)
+void _bt_delete_selected_notification(bt_share_tr_type_e tr_type,
+                                       int noti_id, const char *opp_role)
 {
-       Evas_Object *eo = NULL;
+       notification_list_h list_head;
+       notification_list_h list_traverse;
+       notification_h noti;
+       int priv_id;
 
-#if 0
-       eo = (Evas_Object *)app_get_preinitialized_window(name);
-#endif
-       if (eo == NULL) {
-               ERR("app_get_preinitialized_window fail!");
-               eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       notification_get_list(NOTIFICATION_TYPE_NOTI, -1, &list_head);
+       list_traverse = list_head;
+
+       while (list_traverse != NULL) {
+               noti = notification_list_get_data(list_traverse);
+               notification_get_id(noti, NULL, &priv_id);
+               if (priv_id == noti_id) {
+                       DBG_SECURE("Deleting Notification ID: %d", noti_id);
+                       if (notification_delete_by_priv_id(opp_role,
+                                       NOTIFICATION_TYPE_NOTI, priv_id)
+                                       != NOTIFICATION_ERROR_NONE)
+                               ERR("Could Not Delete Notification");
+                       break;
+               }
+               list_traverse = notification_list_get_next(list_traverse);
        }
-       retv_if(!eo, NULL);
+}
 
-       elm_win_title_set(eo, name);
-       elm_win_borderless_set(eo, EINA_TRUE);
-#if 0
-       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
-       evas_object_resize(eo, w, h);
-#endif
+static void __bt_get_noti_id_opp_role_and_table(bt_share_appdata_t *ad, int *noti_id,
+               char **opp_role, bt_tr_db_table_e *table)
+{
+       sqlite3 *db = bt_share_open_db();
 
-       return eo;
+       if (ad->tr_type == BT_TR_OUTBOUND) {
+               *noti_id = bt_share_get_noti_id(db, BT_DB_OUTBOUND, ad->transfer_info->db_sid);
+               *opp_role = NOTI_OPC_APP_ID;
+               *table = BT_DB_OUTBOUND;
+       } else {
+               *noti_id = bt_share_get_noti_id(db, BT_DB_INBOUND, ad->transfer_info->db_sid);
+               *opp_role = NOTI_OPS_APP_ID;
+               *table = BT_DB_INBOUND;
+       }
+
+       bt_share_close_db(db);
 }
 
-void _bt_terminate_app(void)
+void _bt_share_ui_handle_transfer_disconnected(bt_share_appdata_t *ad,
+               bt_share_tr_type_e type)
 {
-       DBG("Terminate BT SHARE UI");
-       elm_exit();
+       FN_START;
+       ret_if(ad == NULL);
+
+       if (ad->progress_item) {
+               DBG("Updating Status");
+               Elm_Object_Item *git = elm_genlist_item_insert_after(ad->tr_genlist,
+                               ad->tr_status_itc, ad, NULL,
+                               ad->device_item, ELM_GENLIST_ITEM_NONE,
+                               NULL, NULL);
+               if (git == NULL) {
+                       ERR("elm_genlist_item_insert_after is failed!");
+               } else {
+                       elm_genlist_item_select_mode_set(git,
+                                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->status_item = git;
+               }
+
+               elm_object_item_del(ad->progress_item);
+               ad->progress_item = NULL;
+               ad->progressbar = NULL;
+       }
+
+       FN_END;
 }
 
-void _bt_delete_selected_item(bt_share_appdata_t *ad)
+void _bt_share_ui_handle_transfer_complete(bt_share_appdata_t *ad,
+               char *address, bt_share_tr_type_e type)
 {
-       DBG("+");
-       ret_if(ad == NULL);
+       FN_START;
+       ret_if(ad == NULL || ad->transfer_info == NULL || ad->transfer_info->device_address == NULL);
+       DBG_SECURE("Received Address: %s", address);
+       DBG_SECURE("Device Address: %s", ad->transfer_info->device_address);
 
-       if (ad->selected_item == NULL)
-               return;
+       ret_if(g_strcmp0(ad->transfer_info->device_address, address));
 
-       elm_object_item_del(ad->selected_item);
-       ad->selected_item = NULL;
+       FN_END;
+}
 
-       if (elm_genlist_items_count(ad->tr_genlist) == 0) {
-               _bt_nocontent_set(ad, TRUE);
-               ad->tr_genlist = NULL;
+void _bt_share_ui_handle_transfer_started(bt_share_appdata_t *ad,
+               char *address, char *file_name, unsigned long size, int transfer_id,
+               bt_share_tr_type_e type)
+{
+       FN_START;
+       ret_if(ad == NULL || ad->transfer_info == NULL || ad->transfer_info->device_address == NULL);
+       DBG_SECURE("Received Address: %s", address);
+       DBG_SECURE("Device Address: %s", ad->transfer_info->device_address);
+       ret_if(g_strcmp0(ad->transfer_info->device_address, address));
+
+       ad->transfer_info->filename = g_strdup(file_name);
+       DBG_SECURE("Transfer ID: %d", transfer_id);
+       ad->transfer_info->size = size;
+       ad->transfer_info->percentage = 0;
+       ad->transfer_info->current_file++;
+
+       if (ad->status_item) {
+               elm_object_item_del(ad->status_item);
+               ad->status_item = NULL;
+       }
+
+       if (ad->progress_item) {
+               _bt_share_genlist_item_text_update(ad->progress_item, BT_SHARE_ITEM_PART_PROGRESSBAR_FILE_NAME);
+               _bt_share_genlist_item_content_update(ad->progress_item, BT_SHARE_ITEM_PART_PROGRESSBAR_ICON);
+       } else {
+               /* Create Progress bar if not present */
+               Elm_Object_Item *git = elm_genlist_item_insert_after(ad->tr_genlist,
+                               ad->tr_progress_itc, ad, NULL, ad->device_item,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               if (git == NULL) {
+                       ERR("elm_genlist_item_append is failed!");
+               } else {
+                       elm_genlist_item_select_mode_set(git,
+                                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->progress_item = git;
+               }
        }
+
+       if (!ad->toolbar_button) {
+               /* Create Stop Button if not present */
+               ad->toolbar_button = _bt_share_create_toolbar_button(ad,
+                               BT_STR_STOP);
+       }
+
+       FN_END;
+}
+
+Evas_Object *_bt_create_win(const char *name)
+{
+       Evas_Object *eo = NULL;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       retv_if(!eo, NULL);
+
+       elm_win_title_set(eo, name);
+       elm_win_borderless_set(eo, EINA_TRUE);
+       return eo;
+}
+
+void _bt_terminate_app(void)
+{
+       DBG("Terminate BT SHARE UI");
+       elm_exit();
 }
 
 static void __bt_clear_view(void *data)
@@ -123,11 +224,12 @@ static void __bt_clear_view(void *data)
        if (ad->tr_genlist) {
                elm_genlist_clear(ad->tr_genlist);
                ad->tr_genlist = NULL;
-       }
-
-       if (ad->toolbar_btn) {
-               evas_object_del(ad->toolbar_btn);
-               ad->toolbar_btn = NULL;
+               ad->device_item = NULL;
+               ad->progress_item = NULL;
+               ad->status_item = NULL;
+               ad->file_title_item = NULL;
+               ad->tr_data_itc = NULL;
+               ad->progressbar = NULL;
        }
 
        if (ad->navi_fr) {
@@ -165,206 +267,601 @@ static Eina_Bool __bt_back_button_cb(void *data, Elm_Object_Item *it)
        return EINA_FALSE;
 }
 
-static void __bt_clear_list_btn_cb(void *data,
-                                       Evas_Object *obj,
-                                       void *event_info)
+static Evas_Object *__bt_tr_progress_icon_get(void *data, Evas_Object *obj,
+                                           const char *part)
 {
-       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
-       int clear_list = -1;
-       int ret;
+       FN_START;
 
-       DBG("Clear genlist item");
+       Evas_Object *progress_layout = NULL;
+       Evas_Object *progressbar = NULL;
+       bt_share_appdata_t *ad = NULL;
 
-       notification_h noti = NULL;
-       int priv_id = 0;
-       notification_list_h list_head = NULL;
-       notification_list_h list_traverse = NULL;
-       char *app_id = NULL;
-       char *opp_role = NULL;
+       retv_if(data == NULL, NULL);
+       ad = (bt_share_appdata_t *)data;
 
-       if (ad->bt_status == BT_ADAPTER_DISABLED) {
-               sqlite3 *db = NULL;
-               bt_tr_db_table_e table;
+       bt_share_transfer_data_t *transfer_info = ad->transfer_info;
+
+       if (!strcmp(part, BT_SHARE_ITEM_PART_PROGRESSBAR_ICON)) {
+               char buff[BT_STR_PROGRESS_MAX_LEN] = { 0, };
+               char *markup_text = NULL;
+
+               if (ad->progress_layout == NULL) {
+                       DBG("Creating new progress layout!!!");
+                       progress_layout = elm_layout_add(obj);
+                       elm_layout_file_set(progress_layout, EDJFILE, "gl_custom_item");
+                       evas_object_size_hint_align_set(progress_layout, EVAS_HINT_FILL,
+                                                                               EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(progress_layout, EVAS_HINT_EXPAND,
+                                                                               EVAS_HINT_EXPAND);
+                       evas_object_show(progress_layout);
+                       ad->progress_layout = progress_layout;
+               } else {
+                       progress_layout = ad->progress_layout;
+               }
 
-               /* Update bt-share DB */
-               db = bt_share_open_db();
-               if (!db)
-                       return;
+               if (ad->progressbar == NULL) {
+                       DBG("Creating new progressbar!!!");
+                       progressbar = elm_progressbar_add(progress_layout);
 
-               table = ad->tr_type ? BT_TR_INBOUND : BT_TR_OUTBOUND;
-               bt_share_remove_all_tr_data(db, table);
-               bt_share_close_db(db);
+                       elm_progressbar_unit_format_set(progressbar, NULL);
+                       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+                       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL,
+                                       EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND,
+                                       EVAS_HINT_EXPAND);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
 
-               /* Delete notification */
-               notification_get_list(NOTIFICATION_TYPE_NOTI, -1, &list_head);
-               list_traverse = list_head;
+                       evas_object_show(progressbar);
+                       ad->progressbar = progressbar;
+               } else {
+                       progressbar = ad->progressbar;
+               }
 
-               if (ad->tr_type == BT_TR_INBOUND)
-                       opp_role = "bluetooth-share-opp-server";
-               else
-                       opp_role = "bluetooth-share-opp-client";
+               elm_object_part_content_set(progress_layout, "elm.swallow.content", progressbar);
+
+               elm_progressbar_value_set(progressbar,
+                               (double) transfer_info->percentage / 100);
+
+               elm_object_signal_emit(progressbar, "elm,bottom,text,show", "elm");
+
+               markup_text = elm_entry_utf8_to_markup(transfer_info->filename);
+               DBG_SECURE("Filename: %s", markup_text);
+
+               DBG("Filename: %s", markup_text);
+               elm_object_part_text_set(progressbar, "elm.text.top.right", markup_text);
+               g_free(markup_text);
+
+               snprintf(buff, BT_STR_PROGRESS_MAX_LEN - 1 , "%d%%", transfer_info->percentage);
+               elm_object_part_text_set(progressbar, "elm.text.bottom.left", buff);
 
-               while (list_traverse != NULL) {
-                       noti = notification_list_get_data(list_traverse);
-                       notification_get_pkgname(noti, &app_id);
+               if (ad->launch_mode == BT_LAUNCH_ONGOING &&
+                               ad->tr_type == BT_TR_OUTBOUND) {
+                       memset(buff, 0, BT_STR_PROGRESS_MAX_LEN);
+                       snprintf(buff, BT_STR_PROGRESS_MAX_LEN - 1 , "[%d/%d]",
+                                       transfer_info->current_file, transfer_info->total_files);
+                       elm_object_part_text_set(progressbar, "elm.text.bottom.right", buff);
+               }
+       }
+
+       return progress_layout;
+}
+
+
+static Evas_Object *__bt_tr_icon_get(void *data, Evas_Object *obj,
+                                           const char *part)
+{
+       Evas_Object *ly = NULL;
+       Evas_Object *icon = NULL;
+       bt_tr_data_t *info = NULL;
+       bt_share_appdata_t *ad = app_state;
+       char *img = NULL;
+       bt_gl_data_t *gl_data = NULL;
+
+       retv_if(!data, NULL);
+       gl_data = (bt_gl_data_t *)data;
 
-                       if (g_strcmp0(app_id, opp_role) == 0) {
-                               notification_get_id(noti, NULL, &priv_id);
-                               notification_delete_by_priv_id(app_id, NOTIFICATION_TYPE_NOTI, priv_id);
-                               priv_id = 0;
+       info = gl_data->tr_data;
+       retv_if(!info, NULL);
+
+       if (!strcmp(part, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_ICON)) {
+               ly = elm_layout_add(obj);
+               if (info->tr_status == BT_TRANSFER_SUCCESS ||
+                               info->tr_status == BT_TRANSFER_FAIL) {
+                       icon = elm_image_add(obj);
+                       if (ad->tr_type == BT_TR_OUTBOUND) {
+                               img = (info->tr_status == BT_TRANSFER_SUCCESS) ?
+                                               BT_ICON_SEND_PASS : BT_ICON_SEND_FAIL;
+                       } else {
+                               img = (info->tr_status == BT_TRANSFER_SUCCESS) ?
+                                               BT_ICON_RECV_PASS : BT_ICON_RECV_FAIL;
                        }
-                       list_traverse = notification_list_get_next(list_traverse);
+
+                       elm_image_file_set(icon, EDJ_IMAGES, img);
+                       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL,
+                                       EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND,
+                                       EVAS_HINT_EXPAND);
+
+                       evas_object_show(icon);
+                       evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+                       return icon;
+               } else if (info->tr_status == BT_TRANSFER_ONGOING) {
+#if 0
+                       int ret;
+                       ret = elm_layout_file_set(ly, EDJ_BT_ICON_ANIMATION,
+                               (ad->tr_type == BT_TR_OUTBOUND ? BT_ANI_UPLOAD : BT_ANI_DOWNLOAD));
+                       if (ret == EINA_FALSE)
+                               ERR("Error in setting layout file");
+#endif
+                       icon = elm_progressbar_add(obj);
+                       elm_object_style_set(icon, "process_medium");
+                       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, 0.5);
+                       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_progressbar_pulse(icon, TRUE);
+                       return icon;
+               } else if (info->tr_status == BT_TRANSFER_PENDING) {
+                       icon = elm_progressbar_add(obj);
+                       elm_object_style_set(icon, "process_medium");
+                       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, 0.5);
+                       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_progressbar_pulse(icon, TRUE);
+                       return icon;
                }
+       }
+       return ly;
+}
 
-               if (list_head != NULL) {
-                       notification_free_list(list_head);
-                       list_head = NULL;
+#if 0
+void _bt_util_get_number(char *source, char *dest)
+{
+       int len = 7;
+       int slen = 0;
+       char buf[9];
+
+       slen = strlen(source);
+       slen--;
+       buf[8] = '\0';
+       while (len > -1) {
+               if (slen > -1) {
+                       if (isdigit(source[slen])) {
+                               buf[len] = source[slen];
+                               --len;
+                       }
+                       --slen;
+               } else {
+                       break;
                }
-       } else {
-               _bt_share_ui_ipc_info_update(ad, clear_list);
        }
+       if (len < 0)
+               len = 0;
+       strcpy(dest, &buf[len]);
+}
 
-       if (ad->tr_genlist) {
-               elm_genlist_clear(ad->tr_genlist);
-               ad->tr_genlist = NULL;
+void _bt_util_get_contact_name(int lcontact_id, char **contact_name)
+{
+       int ret = 0;
+       int count = 0;
+       contacts_filter_h filter = NULL;
+       contacts_query_h query = NULL;
+       contacts_list_h list = NULL;
+       contacts_record_h record = NULL;
+       char *name = NULL;
+
+       DBG("+");
+       ret = contacts_filter_create(_contacts_contact._uri, &filter);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to create filter for contacts");
+               goto fail;
        }
 
-       if (ad->tr_data_list) {
-               ret = bt_share_release_tr_data_list(ad->tr_data_list);
-               if (ret != BT_SHARE_ERR_NONE)
-                       ERR("Transfer data release failed ");
-               ad->tr_data_list = NULL;
+       ret = contacts_filter_add_int(filter, _contacts_contact.id,
+                       CONTACTS_MATCH_EXACTLY, lcontact_id);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to add str to filter for contacts");
+               goto fail;
+       }
+
+       ret = contacts_query_create(_contacts_contact._uri, &query);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to create qurey for contacts");
+               goto fail;
+       }
+
+       ret = contacts_query_set_filter(query, filter);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to set filter for contacts");
+               goto fail;
        }
 
-       _bt_nocontent_set(ad, TRUE);
+       ret = contacts_db_get_count_with_query(query, &count);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to get count from db");
+               goto fail;
+       }
 
+       if (count < 1) {
+               DBG("No match");
+               goto fail;
+       }
+       DBG("count = %d", count);
+       ret = contacts_db_get_records_with_query(query, 0, 0, &list);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to get records from db");
+               goto fail;
+       }
+       contacts_list_first(list);
+
+       while (ret == CONTACTS_ERROR_NONE) {
+               contacts_list_get_current_record_p(list, &record);
+               contacts_record_get_str_p(record,
+                               _contacts_contact.display_name,
+                               &name);
+               if (name != NULL) {
+                       *contact_name = g_strdup(name);
+                       break;
+               }
+
+               ret = contacts_list_next(list);
+       }
+
+fail:
+       if (filter)
+               contacts_filter_destroy(filter);
+
+       if (query)
+               contacts_query_destroy(query);
+
+       if (list)
+               contacts_list_destroy(list, true);
+       DBG("-");
+       return;
 }
 
-static char *__bt_get_tr_timedate(time_t timestamp)
+unsigned int bt_crc32(const void *src, unsigned long src_sz)
 {
-       struct tm pt;
-       struct tm current_time;
-       time_t rawtime;
-       char buf[BT_TIMESTAMP_LEN_MAX] = { 0 };
-       int cy;
-       int cm;
-       int cd;
-       int ry;
-       int rm;
-       int rd;
-
-       /* Get current time */
-       time(&rawtime);
-       localtime_r(&rawtime, &current_time);
-
-       cy = current_time.tm_year + 1900;
-       cm = current_time.tm_mon + 1;
-       cd = current_time.tm_mday;
-
-       /* Get recorded time */
-       localtime_r(&timestamp, &pt);
-       ry = pt.tm_year + 1900;
-       rm = pt.tm_mon + 1;
-       rd = pt.tm_mday;
-
-       if (cy == ry && cm == rm && cd == rd) {
-               int format = 0;
-               if (vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &format) != 0) {
-                       ERR("vconf get failed");
-               }
+       return (crc32(0, src, src_sz) & 0xFFFF);
+}
 
-               if (format == VCONFKEY_TIME_FORMAT_12)
-                       if (pt.tm_hour >=0 && pt.tm_hour < 12)
-                               strftime(buf, sizeof(buf), "%I:%M AM", &pt);
-                       else
-                               strftime(buf, sizeof(buf), "%I:%M PM", &pt);
-               else
-                       strftime(buf, sizeof(buf), "%H:%M", &pt);
-       } else if (cy == ry && cm == rm && cd - 1 == rd) {
-               return g_strdup(BT_STR_YESTERDAY);
-       } else {
-               snprintf(buf, sizeof(buf), "%d %s %d", rd, month_str[rm - 1], ry);
+void _bt_util_get_contact_info(unsigned char *auth_info, int *contact_id, char **contact_name)
+{
+       unsigned int shash = 0;
+       unsigned int chash = 0;
+       char pnumber[20] = {0,};
+       char str_hash[7] = {0,};
+       int ret = CONTACTS_ERROR_NONE;
+       char *number = NULL;
+       int lcontact_id = 0;
+       int count = 0;
+
+       contacts_filter_h filter = NULL;
+       contacts_query_h query = NULL;
+       contacts_list_h list = NULL;
+       contacts_record_h record = NULL;
+
+       retm_if(!auth_info, "auth_info is NULL");
+       retm_if(!contact_id, "contact_id is NULL");
+       retm_if(!contact_name, "contact_name is NULL");
+       DBG("+");
+       if (contacts_connect() != CONTACTS_ERROR_NONE) {
+               ERR("contacts_connect failed");
+               return;
+       }
+
+       memcpy(&shash, auth_info, 3);
+       shash = ntohl(shash);
+       shash >>= 8;
+
+       memcpy(&chash, &auth_info[3], 2);
+       chash = ntohl(chash);
+       chash >>= 16;
+
+       g_snprintf(str_hash, 7, "%X", shash);
+
+       ret = contacts_filter_create(_contacts_quick_connect_info._uri, &filter);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to create filter for contacts");
+               goto fail;
+       }
+
+       ret = contacts_filter_add_str(filter, _contacts_quick_connect_info.hash,
+                       CONTACTS_MATCH_EXACTLY, str_hash);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to add str to filter for contacts");
+               goto fail;
+       }
+
+       ret = contacts_query_create(_contacts_quick_connect_info._uri, &query);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to create qurey for contacts");
+               goto fail;
+       }
+
+       ret = contacts_query_set_filter(query, filter);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to set filter for contacts");
+               goto fail;
+       }
+
+       ret = contacts_db_get_count_with_query(query, &count);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to get count from db");
+               goto fail;
+       }
+
+       if (count < 1) {
+               DBG("No match");
+               goto fail;
+       }
+
+       ret = contacts_db_get_records_with_query(query, 0, 0, &list);
+       if (ret != CONTACTS_ERROR_NONE) {
+               ERR("Fail to get records from db");
+               goto fail;
+       }
+
+       contacts_list_first(list);
+
+       while (ret == CONTACTS_ERROR_NONE) {
+               contacts_list_get_current_record_p(list, &record);
+               contacts_record_get_str_p(record,
+                               _contacts_quick_connect_info.number,
+                               &number);
+               DBG_SECURE("number: [%s]", number);
+               if (number != NULL) {
+                       _bt_util_get_number(number, pnumber);
+                       DBG_SECURE("pnumber: [%s]", pnumber);
+
+                       DBG_SECURE("CRC [%X], [%X]", chash, bt_crc32(pnumber, strlen(pnumber)));
+
+                       if (bt_crc32(pnumber , strlen(pnumber)) == chash) {
+                               contacts_record_get_int(record,
+                                               _contacts_quick_connect_info.contact_id,
+                                               &lcontact_id);
+                               *contact_id = lcontact_id;
+                               _bt_util_get_contact_name(lcontact_id, contact_name);
+                               DBG_SECURE("contact id : %d", lcontact_id);
+                               break;
+                       }
+               }
+               ret = contacts_list_next(list);
        }
 
-       return g_strdup(buf);
+fail:
+       if (filter)
+               contacts_filter_destroy(filter);
+
+       if (query)
+               contacts_query_destroy(query);
+
+       if (list)
+               contacts_list_destroy(list, true);
+
+       contacts_disconnect();
+
+       DBG("-");
 }
+#endif
 
-static Evas_Object *__bt_tr_icon_get(void *data, Evas_Object *obj,
-                                           const char *part)
+static char *__bt_tr_device_label_get(void *data, Evas_Object *obj,
+                                     const char *part)
 {
-       Evas_Object *icon = NULL;
-       bt_tr_data_t *info = NULL;
-       bt_share_appdata_t *ad = app_state;
-       char *img;
-       bt_gl_data_t *gl_data;
+       FN_START;
+       retv_if(data == NULL, NULL);
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       char *markup_text = NULL;
+
+       retv_if(ad->transfer_info == NULL, NULL);
+
+       if (!strcmp(part, BT_SHARE_ITEM_PART_DEVICE_NAME_TITLE)) {
+               return g_strdup(BT_STR_DEVICENAME);
+       } else if (!strcmp(part, BT_SHARE_ITEM_PART_DEVICE_NAME)) {
+               bt_share_transfer_data_t *transfer_info = ad->transfer_info;
+               DBG_SECURE("Device : %s", transfer_info->device_name);
+               if (ad->bt_status == BT_ADAPTER_ENABLED) {
+                       bt_error_e ret = BT_ERROR_NONE;
+                       bt_device_info_s *dev_info = NULL;
+
+                       /* Get the contact name from manufacturer data */
+                       DBG_SECURE("Address : %s", transfer_info->device_address);
+                       ret =  bt_adapter_get_bonded_device_info(transfer_info->device_address, &dev_info);
+                       if (ret == BT_ERROR_NONE) {
+                               DBG_SECURE("Using remote name [%s] only.", dev_info->remote_name);
+                               markup_text = elm_entry_utf8_to_markup(dev_info->remote_name);
+#if 0
+                               unsigned char auth_info[5] = {0, };
+                               int contact_id = -1;
+                               char *contact_name = NULL;
+                               gboolean is_alias_set = FALSE;
+                               ret = bt_adapter_get_bonded_device_is_alias_set(dev_info->remote_address, &is_alias_set);
+                               if (ret != BT_ERROR_NONE)
+                                       ERR("bt_adapter_get_bonded_device_is_alias_set() is failed!!! error: 0x%04X", ret);
+
+                               if (is_alias_set == TRUE) {
+                                       DBG_SECURE("Device alias is set. Using remote name [%s] only.", dev_info->remote_name);
+                                       markup_text = elm_entry_utf8_to_markup(dev_info->remote_name);
+                               } else if (dev_info->manufacturer_data_len >= 30 &&
+                                               dev_info->manufacturer_data[0] == 0x00 &&
+                                               dev_info->manufacturer_data[1] == 0x75) {
+                                       unsigned char auth_info_null[5];
+                                       memset(auth_info_null, 0X0, 5);
+                                       memcpy(auth_info, &(dev_info->manufacturer_data[10]), 5);
+
+                                       /* Check for validity of auth_info */
+                                       if (memcmp(auth_info, auth_info_null, 5)) {
+                                               _bt_util_get_contact_info(auth_info, &contact_id, &contact_name);
+                                               DBG_SECURE("contact id : %d | contact name : %s", contact_id, contact_name);
+                                               if (contact_name) {
+                                                       markup_text = elm_entry_utf8_to_markup(contact_name);
+                                                       g_free(contact_name);
+                                               }
+                                       }
+                               }
+#endif
+                               bt_adapter_free_device_info(dev_info);
+                       } else {
+                               ERR("bt_adapter_get_bonded_device_info() is failed!!! error: 0x%04X", ret);
+                       }
+               }
+
+               if (!markup_text)
+                       markup_text = elm_entry_utf8_to_markup(transfer_info->device_name);
+
+               return markup_text;
+       }
+       FN_END;
+       return NULL;
+}
 
+static char *__bt_tr_status_label_get(void *data, Evas_Object *obj,
+                                     const char *part)
+{
+       FN_START;
        retv_if(data == NULL, NULL);
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       bt_share_transfer_data_t *transfer_info = ad->transfer_info;
+       char *tmp_success = NULL;
+       char *tmp_failed = NULL;
+       char *ret_str = NULL;
 
-       gl_data = (bt_gl_data_t *)data;
+       retv_if(transfer_info == NULL, NULL);
 
-       info = gl_data->tr_data;
-       retv_if(info == NULL, NULL);
+       if (!strcmp(part, BT_SHARE_ITEM_PART_TRANSFER_TYPE_TITLE)) {
+               if (ad->tr_type == BT_TR_INBOUND)
+                       return (transfer_info->success > 0) ?
+                               g_strdup(BT_STR_FILE_RECEIVED) :
+                               g_strdup(BT_STR_RECEIVING_FAILED);
+               else
+                       return (transfer_info->success > 0) ?
+                               g_strdup(BT_STR_FILE_SENT) :
+                               g_strdup(BT_STR_SENDING_FAILED);
+       } else if (!strcmp(part, BT_SHARE_ITEM_PART_TRANSFER_STATUS)) {
+               char *stms_str = NULL;
 
-       if (!strcmp("elm.swallow.icon", part)) {
-               icon = elm_image_add(obj);
-               if (ad->tr_type == BT_TR_OUTBOUND) {
-                       img = (info->tr_status == BT_TR_SUCCESS) ?
-                                       BT_ICON_SEND_PASS : BT_ICON_SEND_FAIL;
-               } else {
-                       img = (info->tr_status == BT_TR_SUCCESS) ?
-                                       BT_ICON_RECV_PASS : BT_ICON_RECV_FAIL;
-               }
+               DBG_SECURE("Success %d, Failed %d", transfer_info->success, transfer_info->failed);
+               if (transfer_info->success == 0 &&
+                               transfer_info->failed == 0)
+                       return NULL;
+
+               stms_str = (ad->tr_type == BT_TR_INBOUND) ? BT_STR_PD_RECEIVED : BT_STR_PD_SENT;
+               tmp_success = g_strdup_printf(stms_str, transfer_info->success);
+
+               stms_str = BT_STR_PD_FAILED;
+               tmp_failed = g_strdup_printf(stms_str, transfer_info->failed);
+
+               ret_str = g_strdup_printf("%s, %s", tmp_success, tmp_failed);
+
+               g_free(tmp_success);
+               g_free(tmp_failed);
+               return ret_str;
+       }
+       FN_END;
+       return NULL;
+}
 
-               elm_image_file_set(icon, EDJ_IMAGES, img);
-               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+#if 0
+static char *__bt_tr_progress_label_get(void *data, Evas_Object *obj,
+                                     const char *part)
+{
+       FN_START;
+       retv_if(data == NULL, NULL);
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       char *markup_text = NULL;
 
-               evas_object_color_set(icon, 76, 76, 76 , 255);
+       retv_if(ad->transfer_info == NULL, NULL);
 
-               evas_object_show(icon);
+       if (!strcmp(part, BT_SHARE_ITEM_PART_PROGRESSBAR_FILE_NAME)) {
+               bt_share_transfer_data_t *transfer_info = ad->transfer_info;
+               markup_text = elm_entry_utf8_to_markup(transfer_info->filename);
+               DBG_SECURE("Filename: %s", markup_text);
+               return markup_text;
        }
 
-       return icon;
+       FN_END;
+       return NULL;
+}
+#endif
+
+static char *__bt_tr_file_title_label_get(void *data, Evas_Object *obj,
+                                     const char *part)
+{
+       FN_START;
+       if (!strcmp(part, BT_SHARE_ITEM_PART_FILE_LIST_TITLE)) {
+               DBG("File List");
+               return g_strdup(BT_STR_FILE_LIST);
+       }
+       FN_END;
+       return NULL;
 }
 
 static char *__bt_tr_label_get(void *data, Evas_Object *obj,
                                      const char *part)
 {
+       FN_START;
        bt_tr_data_t *info = NULL;
        char *name = NULL;
        char buf[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-       bt_gl_data_t *gl_data;
-
+       bt_gl_data_t *gl_data = NULL;
+       char *markup_text = NULL;
        retv_if(data == NULL, NULL);
        gl_data = (bt_gl_data_t *)data;
+       retvm_if(gl_data == NULL, NULL, "gl_data is NULL!");
 
        info = gl_data->tr_data;
        retv_if(info == NULL, NULL);
 
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp(part, BT_SHARE_ITEM_PART_FILE_NAME)) {
                name = strrchr(info->file_path, '/');
                if (name != NULL)
                        name++;
                else
                        name = info->file_path;
+               markup_text = elm_entry_utf8_to_markup(name);
+
+               g_strlcpy(buf, markup_text, BT_GLOBALIZATION_STR_LENGTH);
+       } else if (!strcmp(part, BT_SHARE_ITEM_PART_FILE_TRANSFER_STATUS_TEXT)) {
+               DBG("info->tr_status : %d", info->tr_status);
+               if (info->tr_status == BT_TRANSFER_SUCCESS) {
+                       if (gl_data->tr_inbound)
+                               g_strlcpy(buf, BT_STR_RECEIVED, BT_GLOBALIZATION_STR_LENGTH);
+                       else
+                               g_strlcpy(buf, BT_STR_SENT, BT_GLOBALIZATION_STR_LENGTH);
+               } else if (info->tr_status == BT_TRANSFER_FAIL) {
+                       g_strlcpy(buf, BT_STR_FAILED, BT_GLOBALIZATION_STR_LENGTH);
+               } else if (info->tr_status == BT_TRANSFER_ONGOING) {
+                       if (gl_data->tr_inbound)
+                               g_strlcpy(buf, BT_STR_RECEIVING, BT_GLOBALIZATION_STR_LENGTH);
+                       else
+                               g_strlcpy(buf, BT_STR_SENDING, BT_GLOBALIZATION_STR_LENGTH);
+               } else if (info->tr_status == BT_TRANSFER_PENDING) {
+                       g_strlcpy(buf, BT_STR_WAITING, BT_GLOBALIZATION_STR_LENGTH);
+               }
+       } else if (!strcmp(part, BT_SHARE_ITEM_PART_FILE_SIZE)) {
+               char *size;
+
+               if ((info->tr_status == BT_TRANSFER_ONGOING ||
+                               info->tr_status == BT_TRANSFER_PENDING) && gl_data->tr_inbound)
+                       return NULL;
+
+               if (info->size > 1024 * 1024 * 1024) { //GB
+                       size = g_strdup_printf("%.2f GB", (float)info->size / (1024 * 1024 * 1024));
+               } else if (info->size > 1024 * 1024) { //MB
+                       size = g_strdup_printf("%.1f MB", (float)info->size / (1024 * 1024));
+               } else if (info->size > 1024) { //KB
+                       size = g_strdup_printf("%.1f KB", (float)info->size / (1024));
+               } else {
+                       size = g_strdup_printf("%d B", info->size);
+               }
 
-               g_strlcpy(buf, name, BT_GLOBALIZATION_STR_LENGTH);
-       } else if (!strcmp("elm.text.sub", part)) {
-               char *marked_name = elm_entry_utf8_to_markup(info->dev_name);
-               g_strlcpy(buf, marked_name, BT_GLOBALIZATION_STR_LENGTH);
-               if (marked_name)
-                       free(marked_name);
-       } else if (!strcmp("elm.text.sub.end", part)) {
-               char *date = NULL;
-               date = __bt_get_tr_timedate((time_t)(info->timestamp));
-               snprintf(buf, BT_GLOBALIZATION_STR_LENGTH, "<font_size=25>%s</font_size>", date);
-               g_free(date);
+               g_strlcpy(buf, size, BT_GLOBALIZATION_STR_LENGTH);
+               g_free(size);
        } else {
                DBG("empty text for label.");
                return NULL;
        }
+       if (markup_text)
+               free(markup_text);
 
+       FN_END;
        return strdup(buf);
 }
 
@@ -376,6 +873,7 @@ static void  __bt_tr_del(void *data, Evas_Object *obj)
        g_free(gl_data);
 }
 
+#if 0
 static void __bt_genlist_realized_cb(void *data,
                        Evas_Object *obj, void *event_info)
 {
@@ -416,33 +914,36 @@ static void __bt_genlist_realized_cb(void *data,
 #endif
        g_free(date);
 }
+#endif
 
 static void __bt_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
-       DBG("+");
+       FN_START;
        retm_if(data == NULL, "data is NULL");
        bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
 
-       evas_object_del(ad->info_popup);
-       ad->info_popup = NULL;
-       DBG("-");
+       if (ad->info_popup) {
+               evas_object_del(ad->info_popup);
+               ad->info_popup = NULL;
+       }
+       FN_END;
 }
 
 void __bt_popup_del_by_timeout(void *data, Evas_Object *obj, void *event_info)
 {
-       DBG("+");
+       FN_START;
        bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
        ret_if(!ad);
-       if (ad->info_popup){
+       if (ad->info_popup) {
                evas_object_del(ad->info_popup);
                ad->info_popup = NULL;
        }
-       DBG("-");
+       FN_END;
 }
 
 Evas_Object *__bt_create_error_popup(bt_share_appdata_t *ad)
 {
-       DBG("+");
+       FN_START;
        Evas_Object *popup = NULL;
        retvm_if(ad == NULL, NULL, "ad is NULL");
 
@@ -461,13 +962,13 @@ Evas_Object *__bt_create_error_popup(bt_share_appdata_t *ad)
 
        ad->info_popup = popup;
 
-       DBG("-");
+       FN_END;
        return popup;
 }
 
-static gboolean __bt_open_received_file(const char *path)
+static gboolean __bt_open_file(const char *path)
 {
-       DBG("+");
+       FN_START;
        app_control_h handle;
        int ret;
        bt_share_appdata_t *ad = app_state;
@@ -480,292 +981,237 @@ static gboolean __bt_open_received_file(const char *path)
        if (ret == APP_CONTROL_ERROR_APP_NOT_FOUND)
                __bt_create_error_popup(ad);
 
-       app_control_destroy(handle);
-       DBG("-");
-       return TRUE;
-}
-
-static gint __handle_compare(gconstpointer a, gconstpointer b)
-{
-       bt_tr_data_t *info = (bt_tr_data_t *)a;
-       int id = (int) b;
-
-       if (info->id == id)
-               return 0;
-       else
-               return -1;
-}
-
-static void __bt_remove_tr_data_node(bt_share_appdata_t *ad, int id)
-{
-       DBG("+");
-       GSList *l = NULL;
-       bt_tr_data_t *info = NULL;
-       l = g_slist_find_custom(ad->tr_data_list, (gconstpointer)id,
-                                                       __handle_compare);
-       if (l) {
-               info = l->data;
-               ad->tr_data_list = g_slist_remove(ad->tr_data_list, info);
-       }
-
-       if (g_slist_length(ad->tr_data_list) == 0) {
-               _bt_nocontent_set(ad, TRUE);
-               ad->tr_genlist = NULL;
-       }
-}
-
-void _bt_update_tr_notification(void *data)
-{
-       ret_if(data == NULL);
-
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = NULL;
-       sqlite3 *db = NULL;
-       int success = 0;
-       int fail = 0;
-       char *opp_role = NULL;
-       notification_h noti = NULL;
-       int priv_id = 0;
-       notification_list_h list_head = NULL;
-       notification_list_h list_traverse = NULL;
-       char *app_id = NULL;
-
-       info = (bt_tr_data_t *)data;
-
-       DBG("Transfer type: %s", ad->tr_type == BT_TR_INBOUND ? "Receive" : "Sent");
-
-       db = bt_share_open_db();
-       if (!db)
-               return;
-
-       if (ad->tr_type == BT_TR_INBOUND)
-               opp_role = "bluetooth-share-opp-server";
-       else
-               opp_role = "bluetooth-share-opp-client";
-
-
-       /* Delete selected outbound db / notification info */
-       if (bt_share_remove_tr_data_by_id(db, ad->tr_type, info->id) == 0)
-               DBG("successfully TR ID removed from DB");
-#if 0
-       bt_share_get_tr_result_count(db, ad->tr_type, &success, &fail);
-#endif
-       DBG("success: %d, fail: %d", success, fail);
-
-       /* Delete notification */
-       notification_get_list(NOTIFICATION_TYPE_NOTI, -1, &list_head);
-       list_traverse = list_head;
-
-       while (list_traverse != NULL) {
-               noti = notification_list_get_data(list_traverse);
-               notification_get_pkgname(noti, &app_id);
-
-               if (g_strcmp0(app_id, opp_role) == 0) {
-                       notification_get_id(noti, NULL, &priv_id);
-                       break;
-               }
-               list_traverse = notification_list_get_next(list_traverse);
-       }
-
-       if (success == 0 && fail == 0)
-               notification_delete_by_priv_id(app_id, NOTIFICATION_TYPE_NOTI, priv_id);
-#if 0
-       else {
-               char str[BT_GLOBALIZATION_STR_LENGTH] = { 0 };
-               if (success == 1) {
-                       stms_str = BT_STR_TR_1FILE_COPIED_STATUS;
-                       snprintf(str, sizeof(str), stms_str, fail);
-               } else {
-                       stms_str = BT_STR_TR_COPIED_STATUS;
-                       snprintf(str, sizeof(str), stms_str,
-                                success, fail);
-               }
+       app_control_destroy(handle);
+       FN_END;
+       return TRUE;
+}
 
-               notification_set_content(noti, str, NULL);
-               notification_update(noti);
-       }
-#endif
-       if (list_head != NULL) {
-               notification_free_list(list_head);
-               list_head = NULL;
+static Elm_Object_Item * __bt_add_file_title_item(bt_share_appdata_t *ad)
+{
+       retvm_if(!ad, NULL, "ad is NULL!");
+       retvm_if(!ad->tr_genlist, NULL, "tr_genlist is NULL!");
+       retvm_if(ad->file_title_item, NULL, "file_title_item is exist");
+
+       Elm_Object_Item *git = NULL;
+       git = elm_genlist_item_append(ad->tr_genlist,
+                       ad->tr_file_title_itc, NULL,
+                       NULL, ELM_GENLIST_ITEM_NONE,
+                       NULL, NULL);
+
+       if (git == NULL) {
+               ERR("elm_genlist_item_append is failed!");
+       } else {
+               elm_genlist_item_select_mode_set(git,
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               ad->file_title_item = git;
        }
 
-       bt_share_close_db(db);
+       return git;
 }
 
-static void __bt_tr_data_recv_item_sel(void *data, Evas_Object *obj,
-                                     void *event_info)
+static void __bt_tr_data_item_sel(void *data, Evas_Object *obj, void *event_info)
 {
        bt_share_appdata_t *ad = app_state;
+       bt_gl_data_t *gl_data = (bt_gl_data_t *) data;
        bt_tr_data_t *info = NULL;
        char *path = NULL;
        char *ext = NULL;
        int default_memory = 0;
 
-       DBG("Select received item");
-
        ret_if(data == NULL);
        ret_if(event_info == NULL);
 
-       info = (bt_tr_data_t *)data;
-       __bt_remove_tr_data_node(ad, info->id);
-
-       ad->selected_item = (Elm_Object_Item *)event_info;
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
-                                     EINA_FALSE);
+       FN_START;
 
-       if (info->tr_status == BT_TR_SUCCESS) {
-               ret_if(info->file_path == NULL);
-               INFO_SECURE("File : %s", info->file_path);
-               if (vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_BLUETOOTH_INT,
-                                                       &default_memory) != 0) {
-                       ERR("vconf get failed");
-               }
-               path = info->file_path;
-               INFO_SECURE("path : %s", path);
-               ext = strrchr(path, '.');
-               if (ext) {
-                       ext++;
-                       if (0 == g_strcmp0(ext, "vcf")) {
-                               ad->ft_popup = _bt_create_ft_popup(
-                                               BT_FT_RECV_SUCCESS_POPUP, info);
-                               return;
-                       }
-               }
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
 
-               if (access(path, F_OK) == 0) {
-                       __bt_open_received_file(path);
-                       if (ad->bt_status == BT_ADAPTER_DISABLED) {
-                               _bt_update_tr_notification(info);
-                               _bt_delete_selected_item(ad);
-                       } else { /*Adapter enabled case */
-                               _bt_share_ui_ipc_info_update(ad, info->id);
-                               _bt_delete_selected_item(ad);
+       info = gl_data->tr_data;
+       retm_if(info->file_path == NULL, "File Path is NULL");
+
+       ext = strrchr(info->file_path, '.');
+       if (ext++) {
+               if (0 == g_strcmp0(ext, "vcf")) {
+                       if (gl_data->tr_inbound == true) {
+                               if (info->tr_status == BT_TRANSFER_SUCCESS)
+                                       _bt_create_info_popup(ad, BT_STR_RECEIVED_VCF_FILE_ALREADY_IMPORTED_TO_CONTACTS);
+                       } else {
+                               _bt_create_info_popup(ad, BT_STR_VCF_FILES_ARE_TEMPORARY_AND_CANT_BE_OPENED);
                        }
-               } else {
-                       ad->ft_popup = _bt_create_ft_popup(BT_FT_FILE_NOT_EXIST,
-                                                                       info);
-                       _bt_share_ui_ipc_info_update(ad, info->id);
-                       _bt_delete_selected_item(ad);
+                       return;
                }
-
-       } else {
-               ad->ft_popup = _bt_create_ft_popup(BT_FT_RECV_FAIL_POPUP, info);
        }
 
-       return;
-}
+       if (gl_data->tr_inbound == true) {
+               if (info->tr_status == BT_TRANSFER_SUCCESS) {
+                       if (vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_BLUETOOTH_INT, &default_memory) != 0)
+                               ERR("vconf get failed");
 
-static void __bt_tr_data_sent_item_sel(void *data, Evas_Object *obj,
-                                     void *event_info)
-{
-       DBG("+");
-       bt_share_appdata_t *ad = app_state;
-       bt_tr_data_t *info = NULL;
+                       if (default_memory == BT_DEFAULT_MEM_PHONE)
+                               path = g_strdup_printf("%s/%s", BT_DOWNLOAD_PHONE_FOLDER, info->file_path);
+                       else if (default_memory == BT_DEFAULT_MEM_MMC)
+                               path = g_strdup_printf("%s/%s", BT_DOWNLOAD_MMC_FOLDER, info->file_path);
 
-       ret_if(data == NULL);
-       ret_if(event_info == NULL);
+                       INFO_SECURE("path : %s", path);
 
-       info = (bt_tr_data_t *)data;
-       ad->selected_item = (Elm_Object_Item *)event_info;
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
-                                               EINA_FALSE);
+                       if (access(path, F_OK) == 0)
+                               __bt_open_file(path);
+                       else
+                               _bt_create_info_popup(ad, BT_STR_FILE_NOT_EXIST);
 
-       if (info->tr_status == BT_TR_SUCCESS)
-               ad->ft_popup = _bt_create_ft_popup(BT_FT_SENT_POPUP, info);
-       else
-               ad->ft_popup = _bt_create_ft_popup(BT_FT_RETRY_POPUP, info);
+                       g_free(path);
+               }
+       } else {
+               path = info->file_path;
+               INFO_SECURE("path : %s", path);
 
-       DBG("-");
-       return;
+               if (access(path, F_OK) == 0) {
+                       if (g_str_has_prefix(path, BT_CONTACT_SHARE_TMP_DIR) == TRUE)
+                               /* TODO: change to proper string when UX is updated */
+                               _bt_create_info_popup(ad, BT_STR_FILE_NOT_EXIST);
+                       else
+                               __bt_open_file(path);
+               } else {
+                       _bt_create_info_popup(ad, BT_STR_FILE_NOT_EXIST);
+               }
+       }
+
+       FN_END;
 }
 
-void _bt_append_genlist_tr_data_item(bt_share_appdata_t *ad,
+void _bt_genlist_prepend_tr_data_item(bt_share_appdata_t *ad,
                                Evas_Object *genlist, bt_tr_data_t *info, int tr_type)
 {
-       DBG("+");
-
-       retm_if (ad == NULL || info == NULL, "Invalid parameters!");
+       FN_START;
+       retm_if(ad == NULL || info == NULL, "Invalid parameters!");
+       retm_if(ad->tr_data_itc == NULL, "ad->tr_data_itc is NULL!");
 
        bt_gl_data_t *gl_data = NULL;
 
        gl_data = g_new0(bt_gl_data_t, 1);
        gl_data->tr_data = info;
+       DBG("info->tr_status : %d", info->tr_status);
+       if (tr_type == BT_TR_OUTBOUND || tr_type == BT_TR_INBOUND) {
+               if (info->tr_status == BT_TRANSFER_SUCCESS)
+                       ad->transfer_info->success++;
+               else if (info->tr_status == BT_TRANSFER_FAIL)
+                       ad->transfer_info->failed++;
+       }
 
        if (tr_type == BT_TR_OUTBOUND) {
-               elm_genlist_item_append(genlist, ad->tr_data_itc, gl_data,
-                                       NULL, ELM_GENLIST_ITEM_NONE,
-                                       __bt_tr_data_sent_item_sel, info);
+               gl_data->tr_inbound = false;
 
                if (ad->outbound_latest_id < info->id)
                        ad->outbound_latest_id = info->id;
        } else if (tr_type == BT_TR_INBOUND) {
-               elm_genlist_item_append(genlist, ad->tr_data_itc, gl_data,
-                                       NULL, ELM_GENLIST_ITEM_NONE,
-                                       __bt_tr_data_recv_item_sel, info);
+               gl_data->tr_inbound = true;
 
                if (ad->inbound_latest_id < info->id)
                        ad->inbound_latest_id = info->id;
-       } else {
-               ERR("Transfer type is invalid");
        }
 
+       elm_genlist_item_append(genlist, ad->tr_data_itc, gl_data, NULL,
+                       ELM_GENLIST_ITEM_NONE, __bt_tr_data_item_sel, gl_data);
+
        evas_object_show(genlist);
 
-       DBG("-");
+       FN_END;
 }
 
+void __bt_update_transfer_count(bt_share_appdata_t *ad, bt_tr_data_t *info)
+{
+       if (info->tr_status == BT_TRANSFER_SUCCESS)
+               ad->transfer_info->success++;
+       else
+               ad->transfer_info->failed++;
+
+       if (ad->status_item)
+               elm_genlist_item_fields_update(ad->status_item, "*",
+                               ELM_GENLIST_ITEM_FIELD_TEXT);
+}
 
-void _bt_prepend_genlist_tr_data_item(bt_share_appdata_t *ad,
+void _bt_genlist_append_tr_data_item(bt_share_appdata_t *ad,
                                        bt_tr_data_t *info, int tr_type)
 {
-       DBG("+");
+       FN_START;
 
-       if (ad == NULL || info == NULL)
-               return;
+       ret_if(ad == NULL || info == NULL);
+       ret_if(ad->tr_data_itc == NULL);
+       ret_if(ad->tr_genlist == NULL);
+
+       Elm_Object_Item *git = NULL;
 
        if (elm_genlist_items_count(ad->tr_genlist) == 0) {
-               _bt_nocontent_set(ad, FALSE);
+               Evas_Object *genlist = NULL;
+               Elm_Object_Item *navi_it = NULL;
+
+               genlist = __bt_add_tr_data_genlist(ad->tr_view, ad);
+               retm_if(genlist == NULL, "genlist is NULL!");
+
+               if (ad->tr_genlist) {
+                       DBG("Clear the previous genlist");
+                       elm_genlist_clear(ad->tr_genlist);
+                       ad->tr_genlist = NULL;
+               }
+
+               ad->tr_genlist = genlist;
+
+               if (ad->navi_it) {
+                       elm_object_item_part_content_set(ad->navi_it,
+                                       "elm.swallow.content", genlist);
+               } else {
+                       navi_it = elm_naviframe_item_push(ad->navi_fr, NULL,
+                                       NULL, NULL, genlist, NULL);
+                       if (navi_it)
+                               elm_object_item_domain_translatable_text_set(navi_it,
+                                               BT_COMMON_PKG,
+                                               (ad->tr_type == BT_TR_INBOUND) ?
+                                                               "IDS_ST_HEADER_RECEIVE" : "IDS_ST_HEADER_SEND");
+                       elm_naviframe_item_pop_cb_set(navi_it, __bt_back_button_cb, ad);
+                       ad->navi_it = navi_it;
+               }
+               return;
        }
 
-       bt_gl_data_t *gl_data;
+       if (!ad->file_title_item) {
+               retm_if(NULL == __bt_add_file_title_item(ad),
+                               "__bt_add_file_title_item is failed");
+       }
 
+       bt_gl_data_t *gl_data = NULL;
        gl_data = g_new0(bt_gl_data_t, 1);
        gl_data->tr_data = info;
 
        if (tr_type == BT_TR_OUTBOUND) {
-               elm_genlist_item_prepend(ad->tr_genlist, ad->tr_data_itc,
-                                       gl_data, NULL,
-                                       ELM_GENLIST_ITEM_NONE,
-                                       __bt_tr_data_sent_item_sel, info);
+               gl_data->tr_inbound = false;
 
                if (ad->outbound_latest_id < info->id)
                        ad->outbound_latest_id = info->id;
        } else if (tr_type == BT_TR_INBOUND) {
-               elm_genlist_item_prepend(ad->tr_genlist, ad->tr_data_itc,
-                                       gl_data, NULL,
-                                       ELM_GENLIST_ITEM_NONE,
-                                       __bt_tr_data_recv_item_sel, info);
+               gl_data->tr_inbound = true;
 
                if (ad->inbound_latest_id < info->id)
                        ad->inbound_latest_id = info->id;
-       } else {
-               ERR("Transfer type is invalid");
-               g_free(gl_data);
        }
 
+       git = elm_genlist_item_append(ad->tr_genlist, ad->tr_data_itc, gl_data,
+                       NULL, ELM_GENLIST_ITEM_NONE, __bt_tr_data_item_sel, gl_data);
+
+       __bt_update_transfer_count(ad, info);
+
+       if (info->tr_status == BT_TRANSFER_ONGOING)
+               ad->current_item = git;
+
        evas_object_show(ad->tr_genlist);
 
-       DBG("-");
-       return;
+       FN_END;
 }
 
 static void __bt_share_gl_highlighted(void *data, Evas_Object *obj,
                                                        void *event_info)
 {
+       FN_START;
        Elm_Object_Item *item = (Elm_Object_Item *)event_info;
        bt_gl_data_t *gl_data;
-       DBG("+");
 
        ret_if(item == NULL);
 
@@ -777,15 +1223,15 @@ static void __bt_share_gl_highlighted(void *data, Evas_Object *obj,
        elm_genlist_item_fields_update(item, "*",
                                ELM_GENLIST_ITEM_FIELD_CONTENT);
 
-       DBG("-");
+       FN_END;
 }
 
 static void __bt_share_gl_unhighlighted(void *data, Evas_Object *obj,
                                                        void *event_info)
 {
+       FN_START;
        Elm_Object_Item *item = (Elm_Object_Item *)event_info;
        bt_gl_data_t *gl_data;
-       DBG("+");
 
        ret_if(item == NULL);
 
@@ -796,14 +1242,14 @@ static void __bt_share_gl_unhighlighted(void *data, Evas_Object *obj,
        elm_genlist_item_fields_update(item, "*",
                                ELM_GENLIST_ITEM_FIELD_CONTENT);
 
-       DBG("-");
+       FN_END;
 }
 
 static Evas_Object *__bt_add_tr_data_genlist(Evas_Object *parent,
                                                  bt_share_appdata_t *ad)
 {
-       DBG("+");
-       retvm_if (ad == NULL, NULL, "Inavalid parameter!");
+       FN_START;
+       retvm_if(ad == NULL, NULL, "Inavalid parameter!");
 
        Evas_Object *genlist = elm_genlist_add(parent);
 
@@ -813,8 +1259,42 @@ static Evas_Object *__bt_add_tr_data_genlist(Evas_Object *parent,
        evas_object_smart_callback_add(genlist, "unhighlighted",
                                __bt_share_gl_unhighlighted, ad);
 
-       evas_object_smart_callback_add(genlist, "realized",
-                               __bt_genlist_realized_cb, ad);
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       ad->tr_device_itc = elm_genlist_item_class_new();
+       if (ad->tr_device_itc) {
+               ad->tr_device_itc->item_style = "type1";
+               ad->tr_device_itc->func.text_get = __bt_tr_device_label_get;
+               ad->tr_device_itc->func.content_get = NULL;
+               ad->tr_device_itc->func.state_get = NULL;
+               ad->tr_device_itc->func.del = NULL;
+       }
+
+       ad->tr_status_itc = elm_genlist_item_class_new();
+       if (ad->tr_status_itc) {
+               ad->tr_status_itc->item_style = "type1";
+               ad->tr_status_itc->func.text_get = __bt_tr_status_label_get;
+               ad->tr_status_itc->func.content_get = NULL;
+               ad->tr_status_itc->func.state_get = NULL;
+               ad->tr_status_itc->func.del = NULL;
+       }
+
+       ad->tr_progress_itc = elm_genlist_item_class_new();
+       if (ad->tr_progress_itc) {
+               ad->tr_progress_itc->item_style = "full";
+               ad->tr_progress_itc->func.text_get = NULL;
+               ad->tr_progress_itc->func.content_get = __bt_tr_progress_icon_get;
+               ad->tr_progress_itc->func.state_get = NULL;
+               ad->tr_progress_itc->func.del = NULL;
+       }
+
+       ad->tr_file_title_itc = elm_genlist_item_class_new();
+       if (ad->tr_file_title_itc) {
+               ad->tr_file_title_itc->item_style = "groupindex";
+               ad->tr_file_title_itc->func.text_get = __bt_tr_file_title_label_get;
+               ad->tr_file_title_itc->func.content_get = NULL;
+               ad->tr_file_title_itc->func.state_get = NULL;
+               ad->tr_file_title_itc->func.del = NULL;
+       }
 
        ad->tr_data_itc = elm_genlist_item_class_new();
        if (ad->tr_data_itc) {
@@ -826,14 +1306,14 @@ static Evas_Object *__bt_add_tr_data_genlist(Evas_Object *parent,
        }
 
        elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-       DBG("-");
+       FN_END;
        return genlist;
 }
 
 static Evas_Object * __bt_create_naviframe(bt_share_appdata_t *ad)
 {
-       DBG("+");
-       retv_if (ad == NULL, NULL);
+       FN_START;
+       retv_if(ad == NULL, NULL);
        Evas_Object *navi_fr = NULL;
        /* Naviframe */
        navi_fr = elm_naviframe_add(ad->tr_view);
@@ -841,237 +1321,313 @@ static Evas_Object * __bt_create_naviframe(bt_share_appdata_t *ad)
                                                eext_naviframe_back_cb, NULL);
        elm_object_part_content_set(ad->tr_view, "elm.swallow.content", navi_fr);
        evas_object_show(navi_fr);
-       DBG("-");
+       FN_END;
        return navi_fr;
 }
 
-void _bt_nocontent_set(bt_share_appdata_t *ad, gboolean set)
+void _bt_cb_state_changed(int result,
+                       bt_adapter_state_e adapter_state,
+                       void *user_data)
 {
-       DBG("+");
-       ret_if(ad == NULL);
-       Evas_Object *layout = NULL;
-       Evas_Object *nocontents = NULL;
-       Evas_Object *genlist = NULL;
-       Elm_Object_Item *navi_it = NULL;
+       FN_START;
+       DBG("bluetooth %s", adapter_state == BT_ADAPTER_ENABLED ?
+                               "enabled" : "disabled");
 
-       DBG("Set nocontent status : %d", set);
+       ret_if(!user_data);
+       ret_if(result != BT_ERROR_NONE);
 
-       if (set == TRUE) {
-               /* Full view layout */
-               layout = elm_layout_add(ad->navi_fr);
-               elm_layout_file_set(layout, EDJFILE, "nocontents_layout");
-               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)user_data;
 
-               /* Create elm_layout and set its style as nocontents/text */
-               nocontents = elm_layout_add(layout);
-               elm_layout_theme_set(nocontents, "layout", "nocontents", "default");
-               evas_object_size_hint_weight_set(nocontents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(nocontents, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               elm_object_part_text_set(nocontents, "elm.text", BT_STR_NO_TRANSFER_HISTORY);
-               elm_layout_signal_emit(nocontents, "text,disabled", "");
-               elm_layout_signal_emit(nocontents, "align.center", "elm");
+       ad->bt_status = adapter_state;
 
-               if (ad->navi_it) {
-                       elm_object_item_part_content_set(ad->navi_it,
-                               "elm.swallow.content", nocontents);
-               } else {
-                       navi_it = elm_naviframe_item_push(ad->navi_fr,
-                                                       (ad->tr_type == BT_TR_INBOUND) ?
-                                                       BT_STR_RECEIVED_FILES :
-                                                       BT_STR_SENT_FILES,
-                                                       NULL, NULL, nocontents, NULL);
-                       elm_naviframe_item_pop_cb_set(navi_it,
-                                       __bt_back_button_cb, ad);
-                       ad->navi_it = navi_it;
+       if (adapter_state == BT_ADAPTER_ENABLED && ad->send_after_turning_on) {
+               DBG("Adapter enabled, resend pending items");
+               /* close turning on popup */
+               if (ad->turning_on_popup) {
+                       evas_object_del(ad->turning_on_popup);
+                       ad->turning_on_popup = NULL;
                }
 
-               if (ad->toolbar_btn) {
-                       evas_object_del(ad->toolbar_btn);
-                       ad->toolbar_btn = NULL;
+               _bt_share_ui_retry_failed(ad);
+               if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST) {
+                       int noti_id;
+                       char *opp_role;
+                       bt_tr_db_table_e table;
+
+                       __bt_get_noti_id_opp_role_and_table(ad, &noti_id, &opp_role, &table);
+
+                       DBG_SECURE("Notification ID: %d", noti_id);
+                       if (noti_id < 0) {
+                               ERR("Invalid Notification ID");
+                       } else {
+                               sqlite3 *db = bt_share_open_db();
+                               bt_share_remove_tr_data_by_notification(db, table, noti_id);
+                               bt_share_close_db(db);
+                               _bt_delete_selected_notification(ad->tr_type, noti_id, opp_role);
+                       }
                }
-               eext_object_event_callback_del(ad->navi_fr, EEXT_CALLBACK_MORE,
-                               __bt_more_menu_cb);
 
-       }else {
-               genlist = __bt_add_tr_data_genlist(ad->tr_view, ad);
-               retm_if (genlist == NULL, "genlist is NULL!");
+               ad->send_after_turning_on = FALSE;
+               _bt_terminate_app();
+       }
+       FN_END;
+}
 
-               if (ad->tr_genlist) {
-                       DBG("Clear the previous genlist");
-                       elm_genlist_clear(ad->tr_genlist);
-                       ad->tr_genlist = NULL;
-               }
+gboolean __bt_share_is_battery_low(void)
+{
+       FN_START;
 
-               ad->tr_genlist = genlist;
+       int value = 0;
+       int charging = 0;
 
-               if (ad->navi_it) {
-                       elm_object_item_part_content_set(ad->navi_it,
-                               "elm.swallow.content", genlist);
-               } else {
-                       navi_it = elm_naviframe_item_push(ad->navi_fr,
-                                                       (ad->tr_type == BT_TR_INBOUND) ?
-                                                       BT_STR_RECEIVED_FILES :
-                                                       BT_STR_SENT_FILES,
-                                                       NULL, NULL, genlist, NULL);
-                       elm_naviframe_item_pop_cb_set(navi_it, __bt_back_button_cb, ad);
-                       ad->navi_it = navi_it;
-               }
+       if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, (void *)&charging))
+               ERR("Get the battery charging status fail");
 
-               eext_object_event_callback_add(ad->navi_fr, EEXT_CALLBACK_MORE,
-                               __bt_more_menu_cb, ad);
-       }
-}
+       if (charging == 1)
+               return FALSE;
 
-void _bt_cb_state_changed(int result,
-                       bt_adapter_state_e adapter_state,
-                       void *user_data)
-{
-       DBG("bluetooth %s", adapter_state == BT_ADAPTER_ENABLED ?
-                               "enabled" : "disabled");
+       DBG("charging: %d", charging);
 
-       ret_if(!user_data);
-       ret_if(result != BT_ERROR_NONE);
+       if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, (void *)&value)) {
+               ERR("Get the battery low status fail");
+               return FALSE;
+       }
 
-       bt_share_appdata_t *ad = (bt_share_appdata_t *)user_data;
-       Evas_Object *btn = NULL;
+       if (value <= VCONFKEY_SYSMAN_BAT_POWER_OFF)
+               return TRUE;
 
-       ad->bt_status = adapter_state;
+       FN_END;
+       return FALSE;
+}
 
-       if (ad->ft_popup && ad->ft_type == BT_FT_RETRY_POPUP) {
-               btn = elm_object_part_content_get(ad->ft_popup, "button1");
-               ret_if(!btn);
-               elm_object_text_set(btn, adapter_state == BT_ADAPTER_ENABLED ? BT_STR_RETRY : BT_STR_OK);
+int _bt_share_enable_bt(bt_share_appdata_t *ad)
+{
+       FN_START;
+       int ret;
+       retv_if(ad == NULL, -1);
+/*
+       if (__bt_share_is_battery_low() == TRUE) {
+               // Battery is critical low
+               _bt_main_create_information_popup(ad, BT_STR_LOW_BATTERY);
+               return -1;
        }
+*/
 
-       if(adapter_state == BT_ADAPTER_DISABLED && ad->progress_popup) {
-               DBG("Adapter disabled, and progress popup is present, destroying");
-               _bt_destroy_progress_popup(ad);
+       ret = bt_adapter_enable();
+       if (ret == BT_ERROR_ALREADY_DONE) {
+               _bt_cb_state_changed(BT_ERROR_NONE, BT_ADAPTER_ENABLED, ad);
+       } else if (ret == BT_ERROR_NOW_IN_PROGRESS) {
+               ERR("Enabling in progress [%d]", ret);
+       } else if (ret != BT_ERROR_NONE) {
+               ERR("Failed to enable bluetooth [%d]", ret);
+       } else {
+               ad->turning_on_popup = _bt_share_add_turning_on_popup(ad);
+               ad->send_after_turning_on = TRUE;
        }
+       FN_END;
+       return 0;
 }
 
-static void __bt_move_clear_ctxpopup(Evas_Object *ctxpopup,
-                       bt_share_appdata_t *ad)
+void _bt_share_toolbar_button_cb(void *data, Evas_Object *obj,
+               void *event_info)
 {
        FN_START;
-       Evas_Coord w, h;
-       int pos = -1;
-
-       ret_if(ad == NULL);
-       ret_if(ad->win == NULL);
+       ret_if(!data);
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
+       bt_share_abort_data_t *abort_data = g_new0(bt_share_abort_data_t, 1);
 
-       elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
-       pos = elm_win_rotation_get(ad->win);
+       const char *text = elm_object_text_get(obj);
 
-               switch (pos) {
-                       case 0:
-                       case 180:
-                               evas_object_move(ctxpopup, (w / 2), h);
-                               break;
-                       case 90:
-                               evas_object_move(ctxpopup,  (h / 2), w);
-                               break;
-                       case 270:
-                               evas_object_move(ctxpopup, (h / 2), w);
-                               break;
+       if (g_strcmp0(text, BT_STR_STOP) == 0) {
+               if (ad->transfer_info) {
+                       abort_data->transfer_id = ad->transfer_info->transfer_id;
+                       abort_data->transfer_type = ad->transfer_info->transfer_type;
+                       _bt_abort_signal_send(ad, abort_data);
+               }
+       } else if (g_strcmp0(text, BT_STR_RESEND_FAILED_FILES) == 0) {
+               /* for BT off case */
+               if (ad->bt_status == BT_ADAPTER_DISABLED) {
+                       _bt_share_enable_bt(ad);
+               } else {
+                       _bt_share_ui_retry_failed(ad);
+                       if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST) {
+                               int noti_id;
+                               char *opp_role;
+                               bt_tr_db_table_e table;
+
+                               __bt_get_noti_id_opp_role_and_table(ad, &noti_id, &opp_role, &table);
+
+                               DBG_SECURE("Notification ID: %d", noti_id);
+                               if (noti_id < 0) {
+                                       ERR("Invalid Notification ID");
+                               } else {
+                                       sqlite3 *db = bt_share_open_db();
+                                       bt_share_remove_tr_data_by_notification(db, table, noti_id);
+                                       bt_share_close_db(db);
+                                       _bt_delete_selected_notification(ad->tr_type, noti_id, opp_role);
+                               }
+                       }
+                       _bt_terminate_app();
                }
+       }
+
+       g_free(abort_data);
        FN_END;
 }
 
-void __bt_clear_btn_del_cb(void *data, Evas_Object *obj, void *event_info)
+Evas_Object * _bt_share_create_toolbar_button(bt_share_appdata_t *ad, char *text)
 {
-       FN_START;
-       bt_share_appdata_t *ad = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *toolbar_button = NULL;
 
-       ret_if(data == NULL);
-       ad = (bt_share_appdata_t *)data;
+       layout = elm_layout_add(ad->navi_fr);
+       elm_layout_file_set(layout, EDJFILE, "toolbar_button_ly");
 
-       if (ad->toolbar_btn != NULL) {
-               evas_object_del(ad->toolbar_btn);
-               ad->toolbar_btn = NULL;
-       }
+       toolbar_button = elm_button_add(layout);
 
-       FN_END;
+       /* Use "bottom" style button */
+       elm_object_style_set(toolbar_button, "bottom");
+       evas_object_size_hint_weight_set(toolbar_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(toolbar_button, EVAS_HINT_FILL, 0.5);
+
+       elm_object_text_set(toolbar_button, text);
+
+       evas_object_smart_callback_add(toolbar_button, "clicked",
+                       _bt_share_toolbar_button_cb, ad);
+
+       /* Set button into "toolbar" swallow part */
+       elm_object_part_content_set(layout, "button", toolbar_button);
+       elm_object_item_part_content_set(ad->navi_it, "toolbar", layout);
+       ad->toolbar_ly = layout;
+       return toolbar_button;
 }
 
-static void __bt_win_rotation_changed_cb(void *data, Evas_Object *obj,
-                       void *event_info)
+void _bt_share_delete_toolbar_button(bt_share_appdata_t *ad)
 {
-       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
-       __bt_move_clear_ctxpopup(ad->toolbar_btn, ad);
+       FN_START;
+       ret_if(!ad);
+
+       if (ad->toolbar_button) {
+               evas_object_del(ad->toolbar_button);
+               ad->toolbar_button = NULL;
+       }
+       if (ad->toolbar_ly) {
+               evas_object_del(ad->toolbar_ly);
+               ad->toolbar_ly = NULL;
+       }
+       FN_END;
 }
 
-static void __bt_clear_btn_delete_cb(void *data, Evas *e,
-                       Evas_Object *obj,       void *event_info)
+static Eina_Bool __bt_list_item_add(bt_share_appdata_t *ad)
 {
        FN_START;
-       Evas_Object *navi = (Evas_Object *)data;
-       Evas_Object *ctx = obj;
+       int i;
 
-       ret_if (navi == NULL);
+       retv_if(!ad, EINA_FALSE);
+       GSList *tr_data_list = ad->tr_data_list;
+       retv_if(ad->launch_mode == BT_LAUNCH_TRANSFER_LIST && !tr_data_list, EINA_FALSE);
+
+       /* Add first 5 genlist items */
+       for (i = 0; NULL != tr_data_list && i < 5; i++) {
+               _bt_genlist_prepend_tr_data_item(ad,  ad->tr_genlist, tr_data_list->data,
+                                               ad->tr_type);
+               tr_data_list = g_slist_next(tr_data_list);
+       }
+
+       if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST &&
+                       ad->tr_type == BT_TR_OUTBOUND && ad->transfer_info->failed) {
+               ad->toolbar_button = _bt_share_create_toolbar_button(ad,
+                               BT_STR_RESEND_FAILED_FILES);
+       }
 
-       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
-                       __bt_clear_btn_delete_cb, navi);
        FN_END;
+
+       return EINA_TRUE;
 }
 
-static void __bt_more_menu_cb(void *data,
-                               Evas_Object *obj, void *event_info)
+static Eina_Bool __bt_list_item_idler(void *data)
 {
        FN_START;
 
-       Evas_Object *more_ctxpopup = NULL;
-       bt_share_appdata_t *ad;
+       bt_share_appdata_t *ad = (bt_share_appdata_t *)data;
 
-       ad = (bt_share_appdata_t *)data;
-       ret_if(ad == NULL);
+       retv_if(!ad, EINA_FALSE);
+       GSList *tr_data_list = ad->tr_data_list;
+       retv_if(ad->launch_mode == BT_LAUNCH_TRANSFER_LIST && !tr_data_list, EINA_FALSE);
+
+       DBG("Total Items in List : %d", g_slist_length(tr_data_list));
+       /* Add rest of the genlist items */
+       if (g_slist_length(ad->tr_data_list) >= 5) {
+               tr_data_list = g_slist_nth(ad->tr_data_list, 5);
+
+               while (NULL != tr_data_list) {
+                       _bt_genlist_prepend_tr_data_item(ad,  ad->tr_genlist, tr_data_list->data,
+                                                       ad->tr_type);
+                       tr_data_list = g_slist_next(tr_data_list);
+               }
+       }
+
+       if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST &&
+                       ad->tr_type == BT_TR_OUTBOUND &&
+                       ad->transfer_info->failed &&
+                       ad->toolbar_button == NULL) {
+               ad->toolbar_button = _bt_share_create_toolbar_button(ad,
+                               BT_STR_RESEND_FAILED_FILES);
+       }
+
+       /* Delete the notification */
+       /* TODO: Delete Notification only if
+        * transfer(sent) is completed with no failed items or received screen related to this session */
+       if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST &&
+                       ((ad->tr_type == BT_TR_OUTBOUND &&
+                                       ad->transfer_info->failed == 0) || ad->tr_type == BT_TR_INBOUND)) {
+               int noti_id;
+               char *opp_role;
+               bt_tr_db_table_e table;
+
+               __bt_get_noti_id_opp_role_and_table(ad, &noti_id, &opp_role, &table);
+
+               DBG_SECURE("Notification ID: %d", noti_id);
+               if (noti_id < 0) {
+                       ERR("Invalid Notification ID");
+               } else {
+                       if (ad->bt_status == BT_ADAPTER_DISABLED) {
+                               sqlite3 *db = bt_share_open_db();
+                               bt_share_remove_tr_data_by_notification(db, table, noti_id);
+                               bt_share_close_db(db);
+                       }
+                       _bt_delete_selected_notification(ad->tr_type, noti_id, opp_role);
+               }
+       }
 
-       more_ctxpopup = elm_ctxpopup_add(ad->win);
-       ad->toolbar_btn = more_ctxpopup;
-       eext_object_event_callback_add(more_ctxpopup,
-                       EEXT_CALLBACK_BACK, __bt_clear_btn_del_cb, ad);
-       eext_object_event_callback_add(more_ctxpopup,
-                       EEXT_CALLBACK_MORE, __bt_clear_btn_del_cb, ad);
-       elm_object_style_set(more_ctxpopup, "more/default");
-       elm_ctxpopup_auto_hide_disabled_set(more_ctxpopup, EINA_TRUE);
-
-       elm_ctxpopup_item_append(more_ctxpopup, BT_STR_CLR_LIST,
-                       NULL, __bt_clear_list_btn_cb, ad);
-       evas_object_smart_callback_add(ad->win, "rotation,changed",
-                       __bt_win_rotation_changed_cb, ad);
-       evas_object_event_callback_add(more_ctxpopup, EVAS_CALLBACK_DEL,
-                       __bt_clear_btn_delete_cb, ad);
-
-       elm_ctxpopup_direction_priority_set(more_ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
-                       ELM_CTXPOPUP_DIRECTION_DOWN,
-                       ELM_CTXPOPUP_DIRECTION_UNKNOWN,
-                       ELM_CTXPOPUP_DIRECTION_UNKNOWN);
-
-       __bt_move_clear_ctxpopup(more_ctxpopup, ad);
-       evas_object_show(more_ctxpopup);
+       if (ad->status_item)
+               elm_genlist_item_fields_update(ad->status_item, "*",
+                               ELM_GENLIST_ITEM_FIELD_TEXT);
 
        FN_END;
+       return EINA_FALSE;
 }
+
 int _bt_create_transfer_view(bt_share_appdata_t *ad)
 {
-       DBG("Create transfer view");
-       retv_if (ad == NULL, -1);
+       FN_START;
+       retv_if(ad == NULL, -1);
 
        Elm_Object_Item *navi_it = NULL;
+       Elm_Object_Item *git = NULL;
        Evas_Object *conform = NULL;
        Evas_Object *navi_fr = NULL;
        Evas_Object *bg = NULL;
        Evas_Object *layout = NULL;
        Evas_Object *genlist = NULL;
-       GSList *list_iter = NULL;
 
        __bt_clear_view(ad);
        bg = _bt_create_bg(ad->win, NULL);
-       retv_if (bg == NULL, -1);
+       retv_if(bg == NULL, -1);
        ad->bg = bg;
 
        conform = _bt_create_conformant(ad->win, NULL);
-       retvm_if (conform == NULL, -1, "conform is NULL!");
+       retvm_if(conform == NULL, -1, "conform is NULL!");
        ad->conform = conform;
 
        bg = elm_bg_add(conform);
@@ -1086,33 +1642,82 @@ int _bt_create_transfer_view(bt_share_appdata_t *ad)
        elm_win_conformant_set(ad->win, EINA_TRUE);
 
        navi_fr = __bt_create_naviframe(ad);
-       retvm_if (navi_fr == NULL, -1, "navi_fr is NULL!");
+       retvm_if(navi_fr == NULL, -1, "navi_fr is NULL!");
        ad->navi_fr = navi_fr;
 
        /* Genlist */
        genlist = __bt_add_tr_data_genlist(layout, ad);
-       retvm_if (genlist == NULL, -1, "genlist is NULL!");
+       retvm_if(genlist == NULL, -1, "genlist is NULL!");
        ad->tr_genlist = genlist;
 
-       list_iter = ad->tr_data_list;
+       git = elm_genlist_item_append(genlist,
+                       ad->tr_device_itc, ad,
+                       NULL, ELM_GENLIST_ITEM_NONE,
+                       NULL, NULL);
+       if (git == NULL) {
+               ERR("elm_genlist_item_append is failed!");
+       } else {
+               elm_genlist_item_select_mode_set(git,
+                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               ad->device_item = git;
+       }
 
-       /* Add genlist item */
-       while (NULL != list_iter) {
-               _bt_append_genlist_tr_data_item(ad,  genlist, list_iter->data,
-                                               ad->tr_type);
-               list_iter = g_slist_next(list_iter);
-       }
-       eext_object_event_callback_add(navi_fr, EEXT_CALLBACK_MORE,
-                                       __bt_more_menu_cb, ad);
-       navi_it = elm_naviframe_item_push(navi_fr,
-                                       (ad->tr_type == BT_TR_INBOUND) ?
-                                       BT_STR_RECEIVED_FILES :
-                                       BT_STR_SENT_FILES,
+       if (ad->launch_mode == BT_LAUNCH_TRANSFER_LIST) {
+               git = elm_genlist_item_append(genlist,
+                               ad->tr_status_itc, ad,
+                               NULL, ELM_GENLIST_ITEM_NONE,
+                               NULL, NULL);
+               if (git == NULL) {
+                       ERR("elm_genlist_item_append is failed!");
+               } else {
+                       elm_genlist_item_select_mode_set(git,
+                                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->status_item = git;
+               }
+       } else if (ad->launch_mode == BT_LAUNCH_ONGOING) {
+               if (ad->progress_item) {
+                       elm_object_item_del(ad->progress_item);
+                       ad->progress_item = NULL;
+                       ad->progressbar = NULL;
+               }
+
+               git = elm_genlist_item_append(genlist,
+                               ad->tr_progress_itc, ad,
+                               NULL, ELM_GENLIST_ITEM_NONE,
+                               NULL, NULL);
+               if (git == NULL) {
+                       ERR("elm_genlist_item_append is failed!");
+               } else {
+                       elm_genlist_item_select_mode_set(git,
+                                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->progress_item = git;
+               }
+       }
+
+       __bt_add_file_title_item(ad);
+
+       navi_it = elm_naviframe_item_push(navi_fr, NULL,
                                        NULL, NULL, genlist, NULL);
-       elm_naviframe_item_pop_cb_set(navi_it, __bt_back_button_cb, ad);
-       ad->navi_it = navi_it;
+       if (navi_it == NULL) {
+               ERR("elm_naviframe_item_push is failed!");
+       } else {
+               elm_object_item_domain_translatable_text_set(navi_it, BT_COMMON_PKG,
+               (ad->tr_type == BT_TR_INBOUND) ? "IDS_ST_HEADER_RECEIVE" : "IDS_ST_HEADER_SEND");
+               elm_naviframe_item_pop_cb_set(navi_it, __bt_back_button_cb, ad);
+               ad->navi_it = navi_it;
+       }
 
-       DBG("-");
+       if (ad->launch_mode == BT_LAUNCH_ONGOING) {
+               ad->toolbar_button = _bt_share_create_toolbar_button(ad,
+                               BT_STR_STOP);
+       }
+
+       __bt_list_item_add(ad);
+
+       ad->idler = ecore_idler_add(__bt_list_item_idler, ad);
+       if (!ad->idler)
+               ERR("idler can not be added");
+
+       FN_END;
        return 0;
 }
-
index e221d8d..7cfb651 100644 (file)
@@ -36,20 +36,32 @@ extern "C" {
 
 #define BT_GLOBALIZATION_STR_LENGTH    256
 #define BT_FILE_NAME_LEN_MAX 255
+#define BT_ANI_UPLOAD          "bt_share_upload"
+#define BT_ANI_DOWNLOAD                "bt_share_download"
 
 Evas_Object *_bt_create_win(const char *name);
 void _bt_terminate_app(void);
-void _bt_append_genlist_tr_data_item(bt_share_appdata_t *ad,
+void _bt_genlist_prepend_tr_data_item(bt_share_appdata_t *ad,
                                Evas_Object *genlist, bt_tr_data_t *info, int tr_type);
-void _bt_prepend_genlist_tr_data_item(bt_share_appdata_t *ad,
+void _bt_genlist_append_tr_data_item(bt_share_appdata_t *ad,
                        bt_tr_data_t *info, int tr_type);
-void _bt_delete_selected_item(bt_share_appdata_t *ad);
 int  _bt_create_transfer_view(bt_share_appdata_t *ad);
-void _bt_nocontent_set(bt_share_appdata_t *ad, gboolean set);
 void _bt_cb_state_changed(int result,
                        bt_adapter_state_e adapter_state,
                        void *user_data);
-void _bt_update_tr_notification(void *data);
+void _bt_share_ui_handle_transfer_disconnected(bt_share_appdata_t *ad,
+               bt_share_tr_type_e type);
+void _bt_share_ui_handle_transfer_complete(bt_share_appdata_t *ad,
+               char *address, bt_share_tr_type_e type);
+void _bt_share_ui_handle_transfer_started(bt_share_appdata_t *ad,
+               char *address, char *file_name, unsigned long size, int transfer_id,
+               bt_share_tr_type_e type);
+void _bt_delete_selected_notification(bt_share_tr_type_e tr_type,
+               int noti_id, const char *opp_role);
+int _bt_share_enable_bt(bt_share_appdata_t *ad);
+Evas_Object * _bt_share_create_toolbar_button(bt_share_appdata_t *ad,
+               char *text);
+void _bt_share_delete_toolbar_button(bt_share_appdata_t *ad);
 
 #ifdef __cplusplus
 }
index 9715af8..e22e5ca 100644 (file)
 *
 */
 
-//#include <app_extension.h>
+#include <app_extension.h>
 
-#include <E_DBus.h>
 #include "applog.h"
 #include "bt-share-ui-widget.h"
 #include "bt-share-ui-main.h"
-#include <app.h>
-
-#define IMG_PATH_MAX 256
-
-Evas_Object *_bt_create_naviframe(Evas_Object *parent)
-{
-       Evas_Object *nf;
-
-       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
-
-       nf = elm_naviframe_add(parent);
-       elm_object_part_content_set(parent, "elm.swallow.content", nf);
-       evas_object_show(nf);
-
-       return nf;
-}
-
-Evas_Object *_bt_create_button(Evas_Object *parent, char *style, char *part,
-                                               char *text, char *icon_path,
-                                               Evas_Smart_Cb func, void *data)
-{
-       Evas_Object *btn = NULL;
-       Evas_Object *icon = NULL;
-
-       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
-       btn = elm_button_add(parent);
-
-       if (style)
-               elm_object_style_set(btn, style);
-
-       if (part)
-               elm_object_part_content_set(parent, part, btn);
-
-       if (icon_path) {
-               icon = elm_image_add(btn);
-               elm_image_file_set(icon, icon_path, NULL);
-               elm_object_part_content_set(btn, "elm.icon", icon);
-       }
-
-       if (text)
-               elm_object_text_set(btn, text);
-
-       if (func)
-               evas_object_smart_callback_add(btn, "clicked", func, data);
-
-       evas_object_show(btn);
-
-       return btn;
-}
-
-Evas_Object *_bt_create_progressbar(Evas_Object *parent, const char *style)
-{
-       Evas_Object *progress_bar = NULL;
-
-       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
-
-       progress_bar = elm_progressbar_add(parent);
-
-       if (style)
-               elm_object_style_set(progress_bar, style);
-       else
-               elm_object_style_set(progress_bar, "list_process");
-
-       evas_object_show(progress_bar);
-       elm_progressbar_pulse(progress_bar, EINA_TRUE);
-
-       return progress_bar;
-}
+#include <app_extension.h>
 
 Evas_Object *_bt_create_bg(Evas_Object *parent, char *style)
 {
        retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
 
-       Evas_Object *bg = NULL;
-#if 0
-       Evas_Object *bg = app_get_preinitialized_background();
-#endif
-       if (bg == NULL) {
-               ERR("app_get_preinitialized_background fail!");
-               bg = elm_bg_add(parent);
-       }
+       Evas_Object *bg = elm_bg_add(parent);
 
        evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
                                EVAS_HINT_EXPAND);
@@ -145,38 +70,12 @@ Evas_Object *_bt_create_layout(Evas_Object *parent, char *edj, char *content)
        return layout;
 }
 
-Evas_Object *_bt_create_label(Evas_Object *parent, const char *text)
-{
-       Evas_Object *label;
-
-       retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
-
-       label = elm_label_add(parent);
-       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
-
-       if (text)
-               elm_object_text_set(label, text);
-
-       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
-       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-       evas_object_show(label);
-
-       return label;
-}
-
 Evas_Object *_bt_create_conformant(Evas_Object *parent, Evas_Object *content)
 {
        Evas_Object *conform = NULL;
 
        elm_win_conformant_set(parent, 1);
-#if 0
-       conform = (Evas_Object *)app_get_preinitialized_conformant();
-#endif
-       if (conform == NULL) {
-               ERR("app_get_preinitialized_conformant fail!");
-               conform = elm_conformant_add(parent);
-       }
+       conform = elm_conformant_add(parent);
 
        evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND,
                                         EVAS_HINT_EXPAND);
@@ -190,3 +89,14 @@ Evas_Object *_bt_create_conformant(Evas_Object *parent, Evas_Object *content)
        return conform;
 }
 
+void _bt_share_genlist_item_text_update(Elm_Object_Item *git,
+                                                               const char *part) {
+       ret_if(git == NULL || part == NULL);
+       elm_genlist_item_fields_update(git, part, ELM_GENLIST_ITEM_FIELD_TEXT);
+}
+
+void _bt_share_genlist_item_content_update(Elm_Object_Item *git,
+                                                               const char *part) {
+       ret_if(git == NULL || part == NULL);
+       elm_genlist_item_fields_update(git, part, ELM_GENLIST_ITEM_FIELD_CONTENT);
+}
index b51dca9..0fd512d 100644 (file)
@@ -29,27 +29,26 @@ extern "C" {
 #endif
 
 #include <Elementary.h>
-#include <efl_extension.h>
-
-Evas_Object *_bt_create_naviframe(Evas_Object *parent);
-
-Evas_Object *_bt_create_button(Evas_Object *parent, char *style, char *part,
-                               char *text, char *icon_path,
-                               Evas_Smart_Cb func, void *data);
-
-Evas_Object *_bt_create_progressbar(Evas_Object *parent,
-                               const char *style);
+#include <efl_extension_events.h>
 
 Evas_Object *_bt_create_bg(Evas_Object *parent, char *style);
 
 Evas_Object *_bt_create_layout(Evas_Object *parent, char *edj,
                                char *content);
 
-Evas_Object *_bt_create_label(Evas_Object *parent, const char *text);
-
 Evas_Object *_bt_create_conformant(Evas_Object *parent,
                                   Evas_Object *content);
 
+Eina_List *_bt_color_table_set(void);
+
+Eina_List *_bt_font_table_set(void);
+
+void _bt_share_genlist_item_text_update(Elm_Object_Item *git,
+               const char *part);
+
+void _bt_share_genlist_item_content_update(Elm_Object_Item *git,
+               const char *part);
+
 #ifdef __cplusplus
 }
 #endif