setting-about: Status view implementation 13/101313/2
authorMichal Kolodziejski <m.kolodziejs@samsung.com>
Wed, 30 Nov 2016 18:10:54 +0000 (19:10 +0100)
committerRadek Kintop <r.kintop@samsung.com>
Wed, 30 Nov 2016 21:01:48 +0000 (22:01 +0100)
Change-Id: Icc6f9db9c8d03e22b47b1c3c410b6e86b7163983
Signed-off-by: Michal Kolodziejski <m.kolodziejs@samsung.com>
setting-about/CMakeLists.txt
setting-about/include/setting-about-status.h [new file with mode: 0644]
setting-about/include/setting-about.h
setting-about/src/setting-about-main.c
setting-about/src/setting-about-status.c [new file with mode: 0644]
setting-about/src/setting-about.c

index 8a522a6b45cdbcb47320587f93d36260a99f24e6..19e4ee12421dc5265af83976bd9a0452764b5ee6 100644 (file)
@@ -19,6 +19,7 @@ pkg_check_modules(pkgs_about REQUIRED
        capi-system-system-settings
        capi-telephony
        dbus-glib-1
+       deviced storage
        dlog
        ecore
        efl-extension
@@ -54,6 +55,7 @@ SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib")
 ADD_EXECUTABLE(${PROJECT_SETTING_ABOUT}
        src/setting-about.c
        src/setting-about-main.c
+       src/setting-about-status.c
 )
 
 TARGET_LINK_LIBRARIES(${PROJECT_SETTING_ABOUT} -L${CMAKE_BINARY_DIR}/${SETTING_COMMON} -lsetting-common)
diff --git a/setting-about/include/setting-about-status.h b/setting-about/include/setting-about-status.h
new file mode 100644 (file)
index 0000000..5a37068
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ *
+ */
+#ifndef __SETTING_ABOUT_STATUS_H__
+#define __SETTING_ABOUT_STATUS_H__
+
+#include "setting-common-view.h"
+
+setting_view view_setting_about_status;
+
+#endif                         /* __SETTING_ABOUT_STATUS_H__ */
index 8f92ab4d902071af51fcbaea2dec6a9b20d08790..a9c54f3c2ea233f307352c7fd7a7b2d299a63cc0 100644 (file)
 #define __SETTING_ABOUT_H__
 
 #include <stdio.h>
+#include <telephony.h>
 #include <Elementary.h>
 #include <glib-object.h>
 #include <notification.h>
 #include <dbus/dbus.h>
+#include <storage.h>
+#include <system_info.h>
 
 #include "setting-common-init.h"
 #include "setting-common-draw-widget.h"
@@ -58,6 +61,11 @@ struct _SettingAbout {
 
        bool pause_flag;
 
+       /* Status view */
+       Evas_Object *status_gl;
+       telephony_handle_list_s tel_h_list;
+
+
        Elm_Genlist_Item_Class itc_1text;
        Elm_Genlist_Item_Class itc_2text_2;
        Elm_Genlist_Item_Class itc_group_item;
index 17e2cb7133c1f60951493afd64781bd43ec40047..d5d7191c5d0b9664043c23994e1d68f4dc767b84 100755 (executable)
 #include <app_control.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <system_info.h>
 #include <fcntl.h>
-#include <bluetooth.h>
-#include <wifi.h>
 #include <app_manager.h>
 #include <efl_extension.h>
 #include <telephony.h>
 #include <runtime_info.h>
 
 #include "setting-about-main.h"
+#include "setting-about-status.h"
 
 #define MAX_DEVICE_NAME_LEN            32
 
@@ -59,84 +57,6 @@ setting_view setting_view_about_main = {
                .cleanup = NULL
 };
 
-/**
- * @brief get software version.
- *
- * @param szStr the buffer for store SW version
- * @param nSize buffer size
- */
-void setting_about_main_get_wifi_mac_address_string(char *str, int size)
-{
-       SETTING_TRACE_BEGIN;
-       setting_retm_if(str == NULL, "str parameter is NULL");
-       setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN + 1,
-                       "size parameter is wrong");
-
-       char *mac_addr = NULL;
-       int status = wifi_get_mac_address(&mac_addr);
-       if (WIFI_ERROR_NONE != status)
-               SETTING_TRACE_ERROR("Failed to call wifi_get_mac_address()");
-       else
-               SETTING_TRACE_ERROR("Success to call wifi_get_mac_address()");
-
-       if (mac_addr) {
-               safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
-               SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", mac_addr);
-               free(mac_addr);
-       }
-
-       SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
-
-       int state = 0;
-       int ret = vconf_get_int(VCONFKEY_WIFI_STATE, &state);
-       if (0 != ret)
-               SETTING_TRACE_ERROR("Failed to get wifi state");
-       else
-               SETTING_TRACE("get wifi state: %d", state);
-
-       if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0)
-                       || 0 == state) {
-               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-       }
-}
-
-/**
- * @brief get bluetooth address.
- *
- * @param szStr the buffer for store bluetooth address
- * @param nSize buffer size
- */
-void setting_about_main_get_bluetooth_address_string(char *str, int size)
-{
-       setting_retm_if(str == NULL, "str parameter is NULL");
-
-       int ret = 0;
-
-       ret = bt_initialize();
-       setting_retm_if(ret != 0, "bluetooth initialization failed");
-
-       char *local_address = NULL;
-       ret = bt_adapter_get_address(&local_address);
-
-       bt_adapter_state_e state;
-       ret = bt_adapter_get_state(&state);
-
-       bt_deinitialize();
-
-       if (ret < 0 || BT_ADAPTER_DISABLED == state) {
-               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-               SETTING_TRACE_DEBUG(
-                               "bt address : %s failed get bt address with error code:%d",
-                               str, ret);
-       } else {
-               SETTING_TRACE_DEBUG("bt address : %s", local_address);
-               snprintf(str, size, "%s", local_address);
-       }
-
-       if (local_address)
-               free(local_address);
-}
-
 /**
  * @brief popup response callback fuc.
  *
@@ -452,46 +372,7 @@ static void __setting_about_main_get_sw_version(char *szStr, int nSize)
 }
 
 /**
- * @brief get current battery percentage.
- *
- * @param szStr the buffer for store battery percentage
- * @param nSize buffer size
- */
-static void __setting_about_main_get_battery_string(char *str, int size)
-{
-       setting_retm_if(str == NULL, "str parameter is NULL");
-
-       int val = -1;
-       char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-       snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO, "%s/%s/%s",
-                       SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
-
-       char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-       int fd = 0;
-       int r = 0;
-
-       fd = open(file, O_RDONLY);
-       if (fd != -1) {
-               r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
-               if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
-                       buf[r] = '\0';
-                       val = atoi(buf);
-                       snprintf(str, size, "%d%s", val, "\%");
-               } else {
-                       SETTING_TRACE_ERROR("read file fail");
-                       snprintf(str, size, "%s",
-                                       _("IDS_ST_HEADER_UNAVAILABLE"));
-               }
-
-               close(fd);
-       } else {
-               SETTING_TRACE_ERROR("open file fail");
-               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-       }
-}
-
-/**
- * @brief get CPU usage.
+ * @brief get CPU info.
  *
  * @param szStr the buffer for store CPU info
  * @param nSize buffer size
@@ -500,38 +381,20 @@ static void __setting_about_main_get_battery_string(char *str, int size)
  */
 static int __setting_about_main_stat_get_cpuinfo(char *szStr, int nSize)
 {
-       int lSize;
-       FILE *cmd;
-       char *result, *buffer, *tmp;
 
-       cmd = popen("grep 'model name' /proc/cpuinfo | head -1 2>&1", "r");
-       if (cmd == NULL) {
-               SETTING_TRACE_ERROR("popen failed");
-               snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-               return -1;
-       }
+       int ret = 0;
 
-       lSize = MAX_DISPLAY_STR_LEN_ON_PHONE_INFO;
-       buffer = (char *)malloc(sizeof(char)*lSize);
-       if (buffer == NULL) {
-               SETTING_TRACE_ERROR("malloc failed");
-               snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-           return -1;
-       }
-       result = fgets(buffer, lSize, cmd);
-       if (result == NULL) {
-               SETTING_TRACE_ERROR("Reading file failed");
+       char *cpu_name = NULL;
+       ret = system_info_get_platform_string(
+               "http://tizen.org/system/platform.processor", &cpu_name);
+
+       if (0 != ret) {
                snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-               FREE(buffer);
                return -1;
        }
-       tmp = strstr(buffer,": ");
-
-       snprintf(szStr, nSize, "%s", tmp + 2);
-
-       pclose(cmd);
-       FREE(buffer);
 
+       snprintf(szStr, nSize, "%s", cpu_name);
+       free(cpu_name);
        return 0;
 }
 
@@ -934,8 +797,8 @@ static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
        if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
                SETTING_TRACE("status:%d", status);
                char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-               setting_about_main_get_wifi_mac_address_string(str,
-                               sizeof(str));
+               //setting_about_main_get_wifi_mac_address_string(str,
+                               //sizeof(str));
                if (ad->item_data_wifi) {
                        G_FREE(ad->item_data_wifi->sub_desc);
                        ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
@@ -946,8 +809,8 @@ static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
        } else if (!safeStrCmp(vconf_name, VCONFKEY_BT_STATUS)) {
                SETTING_TRACE("status:%d", status);
                char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-               setting_about_main_get_bluetooth_address_string(str,
-                               sizeof(str));
+               //setting_about_main_get_bluetooth_address_string(str,
+               //              sizeof(str));
                if (ad->item_data_bt) {
                        G_FREE(ad->item_data_bt->sub_desc);
                        ad->item_data_bt->sub_desc = (char *)g_strdup(str);
@@ -1406,7 +1269,7 @@ static void __setting_about_main_mouse_up_Gendial_list_cb(void *data,
                __setting_about_main_creat_name_view(data);
        } else if (!safeStrCmp(ITEM_NAME_STATUS,
                        list_item->keyStr)) {
-               //TODO: function to create status view
+               setting_view_create(&view_setting_about_status, (void *)data);
        }
 }
 
@@ -1502,33 +1365,6 @@ static void __setting_about_main_gl_mouse_up(void *data, Evas *e,
        }
 }
 
-/**
- * @brief callback run for timer task to update CPU, Battery info
- *
- * @param data application context
- *
- * @return FALSE for call it once and then destory the timer, TRUE for always
- *     call it when the timer is reached.
- */
-
-static Eina_Bool __setting_about_main_timer_update_cb(void *data)
-{
-       retv_if(data == NULL, TRUE);
-       SettingAbout *ad = (SettingAbout *)data;
-       char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-
-       if (ad->item_data_battery) {
-               __setting_about_main_get_battery_string(str, sizeof(str));
-               /*SETTING_TRACE("str:%s", str);*/
-               ad->item_data_battery->sub_desc = (char *)g_strdup(str);
-
-               elm_object_item_data_set(ad->item_data_battery->item,
-                               ad->item_data_battery);
-               elm_genlist_item_update(ad->item_data_battery->item);
-       }
-       return TRUE;
-}
-
 /**
  * @brief create main view genlist items
  *
@@ -1627,22 +1463,22 @@ static int __setting_about_main_generate_genlist(void *data)
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
-       /* 4. [UI] CPU usage */
+       /* 4. [UI] CPU Info */
        memset(str, 0x00, sizeof(str));
        int ret = __setting_about_main_stat_get_cpuinfo(str, sizeof(str));
        if (ret == -1) {
                SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
        }
-       ad->item_data_cpu = item_data = setting_create_Gendial_field_def(
+       item_data = setting_create_Gendial_field_def(
                        ad->md.genlist, &(ad->itc_2text_2), NULL,
                        NULL, SWALLOW_Type_INVALID, NULL,
                        NULL, 0, "CPU", str, NULL);
-       if (ad->item_data_cpu) {
-               elm_object_item_disabled_set(ad->item_data_cpu->item,
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item,
                                EINA_TRUE);
-               elm_genlist_item_select_mode_set(ad->item_data_cpu->item,
+               elm_genlist_item_select_mode_set(item_data->item,
                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               __BACK_POINTER_SET(ad->item_data_cpu);
+               __BACK_POINTER_SET(item_data);
        } else {
                SETTING_TRACE_ERROR("item_data is NULL");
        }
@@ -1700,11 +1536,6 @@ static int __setting_about_main_generate_genlist(void *data)
                        "status, and other information.",
                        NULL);
 
-
-       ad->update_timer = ecore_timer_add(1,
-                               __setting_about_main_timer_update_cb, ad);
-
-
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -1786,9 +1617,6 @@ static int _view_destroy(void *cb)
        if (ret != 0)
                SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
 
-       ecore_timer_del(ad->update_timer);
-       ad->update_timer = NULL;
-
        ecore_idler_del(ad->update_idler);
        ad->update_idler = NULL;
 
diff --git a/setting-about/src/setting-about-status.c b/setting-about/src/setting-about-status.c
new file mode 100644 (file)
index 0000000..1fbdc24
--- /dev/null
@@ -0,0 +1,619 @@
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ *
+ */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <fcntl.h>
+#include <telephony.h>
+#include <bluetooth.h>
+#include <wifi.h>
+
+#include "setting-about.h"
+#include "setting-about-main.h"
+
+static int _view_create(void *cb);
+static int _view_destroy(void *cb);
+
+static Eina_Bool _naviframe_item_pop_cb(void *data, Elm_Object_Item *it);
+static Eina_Bool __setting_about_status_timer_update_cb(void *data);
+
+static int __setting_about_status_generate_genlist(void *data);
+static void __setting_about_status_get_phone_number(
+                       telephony_handle_list_s *list, char *str, int size);
+static int __setting_about_status_get_imei(
+                       telephony_handle_list_s *list, char *str, int size);
+static void __setting_about_status_get_bluetooth_address(char *str, int size);
+static void __setting_about_status_get_wifi_mac_address(char *str, int size);
+static void __setting_about_status_get_serial_number(char *str, int size);
+static void __setting_about_status_get_storage_capacity(char *str, int size);
+static void __setting_about_status_get_battery_percent(char *str, int size);
+static int __setting_about_status_stat_get_cpuinfo(float *usr_pct, float *sys_pct);
+static void __setting_about_status_get_device_status(char *str, int size);
+static void __setting_about_status_get_security_status(char *str, int size);
+
+setting_view view_setting_about_status = {
+       .create = _view_create,
+       .destroy = _view_destroy,
+       .update = NULL,
+       .cleanup = NULL,
+};
+
+static int _view_create(void *cb)
+{
+       SETTING_TRACE_BEGIN;
+
+       /* variables initialization */
+       SettingAbout *ad = (SettingAbout *)cb;
+       retv_if(!ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       setting_create_genlist_and_push_to_naviframe(
+                       _("IDS_ST_MBODY_DEVICE_STATUS"), NULL,
+                       _naviframe_item_pop_cb, ad, &ad->status_gl,
+                       ad->md.naviframe);
+
+       /* telephony_handle_list_s initialization*/
+       if (telephony_init(&ad->tel_h_list) != TELEPHONY_ERROR_NONE) {
+               SETTING_TRACE_ERROR("telephony_init failed");
+               ad->tel_h_list.count = 0;
+       }
+       __setting_about_status_generate_genlist(ad);
+       ad->update_timer = ecore_timer_add(1,
+                       __setting_about_status_timer_update_cb, ad);
+
+       view_setting_about_status.is_create = 1;
+       return SETTING_RETURN_SUCCESS;
+}
+
+static int _view_destroy(void *cb)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAbout *ad = (SettingAbout *)cb;
+       retv_if(!ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       if (telephony_deinit(&ad->tel_h_list) != TELEPHONY_ERROR_NONE)
+               SETTING_TRACE_ERROR("telephony_deinit failed");
+
+       ecore_timer_del(ad->update_timer);
+       ad->update_timer = NULL;
+
+       if (!view_setting_about_status.is_create)
+               return SETTING_RETURN_SUCCESS;
+
+       view_setting_about_status.is_create = 0;
+       return SETTING_RETURN_SUCCESS;
+}
+
+static Eina_Bool _naviframe_item_pop_cb(void *data, Elm_Object_Item *it)
+{
+       SETTING_TRACE_BEGIN;
+       SettingAbout *ad = (SettingAbout *)data;
+       retv_if(!ad, EINA_FALSE);
+       setting_view_destroy(&view_setting_about_status, ad);
+       return EINA_TRUE;
+}
+
+/**
+ * @brief callback run for timer task to update CPU, Battery info
+ *
+ * @param data application context
+ *
+ * @return FALSE for call it once and then destory the timer, TRUE for always
+ *     call it when the timer is reached.
+ */
+
+static Eina_Bool __setting_about_status_timer_update_cb(void *data)
+{
+       retv_if(data == NULL, TRUE);
+       SettingAbout *ad = (SettingAbout *)data;
+       char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+
+       if (ad->item_data_cpu) {
+               float usr, sys;
+               int ret = __setting_about_status_stat_get_cpuinfo(&usr, &sys);
+               if (ret == -ENOENT) {
+                       SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
+                       snprintf(str, sizeof(str), "%s",
+                                       _("IDS_ST_HEADER_UNAVAILABLE"));
+               } else {
+                       snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
+               }
+               ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
+               elm_object_item_data_set(ad->item_data_cpu->item,
+                               ad->item_data_cpu);
+               elm_genlist_item_update(ad->item_data_cpu->item);
+       }
+
+       if (ad->item_data_battery) {
+               __setting_about_status_get_battery_percent(str, sizeof(str));
+               /*SETTING_TRACE("str:%s", str);*/
+               ad->item_data_battery->sub_desc = (char *)g_strdup(str);
+
+               elm_object_item_data_set(ad->item_data_battery->item,
+                               ad->item_data_battery);
+               elm_genlist_item_update(ad->item_data_battery->item);
+       }
+       return TRUE;
+}
+
+static int __setting_about_status_generate_genlist(void *data)
+{
+       SettingAbout *ad = (SettingAbout *)data;
+       retv_if(!ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       Setting_GenGroupItem_Data *item_data = NULL;
+       char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+
+       /* [UI] Phone Number */
+       memset(str, 0, sizeof(str));
+       __setting_about_status_get_phone_number(&ad->tel_h_list, str,
+                                               sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_PHONE_NUMBER"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] IMEI */
+       memset(str, 0x00, sizeof(str));
+       int ret = __setting_about_status_get_imei(&ad->tel_h_list, str, sizeof(str));
+       if (ret == -1) {
+               SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
+       }
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_IMEI"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Bluetooth address */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_bluetooth_address(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_MBODY_BLUETOOTH_ADDRESS"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Wi-Fi MAC address */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_wifi_mac_address(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_WI_FI_MAC_ADDRESS"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Serial number */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_serial_number(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_SERIAL_NUMBER"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Storage */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_storage_capacity(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_STORAGE"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Battery power */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_battery_percent(str, sizeof(str));
+       ad->item_data_battery = item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_BATTERY_PERCENTAGE_ABB"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+
+       /* [UI] CPU usage */
+       memset(str, 0, sizeof(str));
+       float usr, sys;
+       ret = __setting_about_status_stat_get_cpuinfo(&usr, &sys);
+       if (ret == -ENOENT) {
+               SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
+               snprintf(str, sizeof(str), "%s",
+                               _("IDS_ST_HEADER_UNAVAILABLE"));
+       } else {
+               snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
+       }
+       ad->item_data_cpu = item_data = setting_create_Gendial_field_def(
+                       ad->status_gl, &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_BODY_CPU_USAGE"), str, NULL);
+       if (ad->item_data_cpu) {
+               elm_object_item_disabled_set(ad->item_data_cpu->item,
+                               EINA_TRUE);
+               elm_genlist_item_select_mode_set(ad->item_data_cpu->item,
+                               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               __BACK_POINTER_SET(ad->item_data_cpu);
+       }
+
+       /* [UI] Device status */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_device_status(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_MBODY_DEVICE_STATUS"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       /* [UI] Security status */
+       memset(str, 0x00, sizeof(str));
+       __setting_about_status_get_security_status(str, sizeof(str));
+       item_data = setting_create_Gendial_field_def(
+                       ad->status_gl,
+                       &(ad->itc_2text_2), NULL,
+                       NULL, SWALLOW_Type_INVALID, NULL,
+                       NULL, 0, _("IDS_ST_TMBODY_SECURITY_STATUS"), str, NULL);
+       if (item_data) {
+               elm_object_item_disabled_set(item_data->item, EINA_TRUE);
+               elm_genlist_item_select_mode_set(item_data->item,
+               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       return SETTING_RETURN_SUCCESS;
+}
+
+static void __setting_about_status_get_phone_number(
+                       telephony_handle_list_s *list, char *str, int size)
+{
+       char *phone_num = NULL;
+       int ret = 0;
+       if (list && list->count > 0) {
+               ret = telephony_sim_get_subscriber_number(list->handle[0],
+                               &phone_num);
+               SETTING_TRACE_DEBUG(
+                       "telephony_sim_get_subscriber_number %s %s",
+                       phone_num, get_error_message(ret));
+               if (!ret) {
+                       snprintf(str, size, "%s", phone_num);
+                       free(phone_num);
+                       return;
+               }
+       }
+
+       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+}
+
+static int __setting_about_status_get_imei(telephony_handle_list_s *list, char *str, int size)
+{
+       if (!list) {
+               SETTING_TRACE_ERROR("list is null");
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               return -1;
+       }
+       char *buffer = (char *)malloc(sizeof(char)*size);
+       if (buffer == NULL) {
+               SETTING_TRACE_ERROR("malloc failed");
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+           return -1;
+       }
+       telephony_modem_get_imei(list->handle[0], &buffer);
+
+       snprintf(str, size, "%s", buffer);
+
+       FREE(buffer);
+
+       return 0;
+}
+
+/**
+ * @brief get bluetooth address.
+ *
+ * @param str the buffer for store bluetooth address
+ * @param size buffer size
+ */
+static void __setting_about_status_get_bluetooth_address(char *str, int size)
+{
+       setting_retm_if(str == NULL, "str parameter is NULL");
+
+       int ret = 0;
+
+       ret = bt_initialize();
+       setting_retm_if(ret != 0, "bluetooth initialization failed");
+
+       char *local_address = NULL;
+       ret = bt_adapter_get_address(&local_address);
+
+       bt_adapter_state_e state;
+       ret = bt_adapter_get_state(&state);
+
+       bt_deinitialize();
+
+       if (ret < 0 || BT_ADAPTER_DISABLED == state) {
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               SETTING_TRACE_DEBUG(
+                               "bt address : %s failed get bt address with error code:%d",
+                               str, ret);
+       } else {
+               SETTING_TRACE_DEBUG("bt address : %s", local_address);
+               snprintf(str, size, "%s", local_address);
+       }
+
+       free(local_address);
+}
+
+static void __setting_about_status_get_wifi_mac_address(char *str, int size)
+{
+       setting_retm_if(str == NULL, "str parameter is NULL");
+       setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN + 1,
+                       "size parameter is wrong");
+
+       char *mac_addr = NULL;
+       int status = wifi_get_mac_address(&mac_addr);
+       if (WIFI_ERROR_NONE != status)
+               SETTING_TRACE_ERROR("Failed to call wifi_get_mac_address()");
+       else
+               SETTING_TRACE_ERROR("Success to call wifi_get_mac_address()");
+
+       if (mac_addr) {
+               safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
+               SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", mac_addr);
+               free(mac_addr);
+       }
+
+       SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
+
+       int state = 0;
+       int ret = vconf_get_int(VCONFKEY_WIFI_STATE, &state);
+       if (0 != ret)
+               SETTING_TRACE_ERROR("Failed to get wifi state");
+       else
+               SETTING_TRACE("get wifi state: %d", state);
+
+       if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0)
+                       || 0 == state) {
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+       }
+}
+
+static void __setting_about_status_get_serial_number(char *str, int size)
+{
+       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+}
+
+static void __setting_about_status_get_storage_capacity(char *str, int size)
+{
+       long long int total = 0;
+       long long int avail = 0;
+       struct statvfs internal;
+       struct statvfs external;
+
+       if (storage_get_internal_memory_size(&internal) < 0) {
+               SETTING_TRACE_ERROR("Fail to get internal memory size");
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               return;
+       } else {
+               total = internal.f_frsize * internal.f_blocks;
+               avail = internal.f_bsize * internal.f_bavail;
+               SETTING_TRACE_DEBUG("Total mem : %lld, Avail mem : %lld",
+                                       total, avail);
+       }
+
+       if (storage_get_external_memory_size(&external) < 0) {
+               SETTING_TRACE_DEBUG("Fail to get external memory size");
+       } else {
+               total += external.f_frsize * external.f_blocks;
+               avail += external.f_bsize * external.f_bavail;
+               SETTING_TRACE_DEBUG("Total mem : %lld, Avail mem : %lld",
+                                                       total, avail);
+       }
+
+       snprintf(str, size, "%0.1fGB available (Total %0.1fGB)",
+               (double)(avail / 1000000000.0), (double)(total / 1000000000.0));
+}
+
+/**
+ * @brief get current battery percentage.
+ *
+ * @param str the buffer for store battery percentage
+ * @param size buffer size
+ */
+static void __setting_about_status_get_battery_percent(char *str, int size)
+{
+       setting_retm_if(str == NULL, "str parameter is NULL");
+
+       int val = -1;
+       char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+       snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO, "%s/%s/%s",
+                       SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
+
+       char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+       int fd = 0;
+       int r = 0;
+
+       fd = open(file, O_RDONLY);
+       if (fd != -1) {
+               r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
+               if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
+                       buf[r] = '\0';
+                       val = atoi(buf);
+                       snprintf(str, size, "%d%s", val, "\%");
+               } else {
+                       SETTING_TRACE_ERROR("read file fail");
+                       snprintf(str, size, "%s",
+                                       _("IDS_ST_HEADER_UNAVAILABLE"));
+               }
+
+               close(fd);
+       } else {
+               SETTING_TRACE_ERROR("open file fail");
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+       }
+}
+
+/**
+ * @brief get CPU usage.
+ *
+ * @param szStr the buffer for store CPU usage
+ * @param nSize buffer size
+ *
+ * @return -ENOENT means failed to get CPU info, otherwise ok.
+ */
+static int __setting_about_status_stat_get_cpuinfo(float *usr_pct, float *sys_pct)
+{
+       setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
+       setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
+
+       /*      default value */
+       *usr_pct = 0.0;
+       *sys_pct = 0.0;
+       static unsigned long long usr_time = 0, /*nice_time = 0,*/sys_time = 0;
+       static unsigned long long old_usr = 0, /*old_nice = 0,*/old_sys = 0;
+       static struct timeval old_tv, cur_tv;
+       unsigned long long elapsed_tick;
+       long tick_per_sec;
+       long cpu_num;
+       FILE *fp = NULL;
+       int ret = 0;
+
+       tick_per_sec = sysconf(_SC_CLK_TCK);
+       cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
+
+       if (cpu_num < 1)
+               cpu_num = 1;
+
+       gettimeofday(&cur_tv, NULL);
+       fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
+       if (fp == NULL) {
+               SETTING_TRACE_ERROR("fp == NULL");
+               return -ENOENT;
+       }
+
+       char cpu_info[MAX_COMMON_BUFFER_LEN] = { 0, };
+       char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
+
+       if (cpu_info_p == NULL) {
+               SETTING_TRACE_ERROR("fgets failed");
+               fclose(fp); /* free - code */
+               return -ENOENT;
+       }
+
+       char *substr = NULL;
+       unsigned long long tmp_long = 0;
+       int i = 0;
+       /* split cpu_info, get 3 numbers headmost*/
+       while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
+               char *endptr = NULL;
+               tmp_long = strtoull(substr, &endptr, 10);
+               if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
+                       switch (i) {
+                       case 0:
+                               usr_time = tmp_long;
+                               break;
+                       case 1:
+                               /*nice_time = tmp_long;*/
+                               break;
+                       case 2:
+                               sys_time = tmp_long;
+                               break;
+                       default:
+                               break;
+                       }
+                       i++;
+               }
+               if (i >= 3)
+                       break;
+       }
+
+       fclose(fp);
+       fp = NULL;
+       if (old_usr == 0) {
+               ret = -EAGAIN;
+               SETTING_TRACE_ERROR("old_usr == 0");
+               goto out;
+       }
+
+       elapsed_tick = (unsigned long long)(((long long)cur_tv.tv_sec
+                       - old_tv.tv_sec) * tick_per_sec
+                       + (((long long)cur_tv.tv_usec - old_tv.tv_usec)
+                                       * tick_per_sec) / 1000000);
+
+       /* REMOVE BS */
+       if (elapsed_tick != 0) {
+               *usr_pct = ((float)(usr_time - old_usr) * 100 / elapsed_tick)
+                               / cpu_num;
+       } else {
+               *usr_pct = 0;
+       }
+       /* REMOVE BS */
+       if (elapsed_tick != 0) {
+               *sys_pct = ((float)(sys_time - old_sys) * 100 / elapsed_tick)
+                               / cpu_num;
+       } else {
+               *sys_pct = 0;
+       }
+
+out:
+       old_usr = usr_time;
+       /*old_nice = nice_time; */
+       old_sys = sys_time;
+       old_tv = cur_tv;
+
+       return ret;
+}
+
+static void __setting_about_status_get_device_status(char *str, int size)
+{
+       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+}
+
+static void __setting_about_status_get_security_status(char *str, int size)
+{
+       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+}
index f6f675d45ee5adeb29e0736a29266196942a585d..5d68ec98cce237a51159577481879c02fe098027 100644 (file)
@@ -102,8 +102,8 @@ static void on_app_resume(void *data)
        ad->pause_flag = FALSE;
        memset(str, 0x00, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
        if (ad->item_data_wifi) {
-               setting_about_main_get_wifi_mac_address_string(str,
-                               MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
+               //setting_about_main_get_wifi_mac_address_string(str,
+               //              MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
                ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
                elm_object_item_data_set(ad->item_data_wifi->item,
                                ad->item_data_wifi);
@@ -111,8 +111,8 @@ static void on_app_resume(void *data)
        }
        memset(str, 0, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
        if (ad->item_data_bt) {
-               setting_about_main_get_bluetooth_address_string(str,
-                               MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
+               //setting_about_main_get_bluetooth_address_string(str,
+               //              MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
                ad->item_data_bt->sub_desc = (char *)g_strdup(str);
                elm_object_item_data_set(ad->item_data_bt->item,
                                ad->item_data_bt);