View: Added the recently used sort function 05/44205/1
authorHyojung Jo <hj903.jo@samsung.com>
Fri, 17 Jul 2015 08:51:45 +0000 (17:51 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Sun, 19 Jul 2015 04:10:34 +0000 (13:10 +0900)
Change-Id: I3ad15ae4ab142835511f9aeb34c8633659c962d1
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
src/view/view_base.c

index d901ddc..c77df8d 100644 (file)
@@ -190,6 +190,68 @@ static int _sort_by_z_to_a(const void *first_data, const void *second_data)
        return strcmp(get_app_name(adata2), get_app_name(adata1));
 }
 
+static void _recent_list_foreach(gpointer data, gpointer user_data)
+{
+       struct _priv *priv;
+       struct recent_data *rdata;
+       struct app_data *adata;
+       Eina_List *l = NULL;
+
+       if (!data || !user_data) {
+               _ERR("Data is NULL.");
+               return;
+       }
+       priv = user_data;
+       rdata = data;
+
+       if (!priv->app_list || !rdata->id)
+               return;
+
+       EINA_LIST_FOREACH(priv->app_list, l, adata) {
+               if (adata && get_app_id(adata) &&
+                               !strcmp(get_app_id(adata), rdata->id)) {
+                       priv->app_list =
+                               eina_list_promote_list(priv->app_list, l);
+                       break;
+               }
+       }
+}
+
+static void _sort_by_recently_used(struct _priv *priv)
+{
+       GList *recent_l = NULL;
+       struct app_data *adata;
+       Eina_List *l = NULL;
+       int r;
+
+       if (!priv || !priv->app_list) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       r = app_contents_get_recent_list(CONTENTS_APP, -1, &recent_l);
+       if (r != APP_CONTENTS_ERROR_NONE) {
+               _ERR("Get recent list failed.");
+               return;
+       }
+
+       if (!recent_l)
+               return;
+
+       recent_l = g_list_reverse(recent_l);
+       g_list_foreach(recent_l, _recent_list_foreach, priv);
+
+       /* The 'Web Browser' should be at first when 'Recent' option selected */
+       EINA_LIST_FOREACH(priv->app_list, l, adata) {
+               if (adata && get_app_id(adata) &&
+                               !strcmp(get_app_id(adata), STR_BROWSER_ID)) {
+                       priv->app_list =
+                               eina_list_promote_list(priv->app_list, l);
+                       break;
+               }
+       }
+}
+
 static void _option_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
@@ -206,7 +268,9 @@ static void _option_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
        } else if (!strcmp(ev->key, KEY_ENTER)) {
                switch (id) {
                case SORT_RECENT:
-                       /* It should be implemented later. */
+                       _sort_by_recently_used(priv);
+                       priv->sort_type = SORT_RECENT;
+
                        break;
 
                case SORT_A_TO_Z:
@@ -583,6 +647,8 @@ static bool _draw_myapps_grid(struct _priv *priv)
                return true;
        }
 
+       _sort_by_recently_used(priv);
+
        if (!gridmgr_append_list(priv->gmgr, STR_MYAPPS, priv->app_list)) {
                _ERR("Gridmgr append list failed.");
                return false;