Apply screen reader for unlocking lockscreen.
authorhhh.kwon <hhh.kwon@samsung.com>
Tue, 11 Jun 2013 11:53:22 +0000 (20:53 +0900)
committerhhh.kwon <hhh.kwon@samsung.com>
Tue, 11 Jun 2013 12:40:38 +0000 (21:40 +0900)
Change-Id: I628dd89b7e746e82dfc246f765f5375c0f1cf2f5

data/groups/lock-main.edc
src/lockscreen.c
src/lockscreen.h
src/util.c

index d127f77..9344c07 100755 (executable)
                                }
                        }
                        part{
+                               name: "tts.bg";
+                               type: RECT;
+                               repeat_events: 1;
+                               description{
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1.to: "bg";
+                                       rel2.to: "bg";
+                                       color : 0 0 0 0;
+                               }
+                       }
+                       part{
                                name: "text.area";
                                type: TEXT;
                                scale: 1;
index d44327e..52ddeb3 100755 (executable)
@@ -88,6 +88,7 @@ static bool app_create(void *data)
 
        ad->win = NULL;
        ad->ly_main = NULL;
+       ad->ao_bg = NULL;
        ad->info = NULL;
        ad->event_bg = NULL;
        ad->slider = NULL;
index ccc91f2..38e57e3 100755 (executable)
@@ -54,6 +54,7 @@ enum {
 struct appdata {
        Evas_Object *win;
        Evas_Object *ly_main;//top_layout
+       Evas_Object *ao_bg;
 
        Evas_Coord win_w;
        Evas_Coord win_h;
index 3124672..670ca14 100755 (executable)
@@ -256,11 +256,141 @@ static void _pm_state_cb(keynode_t * node, void *data)
        if (val == VCONFKEY_PM_STATE_NORMAL) {
                LOCK_SCREEN_TRACE_DBG("LCD on");
                update_time(ad);
+               if(ad->ao_bg) {
+                       elm_access_highlight_set(ad->ao_bg);
+               }
        } else {
                init_slider_touch_variables(ad);
        }
 }
 
+static Eina_Bool _mouse_cb(void *data, Evas_Object *obj, void *action_info)
+{
+       struct appdata *ad = data;
+       if (!ad) return EINA_FALSE;
+
+       Elm_Access_Action_Info *a;
+       a = (Elm_Access_Action_Info *) action_info;
+       if (!a) return EINA_FALSE;
+       LOCK_SCREEN_TRACE_DBG("event : %d, read x: %d, y: %d\n", a->mouse_type, a->x, a->y);
+
+       static Eina_Bool bDrag = EINA_FALSE;
+       static int event = 0;
+       static int origin_x = -1;
+       static int origin_y = -1;
+
+       int step_width = 0;
+       int step_number = 0;
+       int alpha = 0;
+
+       event = a->mouse_type;
+       if(event == 0) {
+               origin_x = a->x;
+               origin_y = a->y;
+               bDrag = EINA_TRUE;
+
+               edje_object_signal_emit(_EDJ(ad->slider), "press",
+                               "lock.image.l");
+               edje_object_signal_emit(_EDJ(ad->slider), "press02",
+                               "lock.image.r");
+       } else if(event == 1) {
+               if(bDrag == EINA_FALSE) {
+                       return EINA_FALSE;
+               }
+               if(abs(a->y - origin_y) > _X(80)){
+                       bDrag = EINA_FALSE;
+               } else {
+                       step_width = _X(360)/14;
+                       step_number = abs(a->x - origin_x) / step_width;
+                       alpha = 255 - (2.55 * step_number *3);
+
+                       if (step_number < 1) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press02",
+                                               "lock.image.r");
+                       } else if (step_number < 2) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press03",
+                                               "lock.image.r");
+                       } else if (step_number < 3) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press04",
+                                               "lock.image.r");
+                       } else if (step_number < 4) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press05",
+                                               "lock.image.r");
+                       } else if (step_number < 5) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press06",
+                                               "lock.image.r");
+                       } else if (step_number < 6) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press07",
+                                               "lock.image.r");
+                       } else if (step_number < 7) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press08",
+                                               "lock.image.r");
+                       } else if (step_number < 8) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press09",
+                                               "lock.image.r");
+                       } else if (step_number < 9) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press10",
+                                               "lock.image.r");
+                       } else if (step_number < 10) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press11",
+                                               "lock.image.r");
+                       } else if (step_number < 11) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press12",
+                                               "lock.image.r");
+                       } else if (step_number < 12) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press13",
+                                               "lock.image.r");
+                       } else if (step_number < 13) {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press14",
+                                               "lock.image.r");
+                       } else {
+                               edje_object_signal_emit(_EDJ(ad->slider), "press15",
+                                               "lock.image.r");
+                       }
+                       evas_object_color_set(ad->ly_main, alpha, alpha, alpha, alpha);
+               }
+       } else if(event == 2) {
+               edje_object_signal_emit(_EDJ(ad->slider), "release", "lock.image.l");
+               edje_object_signal_emit(_EDJ(ad->slider), "release", "lock.image.r");
+               evas_object_color_set(ad->ly_main, 255, 255, 255, 255);
+               ad->bDrag = 0;
+
+               if(bDrag == EINA_TRUE && abs(a->x - origin_x) > _X(360)) {
+
+                       if(ad->slider) {
+                               evas_object_del(ad->slider);
+                               ad->slider = NULL;
+                       }
+                       LOCK_SCREEN_TRACE_DBG("unlock the lock-screen");
+                       elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_HIDE);
+                       elm_object_signal_emit(ad->ly_main, "transit,clipper", "clipper");
+                       vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
+               }
+               bDrag = EINA_FALSE;
+       }
+       return EINA_TRUE;
+}
+
+static Evas_Object *_access_object_get(Evas_Object *obj, const char *part)
+{
+       if(obj == NULL || part == NULL){
+               LOCK_SCREEN_TRACE_ERR("");
+               return NULL;
+       }
+       Evas_Object *to = NULL;
+       Evas_Object *ao = NULL;
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(obj), part);
+       if(to == NULL) {
+               LOCK_SCREEN_TRACE_ERR("");
+               return NULL;
+       }
+       ao = elm_access_object_get(to);
+       if(ao == NULL) {
+               ao = elm_access_object_register(to, obj);
+       }
+       return ao;
+}
+
 static Eina_Bool _init_widget_cb(void *data)
 {
        struct appdata *ad = data;
@@ -313,6 +443,11 @@ static Eina_Bool _init_widget_cb(void *data)
 
        edje_object_signal_callback_add(_EDJ(ad->ly_main), "exit,app", "event", _app_exit, ad);
 
+       ad->ao_bg = _access_object_get(ad->ly_main, "tts.bg");
+       if(ad->ao_bg) {
+               elm_access_action_cb_set(ad->ao_bg, ELM_ACCESS_ACTION_MOUSE, _mouse_cb, ad);
+       }
+
        vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK);
 
        return ECORE_CALLBACK_CANCEL;