setting_view sm_view_data_usage_mobile;
+static const char date_format[] = "%a, %d/%m/%Y";
+
static const char* data_usage_mobile_strings[] = {
"Data usage settings",
"Set data usage cycle"
ELEMENT_TYPE_INFO
} Element_Type_E;
+typedef enum {
+ DATE_MIN = 0,
+ DATE_MAX,
+} margin_date_type;
+
typedef struct {
SmartMgrData *smd;
Evas_Object *popup;
void complement_data_usage_mobile_genlist(Evas_Object *mobile_genlist, SmartMgrData *smd)
{
int i = 0;
-
Elm_Genlist_Item_Class *itc_genlist_element = NULL;
Elm_Genlist_Item_Class *itc_genlist_last_element = NULL;
Elm_Object_Item *last_item = NULL;
return box;
}
+Evas_Object *_create_datetime(Evas_Object *parent, time_t start_date)
+{
+ SETTING_TRACE_BEGIN;
+ Evas_Object *datetime = elm_datetime_add(parent);
+ elm_object_style_set(datetime, "date_layout");
+ elm_datetime_format_set(datetime, "%d/%b/%Y");
+ elm_datetime_value_set(datetime, (Elm_Datetime_Time *)localtime(&start_date));
+ elm_object_content_set(parent, datetime);
+
+ evas_object_show(datetime);
+
+ SETTING_TRACE_END;
+ return datetime;
+}
+
Evas_Object *_create_popup(SmartMgrData *smd, char *title)
{
SETTING_TRACE_BEGIN;
int days)
{
char buf[256] = {0};
+ SETTING_TRACE_BEGIN;
Evas_Object *popup = _create_popup(smd, title);
Evas_Object *box = _create_box(popup);
Evas_Object *entry = _create_entry(box, ELEMENT_TYPE_CYCLE);
evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
_custom_cycle_popup_del_cb, cycle_start_popup_data);
evas_object_show(popup);
+ SETTING_TRACE_END;
+}
+
+static void _custom_start_date_popup_cancel_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ Evas_Object *popup = (Evas_Object *)data;
+ evas_object_del(popup);
+ SETTING_TRACE_END;
+}
+
+static struct tm _get_margin_date(margin_date_type date_type)
+{
+ time_t now = {0};
+ struct tm time_tm = {0};
+ time(&now);
+ time_tm = *localtime(&now);
+ if (date_type == DATE_MIN) {
+ time_tm.tm_mon -= 3;
+ time_tm.tm_hour = 0;
+ time_tm.tm_min = 0;
+ time_tm.tm_sec = 0;
+ mktime(&time_tm);
+ }
+
+ return time_tm;
+}
+
+static void _custom_start_date_popup_ok_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+ char buf[256] = {0};
+ char margin_date_buf[256] = {0};
+ time_t set_date = 0;
+ struct tm set_date_tm = {0};
+ struct tm min_date = {0};
+ struct tm max_date = {0};
+ Cycle_Start_Popup_Data_T *cycle_start_popup_data = (Cycle_Start_Popup_Data_T *)data;
+
+ elm_datetime_value_get(cycle_start_popup_data->content, (Elm_Datetime_Time *)&set_date_tm);
+ set_date = mktime(&set_date_tm);
+ min_date = _get_margin_date(DATE_MIN);
+ max_date = _get_margin_date(DATE_MAX);
+
+ if (set_date < mktime(&min_date)) {
+ strftime(margin_date_buf, sizeof(margin_date_buf), date_format, &min_date);
+ snprintf(buf, sizeof(buf), "Start date can't be before %s. Start date changed to %s.", margin_date_buf, margin_date_buf);
+ create_toast_popup(cycle_start_popup_data->popup, buf);
+ cycle_start_popup_data->smd->sim_1_limits.cycle_start = mktime(&min_date);
+ elm_datetime_value_set(cycle_start_popup_data->content, (Elm_Datetime_Time *)&min_date);
+ } else if (set_date > mktime(&max_date)) {
+ strftime(margin_date_buf, sizeof(margin_date_buf), date_format, &max_date);
+ snprintf(buf, sizeof(buf), "Start date can't be after %s. Start date changed to current date.", margin_date_buf);
+ create_toast_popup(cycle_start_popup_data->popup, buf);
+ cycle_start_popup_data->smd->sim_1_limits.cycle_start = mktime(&max_date);
+ elm_datetime_value_set(cycle_start_popup_data->content, (Elm_Datetime_Time *)&max_date);
+ } else {
+ cycle_start_popup_data->smd->sim_1_limits.cycle_start = set_date;
+ complement_data_usage_mobile_genlist(cycle_start_popup_data->smd->mobile_data_setting_genlist, cycle_start_popup_data->smd);
+ evas_object_del(cycle_start_popup_data->popup);
+ }
+
+ SETTING_TRACE_END;
+}
+
+static void _custom_start_date_popup_del_cb(void *data, Evas *e, Evas_Object *obj,
+ void *event_info)
+{
+ SETTING_TRACE_BEGIN;
+
+ Cycle_Start_Popup_Data_T *cycle_start_popup_data =
+ (Cycle_Start_Popup_Data_T *)data;
+
+ free(cycle_start_popup_data);
+
+ SETTING_TRACE_END;
+}
+
+static void create_custom_start_date_popup(SmartMgrData *smd, char *title,
+ int time)
+{
+ SETTING_TRACE_BEGIN;
+ Cycle_Start_Popup_Data_T *cycle_start_popup_data = calloc(1, sizeof(Cycle_Start_Popup_Data_T));
+ ret_if(!cycle_start_popup_data);
+
+ Evas_Object *popup = _create_popup(smd, title);
+ Evas_Object *box = _create_box(popup);
+ Evas_Object *datetime = _create_datetime(box, (time_t)time);
+ elm_box_pack_end(box, datetime);
+
+ cycle_start_popup_data->smd = smd;
+ cycle_start_popup_data->popup = popup;
+ cycle_start_popup_data->content = datetime;
+
+ _create_popup_button(cycle_start_popup_data->popup, "button1", "Cancel", EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND, _custom_start_date_popup_cancel_cb, popup);
+ _create_popup_button(cycle_start_popup_data->popup, "button2", "Done", EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND, _custom_start_date_popup_ok_cb,
+ cycle_start_popup_data);
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
+ _custom_start_date_popup_del_cb, cycle_start_popup_data);
+
+ evas_object_show(popup);
+ SETTING_TRACE_END;
}
static bool _create_limit_popup(SmartMgrData *smd, char *title, Element_Type_E type)
free(elements[ELEMENT_TYPE_CYCLE].value);
- if (smd->sim_1_limits.custom_mode_interval) {
+ if (smd->sim_1_limits.custom_mode_interval && smd->sim_1_limits.cycle_mode == CYCLE_MODE_CUSTOM) {
snprintf(buf, sizeof(buf), "%d Days", smd->sim_1_limits.custom_mode_interval);
elements[ELEMENT_TYPE_CYCLE].value = strdup(buf);
} else {
SETTING_TRACE_BEGIN;
char buf[256] = {0};
+ struct tm min_date = {0};
+
free(elements[ELEMENT_TYPE_START_DATE].value);
if (elements_start_time_initial_values[smd->sim_1_limits.cycle_mode-1]) {
- if (smd->sim_1_limits.cycle_start > 0) {
+ if (smd->sim_1_limits.cycle_start > 1) {
if (smd->sim_1_limits.cycle_mode == CYCLE_MODE_MONTHLY) {
snprintf(buf, sizeof(buf), "%d", smd->sim_1_limits.cycle_start);
elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
} else if (smd->sim_1_limits.cycle_mode == CYCLE_MODE_WEEKLY) {
elements[ELEMENT_TYPE_START_DATE].value =
strdup(elements_cycle_day_of_week[smd->sim_1_limits.cycle_start-1]);
- } else {
- elements[ELEMENT_TYPE_START_DATE].value = strdup(elements_start_time_initial_values[smd->sim_1_limits.cycle_mode-1]);
+ } else if (smd->sim_1_limits.cycle_mode == CYCLE_MODE_CUSTOM) {
+ struct tm *time = localtime((time_t*)&smd->sim_1_limits.cycle_start);
+ strftime(buf, sizeof(buf), date_format, time);
+ elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_START_DATE].value);
}
} else {
- elements[ELEMENT_TYPE_START_DATE].value = strdup(elements_start_time_initial_values[smd->sim_1_limits.cycle_mode-1]);
- SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_START_DATE].value);
+ if (smd->sim_1_limits.cycle_mode == CYCLE_MODE_CUSTOM) {
+ min_date = _get_margin_date(DATE_MIN);
+ smd->sim_1_limits.cycle_start = (int)mktime(&min_date);
+ strftime(buf, sizeof(buf), date_format, &min_date);
+ elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
+ SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_START_DATE].value);
+ } else {
+ elements[ELEMENT_TYPE_START_DATE].value = strdup(elements_start_time_initial_values[smd->sim_1_limits.cycle_mode-1]);
+ }
}
-
- SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_START_DATE].value);
} else {
elements[ELEMENT_TYPE_START_DATE].value = NULL;
}
- SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_START_DATE].value);
elm_genlist_realized_items_update(smd->mobile_data_setting_genlist);
SETTING_TRACE_END;
_create_list_popup(smd, "Select start day", ELEMENT_TYPE_START_DATE);
break;
case CYCLE_MODE_DAILY:
-
break;
case CYCLE_MODE_CUSTOM:
-
+ create_custom_start_date_popup(smd, "Select start date", smd->sim_1_limits.cycle_start);
break;
default:
break;