PUI & default-backend: add force argument to the control function of animation
[platform/core/uifw/libpui.git] / backends / default_backend.c
index afba9fc..bc13c94 100644 (file)
@@ -178,7 +178,7 @@ _ani_start(pui_ani_t *ani, int repeat)
 }
 
 pui_error
-_ani_stop(pui_ani_t *ani)
+_ani_stop(pui_ani_t *ani, pui_bool force)
 {
        pui_int_error e = PUI_INT_ERROR_NONE;
        pui_backend_ani_data *ani_data = NULL;
@@ -189,10 +189,14 @@ _ani_stop(pui_ani_t *ani)
        //TODO
        (void) info;
 
-       pui_info("... info->id: %s\n", info->id);
+       pui_info("... info->id: %s, force=%d\n", info->id, force);
 
        pui_backend_ani_remove_frame_cb(ani);
-       pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
+
+       if (force)
+               pui_backend_ani_status_update(ani, PUI_ANI_STATUS_PAUSED);
+       else
+               pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
 
        return e;
 }
@@ -303,16 +307,46 @@ error:
        return NULL;
 }
 
-static int
-_scandir_filter(const struct dirent *dirent)
+int
+_find_directory(const char *path, Eina_List **json_list)
 {
-       if (!strncmp(dirent->d_name, ".", sizeof(".")) ||
-               !strncmp(dirent->d_name, "..", sizeof("..")))
-               return 0;
-       if (!strstr(dirent->d_name, ".json"))
-               return 0;
+       DIR *dir;
+       struct dirent *cur;
+       int count = 0, ret_cnt = 0;
+
+       dir = opendir(path);
+       if (!dir)
+       {
+               pui_err("Failed to open %s.\n", path);
+               return count;
+       }
 
-       return 1;
+       while ((cur = readdir(dir)) != NULL)
+       {
+               char next_path[MAX_STR] = {0, };
+               if (cur->d_type == DT_DIR)
+               {
+                       if (!strncmp(cur->d_name, ".", sizeof(".")) ||
+                               !strncmp(cur->d_name, "..", sizeof("..")))
+                               continue;
+
+                       snprintf(next_path, MAX_STR, "%s/%s", path, cur->d_name);
+                       ret_cnt = _find_directory(next_path, json_list);
+                       count += ret_cnt;
+               }
+               else
+               {
+                       if (strstr(cur->d_name, ".json"))
+                       {
+                               snprintf(next_path, MAX_STR, "%s/%s", path, cur->d_name);
+                               *json_list = eina_list_append(*json_list, eina_stringshare_add(next_path));
+                               count++;
+                       }
+               }
+       }
+       closedir(dir);
+
+       return count;
 }
 
 
@@ -321,33 +355,25 @@ _create_ani_collection(void)
 {
        pui_int_error e = PUI_INT_ERROR_NONE;
        default_ani_info *ani_info;
-       struct dirent **files;
-       int count, i;
-       char file_path[MAX_STR] = {0, };
+       Eina_List *json_list = NULL;
+       Eina_List *l, *l_next;
+       Eina_Stringshare *path;
 
        // load and store all of animation data
 
-       if ((count = scandir(ANI_COLLECTION_DIR, &files, _scandir_filter, alphasort)) == -1) {
-               printf("Failed to get %s directory (%s)\n", ANI_COLLECTION_DIR, strerror(errno));
-               e = PUI_INT_ERROR_INVALID_RESOURCES;
-               return e;
-       }
-
-       for (i = 0; i < count; i++) {
-               snprintf(file_path, sizeof(file_path), "%s%s", ANI_COLLECTION_DIR, files[i]->d_name);
+       _find_directory(ANI_COLLECTION_DIR, &json_list);
 
-               ani_info = _read_json(file_path);
+       EINA_LIST_FOREACH_SAFE(json_list, l, l_next, path)
+       {
+               ani_info = _read_json(path);
                if (ani_info) {
                        eina_hash_add(_animations_hash, ani_info->id, ani_info);
-                       printf("Success to load %s animation\n", files[i]->d_name);
+                       pui_info("Success to load %s animation (id: %s)\n", path, ani_info->id);
                }
+               eina_stringshare_del(path);
+               json_list = eina_list_remove_list(json_list, l);
        }
 
-       for (i = 0; i < count; i++) {
-               free(files[i]);
-       }
-       free(files);
-
        //TODO
 
        return e;
@@ -439,69 +465,69 @@ _ani_create(pui_id id)
        }
 
        /* Assign each function pointer that corresponds to the given id if needed. */
-       if (!strncmp(ani_info->id, "processing", sizeof("processing")))
+       if (!strncmp(ani_info->id, "system/easy_setup", sizeof("system/easy_setup")))
        {
-               pui_default_backend_ani_processing_func_set(ani_func);
+               pui_default_backend_ani_easysetup_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "listening", sizeof("listening")))
+       else if (!strncmp(ani_info->id, "system/processing", sizeof("system/processing")))
        {
-               pui_default_backend_ani_listening_func_set(ani_func);
+               pui_default_backend_ani_system_processing_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "speaking", sizeof("speaking")))
+       else if (!strncmp(ani_info->id, "system/sw_update_done", sizeof("system/sw_update_done")))
        {
-               pui_default_backend_ani_speaking_func_set(ani_func);
+               pui_default_backend_ani_swupdatedone_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "streaming", sizeof("streaming")))
+       else if (!strncmp(ani_info->id, "system/mic_off", sizeof("system/mic_off")))
        {
-               pui_default_backend_ani_streaming_func_set(ani_func);
+               pui_default_backend_ani_micoff_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "time_out", sizeof("time_out")))
+       else if (!strncmp(ani_info->id, "voice/listening", sizeof("voice/listening")))
        {
-               pui_default_backend_ani_timeout_func_set(ani_func);
+               pui_default_backend_ani_listening_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "system_processing", sizeof("system_processing")))
+       else if (!strncmp(ani_info->id, "voice/streaming", sizeof("voice/streaming")))
        {
-               pui_default_backend_ani_system_processing_func_set(ani_func);
+               pui_default_backend_ani_streaming_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "normal", sizeof("normal")))
+       else if (!strncmp(ani_info->id, "voice/processing", sizeof("voice/processing")))
        {
-               pui_default_backend_ani_normal_func_set(ani_func);
+               pui_default_backend_ani_processing_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "emergency", sizeof("emergency")))
+       else if (!strncmp(ani_info->id, "voice/speaking", sizeof("voice/speaking")))
        {
-               pui_default_backend_ani_emergency_func_set(ani_func);
+               pui_default_backend_ani_speaking_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "easy_setup", sizeof("easy_setup")))
+       else if (!strncmp(ani_info->id, "voice/timeout", sizeof("voice/timeout")))
        {
-               pui_default_backend_ani_easysetup_func_set(ani_func);
+               pui_default_backend_ani_timeout_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "sw_update_done", sizeof("sw_update_done")))
+       else if (!strncmp(ani_info->id, "notification/normal", sizeof("notification/normal")))
        {
-               pui_default_backend_ani_swupdatedone_func_set(ani_func);
+               pui_default_backend_ani_normal_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "mic_off", sizeof("mic_off")))
+       else if (!strncmp(ani_info->id, "notification/emergency", sizeof("notification/emergency")))
        {
-               pui_default_backend_ani_micoff_func_set(ani_func);
+               pui_default_backend_ani_emergency_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "network_error", sizeof("network_error")))
+       else if (!strncmp(ani_info->id, "notification/network_error", sizeof("notification/network_error")))
        {
                pui_default_backend_ani_networkerror_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "error", sizeof("error")))
+       else if (!strncmp(ani_info->id, "notification/error", sizeof("notification/error")))
        {
                pui_default_backend_ani_error_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "alarm", sizeof("alarm")))
+       else if (!strncmp(ani_info->id, "notification/alarm", sizeof("notification/alarm")))
        {
                pui_default_backend_ani_alarm_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "connected", sizeof("connected")))
+       else if (!strncmp(ani_info->id, "bt/pairing", sizeof("bt/pairing")))
        {
-               pui_default_backend_ani_connected_func_set(ani_func);
+               pui_default_backend_ani_pairing_func_set(ani_func);
        }
-       else if (!strncmp(ani_info->id, "pairing", sizeof("pairing")))
+       else if (!strncmp(ani_info->id, "bt/connected", sizeof("bt/connected")))
        {
-               pui_default_backend_ani_pairing_func_set(ani_func);
+               pui_default_backend_ani_connected_func_set(ani_func);
        }
        else
        {