#include <bundle.h>
#include <efl_extension.h>
#include <system_settings.h>
+#include <elm_theme.h>
#include "apptray_wgt_app_item_info.h"
#include "apptray_wgt_app_key.h"
#include "apptray_wgt_app_log.h"
#include "apptray_wgt_app_utils.h"
#include "apptray_wgt_app_common_def.h"
+#include "apptray_wgt_app_accessibility_utils.h"
-#define DEFAULT_APP_ORDER "org.tizen.apptray-widget-app org.tizen.watch-setting empty empty"
+#define DEFAULT_APP_ORDER "org.tizen.apptray-widget-app org.tizen.watch-setting empty empty"
-#define APP_WIDGET_CONTENT_KEY "org.tizen.apptray-widget"
+#define APP_WIDGET_CONTENT_KEY "org.tizen.apptray-widget"
-#define BUNDLE_KEY_SHORTCUT_LIST "shortcut_list"
-#define BUNDLE_KEY_WIDGET_INSTANCE_ID "instance_id"
+#define BUNDLE_KEY_SHORTCUT_LIST "shortcut_list"
+#define BUNDLE_KEY_WIDGET_INSTANCE_ID "instance_id"
-#define APP_SLOTS_MAX_COUNT 4
-#define GENLIST_ITEM_ICON_DIMENTION 76
+#define APP_SLOTS_MAX_COUNT 4
+#define GENLIST_ITEM_ICON_DIMENSION 76
-#define SLOT_ITEM_MOVE_THRESHOLD 50
-#define SLOT_ITEM_DIMENSION 110
-#define SLOT_ITEM_SET_POS_THRESHOLD (SLOT_ITEM_DIMENSION - SLOT_ITEM_MOVE_THRESHOLD)
+#define SLOT_ITEM_MOVE_THRESHOLD 50
+#define SLOT_ITEM_DIMENSION 110
+#define SLOT_ITEM_SET_POS_THRESHOLD (SLOT_ITEM_DIMENSION - SLOT_ITEM_MOVE_THRESHOLD)
#define SLOT_ITEM_MOVE_THRESHOLD_VIS_X 80
#define SLOT_ITEM_MOVE_THRESHOLD_VIS_Y 100
+#define CLICK_BLOCKER_TIMER_DURATION 0.1
+
+/* TODO: need replace it with IDS strings */
+#define AO_STRING_WIN_NAME "Apps Shortcut"
+#define AO_STRING_WIDGET_NAME AO_STRING_WIN_NAME" Widget"
+#define AO_STRING_WDIT_INSTRUCTION_NAME "Edit %s. Rotate bazel to navigate for editing."
+#define AO_STRING_UPSIDE "Upside"
+#define AO_STRING_LEFTSIDE "Leftside"
+#define AO_STRING_RIGHTSIDE "Rightside"
+#define AO_STRING_BOTTOMSIDE "Bottomside"
+#define AO_STRING_DOUBLE_TAP_TO_ADD "Double tap to add"
+#define AO_STRING_DOUBLE_TAP_TO_REMOVE "Double tap to remove"
+#define AO_STRING_EMPTY "Empty"
+
static Elm_Genlist_Item_Class header_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
static bool header_itc_inited = false;
Evas_Object *select_win;
Evas_Object *select_conform;
Eext_Circle_Surface *select_circle_surf;
+ Evas_Object *circle_genlist;
Evas_Object *select_layout;
Evas_Object *select_gl;
Evas_Object *select_count_btn;
int select_count;
Evas_Object *scroller;
- Evas_Object *title;
char *widget_instance_id;
_apptray_wgt_launch_type_e launch_type;
Eina_List *all_app_list;
char *appid_list[APP_SLOTS_MAX_COUNT];
Evas_Object *toast_popup;
+
+ Evas_Object *ao_first;
+ Evas_Object *ao_edit_ly;
} appdata_s;
-char *widget_id = NULL;
int slot_index = 0;
int pressed_index = 0;
int dst_index = 0;
Eina_Bool longpress_flag = EINA_FALSE;
Eina_Bool launch_flag = EINA_TRUE;
Eina_Bool transit_go = EINA_FALSE;
-Ecore_Timer *longpress_timer;
-int empty_count = 0;
+Ecore_Timer *longpress_timer = NULL;
+Ecore_Timer *click_blocker_timer = NULL;
static appdata_s *g_info = NULL;
static Eina_Bool _longpress_timer_cb(void *data);
static void _render_post_cb(void *data, Evas *e , void *event_info);
-static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _app_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _plus_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void _transit_del_cb(void *data, Elm_Transit *transit);
static void _anim_switch_item(Evas_Object *item, int src, int dst);
+
+static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _create_edit_layout(appdata_s *info);
+
+static void _del_btn_click_cb(void *data, Evas_Object *obj, void *event_info);
+
static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
static Elm_Genlist_Item_Class *_get_gl_itc_header();
static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
+
static void _toast_popup_hide_cb(void *data, Evas_Object *obj, void *event_info);
static void _toast_popup_dismiss_cb(void *data, Evas_Object *obj, void *event_info);
static void _create_toast_popup(const char *text);
+
static void _gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void _cont_item_del_cb(void *data, Evas_Object *obj);
static Elm_Genlist_Item_Class *_get_gl_itc_content();
static Elm_Genlist_Item_Class *_get_gl_itc_empty();
-static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info);
-static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info);
+
static void _gl_add_header_item(Evas_Object *gl);
static bool _check_already_added_apps(const char *appid);
static void _gl_item_clicked_cb(void *data, Evas_Object *obj, void *event_info);
static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info);
static void _gl_add_empty_item(Evas_Object *gl);
-static Evas_Object *_create_bottom_btn_ly(appdata_s *info);
static void _bottom_btn_click_cb(void *data, Evas_Object *obj, void *event_info);
-static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info);
-static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info);
-static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info);
-static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info);
-static void _create_select_view(appdata_s *info);
Evas_Object *_set_app_slot(const char *appid, int pos);
+static Eina_Bool _click_blocker_timer_cb(void *data);
static int _apps_sort_cb(const void *d1, const void *d2);
static int _apps_all_cb(pkgmgrinfo_appinfo_h handle, void *user_data);
static Eina_List *_read_all_apps(Eina_List **list);
static Eina_Bool _load_list(void* data);
-static void _process_pick_operation(appdata_s *info, app_control_h service);
-static void _process_main_operation(appdata_s *info, app_control_h service, const char *app_list);
-static bool _create_edit_window(appdata_s *info, const char *name, const char *title);
-static Evas_Object *_create_conformant_without_indicator(Evas_Object *win);
-static bool _create_select_window(appdata_s *info, const char *name, const char *title);
+/* Select View */
+static bool _create_select_view_window(appdata_s *info, const char *name, const char *title);
+static Evas_Object *_select_view_create_conformant(Evas_Object *win);
+static void _create_select_view(appdata_s *info);
+static Evas_Object *_select_view_create_bottom_btn(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_select_view_create_genlist_ly(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_select_view_create_pick_genlist(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_select_view_create_select_count_btn(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_select_view_create_simple_genlist(Evas_Object *parent, appdata_s *info);
+static void _select_view_set_genlist_content(Evas_Object *genlist, appdata_s *info);
+static Evas_Object *_select_view_create_bottom_btn_ly(appdata_s *info);
+static void _select_view_update_apps_label(appdata_s *ad);
+
+/* Edit View */
+static bool _create_edit_view_window(appdata_s *info, const char *name, const char *title);
+static Evas_Object *_edit_view_create_layout(appdata_s *info);
+static void _edit_view_init_slots(const char *app_list);
+static Evas_Object *_edit_view_create_slot_ly(Evas_Object *parent);
+static Evas_Object *_edit_view_create_slot_app_btn(Evas_Object *parent);
+static Evas_Object *_edit_view_create_slot_app_btn_icon(Evas_Object *parent, const char *image_path);
+static Evas_Object *_edit_view_create_slot_app_btn_del_ly(Evas_Object *parent);
+static Evas_Object *_edit_view_create_slot_empty_btn(Evas_Object *parent);
+static int _edit_view_get_slot_index_by_pointer(Evas_Object *slot);
+static void _edit_view_replace_slot_with_empty(Evas_Object *slot);
+
+/* Accessibility */
+static void _edit_view_init_ly_access_data(appdata_s *info);
+static void _edit_view_create_ly_access_obj(appdata_s *info);
+static void _edit_view_update_ly_access_info();
+static const char *_edit_view_get_slot_position_text(int index);
+static void _edit_view_update_slots_access_info();
+static void _edit_view_set_access_rout();
+static void _edit_view_unset_access_rout();
+static void _unset_access_for_window(Evas_Object *win);
+
+/* App Lifecycle */
static bool _app_create(void *data);
static void _app_terminate(void *data);
static void _app_pause(void *data);
static void _app_resume(void *data);
static void _app_control(app_control_h service, void *data);
static void _app_lang_changed(app_event_info_h event_info, void *user_data);
+static void _app_process_pick_operation(appdata_s *info, app_control_h service);
+static void _app_process_main_operation(appdata_s *info, app_control_h service, const char *app_list);
+
+static void _set_select_window_active_state(bool is_active);
static char *strdup_s(const char *val)
{
Evas_Object *item = NULL;
char buff[BUF_SIZE_NORMAL] = { 0 };
+ _edit_view_unset_access_rout();
+
snprintf(buff, sizeof(buff), "index%d", pressed_index);
item = elm_object_part_content_unset(g_info->edit_layout, buff);
elm_object_signal_emit(item, "hide", "slot");
elm_object_signal_emit(slot, "show_vi", "slot");
}
-static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+static void _app_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
- _D("plus clicked");
_ENTER;
- if (launch_flag == EINA_FALSE) {
- launch_flag = EINA_TRUE;
+
+ int pos;
+
+ if (!launch_flag) {
+ _D("Ignore");
return;
}
- slot_index = dst_index - 1;
- _D("index:%d", slot_index);
- evas_object_show(g_info->select_win);
+
+ pos = _edit_view_get_slot_index_by_pointer(data);
+
+ _edit_view_unset_access_rout();
+
+ _edit_view_replace_slot_with_empty(data);
+
+ _update_content();
+
+ _edit_view_update_slots_access_info();
+
+ _edit_view_set_access_rout();
+
+ char buff[BUF_SIZE_NORMAL] = { 0 };
+ snprintf(buff, sizeof(buff), "index%d", pos);
+ elm_atspi_component_highlight_grab(
+ elm_object_part_content_get(
+ elm_object_part_content_get(g_info->edit_layout, buff), "icon"));
}
-static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+static int _edit_view_get_slot_index_by_pointer(Evas_Object *slot)
{
- _ENTER;
- _D("del mouse down");
- elm_object_signal_emit((Evas_Object *)data, "pressed", "slot");
+ int i = 0;
+ for (; i < APP_SLOTS_MAX_COUNT; i++) {
+ char buff[BUF_SIZE_SMALL] = { 0 };
+ snprintf(buff, sizeof(buff), "index%d", i+1);
+ if (slot == elm_object_part_content_get(g_info->edit_layout, buff)) {
+ return i+1;
+ }
+ }
+ return 0;
+}
+
+static void _set_select_window_active_state(bool is_active)
+{
+ if (is_active) {
+ evas_object_show(g_info->select_win);
+ eext_rotary_object_event_activated_set(g_info->edit_layout, EINA_FALSE);
+ eext_rotary_object_event_activated_set(g_info->circle_genlist, EINA_TRUE);
+ } else {
+ evas_object_hide(g_info->select_win);
+ eext_rotary_object_event_activated_set(g_info->circle_genlist, EINA_FALSE);
+ eext_rotary_object_event_activated_set(g_info->edit_layout, EINA_TRUE);
+ }
}
-static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+static void _plus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
+ _D("plus clicked");
_ENTER;
- _D("del mouse up");
- elm_object_signal_emit((Evas_Object *)data, "released", "slot");
+
+ if (!launch_flag) {
+ _D("Ignore");
+ return;
+ }
+
+ slot_index = _edit_view_get_slot_index_by_pointer((Evas_Object *)data) - 1;
+ _D("index:%d", slot_index);
+
+ _set_select_window_active_state(true);
}
-static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+static void _edit_view_replace_slot_with_empty(Evas_Object *slot)
{
_ENTER;
_D("del mouse clicked");
- char index[BUF_SIZE_SMALL] = {0};
- Evas_Object *slot = NULL;
- int ret = 0;
- Evas_Coord x, y, w, h;
+ char index[BUF_SIZE_SMALL] = { 0 };
+ Evas_Object *eo = NULL;
int pos = 0;
if (transit_go) {
return;
}
- evas_object_geometry_get((Evas_Object *)data, &x, &y, &w, &h);
- _D("X:%d,y:%d,w:%d,h:%d",x,y,w,h);
-
- if ((123 <= x && x <= 126) && (18 <= y && y <= 22)) {
- pos = 1;
- } else if ((13 <= x && x <= 17) && (115 <= y && y <= 119)) {
- pos = 2;
- } else if ((233 <= x && x <= 237) && (115 <= y && y <= 119)) {
- pos = 3;
- } else if ((123 <= x && x <= 127) && (215 <= y && y <= 219)) {
- pos = 4;
- } else {
- _E("can't reach here.");
- return;
- }
+ pos = _edit_view_get_slot_index_by_pointer(slot);
- snprintf(index, sizeof(index)-1, "index%d", pos);
+ snprintf(index, sizeof(index), "index%d", pos);
_D("%s", index);
slot_index = pos - 1;
- slot = elm_object_part_content_unset(g_info->edit_layout, index);
- if (slot) {
- evas_object_del(slot);
- slot = NULL;
- }
+ eo = elm_object_part_content_unset(g_info->edit_layout, index);
+ DEL_EVAS_OBJECT(eo);
+
+ _set_app_slot("empty", pos - 1);
+}
+
+static void _del_btn_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _ENTER;
+ _D("del mouse clicked");
+
+ _edit_view_unset_access_rout();
+
+ _edit_view_replace_slot_with_empty(data);
- slot = elm_layout_add(g_info->edit_layout);
- ret = elm_layout_file_set(slot, EDJE_PATH, "empty_slot");
- if (ret == EINA_FALSE) {
- _E("failed to set empty slot");
- return;
- }
- evas_object_size_hint_weight_set(slot, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, slot);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_UP, _up_cb, slot);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, &slot_index);
- elm_object_signal_callback_add(slot, "mouse_clicked", "*", _plus_mouse_clicked_cb, &slot_index);
- elm_object_part_content_set(g_info->edit_layout, index, slot);
- evas_object_show(slot);
- g_info->appid_list[slot_index] = strdup("empty");
- empty_count++;
_update_content();
+ _edit_view_update_slots_access_info();
+
+ _edit_view_set_access_rout();
}
static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_ENTER;
- Evas_Object *icon = NULL;
- Evas_Coord x,y,w,h;
- evas_object_geometry_get((Evas_Object *)data, &x, &y, &w, &h);
- _D("x:%d, y:%d, w:%d, h:%d",x,y,w,h);
if (transit_go) {
_E("transit is now processing");
return;
}
- if ((123 <= x && x <= 126) && (18 <= y && y <= 22)) {
- pressed_index = 1;
- dst_index = 1;
- } else if ((13 <= x && x <= 17) && (115 <= y && y <= 119)) {
- pressed_index = 2;
- dst_index = 2;
- } else if ((233 <= x && x <= 237) && (115 <= y && y <= 119)) {
- pressed_index = 3;
- dst_index = 3;
- } else if ((123 <= x && x <= 127) && (215 <= y && y <= 219)) {
- pressed_index = 4;
- dst_index = 4;
- } else {
- _E("can't reach here.");
- return;
- }
+ int tmp = _edit_view_get_slot_index_by_pointer((Evas_Object *)data);
+ pressed_index = tmp;
+ dst_index = tmp;
- icon = elm_object_part_content_get(obj, "icon");
- evas_object_color_set(icon, 255, 255, 255, 127);
- elm_object_signal_emit(obj, "pressed", "widget_plus");
- longpress_timer = ecore_timer_add(0.5, _longpress_timer_cb, obj);
+ elm_object_signal_emit(data, "hide_icon", "slot");
+ longpress_timer = ecore_timer_add(0.5, _longpress_timer_cb, data);
}
static void _transit_del_cb(void *data, Elm_Transit *transit)
{
_ENTER;
_D("transit end");
- char index[BUF_SIZE_SMALL] = {0};
+ char index[BUF_SIZE_SMALL] = { 0 };
snprintf(index, sizeof(index), "index%d", pressed_index);
elm_object_part_content_set(g_info->edit_layout, index, transit_obj);
pressed_index = (int)data;
const int eo_new_y = cur_y - SLOT_ITEM_MOVE_THRESHOLD_VIS_Y;
int i = 0;
- evas_object_move(obj, eo_new_x, eo_new_y);
+ evas_object_move(data, eo_new_x, eo_new_y);
for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
if ((eo_new_x > _slot_coords[i].x - SLOT_ITEM_SET_POS_THRESHOLD
&& eo_new_y < _slot_coords[i].y + SLOT_ITEM_SET_POS_THRESHOLD)) {
int slot_index = i + 1;
if (pressed_index != slot_index && !transit_go) {
- _D("Slot %d area", slot_index);
char *tmp = NULL;
char buff[BUF_SIZE_SMALL] = { 0 };
+ Evas_Object *item;
+
+ _D("Slot %d area", slot_index);
snprintf(buff, sizeof(buff), "index%d", slot_index);
- Evas_Object *item = elm_object_part_content_unset(g_info->edit_layout, buff);
+ item = elm_object_part_content_unset(g_info->edit_layout, buff);
_anim_switch_item(item, slot_index, pressed_index);
tmp = strdup(g_info->appid_list[pressed_index - 1]);
+
g_info->appid_list[pressed_index - 1] = strdup(g_info->appid_list[i]);
g_info->appid_list[i] = strdup(tmp);
+
FREE(tmp);
break;
}
}
}
+static Eina_Bool _click_blocker_timer_cb(void *data)
+{
+ _ENTER;
+
+ launch_flag = EINA_TRUE;
+ click_blocker_timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_ENTER;
Evas_Event_Mouse_Up *ev = event_info;
- Evas_Object *icon = NULL;
int cur_x, cur_y;
+ char index[BUF_SIZE_SMALL] = { 0 };
+
cur_x = ev->output.x;
cur_y = ev->output.y;
- _D("cur_x:%d,cur_y:%d",cur_x,cur_y);
- char index[BUF_SIZE_SMALL] = {0};
+
+ _D("cur_x:%d, cur_y:%d", cur_x, cur_y);
+
snprintf(index, sizeof(index), "index%d", dst_index);
- if (longpress_timer) {
- ecore_timer_del(longpress_timer);
- longpress_timer = NULL;
- }
- if (longpress_flag == EINA_TRUE) {
- longpress_flag = EINA_FALSE;
- elm_object_part_content_set(g_info->edit_layout, index, obj);
- launch_flag = EINA_FALSE;
- _D("dst index %d", dst_index);
+
+ DEL_ECORE_TIMER(longpress_timer);
+
+ if (longpress_flag) {
+ elm_object_part_content_set(g_info->edit_layout, index, data);
}
- icon = elm_object_part_content_get(obj, "icon");
- evas_object_color_set(icon, 255, 255, 255, 255);
- elm_object_signal_emit(obj, "released", "widget_plus");
- elm_object_signal_emit(obj, "show", "slot");
+
+ elm_object_signal_emit(data, "show", "slot");
+ elm_object_signal_emit(data, "show_icon", "slot");
elm_object_signal_emit(g_info->edit_layout, "hide_edit_stroke", "edit_layout");
_update_content();
+
+ _edit_view_update_slots_access_info();
+
+ _edit_view_set_access_rout();
+
+ if (longpress_flag) {
+ longpress_flag = EINA_FALSE;
+ DEL_ECORE_TIMER(click_blocker_timer);
+ click_blocker_timer = ecore_timer_add(CLICK_BLOCKER_TIMER_DURATION, _click_blocker_timer_cb, NULL);
+ }
+}
+
+static const char *_edit_view_get_slot_position_text(int index)
+{
+ switch (index) {
+ case 0:
+ return AO_STRING_UPSIDE;
+ case 1:
+ return AO_STRING_LEFTSIDE;
+ case 2:
+ return AO_STRING_RIGHTSIDE;
+ case 3:
+ return AO_STRING_BOTTOMSIDE;
+ default:
+ return NULL;
+ }
+}
+
+static void _edit_view_update_slots_access_info()
+{
+ _ENTER;
+
+ int i;
+ Evas_Object *slot;
+ char buff[BUF_SIZE_SMALL] = { 0 };
+ char name[BUF_SIZE_LARGE] = { 0 };
+ const char *label;
+
+ for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
+ snprintf(buff, sizeof(buff), "index%d", i+1);
+ slot = elm_object_part_content_get(g_info->edit_layout, buff);
+ ret_if(!slot);
+
+ if (!IS_STRING_EMPTY(g_info->appid_list[i]) && strcmp(g_info->appid_list[i], "empty")) {
+ label = elm_object_part_text_get(slot, "name");;
+ } else {
+ label = AO_STRING_EMPTY;
+ }
+ snprintf(name, sizeof(name), "%s, %s.", _edit_view_get_slot_position_text(i), label);
+ elm_atspi_accessible_name_set(elm_object_part_content_get(slot, "icon"), name);
+ }
+}
+
+static void _edit_view_update_ly_access_info()
+{
+ _ENTER;
+
+ char name[BUF_SIZE_LARGE] = { 0 };
+ const char *tmp;
+
+ ret_if(!g_info->ao_edit_ly);
+
+ tmp = AO_STRING_WDIT_INSTRUCTION_NAME;
+ snprintf(name, sizeof(name), tmp, AO_STRING_WIDGET_NAME);
+ elm_atspi_accessible_name_set(g_info->ao_edit_ly, name);
+}
+
+static void _edit_view_unset_access_rout()
+{
+ _ENTER;
+
+ Evas_Object *slot;
+ Evas_Object *btn;
+ int i;
+ Evas_Object *cur_ao = NULL;
+ char buff[BUF_SIZE_SMALL] = { 0 };
+
+ if (g_info->ao_first) {
+ apptray_wgt_app_au_remove_relationship_start_point(g_info->ao_first);
+ cur_ao = g_info->ao_first;
+ }
+
+ if (g_info->ao_edit_ly) {
+ apptray_wgt_app_au_remove_symmetric_relationship(cur_ao, g_info->ao_edit_ly);
+ cur_ao = g_info->ao_edit_ly;
+ }
+
+ for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
+ snprintf(buff, sizeof(buff), "index%d", i+1);
+ slot = elm_object_part_content_get(g_info->edit_layout, buff);
+ ret_if(!slot);
+ btn = elm_object_part_content_get(slot, "icon");
+ apptray_wgt_app_au_remove_symmetric_relationship(cur_ao, btn);
+ cur_ao = btn;
+ }
+ apptray_wgt_app_au_remove_relationship_end_point(cur_ao);
+}
+
+static void _edit_view_set_access_rout()
+{
+ _ENTER;
+
+ Evas_Object *slot;
+ Evas_Object *btn;
+ int i;
+ Evas_Object *cur_ao = NULL;
+ char buff[BUF_SIZE_SMALL] = { 0 };
+
+ if (g_info->ao_first) {
+ apptray_wgt_app_au_append_relationship_start_point(g_info->ao_first);
+ cur_ao = g_info->ao_first;
+ }
+
+ if (g_info->ao_edit_ly) {
+ apptray_wgt_app_au_append_symmetric_relationship(cur_ao, g_info->ao_edit_ly);
+ cur_ao = g_info->ao_edit_ly;
+ }
+
+ for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
+ snprintf(buff, sizeof(buff), "index%d", i+1);
+ slot = elm_object_part_content_get(g_info->edit_layout, buff);
+ ret_if(!slot);
+ btn = elm_object_part_content_get(slot, "icon");
+ apptray_wgt_app_au_append_symmetric_relationship(cur_ao, btn);
+ cur_ao = btn;
+ }
+ apptray_wgt_app_au_append_relationship_end_point(cur_ao);
+}
+
+static Evas_Object *_edit_view_create_slot_ly(Evas_Object *parent)
+{
+ Evas_Object *eo = elm_layout_add(g_info->edit_layout);
+ retv_if(!eo, NULL);
+ elm_layout_file_set(eo, EDJE_PATH, "slot_ly");
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(eo);
+
+ return eo;
+}
+
+static Evas_Object *_edit_view_create_slot_app_btn(Evas_Object *parent)
+{
+ Evas_Object *eo = elm_button_add(parent);
+ retv_if(!eo, NULL);
+ elm_object_style_set(eo, "apptray/icon_slot");
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, parent);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, parent);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_UP, _up_cb, parent);
+ evas_object_smart_callback_add(eo, "clicked", _app_icon_clicked_cb, parent);
+ evas_object_show(eo);
+
+ /* Accessibility */
+ elm_atspi_accessible_translation_domain_set(eo, APPTRAY_WIDGET_APP_DOMAIN);
+ elm_atspi_accessible_reading_info_type_set(eo, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME
+ | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION);
+ elm_atspi_accessible_description_set(eo, AO_STRING_DOUBLE_TAP_TO_REMOVE);
+
+ return eo;
+}
+
+static Evas_Object *_edit_view_create_slot_app_btn_icon(Evas_Object *parent, const char *image_path)
+{
+ Evas_Object *eo = evas_object_image_add(evas_object_evas_get(parent));
+ retv_if(!eo, NULL);
+ evas_object_image_file_set(eo, image_path, NULL);
+ evas_object_image_filled_set(eo, EINA_TRUE);
+ evas_object_show(eo);
+
+ return eo;
+}
+
+static Evas_Object *_edit_view_create_slot_app_btn_del_ly(Evas_Object *parent)
+{
+ Evas_Object *eo = elm_button_add(parent);
+ retv_if(!eo, NULL);
+ elm_object_style_set(eo, "apptray/delete_btn");
+ evas_object_smart_callback_add(eo, "clicked", _del_btn_click_cb, parent);
+ evas_object_show(eo);
+
+ /* Accessibility */
+ elm_atspi_accessible_can_highlight_set(eo, EINA_FALSE);
+
+ return eo;
+}
+
+static Evas_Object *_edit_view_create_slot_empty_btn(Evas_Object *parent)
+{
+ Evas_Object *eo = elm_button_add(parent);
+ retv_if(!eo, NULL);
+ elm_object_style_set(eo, "apptray/empty_slot");
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, parent);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, parent);
+ evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_UP, _up_cb, parent);
+ evas_object_smart_callback_add(eo, "clicked", _plus_clicked_cb, parent);
+ evas_object_show(eo);
+
+ /* Accessibility */
+ elm_atspi_accessible_translation_domain_set(eo, APPTRAY_WIDGET_APP_DOMAIN);
+ elm_atspi_accessible_reading_info_type_set(eo, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME
+ | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION);
+ elm_atspi_accessible_description_set(eo, AO_STRING_DOUBLE_TAP_TO_ADD);
+
+ return eo;
}
Evas_Object *_set_app_slot(const char *appid, int pos)
{
_ENTER;
- pkgmgrinfo_appinfo_h appinfo_h = NULL;
- _D("%s", appid);
- char *icon_path_tmp = NULL;
- char *icon_path = NULL;
- int ret = 0;
- Evas_Object *slot = NULL;
- Evas_Object *icon = NULL;
+ Evas_Object *slot = NULL;
+ Evas_Object *btn = NULL;
char index[BUF_SIZE_SMALL] = { 0 };
+
+ _D("App ID [%s]", appid);
+
+ slot = _edit_view_create_slot_ly(g_info->edit_layout);
snprintf(index, sizeof(index), "index%d", pos+1);
- char *label = NULL;
+ elm_object_part_content_set(g_info->edit_layout, index, slot);
if (!strcmp(appid, "empty")) {
- slot = elm_layout_add(g_info->edit_layout);
- ret = elm_layout_file_set(slot, EDJE_PATH, "empty_slot");
- if (ret == EINA_FALSE) {
- _E("failed to set empty slot");
- return NULL;
- }
- evas_object_size_hint_weight_set(slot, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, slot);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, &pos);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_UP, _up_cb, slot);
- elm_object_signal_callback_add(slot, "mouse_clicked", "*", _plus_mouse_clicked_cb, &pos);
+ btn = _edit_view_create_slot_empty_btn(slot);
+ elm_object_part_content_set(slot, "icon", btn);
- elm_object_part_content_set(g_info->edit_layout, index, slot);
- evas_object_show(slot);
g_info->appid_list[pos] = strdup(appid);
- empty_count++;
} else {
+ pkgmgrinfo_appinfo_h appinfo_h = NULL;
+ char *icon_path_tmp = NULL;
+ char *icon_path = NULL;
+ Evas_Object *btn_icon = NULL;
+ Evas_Object *del_ly = NULL;
+ char *label = NULL;
+
pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h);
if (PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon_path)) {
_E("get icon path failed");
_E("get label failed");
}
- slot = elm_layout_add(g_info->edit_layout);
- elm_layout_file_set(slot, EDJE_PATH, "icon_slot");
-
- evas_object_size_hint_weight_set(slot, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_part_content_set(g_info->edit_layout, index, slot);
- evas_object_show(slot);
+ btn = _edit_view_create_slot_app_btn(slot);
+ elm_object_part_content_set(slot, "icon", btn);
- icon = evas_object_image_add(evas_object_evas_get(slot));
- evas_object_repeat_events_set(icon, EINA_TRUE);
- evas_object_image_file_set(icon, icon_path_tmp, NULL);
- evas_object_image_filled_set(icon, EINA_TRUE);
- elm_object_part_content_set(slot, "icon", icon);
- evas_object_show(icon);
+ btn_icon = _edit_view_create_slot_app_btn_icon(slot, icon_path_tmp);
+ elm_object_part_content_set(btn, "content", btn_icon);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, slot);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, slot);
- evas_object_event_callback_add(slot, EVAS_CALLBACK_MOUSE_UP, _up_cb, slot);
-
- elm_object_signal_callback_add(slot, "del_mouse_down", "*", _del_mouse_down_cb, slot);
- elm_object_signal_callback_add(slot, "del_mouse_up", "*", _del_mouse_up_cb, slot);
- elm_object_signal_callback_add(slot, "del_mouse_clicked", "*", _del_mouse_clicked_cb, slot);
- elm_object_signal_callback_add(slot, "del_mouse_clicked_icon", "*", _del_mouse_clicked_cb, slot);
+ del_ly = _edit_view_create_slot_app_btn_del_ly(slot);
+ elm_object_part_content_set(slot, "delete_ly", del_ly);
elm_object_part_text_set(slot, "name", label);
return slot;
}
-static void _create_edit_layout(appdata_s *info)
+static void _edit_view_create_ly_access_obj(appdata_s *info)
+{
+ _ENTER;
+
+ info->ao_edit_ly = (Evas_Object *)elm_access_object_register(info->edit_layout, info->edit_win);
+ ret_if(!info->ao_edit_ly);
+ elm_atspi_accessible_translation_domain_set(info->ao_edit_ly, APPTRAY_WIDGET_APP_DOMAIN);
+ elm_atspi_accessible_reading_info_type_set(info->ao_edit_ly, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME);
+}
+
+static Eina_Bool _rotary_event_cb(void *data, Evas_Object *obj, Eext_Rotary_Event_Info *info)
+{
+ _ENTER;
+
+ if (elm_atspi_bridge_utils_is_screen_reader_enabled()) {
+ /* TODO: Need to implement logic for rotary events when Screen reader is on */
+ }
+
+ return EINA_FALSE;
+}
+
+static Evas_Object *_edit_view_create_layout(appdata_s *info)
{
_ENTER;
- Evas_Object *layout = NULL;
+ Evas_Object *eo = elm_layout_add(info->edit_win);
+ elm_layout_file_set(eo, EDJE_PATH, "edit_layout");
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(info->edit_win, eo);
+ evas_object_show(eo);
- layout = elm_layout_add(info->edit_win);
- elm_layout_file_set(layout, EDJE_PATH, "edit_layout");
- evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_show(layout);
+ if (!eext_rotary_object_event_callback_add(eo, _rotary_event_cb, info)) {
+ _E("Rotaty object event callback add failed");
+ }
- info->edit_layout = layout;
+ return eo;
}
static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
{
- _D();
if (!strcmp(part, "elm.text")) {
- _D();
apptray_wgt_app_item_info_s *item_info = data;
retv_if(!item_info, NULL);
_D("Name created");
elm_image_aspect_fixed_set(image, EINA_TRUE);
evas_object_repeat_events_set(image, EINA_TRUE);
evas_object_size_hint_min_set(image,
- ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION),
- ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION));
+ ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENSION),
+ ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENSION));
evas_object_show(image);
return image;
} else if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK && !strcmp(part, "elm.swallow.center_check")) {
evas_object_propagate_events_set(check, EINA_FALSE);
evas_object_show(check);
+ /* Accessibility */
+ elm_atspi_accessible_relationship_append(item_info->gl_item, ELM_ATSPI_RELATION_CONTROLLER_FOR, check);
+ elm_atspi_accessible_relationship_append(check, ELM_ATSPI_RELATION_CONTROLLED_BY, item_info->gl_item);
+ elm_atspi_accessible_relationship_append(item_info->gl_item, ELM_ATSPI_RELATION_DESCRIBED_BY, check);
+
return check;
}
return NULL;
return &empty_itc;
}
-static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info)
+static void _select_view_set_genlist_content(Evas_Object *genlist, appdata_s *info)
{
if (info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
_gl_add_empty_item(genlist);
_gl_add_empty_item(genlist);
}
-static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info)
+static Evas_Object *_select_view_create_simple_genlist(Evas_Object *parent, appdata_s *info)
{
Evas_Object *eo = elm_genlist_add(parent);
retv_if(!eo, NULL);
elm_genlist_mode_set(eo, ELM_LIST_COMPRESS);
elm_genlist_homogeneous_set(eo, EINA_TRUE);
- Evas_Object *circle_genlist = eext_circle_object_genlist_add(eo, info->select_circle_surf);
- eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
- eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
+ info->circle_genlist = eext_circle_object_genlist_add(eo, info->select_circle_surf);
+ eext_circle_object_genlist_scroller_policy_set(info->circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
evas_object_show(eo);
return eo;
static void _gl_add_header_item(Evas_Object *gl)
{
- elm_genlist_item_append(gl, _get_gl_itc_header(), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ Elm_Object_Item *item = elm_genlist_item_append(gl, _get_gl_itc_header(), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ /* Accessibility */
+ elm_atspi_accessible_can_highlight_set(item, EINA_FALSE);
}
static bool _check_already_added_apps(const char *appid)
Evas_Object *slot = _set_app_slot(item_info->appid, slot_index);
elm_object_signal_emit(slot, "hide_icon", "slot");
- empty_count--;
- evas_object_hide(g_info->select_win);
- evas_object_show(g_info->edit_win);
+ _set_select_window_active_state(false);
evas_event_callback_add(evas_object_evas_get(g_info->edit_layout),
EVAS_CALLBACK_RENDER_POST, _render_post_cb, (void *)slot);
_update_content();
+
+ _edit_view_update_slots_access_info();
+
+ _edit_view_set_access_rout();
}
static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info)
{
apptray_wgt_app_item_info_s *item_info = NULL;
Eina_List *item_info_list = g_info->all_app_list;
- Elm_Object_Item *item = NULL;
Eina_List *l = NULL;
Eina_List *n = NULL;
EINA_LIST_FOREACH_SAFE(item_info_list, l, n, item_info) {
- item = elm_genlist_item_append(gl, _get_gl_itc_content(), item_info, NULL,
+ item_info->gl_item = elm_genlist_item_append(gl, _get_gl_itc_content(), item_info, NULL,
ELM_GENLIST_ITEM_NONE, _gl_item_clicked_cb, item_info);
- if (!item) {
+ if (!item_info->gl_item) {
_E("Failed to append genlist item");
}
}
static void _gl_add_empty_item(Evas_Object *gl)
{
- elm_genlist_item_append(gl, _get_gl_itc_empty(), NULL, NULL,
- ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ Elm_Object_Item *item = elm_genlist_item_append(gl, _get_gl_itc_empty(), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ /* Accessibility */
+ elm_atspi_accessible_can_highlight_set(item, EINA_FALSE);
}
-static Evas_Object *_create_bottom_btn_ly(appdata_s *info)
+static Evas_Object *_select_view_create_bottom_btn_ly(appdata_s *info)
{
Evas_Object *eo = elm_layout_add(info->select_conform);
retv_if(!eo, NULL);
_terminate_add_to_shortcut();
}
-static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info)
+static Evas_Object *_select_view_create_bottom_btn(Evas_Object *parent, appdata_s *info)
{
Evas_Object *eo = elm_button_add(parent);
retv_if(!eo, NULL);
return eo;
}
-static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info)
+static Evas_Object *_select_view_create_genlist_ly(Evas_Object *parent, appdata_s *info)
{
Evas_Object *eo = elm_layout_add(parent);
retv_if(!eo, NULL);
return eo;
}
-static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info)
+static Evas_Object *_select_view_create_pick_genlist(Evas_Object *parent, appdata_s *info)
{
- Evas_Object *eo = _create_simple_genlist(parent, info);
+ Evas_Object *eo = _select_view_create_simple_genlist(parent, info);
retv_if(!eo, NULL);
elm_object_style_set(eo, "focus_bg");
- _set_select_genlist_content(eo, info);
+ _select_view_set_genlist_content(eo, info);
elm_layout_content_set(parent, "elm.swallow.content", eo);
return eo;
}
-static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info)
+static Evas_Object *_select_view_create_select_count_btn(Evas_Object *parent, appdata_s *info)
{
char buf[BUF_SIZE_SMALL] = { 0 };
_ENTER;
if (info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
- info->select_gl = _create_simple_genlist(info->select_conform, info);
+ info->select_gl = _select_view_create_simple_genlist(info->select_conform, info);
ret_if(!info->select_gl);
- _set_select_genlist_content(info->select_gl, info);
+ _select_view_set_genlist_content(info->select_gl, info);
elm_object_content_set(info->select_conform, info->select_gl);
} else {
Evas_Object *bottom_btn = NULL;
Evas_Object *genlist_layout = NULL;
- bottom_btn_ly = _create_bottom_btn_ly(info);
+ bottom_btn_ly = _select_view_create_bottom_btn_ly(info);
ret_if(!bottom_btn_ly);
- bottom_btn = _create_bottom_btn(bottom_btn_ly, info);
+ bottom_btn = _select_view_create_bottom_btn(bottom_btn_ly, info);
ret_if(!bottom_btn);
- genlist_layout = _create_genlist_ly(bottom_btn_ly, info);
+ genlist_layout = _select_view_create_genlist_ly(bottom_btn_ly, info);
ret_if(!genlist_layout);
- info->select_gl = _create_pick_genlist(genlist_layout, info);
+ info->select_gl = _select_view_create_pick_genlist(genlist_layout, info);
ret_if(!info->select_gl);
- info->select_count_btn = _create_select_count_btn(genlist_layout, info);
+ info->select_count_btn = _select_view_create_select_count_btn(genlist_layout, info);
ret_if(!info->select_count_btn);
elm_object_signal_emit(genlist_layout, "select_mode,button,show", "");
return *list;
}
+static void _unset_access_for_window(Evas_Object *win)
+{
+ elm_atspi_accessible_role_set(win, ELM_ATSPI_ROLE_TEXT);
+ elm_atspi_accessible_reading_info_type_set(win, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME);
+ elm_atspi_accessible_name_set(win, "");
+}
+
static Eina_Bool _load_list(void* data)
{
Eina_List *pkgmgr_list = NULL;
g_info->all_app_list = _read_all_apps(&pkgmgr_list);
_create_select_view(g_info);
+
+ if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+ _set_select_window_active_state(true);
+ } else {
+ _set_select_window_active_state(false);
+ _unset_access_for_window(g_info->select_win);
+ }
+
return ECORE_CALLBACK_CANCEL;
}
-static void _process_pick_operation(appdata_s *info, app_control_h service)
+static void _app_process_pick_operation(appdata_s *info, app_control_h service)
{
_ENTER;
-
- evas_object_show(info->select_win);
-
ecore_idler_add(_load_list, NULL);
}
-static void _process_main_operation(appdata_s *info, app_control_h service, const char *app_list)
+static void _edit_view_init_ly_access_data(appdata_s *info)
{
- _ENTER;
+ info->ao_first = apptray_wgt_app_au_register_fake_access_object(
+ info->edit_layout, info->edit_layout, "ao_rect");
+ ret_if(!info->ao_first);
+ _edit_view_create_ly_access_obj(info);
+ _edit_view_update_slots_access_info();
+ _edit_view_update_ly_access_info();
+ _edit_view_set_access_rout();
+
+ elm_atspi_component_highlight_grab(info->ao_first);
+}
+
+static void _edit_view_init_slots(const char *app_list)
+{
char *content = NULL;
char *save = NULL;
char *app_name = NULL;
- char *app_list_array[APP_SLOTS_MAX_COUNT] = { NULL };
+ char *app_list_array[APP_SLOTS_MAX_COUNT] = { 0 };
int app_count = 0;
int i = 0;
- _create_edit_layout(info);
- evas_object_show(info->edit_win);
- elm_win_resize_object_add(info->edit_win, info->edit_layout);
-
content = strdup_s(app_list);
if (!content) {
_D("Content is NULL. Set default applist");
_set_app_slot(app_list_array[i], _input_slot_conv[app_count].slot_seq_arr[i]);
free(app_list_array[i]);
}
-
free(content);
+}
+
+static void _app_process_main_operation(appdata_s *info, app_control_h service, const char *app_list)
+{
+ _ENTER;
+
+ evas_object_show(info->edit_win);
+ info->edit_layout = _edit_view_create_layout(info);
+ ret_if(!info->edit_layout);
+
+ _edit_view_init_slots(app_list);
+
+ _edit_view_init_ly_access_data(info);
ecore_idler_add(_load_list, NULL);
}
-static bool _create_edit_window(appdata_s *info, const char *name, const char *title)
+static bool _create_edit_view_window(appdata_s *info, const char *name, const char *title)
{
info->edit_win = _create_win(info, name, title);
retv_if(!info->edit_win, false);
+ Evas_Object *edit_conform = _select_view_create_conformant(info->edit_win);
+ retv_if(!edit_conform, false);
+
+ Eext_Circle_Surface *edit_circle_surf = eext_circle_surface_conformant_add(edit_conform);
+ retv_if(!edit_circle_surf, false);
+
return true;
}
-static Evas_Object *_create_conformant_without_indicator(Evas_Object *win)
+static Evas_Object *_select_view_create_conformant(Evas_Object *win)
{
Evas_Object *conform = NULL;
return conform;
}
-static bool _create_select_window(appdata_s *info, const char *name, const char *title)
+static bool _create_select_view_window(appdata_s *info, const char *name, const char *title)
{
info->select_win = _create_win(info, name, title);
retv_if(!info->select_win, false);
- info->select_conform = _create_conformant_without_indicator(info->select_win);
+ info->select_conform = _select_view_create_conformant(info->select_win);
retv_if(!info->select_conform, false);
info->select_circle_surf = eext_circle_surface_conformant_add(info->select_conform);
if (evas_object_visible_get(info->select_win)
&& info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
- evas_object_hide(info->select_win);
- evas_object_show(info->edit_win);
+ _unset_access_for_window(g_info->edit_win);
+ _set_select_window_active_state(false);
} else {
if (info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
_update_appid_list_with_selected_items();
return APPTRAY_WGT_APP_KEY_CB_RET_STOP;
}
+static void _update_win_title(Evas_Object *win, const char *title)
+{
+ ret_if(!win);
+ elm_win_title_set(win, title);
+}
+
static bool _app_create(void *data)
{
_ENTER;
elm_app_base_scale_set(1.3);
+ bindtextdomain(APPTRAY_WIDGET_APP_DOMAIN, apptray_wgt_app_utils_get_locale_path());
+ textdomain(APPTRAY_WIDGET_APP_DOMAIN);
+
appdata_s *info = data;
retv_if(!info, false);
g_info = info;
- retv_if(!_create_edit_window(info, "__ADD_TO_SHORTCUT__", "__ADD_TO_SHORTCUT__"), false);
- retv_if(!_create_select_window(info, "__SELECT_LIST__", "__SELECT_LIST__"), false);
+ retv_if(!_create_edit_view_window(info, "__ADD_TO_SHORTCUT__", AO_STRING_WIN_NAME), false);
+ retv_if(!_create_select_view_window(info, "__SELECT_LIST__", AO_STRING_WIN_NAME), false);
feedback_initialize();
apptray_wgt_app_key_register_cb(APPTRAY_WGT_APP_KEY_TYPE_BACK, _key_release_cb, info);
apptray_wgt_app_key_register_cb(APPTRAY_WGT_APP_KEY_TYPE_POWER, _key_release_cb, info);
+ elm_theme_extension_add(NULL, EDJE_PATH);
+
return true;
}
apptray_wgt_app_key_unregister_cb(APPTRAY_WGT_APP_KEY_TYPE_POWER, _key_release_cb);
apptray_wgt_app_key_unregister();
- if (longpress_timer) {
- ecore_timer_del(longpress_timer);
- }
+ DEL_ECORE_TIMER(longpress_timer);
+ DEL_ECORE_TIMER(click_blocker_timer);
DEL_EVAS_OBJECT(g_info->edit_win);
DEL_EVAS_OBJECT(g_info->select_win);
g_info = NULL;
feedback_deinitialize();
+
+ elm_theme_extension_del(NULL, EDJE_PATH);
}
static void _app_pause(void *data)
app_control_get_operation(service, &operation);
if (!strcmp(operation, APP_CONTROL_OPERATION_PICK)) {
info->launch_type = APPTRAY_WGT_APP_LAUNCH_TYPE_PICK;
- _process_pick_operation(info, service);
+ _app_process_pick_operation(info, service);
} else if (!strcmp(operation, APP_CONTROL_OPERATION_MAIN)) {
info->launch_type = APPTRAY_WGT_APP_LAUNCH_TYPE_MAIN;
- _process_main_operation(info, service, app_list);
+ _app_process_main_operation(info, service, app_list);
}
free(app_list);
}
-static void _update_apps_label_for_select_view(appdata_s *ad)
+static void _select_view_update_apps_label(appdata_s *ad)
{
int ret;
pkgmgrinfo_appinfo_h appinfo_h;
elm_genlist_realized_items_update(ad->select_gl);
}
-static void _update_apps_label_for_edit_view(appdata_s *ad)
+static void _edit_view_update_slots_apps_label(appdata_s *ad)
{
int ret;
pkgmgrinfo_appinfo_h appinfo_h;
static void _app_lang_changed(app_event_info_h event_info, void *user_data)
{
_ENTER;
-
+ appdata_s *info = user_data;
char *locale = NULL;
+
system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
elm_language_set(locale);
free(locale);
- ret_if(user_data);
+ ret_if(info);
if (g_info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
- _update_apps_label_for_edit_view(user_data);
+ /* TODO: need translation */
+ _update_win_title(info->edit_win, AO_STRING_WIN_NAME);
+ _edit_view_update_slots_apps_label(info);
+ _edit_view_update_slots_access_info();
+ _edit_view_update_ly_access_info();
+ } else {
+ /* TODO: need translation */
+ _update_win_title(info->select_win, AO_STRING_WIN_NAME);
}
- _update_apps_label_for_select_view(user_data);
+ _select_view_update_apps_label(info);
}
int main(int argc, char *argv[])
int ret = 0;
ui_app_lifecycle_callback_s lcc = { 0 };
- app_event_handler_h handlers[1] = { NULL };
+ app_event_handler_h handlers[1] = { 0 };
lcc.create = _app_create;
lcc.terminate = _app_terminate;