efl-extension
evas
gobject-2.0
- bluetooth-api
aul
capi-appfw-application
capi-network-bluetooth
#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";
}
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;
}
}
}
state: "default" 0;
rel1 { relative: 0 0; }
rel2 { relative: 1 1; }
- color: 20 107 147 255;
+ color_class: "B011";
}
}
}
}
}
+ 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; }
+ }
+ }
+ }
+ }
}
-
--- /dev/null
+#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")
+ }
+ }
+}
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");
}
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
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)
#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
#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; \
#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;
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,
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,
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,
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;
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,
}
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);
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);
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,
}
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);
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);
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,
}
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);
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);
_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;
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);
}
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;
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");
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");
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,
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");
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);
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);
}
}
-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;
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);
}
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("+");
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)
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("-");
}
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)
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;
}
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;
}
#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"
#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
#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;
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]", ¤t, &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;
if (bt_adapter_get_state(&status) != BT_ERROR_NONE)
ERR("bt_adapter_get_state() failed!");
+ DBG("bt_status : %d", status);
ad->bt_status = status;
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;
}
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);
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);
err = bt_deinitialize();
if (err != BT_ERROR_NONE)
ERR("bt_deinitialize failed: %d", err);
-
-
+ FN_END;
}
static void __app_pause(void *data)
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;
#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
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
#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)
{
_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");
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);
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("+");
#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);
#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
}
#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)
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) {
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, ¤t_time);
-
- cy = current_time.tm_year + 1900;
- cm = current_time.tm_mon + 1;
- cd = current_time.tm_mday;
-
- /* Get recorded time */
- localtime_r(×tamp, &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);
}
g_free(gl_data);
}
+#if 0
static void __bt_genlist_realized_cb(void *data,
Evas_Object *obj, void *event_info)
{
#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");
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;
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);
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);
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);
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) {
}
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);
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, ¬i_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, ¬i_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, ¬i_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);
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;
}
-
#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
}
*
*/
-//#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);
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);
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);
+}
#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