Apply dpm policy
[apps/native/ug-mobile-ap.git] / src / mh_view_main.c
index 84b9c7d..0892e08 100755 (executable)
@@ -20,6 +20,7 @@
 #include <time.h>
 #include <limits.h>
 #include <efl_extension.h>
+#include <dpm/restriction.h>
 
 #include "mh_view_main.h"
 #include "mh_popup.h"
@@ -42,11 +43,11 @@ void _rotate_adjust_rename_popup(void)
        int change_ang = 0;
 
        change_ang = elm_win_rotation_get(g_ad->win);
-       if (change_ang == 0 || change_ang == 180) {
+       if (change_ang == 0 || change_ang == 180)
                _hadnle_rename_popup_rotation(EINA_TRUE);
-       } else {
+       else
                _hadnle_rename_popup_rotation(EINA_FALSE);
-       }
+
        __MOBILE_AP_FUNC_EXIT__;
 }
 #endif
@@ -105,9 +106,6 @@ Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
                ERR("Invalid param\n");
                return EINA_FALSE;
        }
-       if (ad->main.usage_item == NULL) {
-               return EINA_TRUE;
-       }
 
        if (ad->main.usage_item)
                elm_genlist_item_update(ad->main.usage_item);
@@ -129,9 +127,8 @@ Eina_Bool ap_get_data_statistics(void *data)
        }
 
        /* If previous data is not updated, new data is not required */
-       if (ad->data_statistics.is_updated == false) {
+       if (ad->data_statistics.is_updated == false)
                return ECORE_CALLBACK_RENEW;
-       }
 
        /* Because previous data is updated, new data is required.
           It will be returned asynchronously. */
@@ -175,9 +172,9 @@ void _start_update_device_conn_time(mh_appdata_t *ad)
                return;
        }
 
-       if (ad->update_conn_time_handle) {
+       if (ad->update_conn_time_handle)
                _stop_update_device_conn_time(ad);
-       }
+
        ad->update_conn_time_handle = ecore_timer_add(UPDATE_INTERVAL,
                        ap_update_device_conn_time, (void *)ad);
 
@@ -210,9 +207,8 @@ void _start_update_data_packet_usage(mh_appdata_t *ad)
                return;
        }
 
-       if (ad->update_statistics_handle) {
+       if (ad->update_statistics_handle)
                _stop_update_data_packet_usage(ad);
-       }
 
        ad->data_statistics.is_updated = false;
        tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
@@ -288,16 +284,16 @@ static void __read_setting(mh_appdata_t *ad)
        free(passphrase);
 
        ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
-       if (ret != TETHERING_ERROR_NONE) {
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_ssid_visibility is failed\n");
-       }
+
        ad->setup.visibility = visibility;
        ad->setup.visibility_new = visibility;
 
        ret = tethering_wifi_get_security_type(ad->handle, &type);
-       if (ret != TETHERING_ERROR_NONE) {
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_security_type is failed\n");
-       }
+
        ad->setup.security_type = type;
        ad->setup.security_type_new = type;
 
@@ -308,9 +304,8 @@ void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.wifi_state == wifi_state) {
+       if (ad->main.wifi_state == wifi_state)
                return;
-       }
 
        if (ad->main.wifi_state == MH_STATE_PROCESS) {
                ad->main.wifi_state = MH_STATE_NONE;
@@ -335,9 +330,8 @@ void _update_bt_item(mh_appdata_t *ad, int bt_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.bt_state == bt_state) {
+       if (ad->main.bt_state == bt_state)
                return;
-       }
 
        if (ad->main.bt_state == MH_STATE_PROCESS) {
                ad->main.bt_state = MH_STATE_NONE;
@@ -359,9 +353,8 @@ void _update_usb_item(mh_appdata_t *ad, int usb_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.usb_state == usb_state) {
+       if (ad->main.usb_state == usb_state)
                return;
-       }
 
        if (ad->main.usb_state == MH_STATE_PROCESS) {
                ad->main.usb_state = MH_STATE_NONE;
@@ -407,9 +400,8 @@ void _genlist_update_device_item(mh_appdata_t *ad)
                ad->main.device_item = item;
        }
 
-       if (ad->connected_device.navi_it) {
+       if (ad->connected_device.navi_it)
                _update_conn_clients(ad);
-       }
 
        __MOBILE_AP_FUNC_EXIT__;
        return;
@@ -536,13 +528,11 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
                        _update_wifi_item(ad, MH_STATE_NONE);
                } else {
                        obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
-                       if (obj != NULL) {
+                       if (obj != NULL)
                                elm_check_state_set(obj, wifi_state);
-                       }
 
-                       if (ad->main.wifi_item) {
+                       if (ad->main.wifi_item)
                                elm_genlist_item_update(ad->main.wifi_item);
-                       }
                }
                break;
 
@@ -552,13 +542,11 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
                        _update_bt_item(ad, MH_STATE_NONE);
                } else {
                        obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
-                       if (obj != NULL) {
+                       if (obj != NULL)
                                elm_check_state_set(obj, bt_state);
-                       }
 
-                       if (ad->main.bt_item) {
+                       if (ad->main.bt_item)
                                elm_genlist_item_update(ad->main.bt_item);
-                       }
                }
                break;
 
@@ -586,11 +574,57 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
        return;
 }
 
+static int __is_allowed(tethering_type_e type)
+{
+       int state = 0;
+       dpm_context_h context = NULL;
+       dpm_restriction_policy_h policy = NULL;
+
+       context = dpm_context_create();
+       if (context == NULL) {
+               ERR("Failed to create dpm context!!");
+               return 0;
+       }
+
+       policy = dpm_context_acquire_restriction_policy(context);
+       if (policy == NULL) {
+               ERR("Failed to create policy handle");
+               dpm_context_destroy(context);
+               return 0;
+       }
+
+       switch(type) {
+               case TETHERING_TYPE_WIFI:
+                       dpm_restriction_get_wifi_hotspot_state(policy, &state);
+                       break;
+               case TETHERING_TYPE_USB:
+                       dpm_restriction_get_usb_tethering_state(policy, &state);
+                       break;
+               case TETHERING_TYPE_BT:
+                       dpm_restriction_get_bluetooth_tethering_state(policy, &state);
+                       break;
+               default:
+                       break;
+       }
+
+       dpm_context_release_restriction_policy(context, policy);
+       dpm_context_destroy(context);
+
+       return state;
+}
+
 static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
                                                        void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       if (!__is_allowed(TETHERING_TYPE_WIFI)) {
+               ERR("Wi-Fi tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_WIFI);
+               return;
+       }
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
@@ -634,6 +668,13 @@ static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       if (!__is_allowed(TETHERING_TYPE_BT)) {
+               ERR("BT tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_BT);
+               return;
+       }
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
@@ -682,6 +723,13 @@ static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_inf
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       if (!__is_allowed(TETHERING_TYPE_USB)) {
+               ERR("USB tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_USB);
+               return;
+       }
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
@@ -746,9 +794,8 @@ static void  __back_btn_cb(void *data, Elm_Object_Item *navi_item)
 
 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp("elm.text", part))
                return strdup(STR_WIFI_TETH);
-       }
 
        return NULL;
 }
@@ -758,8 +805,6 @@ static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
 {
        mh_appdata_t *ad = (mh_appdata_t*)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -767,35 +812,30 @@ static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.wifi_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        elm_object_style_set(btn, "on&off");
-                       evas_object_show(btn);
 
-                       evas_object_pass_events_set(btn, EINA_TRUE);
                        evas_object_propagate_events_set(btn, EINA_FALSE);
+                       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
                        elm_check_state_set(btn, ad->main.hotspot_mode &
                                VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ? EINA_TRUE : EINA_FALSE);
 
                        evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
+                       evas_object_show(btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp("elm.text", part))
                return strdup(STR_BLUETOOTH_TETH);
-       }
 
        return NULL;
 }
@@ -804,8 +844,6 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
 {
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -813,12 +851,8 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.bt_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        if (btn == NULL) {
@@ -832,18 +866,16 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
                                VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
                        evas_object_show(btn);
                        evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb, ad);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp("elm.text", part))
                return strdup(STR_USB_TETH);
-       }
 
        return NULL;
 }
@@ -853,8 +885,6 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
 {
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -862,12 +892,8 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.usb_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        if (btn == NULL) {
@@ -881,11 +907,10 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
                                VCONFKEY_MOBILE_HOTSPOT_MODE_USB ? EINA_TRUE : EINA_FALSE);
                        evas_object_show(btn);
                        evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb, ad);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
@@ -895,6 +920,7 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
        char device_name[MH_LABEL_LENGTH_MAX] = {0, };
        char passphrase[MH_LABEL_LENGTH_MAX] = {0, };
        char security_type[MH_LABEL_LENGTH_MAX] = {0, };
+       char *fmt = STR_SECURITY_TYPE_PS;
        char *hidden = "";
        char *ptr = NULL;
        char *device_name_utf = NULL;
@@ -936,7 +962,7 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
                        g_free(ptr);
 
                        snprintf(security_type, sizeof(security_type),
-                                       STR_SECURITY_TYPE_PS, "WPA2 PSK");
+                                       fmt, "WPA2 PSK");
                }
 
                wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
@@ -1421,16 +1447,16 @@ static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
        pos = elm_win_rotation_get(ad->win);
 
        switch (pos) {
-               case 0:
-               case 180:
-                       evas_object_move(ctx, w/2, h);
-                       break;
-               case 90:
-                       evas_object_move(ctx, h/2, w);
-                       break;
-               case 270:
-                       evas_object_move(ctx, h/2, w);
-                       break;
+       case 0:
+       case 180:
+               evas_object_move(ctx, w/2, h);
+               break;
+       case 90:
+               evas_object_move(ctx, h/2, w);
+               break;
+       case 270:
+               evas_object_move(ctx, h/2, w);
+               break;
        }
        __MOBILE_AP_FUNC_EXIT__;
 }
@@ -1516,9 +1542,8 @@ static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
        }
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->setup.navi_it == NULL) {
+       if (ad->setup.navi_it == NULL)
                return;
-       }
 
        elm_naviframe_item_pop_cb_set(ad->setup.navi_it, _setting_back_btn_cb, (void *)ad);
        ctxpopup = elm_ctxpopup_add(ad->naviframe);