[TSAM-9310] Fixed connect popup for saved AP 28/94828/3 accepted/tizen/common/20161102.121921 accepted/tizen/ivi/20161102.073221 accepted/tizen/mobile/20161102.073132 accepted/tizen/tv/20161102.073142 accepted/tizen/wearable/20161102.073156 submit/tizen/20161102.022647
authorSeonah Moon <seonah1.moon@samsung.com>
Tue, 1 Nov 2016 10:30:10 +0000 (19:30 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 1 Nov 2016 10:40:25 +0000 (19:40 +0900)
- Add new edc file for circle button

Change-Id: I6f9c47e4fb9968e1b7a8d2a6da9aa705e1f377b8
Signed-off-by: Seonah Moon <seonah1.moon@samsung.com>
packaging/wifi-efl-ug.spec
sources/wearable/CMakeLists.txt
sources/wearable/inc/wearable-circle/view/popup_change_ap.h
sources/wearable/inc/wearable-circle/view/util/efl_helper.h
sources/wearable/res/wearable-circle/edje/circle_button.edc [new file with mode: 0755]
sources/wearable/res/wearable-circle/edje/wifi.edc
sources/wearable/src/wearable-circle/app_main.c
sources/wearable/src/wearable-circle/view/popup_change_ap.c
sources/wearable/src/wearable-circle/view/util/efl_helper.c

index 586b9ac..ea72e6c 100644 (file)
@@ -1,7 +1,7 @@
 %define _unpackaged_files_terminate_build 0
 Name:          wifi-efl-ug
 Summary:       Wi-Fi UI Gadget for TIZEN
-Version:       1.0.212
+Version:       1.0.213
 Release:       1
 Group:         App/Network
 License:       Flora-1.1
index d1bc113..9584176 100755 (executable)
@@ -69,7 +69,6 @@ pkg_check_modules(pkgs REQUIRED
        glib-2.0
        elementary
        bundle
-#      ui-extension
        efl-extension
        capi-ui-efl-util
        ecore-input
@@ -110,9 +109,17 @@ ADD_CUSTOM_TARGET(${PROJECT_NAME}.edj
 
 ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}.edj)
 
+ADD_CUSTOM_TARGET(circle_button.edj
+       COMMAND edje_cc -id ${RES_SOURCE_DIR}/images
+       ${RES_SOURCE_DIR}/edje/circle_button.edc ${CMAKE_CURRENT_SOURCE_DIR}/circle_button.edj
+       DEPENDS ${RES_SOURCE_DIR}/edje/circle_button.edc
+       )
+
+ADD_DEPENDENCIES(${PROJECT_NAME} circle_button.edj)
+
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.edj DESTINATION ${EDJDIR})
-
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/circle_button.edj DESTINATION ${EDJDIR})
 
 # install application HOME directory
 INSTALL(DIRECTORY DESTINATION ${DATADIR})
index acfe2a3..002cb27 100755 (executable)
@@ -55,6 +55,8 @@ void popup_change_ap_set_tap_ok_button_cb(popup_change_ap_object *self,
                                          Evas_Smart_Cb func, gpointer data);
 void popup_change_ap_set_tap_forget_button_cb(popup_change_ap_object *self,
                                              Evas_Smart_Cb func, gpointer data);
+void popup_change_ap_set_ssid(popup_change_ap_object *self,
+                                  const gchar *ssid);
 void popup_change_ap_set_rssi_text(popup_change_ap_object *self,
                                   const gchar *rssi_text);
 
index 20f5896..cdbf199 100755 (executable)
@@ -36,12 +36,14 @@ extern "C" {
 
 #define EDJ_PATH "edje"
 #define EDJ_FILE "wifi.edj"
+#define EDJ_CIRCLE_BUTTON_FILE "circle_button.edj"
 
 #define IMAGE_PATH "images"
 
 gboolean get_color_table_path(gchar *table_path, gsize table_path_length);
 gboolean get_font_table_path(gchar *table_path, gsize table_path_length);
 gboolean get_edj_path(gchar *edj_path, gsize edj_path_length);
+gboolean get_edj_circle_button_path(gchar *edj_path, gsize edj_path_length);
 gboolean get_image_path(gchar *image_path, gsize image_path_length,
                        const gchar *image_file);
 
@@ -56,6 +58,8 @@ Evas_Object *create_layout_use_edj_file(Evas_Object *parent, const gchar *group)
 Evas_Object *create_icon_use_image_file(Evas_Object *parent, const gchar *image,
                                        const gchar *code);
 
+Evas_Object *create_circle_button_use_edj_file(Evas_Object *parent);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sources/wearable/res/wearable-circle/edje/circle_button.edc b/sources/wearable/res/wearable-circle/edje/circle_button.edc
new file mode 100755 (executable)
index 0000000..b33a381
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define BUTTON_PADDING_SIZE_INC                         30 0
+#define BUTTON_ICON_SIZE_INC                            30 30
+#define BUTTON_POPUP_SIZE_INC                           220 220
+
+collections {
+   base_scale: 1.8;
+   styles {
+     style { name: "button_general_text_normal";
+               base: "font=Tizen:weight=Normal:width=Condensed font_size=36 align=center color=#FAFAFAFF ellipsis=1.0 wrap=mixed text_class=tizen";
+       }
+       style { name: "button_general_text_dim";
+               base: "font=Tizen:weight=Normal:width=Condensed font_size=36 align=center color=#FAFAFA89 ellipsis=1.0 wrap=mixed text_class=tizen";
+       }
+       style { name: "button_general_text_press";
+               base: "font=Tizen:weight=Normal:width=Condensed font_size=36 align=center color=#FAFAFAFF ellipsis=1.0 wrap=mixed text_class=tizen";
+       }
+       style { name: "button_general_text_focused";
+               base: "font=Tizen:weight=Normal:width=Condensed font_size=36 align=center color=#FAFAFAFF ellipsis=1.0 wrap=mixed text_class=tizen";
+       }
+  }
+
+   group { name: "elm/button/base/popup_circle";
+      images {
+         image: "wifi_ap_forget_btn.png" COMP;
+      }
+      script {
+         public mouse_down = 0;
+         public multi_down = 0;
+      }
+      parts {
+         part { name: "padding";
+            type: "SPACER";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: 0 0;
+               rel1.relative: 0.5 1.0;
+               rel2.relative: 0.5 1.0;
+               align: 0.5 0.0;
+            }
+         }
+         part { name: "bg";
+            type: IMAGE;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: BUTTON_POPUP_SIZE_INC;
+               image.normal: "wifi_ap_forget_btn.png";
+               rel1.to: "padding";
+               rel1.relative: 0.5 1.0;
+               rel2.to: "padding";
+               rel2.relative: 0.5 1.0;
+               align: 0.5 1.0;
+               color: 0 44 76 255;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: 0.5 0.0;
+               rel2.relative: 0.5 0.0;
+               color: 0 148 255 127;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 33 33 33 255;
+            }
+         }
+
+               part { name: "padding_left_top";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_PADDING_SIZE_INC;
+               fixed: 1 1;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_PADDING_SIZE_INC;
+               fixed: 1 1;
+            }
+         }
+         part { name: "icon_rect";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               min: 0 0;
+               fixed: 1 1;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_ICON_SIZE_INC;
+               max: BUTTON_ICON_SIZE_INC;
+               fixed: 1 1;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            clip_to: "elm.swallow.content.clip";
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 1;
+               min: BUTTON_ICON_SIZE_INC;
+               max: BUTTON_ICON_SIZE_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_ICON_SIZE_INC;
+               max: BUTTON_ICON_SIZE_INC;
+            }
+         }
+                part { name: "padding_text";
+                       type: SPACER;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 0 20;
+                           rel1 {
+                                       to: "padding_left_top";
+                                       relative: 0.0 1.0;
+                               }
+                        }
+                }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+                          align: 0.5 1.0;
+               rel1 {
+                  relative: 1.0 0.2;
+                  to_x: "icon_rect";
+                  //to_y: "padding_left_top";
+                                 to_y: "padding_text";
+               }
+              rel2 {
+                  relative: 0.0 0.0;
+                                 to: "padding_right_bottom";
+                         }
+               text {
+                  max: 1 0;
+                  style: "button_general_text_normal";
+               }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               text.style: "button_general_text_dim";
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               text.style: "button_general_text_press";
+            }
+         }
+         part { name: "elm.swallow.content.clip";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 148 255 255;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 250 250 250 76;
+            }
+         }
+         part { name: "event";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+            }
+         }
+      }
+      programs {
+         program { name: "pressed";
+            signal: "mouse,down,1*";
+            source: "event";
+            script {
+               if ((get_int(multi_down) == 0) && (get_int(mouse_down) == 0))
+                 {
+                     set_int(mouse_down, 1);
+                     run_program(PROGRAM:"button_press1");
+                 }
+            }
+         }
+         program { name: "button_press1";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"bg", st, 30, vl);
+               if (strcmp(st, "disabled")) {
+                  set_state(PART:"bg", "pressed", 0.0);
+                  set_state(PART:"elm.text", "pressed", 0.0);
+                  emit("elm,action,press", "");
+               }
+            }
+         }
+         program { name: "unpressed";
+            signal: "mouse,up,1";
+            source: "event";
+            script {
+               if (get_int(mouse_down) == 1) {
+                 set_int(mouse_down, 0);
+                 run_program(PROGRAM:"button_unpress1");
+               }
+            }
+         }
+         program { name: "button_unpress1";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"bg", st, 30, vl);
+               if (strcmp(st, "disabled")) {
+                  set_state(PART:"bg", "default", 0.0);
+                  set_state(PART:"elm.text", "default", 0.0);
+                  emit("elm,action,unpress", "");
+               }
+            }
+         }
+         program { name: "touch_snd";
+            signal: "mouse,clicked,1";
+            source: "event";
+            script {
+               new st[31];
+               new Float:vl;
+               if (get_int(multi_down) == 0) {
+                  get_state(PART:"bg", st, 30, vl);
+                  if (strcmp(st, "disabled")) {
+                     run_program(PROGRAM:"play_sample");
+                     emit("elm,action,click", "");
+                  }
+               }
+            }
+         }
+         program {
+            name: "play_sample";
+            action: RUN_PLUGIN "touch_sound";
+         }
+         program { name: "text_show";
+            signal: "elm,state,text,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                 }
+               get_state(PART:"bg", st, 30, vl);
+               if (strcmp(st, "disabled"))
+                  set_state(PART:"elm.text", "default", 0.0);
+               else
+                  set_state(PART:"elm.text", "disabled", 0.0);
+            }
+         }
+         program { name: "text_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "default", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.swallow.content";
+            target: "icon_rect";
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "icon_rect";
+         }
+         program { name: "disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "bg";
+            target: "elm.swallow.content.clip";
+            target: "elm.text";
+         }
+         program { name: "enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "bg";
+            target: "elm.swallow.content.clip";
+            target: "elm.text";
+         }
+         program { name: "multi_down";
+            signal: "elm,action,multi,down";
+            source: "elm";
+            script {
+               set_int(multi_down, 1);
+            }
+         }
+         program { name: "multi_up";
+            signal: "elm,action,multi,up";
+            source: "elm";
+            script {
+               set_int(multi_down, 0);
+            }
+         }
+      }
+       }
+}
index 184b9f8..b2e7ba7 100755 (executable)
 #define LOGS_DEFAULT_COLOR_TRANSPARENCY 0 0 0 0
 #define LOGS_DEFAULT_COLOR_BLACK 0 0 0
 
-#define POPUP_ENTRY_H 66
-#define POPUP_PADDING_H 32
-#define POPUP_ENTRY_HIDDEN_AP_MIN 0 325
 #define POPUP_BASE_DEFAULT_WIDTH 360
-#define POPUP_LEFT_RIGHT_PADDING_WIDTH 16
-#define POPUP_TITLE_BOTTOM_PADDING_HEIGHT 8
-#define POPUP_BODY_BUTTON_WIDTH_INC 160
-#define POPUP_BODY_BUTTON_HEIGHT_INC 160
+#define POPUP_LEFT_RIGHT_PADDING_WIDTH 30
+#define POPUP_TITLE_BOTTOM_PADDING_HEIGHT 20
 
 collections {
        base_scale: 1.3;
@@ -63,6 +58,14 @@ collections {
                style { name: "wps_progress_popup_layout";
                        base: "font=Tizen:style=Regular font_size=32 color=#F9F9F9FF align=center ellipsis=1.0 text_class=label";
                }
+               style { name: "popup_title_style";
+                       base: "font=Tizen:style=Bold font_size=32 align=center color=#3B73B6 style=Regular wrap=mixed ellipsis=1.0 text_class=tizen";
+                       tag:  "br" "\n";
+                       tag:  "tab" "\t";
+               }
+               style { name: "button_popup_body_text_normal";
+                       base: "font=Tizen:style=Light font_size=31 align=center color=#FFFFFF ellipsis=1.0 wrap=mixed text_class=tizen";
+               }
        }
        group {
                name: "ap_signal_image_layout";
@@ -110,7 +113,10 @@ collections {
             scale: 1;
             description { state: "default" 0.0;
                min: POPUP_LEFT_RIGHT_PADDING_WIDTH 0;
-               rel1.to: "base";
+               rel1 {
+                                 to: "base";
+                                 relative: 0.0 0.1;
+                          }
                rel2 {
                   to: "base";
                   relative: 0.0 0.0;
@@ -149,7 +155,7 @@ collections {
                align: 0.5 0.0;
                fixed: 0 1;
                text {
-                 style: "textblock_popup_title";
+                                style: "popup_title_style";
                  min: 0 1;
                }
             }
@@ -189,37 +195,39 @@ collections {
                }
             }
          }
-         part { name: "text_bottom_pad";
-            type: SPACER;
+        part { name: "elm.swallow.button";
+            type: SWALLOW;
             scale: 1;
             description { state: "default" 0.0;
-               min: 0 19;
+               min: 220 220;
+               max: 220 220;
+                          align: 0.5 0.0;
                rel1 {
                   to: "elm.text.content";
                   relative: 0.0 1.0;
                }
-               rel2.to: "elm.text.content";
-               align: 0.5 0.0;
-               fixed: 0 1;
+               rel2 {
+                  to: "bottom_right_pad";
+                  relative: 0.0 0.0;
+               }
             }
          }
-         part { name: "elm.swallow.button";
-            type: SWALLOW;
+                part { name: "button_bottom_pad";
+            type: SPACER;
             scale: 1;
             description { state: "default" 0.0;
-               min: 160 160;
-               max: 160 160;
+               min: 0 20;
                rel1 {
-                  to: "text_bottom_pad";
+                  to: "elm.swallow.button";
                   relative: 0.0 1.0;
                }
                rel2 {
-                  to: "bottom_right_pad";
-                  relative: 0.0 0.0;
-               }
-            }
-         }
-      }
+                                 to: "bottom_right_pad";
+                                 relative: 0.0 0.0;
+              }
+           }
+        }
+         }
        }
        group {
                name: "wps_text_block_layout";
index b4a9614..c5a284b 100755 (executable)
@@ -1743,6 +1743,7 @@ static void __popup_change_ap_forget_button_tap_cb(void *data,
 
 static void _popup_change_ap_show_use_ap(app_object *app_obj, wifi_ap_object *ap)
 {
+       gchar *ssid;
        gchar *rssi_text;
        gboolean is_removable_ap = _is_removable_ap(app_obj->wifi_manager, ap);
 
@@ -1759,6 +1760,11 @@ static void _popup_change_ap_show_use_ap(app_object *app_obj, wifi_ap_object *ap
                                       __popup_change_ap_destroy_cb, app_obj);
        popup_change_ap_set_tap_ok_button_cb(app_obj->popup_change_ap,
                                             __popup_change_ap_ok_button_tap_cb, app_obj);
+
+       ssid = wifi_manager_ap_get_ssid(ap);
+       popup_change_ap_set_ssid(app_obj->popup_change_ap, ssid);
+       g_free(ssid);
+
        rssi_text = _wifi_manager_ap_get_signal_strength_text_for_display(ap);
        popup_change_ap_set_rssi_text(app_obj->popup_change_ap, rssi_text);
        g_free(rssi_text);
index 889eda9..6102d4f 100755 (executable)
@@ -34,6 +34,7 @@ struct _popup_change_ap_object {
        Evas_Object *ok_button;
        Evas_Object *content_layout;
        Evas_Object *forget_button;
+       gchar *ssid;
        gchar *rssi_text;
        popup_change_ap_dismiss_reason dismiss_reason;
 
@@ -144,6 +145,7 @@ static Evas_Object *_create_content_layout(popup_change_ap_object *self, Evas_Ob
        content_text = g_strdup_printf("%s<br>%s<br>%s", tokens[0], tokens[1], self->rssi_text);
        g_strfreev(tokens);
 
+       elm_object_part_text_set(layout, "elm.text.title", self->ssid);
        elm_object_part_text_set(layout, "elm.text.content", content_text);
        g_free(content_text);
        return layout;
@@ -151,10 +153,9 @@ static Evas_Object *_create_content_layout(popup_change_ap_object *self, Evas_Ob
 
 static Evas_Object *_create_forget_button(popup_change_ap_object *self, Evas_Object *parent)
 {
-       Evas_Object *forget_button = elm_button_add(parent);
+       Evas_Object *forget_button = create_circle_button_use_edj_file(parent);
        WIFI_RET_VAL_IF_FAIL(forget_button, NULL);
 
-       elm_object_style_set(forget_button, "default");
        elm_object_text_set(forget_button, STR_FORGET);
        evas_object_size_hint_weight_set(forget_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(forget_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -253,6 +254,10 @@ void popup_change_ap_destroy(popup_change_ap_object *self)
 {
        WIFI_RET_IF_FAIL(self);
 
+       if (self->ssid) {
+               g_free(self->ssid);
+               self->ssid = NULL;
+       }
        if (self->rssi_text) {
                g_free(self->rssi_text);
                self->rssi_text = NULL;
@@ -331,6 +336,15 @@ void popup_change_ap_set_tap_forget_button_cb(popup_change_ap_object *self,
        self->tap_forget_button_cb.data = data;
 }
 
+void popup_change_ap_set_ssid(popup_change_ap_object *self,
+                                  const gchar *ssid)
+{
+       WIFI_RET_IF_FAIL(self);
+       WIFI_RET_IF_FAIL(ssid);
+
+       self->ssid = g_strdup(ssid);
+}
+
 void popup_change_ap_set_rssi_text(popup_change_ap_object *self,
                                   const gchar *rssi_text)
 {
index f19c8bf..c869998 100755 (executable)
@@ -72,6 +72,12 @@ gboolean get_edj_path(gchar *edj_path, gsize edj_path_length)
                       edj_path, edj_path_length, EDJ_PATH, EDJ_FILE);
 }
 
+gboolean get_edj_circle_button_path(gchar *edj_path, gsize edj_path_length)
+{
+       return _make_path_append_to_app_resource_path(
+                      edj_path, edj_path_length, EDJ_PATH, EDJ_CIRCLE_BUTTON_FILE);
+}
+
 gboolean get_image_path(gchar *image_path, gsize image_path_length,
                        const gchar *image_file)
 {
@@ -128,3 +134,21 @@ Evas_Object *create_icon_use_image_file(Evas_Object *parent, const gchar *image,
        elm_image_file_set(icon, image_path, NULL);
        return icon;
 }
+
+Evas_Object *create_circle_button_use_edj_file(Evas_Object *parent)
+{
+       Evas_Object *button = NULL;
+       gchar edj_path[PATH_MAX] = { 0, };
+       WIFI_RET_VAL_IF_FAIL(parent, NULL);
+       WIFI_RET_VAL_IF_FAIL(get_edj_circle_button_path(edj_path, sizeof(edj_path)), NULL);
+
+       WIFI_LOG_INFO("circle button path (%s)", edj_path);
+       elm_theme_extension_add(NULL, edj_path);
+
+       button = elm_button_add(parent);
+       WIFI_RET_VAL_IF_FAIL(button, NULL);
+
+       elm_object_style_set(button, "popup_circle");
+
+       return button;
+}