#include "data/system/settings_clock.h"
#include "app_string.h"
+
+#define DEFAULT_KEYPAD_POS 636
+#define PADDING_VKEYBOARD 30
+
+
+
enum setup_type {
TYPE_MANUAL = 0,
TYPE_AUTO,
typedef struct {
Evas_Object *win;
Evas_Object *base;
+ Evas_Object *conformant;
Evas_Object *done;
Evas_Object *cancel;
Evas_Object *auto_manual_setup_btn;
Evas_Object *check_24;
Evas_Object *time_part;
enum setup_type cur_type;
+
+ /* store input panel state */
+ bool input_panel_show;
+ Evas_Object *focused_entry;
+
} clock_view_priv_data;
enum input_handler_type {
/* When auto/manual setup dropdown is active, focus should be only on it*/
static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
+
+
+static void _dt_focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+ SETTING_TRACE_BEGIN
+ clock_view_priv_data *priv = data;
+ if (!priv)
+ return;
+
+ priv->focused_entry = obj;
+ /* To prevent hiding virtual keyboard
+ * when user input ip address in sequence */
+ priv->input_panel_show = true;
+}
+
+static void _dt_unfocused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+ SETTING_TRACE_BEGIN
+ clock_view_priv_data *priv = data;
+ if (!priv)
+ return;
+}
+
+
+static bool display_status = false;
+
+static void _keypad_down_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN
+ clock_view_priv_data *priv = data;
+ Evas_Coord x, y, w, h;
+ Evas_Coord entry_y, entry_h;
+
+ if (!priv) {
+ _ERR("invalid data");
+ return;
+ }
+
+ if (priv->input_panel_show && display_status) {
+ evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+ evas_object_move(priv->base, x, 0);
+
+ display_status = false;
+ } else if (priv->input_panel_show == false && display_status) {
+ evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+ evas_object_move(priv->base, x, 0);
+
+ display_status = false;
+ }
+ display_status = false;
+}
+
+static void _keypad_up_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ SETTING_TRACE_BEGIN
+ clock_view_priv_data *priv = data;
+ Evas_Coord x, y, w, h;
+ Evas_Coord entry_y, entry_h;
+
+ if (!priv) {
+ _ERR("invalid data");
+ return;
+ }
+
+ if (priv->input_panel_show && display_status == false) {
+ evas_object_geometry_get(priv->focused_entry, &x, &entry_y, &w, &entry_h);
+ evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+
+ if (entry_y + entry_h >= (DEFAULT_KEYPAD_POS)) {
+ Evas_Coord moved_height;
+ moved_height = (DEFAULT_KEYPAD_POS - PADDING_VKEYBOARD)
+ - (entry_y + entry_h);
+ evas_object_move(priv->base, x, moved_height);
+ } else {
+ evas_object_move(priv->base, x, 0);
+ }
+ } else if (priv->input_panel_show && display_status) {
+ evas_object_geometry_get(priv->focused_entry, &x, &entry_y, &w, &entry_h);
+ evas_object_geometry_get(priv->base, &x, &y, &w, &h);
+
+ /* If virtual keyboard is already displayed,
+ * entry height need to be compensated. */
+ if (entry_y - y + entry_h >= (DEFAULT_KEYPAD_POS)) {
+ Evas_Coord moved_height;
+ moved_height = (DEFAULT_KEYPAD_POS - PADDING_VKEYBOARD)
+ - (entry_y - y + entry_h);
+ evas_object_move(priv->base, x, moved_height);
+ } else {
+ evas_object_move(priv->base, x, 0);
+ }
+ }
+
+ display_status = true;
+
+}
+
+
+
static input_handler _auto_manual_setup_input_handler = {
.mouse_move = _auto_manual_mouse_move_cb,
.key_down = _auto_manual_setup_key_down_cb,
};
static input_handler date_time_handler = {
- .key_down = _any_item_back_key_down_cb
+ .key_down = _any_item_back_key_down_cb,
+ .focused = _dt_focused_cb,
+ .unfocused = _dt_unfocused_cb
};
static void _destroy_setup_type_popup(clock_view_priv_data *priv)
static bool _add_clock_setting(clock_view_priv_data *priv)
{
+ SETTING_TRACE_BEGIN
+
Evas_Object *done = NULL;
Evas_Object *cancel = NULL;
inputmgr_add_callback(priv->date_part, INPUT_HANDLER_TYPE_DATE_TIME, &date_time_handler, priv);
inputmgr_add_callback(priv->time_part, INPUT_HANDLER_TYPE_DATE_TIME, &date_time_handler, priv);
+
return true;
}
{
SETTING_TRACE_BEGIN;
clock_view_priv_data *priv = NULL;
+ Evas_Object *conformant = NULL;
Evas_Object *base = NULL;
if (!win) {
return NULL;
}
+ elm_win_conformant_set(win, EINA_TRUE);
+ conformant = elm_conformant_add(win);
+ if (!conformant) {
+ _ERR("Adding conformant failed.");
+ return NULL;
+ }
+/*
+ evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, conformant);
+*/
priv = (clock_view_priv_data *)calloc(1, sizeof(clock_view_priv_data));
if (!priv) {
_ERR("Calloc failed.");
priv->win = win;
priv->base = base;
+ priv->conformant = conformant;
+
+/*
+ elm_object_content_set(conformant, priv->base);
+ evas_object_show(conformant);
+*/
+ evas_object_smart_callback_add(priv->conformant, "virtualkeypad,state,on", _keypad_up_cb, priv);
+ evas_object_smart_callback_add(priv->conformant, "virtualkeypad,state,off", _keypad_down_cb, priv);
+
if (!_add_clock_setting(priv)) {
_ERR("failed to add clock setting layout");
return NULL;
}
+
+
if (!viewmgr_set_view_data(VIEW_CLOCK, priv)) {
_ERR("Set view data failed.");
evas_object_del(base);
_ERR("Get data failed.");
return;
}
-
priv = (clock_view_priv_data *)data;
+
+
+ evas_object_smart_callback_del(priv->conformant, "virtualkeypad,state,on", _keypad_up_cb);
+ evas_object_smart_callback_del(priv->conformant, "virtualkeypad,state,off", _keypad_down_cb);
+
+
evas_object_del(priv->base);
free(priv);
}
if (priv && priv->setup_type_popup)
elm_object_focus_set(priv->setup_type_popup, EINA_TRUE);
}
+
+
+
+