Applied the NameInfo of app-common to Apps. 90/35190/1 accepted/tizen/tv/20150212.064426 submit/tizen_tv/20150210.215900
authorHyojung Jo <hj903.jo@samsung.com>
Tue, 10 Feb 2015 09:17:16 +0000 (18:17 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Tue, 10 Feb 2015 09:17:16 +0000 (18:17 +0900)
Change-Id: I19c46e9f4750b0603ff73f35306d817b3fda4102
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
CMakeLists.txt
include/AppInfo.h [new file with mode: 0644]
include/AppsBaseLayout.h
src/info/AppInfo.cpp [new file with mode: 0644]
src/layout/AppsBaseLayout.cpp

index 61ed63f..92d2f20 100644 (file)
@@ -58,6 +58,7 @@ SET(SRCS
        src/view/AppsBaseView.cpp
        src/layout/AppsBaseLayout.cpp
        src/view/ContextView.cpp
+       src/info/AppInfo.cpp
        )
 
 SET(TARGET_EDJ "${PROJECT_NAME}.edj")
diff --git a/include/AppInfo.h b/include/AppInfo.h
new file mode 100644 (file)
index 0000000..2c46a9b
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __APP_INFO_H__
+#define __APP_INFO_H__
+
+#include <ExtNameInfo.h>
+
+class CAppInfo : public CExtNameInfo {
+private:
+       struct SAppInfo *m;
+
+public:
+       static int s_SortTitleAZ(const void *d1, const void *d2);
+
+public:
+       CAppInfo() : m(0) {}
+       virtual ~CAppInfo() {}
+
+       bool Create(void);
+       virtual void Destroy(void);
+       bool FlagCreate(void);
+
+       char *Pkgid(void);
+       char *Pkgname(void);
+       char *Icon(void);
+       char *Category(void);
+       char *Version(void);
+       int CoordX(void);
+       int CoordY(void);
+
+       bool SetPkgid(const char *pkgid);
+       bool SetPkgname(const char *pkgname);
+       bool SetIcon(const char *icon);
+       bool SetCategory(const char *category);
+       bool SetVersion(const char *version);
+       bool SetCoordX(int x);
+       bool SetCoordY(int y);
+};
+
+#endif /*__APP_INFO_H__*/
index b1842cd..f14e827 100644 (file)
@@ -21,6 +21,8 @@
 #include <package_manager.h>
 #include "common.h"
 
+class CAppInfo;
+
 class CAppsBaseLayout :
        public CBaseLayout,
        public CListenerMgr,
@@ -47,7 +49,7 @@ private:
 
 private:
        Evas_Object *m_LoadAppInfo(Evas_Object *obj, char *name, char *icon);
-       void m_PackThumbnail(struct thumb_data *tdata);
+       void m_PackThumbnail(CAppInfo *ainfo);
        bool m_AddTableContents(void);
        Eina_List *m_GetCategoryList(void);
        Eina_List *m_GetCurrentMenuList(void);
@@ -55,7 +57,6 @@ private:
        void m_LoadTableContents(void);
        void m_LoadBrowsingTable(void);
        bool m_AddToFavoriteList(char *pkgname);
-       void m_FreeListItem(struct thumb_data *tdata);
        void m_UpdateFavoriteList(const char *pkgname);
 
 protected:
diff --git a/src/info/AppInfo.cpp b/src/info/AppInfo.cpp
new file mode 100644 (file)
index 0000000..464ed0d
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "AppInfo.h"
+#include "dbg.h"
+
+struct SAppInfo {
+       char *pkgid;
+       char *pkgname;
+       char *icon;
+       char *category;
+       char *version;
+       int x;
+       int y;
+};
+
+int CAppInfo::s_SortTitleAZ(const void *d1, const void *d2)
+{
+       CAppInfo *ainfo1 = (CAppInfo *)d1;
+       CAppInfo *ainfo2 = (CAppInfo *)d2;
+       char *txt1;
+       char *txt2;
+
+       txt1 = ainfo1->Name();
+       txt2 = ainfo2->Name();
+
+       if (!txt1)
+               return 1;
+
+       if (!txt2)
+               return -1;
+
+       return strcasecmp(txt1, txt2);
+}
+
+bool CAppInfo::Create(void)
+{
+       if (m)
+               return false;
+
+       m = new SAppInfo();
+       if (!m) {
+               _ERR("memory allocation failed.");
+               return false;
+       }
+
+       if (!CExtNameInfo::Create()) {
+               delete m;
+               m = NULL;
+               return false;
+       }
+
+       return true;
+}
+
+void CAppInfo::Destroy(void)
+{
+       if (!m)
+               return;
+
+       CExtNameInfo::Destroy();
+
+       delete[] m->pkgid;
+       delete[] m->pkgname;
+       delete[] m->icon;
+       delete[] m->category;
+       delete[] m->version;
+       delete m;
+
+       m = NULL;
+}
+
+bool CAppInfo::FlagCreate(void)
+{
+       return !!m;
+}
+
+char *CAppInfo::Pkgid(void)
+{
+       if (!m)
+               return NULL;
+
+       return m->pkgid;
+}
+
+char *CAppInfo::Pkgname(void)
+{
+       if (!m)
+               return NULL;
+
+       return m->pkgname;
+}
+
+char *CAppInfo::Icon(void)
+{
+       if (!m)
+               return NULL;
+
+       return m->icon;
+}
+
+char *CAppInfo::Category(void)
+{
+       if (!m)
+               return NULL;
+
+       return m->category;
+}
+
+char *CAppInfo::Version(void)
+{
+       if (!m)
+               return NULL;
+
+       return m->version;
+}
+
+int CAppInfo::CoordX(void)
+{
+       if (!m)
+               return -1;
+
+       return m->x;
+}
+
+int CAppInfo::CoordY(void)
+{
+       if (!m)
+               return -1;
+
+       return m->y;
+}
+
+bool CAppInfo::SetPkgid(const char *pkgid)
+{
+       if (!m || !pkgid)
+               return false;
+
+       delete[] m->pkgid;
+       m->pkgid = NULL;
+
+       m->pkgid = t_Clone(pkgid);
+       if (!m->pkgid)
+               return false;
+
+       return true;
+}
+
+bool CAppInfo::SetPkgname(const char *pkgname)
+{
+       if (!m || !pkgname)
+               return false;
+
+       delete[] m->pkgname;
+       m->pkgname = NULL;
+
+       m->pkgname = t_Clone(pkgname);
+       if (!m->pkgname)
+               return false;
+
+       return true;
+}
+
+bool CAppInfo::SetIcon(const char *icon)
+{
+       if (!m || !icon)
+               return false;
+
+       delete[] m->icon;
+       m->icon = NULL;
+
+       m->icon = t_Clone(icon);
+       if (!m->icon)
+               return false;
+
+       return true;
+}
+
+bool CAppInfo::SetCategory(const char *category)
+{
+       if (!m || !category)
+               return false;
+
+       delete[] m->category;
+       m->category = NULL;
+
+       m->category = t_Clone(category);
+       if (!m->category)
+               return false;
+
+       return true;
+}
+
+bool CAppInfo::SetVersion(const char *version)
+{
+       if (!m || !version)
+               return false;
+
+       delete[] m->version;
+       m->version = NULL;
+
+       m->version = t_Clone(version);
+       if (!m->version)
+               return false;
+
+       return true;
+}
+
+bool CAppInfo::SetCoordX(int x)
+{
+       if (!m)
+               return false;
+
+       m->x = x;
+
+       return true;
+}
+
+bool CAppInfo::SetCoordY(int y)
+{
+       if (!m)
+               return false;
+
+       m->y = y;
+
+       return true;
+}
index 2c2fdd5..92dfdc3 100644 (file)
@@ -13,6 +13,7 @@
 #include <app-content-category.h>
 #include "AppCommon.h"
 #include "AppsBaseLayout.h"
+#include "AppInfo.h"
 #include "common-ui.h"
 #include "define.h"
 #include "menudef.h"
@@ -59,29 +60,28 @@ void CAppsBaseLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_
 
 void CAppsBaseLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
 {
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        int r;
 
        if (id != EO_THUMBNAIL)
                return;
 
-       tdata = (struct thumb_data *)_GET_PRIV(obj);
-       if (!tdata) {
+       ainfo = (CAppInfo *)_GET_PRIV(obj);
+       if (!ainfo) {
                _ERR("Get data failed.");
                return;
        }
 
        if (!strcmp(ev->keyname, KEY_ENTER)) {
-               elm_object_signal_emit(obj, SIG_CLICKED,
-                               PART_APPTHUMB);
+               elm_object_signal_emit(obj, SIG_CLICKED, PART_APPTHUMB);
 
-               r = app_content_history_add(APP_CH_APPS, tdata->pkgname);
+               r = app_content_history_add(APP_CH_APPS, ainfo->Pkgname());
                if (r != 0) {
                        _ERR("app_content_history_add failed.");
                        return;
                }
 
-               r = aul_open_app(tdata->pkgname);
+               r = aul_open_app(ainfo->Pkgname());
                if (r == AUL_R_EINVAL) {
                        _ERR("Wrong pkg name.");
                        return;
@@ -92,50 +92,50 @@ void CAppsBaseLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Ke
                m->vmgr->UpdateView((const char *)APPS_BASE_VIEW,
                                (void *)E_FOCUS_MENU);
                return;
-       } else if (!strcmp(ev->keyname, KEY_LEFT) && tdata->y == 0) {
+       } else if (!strcmp(ev->keyname, KEY_LEFT) && ainfo->CoordY() == 0) {
                m->vmgr->UpdateView((const char *)APPS_BASE_VIEW,
                                (void *)E_FOCUS_MENU);
                return;
-       } else if (!strcmp(ev->keyname, KEY_UP) && tdata->x == 0) {
+       } else if (!strcmp(ev->keyname, KEY_UP) && ainfo->CoordX() == 0) {
                m->vmgr->UpdateView((const char *)APPS_BASE_VIEW,
                                (void *)E_FOCUS_SORT);
                return;
        } else if (!strcmp(ev->keyname, KEY_MENU)) {
-               if (!m->vmgr->PushView(APPS_CONTEXT_VIEW, tdata))
+               if (!m->vmgr->PushView(APPS_CONTEXT_VIEW, ainfo))
                        _ERR("Push context view failed.");
        }
 }
 
 void CAppsBaseLayout::OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
 {
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        int r;
 
        if (id != EO_THUMBNAIL)
                return;
 
-       tdata = (struct thumb_data *)_GET_PRIV(obj);
-       if (!tdata) {
+       ainfo = (CAppInfo *)_GET_PRIV(obj);
+       if (!ainfo) {
                _ERR("Get data failed.");
                return;
        }
 
        elm_object_signal_emit(obj, SIG_CLICKED, PART_APPTHUMB);
 
-       r = app_content_history_add(APP_CH_APPS, tdata->pkgname);
+       r = app_content_history_add(APP_CH_APPS, ainfo->Pkgname());
        if (r != 0) {
                _ERR("app_content_history_add failed.");
                return;
        }
 
-       r = aul_open_app(tdata->pkgname);
+       r = aul_open_app(ainfo->Pkgname());
        if (r == AUL_R_EINVAL)
                _ERR("Wrong package name.");
 }
 
 void CAppsBaseLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 {
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        Evas_Object *lbl, *img;
        char title[SIZE_STR];
        int r;
@@ -146,8 +146,8 @@ void CAppsBaseLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 
        m->focused_app = obj;
 
-       tdata = (struct thumb_data *)_GET_PRIV(obj);
-       if (!tdata) {
+       ainfo = (CAppInfo *)_GET_PRIV(obj);
+       if (!ainfo) {
                _ERR("Get Data failed.");
                return;
        }
@@ -164,24 +164,23 @@ void CAppsBaseLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
                        "<align=center><color=#FFFFFFFF>"
                        "<font_size=30><font_weight=Bold>%s"
                        "</font_weight></font_size>"
-                       "</color></align>", tdata->name);
+                       "</color></align>", ainfo->Name());
 
        elm_object_text_set(lbl, title);
        elm_label_ellipsis_set(lbl, EINA_FALSE);
        elm_label_slide_duration_set(lbl, 5);
-       elm_label_slide_mode_set(lbl,
-                       ELM_LABEL_SLIDE_MODE_AUTO);
+       elm_label_slide_mode_set(lbl, ELM_LABEL_SLIDE_MODE_AUTO);
        elm_label_slide_go(lbl);
 
        type = E_HIGHLIGHT_MENU;
        m->vmgr->UpdateView((const char *)APPS_BASE_VIEW, (void *)&type);
 
-       if (!tdata->pkgname) {
+       if (!ainfo->Pkgname()) {
                _ERR("pkgname of focused app is NULL.");
                return;
        }
 
-       r = app_content_favorite_is_set(APP_CF_APPS, tdata->pkgname);
+       r = app_content_favorite_is_set(APP_CF_APPS, ainfo->Pkgname());
        if (r > 0) {
                img = elm_image_add(obj);
                if (!img) {
@@ -189,31 +188,28 @@ void CAppsBaseLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
                        return;
                }
                elm_image_file_set(img, FAV_ICON_PNG, NULL);
-               elm_object_part_content_set(obj, PART_FAV_ICON,
-                               img);
+               elm_object_part_content_set(obj, PART_FAV_ICON, img);
        } else {
-               elm_object_part_content_set(obj, PART_FAV_ICON,
-                               NULL);
+               elm_object_part_content_set(obj, PART_FAV_ICON, NULL);
        }
 }
 
 void CAppsBaseLayout::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 {
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        Evas_Object *lbl;
        char title[SIZE_STR];
 
        if (id != EO_THUMBNAIL)
                return;
 
-       tdata = (struct thumb_data *)_GET_PRIV(obj);
-       if (!tdata) {
+       ainfo = (CAppInfo *)_GET_PRIV(obj);
+       if (!ainfo) {
                _ERR("Invalid argument.");
                return;
        }
 
-       elm_object_signal_emit(obj, SIG_UNFOCUSED,
-                       PART_APPTHUMB);
+       elm_object_signal_emit(obj, SIG_UNFOCUSED, PART_APPTHUMB);
 
        lbl = elm_object_part_content_get(obj, PART_THUMB_TXT);
        if (!lbl) {
@@ -224,12 +220,11 @@ void CAppsBaseLayout::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *ite
        snprintf(title, sizeof(title),
                        "<align=center><color=#D3D3D3FF>"
                        "<font_size=30>%s</font_size>"
-                       "</color></align>", tdata->name);
+                       "</color></align>", ainfo->Name());
 
        elm_object_text_set(lbl, title);
        elm_label_ellipsis_set(lbl, EINA_TRUE);
-       elm_label_slide_mode_set(lbl,
-                       ELM_LABEL_SLIDE_MODE_NONE);
+       elm_label_slide_mode_set(lbl, ELM_LABEL_SLIDE_MODE_NONE);
        elm_label_slide_go(lbl);
 }
 
@@ -248,26 +243,6 @@ void CAppsBaseLayout::sm_CbThumbnailDeleted(void *data, Evas *e, Evas_Object *ob
 }
 
 /**
- * @Function which will be used as a sorting method.
- *
- * @param[in] first_data : to be compared data
- * @param[in] second_data : to be compared data
- */
-int CAppsBaseLayout::sm_CbSortThumbs(const void *first_data, const void *second_data)
-{
-       struct thumb_data *tdata1 = (struct thumb_data *)(first_data);
-       struct thumb_data *tdata2 = (struct thumb_data *)(second_data);
-
-       if (!tdata1 || !tdata1->name)
-               return 1;
-
-       if (!tdata2 || !tdata2->name)
-               return -1;
-
-       return strcmp(tdata1->name, tdata2->name);
-}
-
-/**
  * @Forms the layout of the app thumbnail object.
  *
  * @param[in] obj : the parent object, namely table object
@@ -335,29 +310,29 @@ void CAppsBaseLayout::sm_CbThumbnailBack(void *data, Evas_Object *obj, void *ev)
 /**
  * @Packs the app thumbnail object to the table.
  *
- * @param[in] tdata : app thumbnail data handler
+ * @param[in] ainfo : app thumbnail info handler
  */
-void CAppsBaseLayout::m_PackThumbnail(struct thumb_data *tdata)
+void CAppsBaseLayout::m_PackThumbnail(CAppInfo *ainfo)
 {
-       ASSERT(tdata);
+       ASSERT(ainfo);
 
        Evas_Object *thumb, *img;
        char *pkgname_ptr;
        int r;
 
-       thumb = m_LoadAppInfo(m->table, tdata->name, tdata->icon);
+       thumb = m_LoadAppInfo(m->table, ainfo->Name(), ainfo->Icon());
        if (!thumb) {
                _ERR("m_LoadAppInfo failed.");
                return;
        }
-       _SET_PRIV(thumb, tdata);
+       _SET_PRIV(thumb, ainfo);
 
-       if (!tdata->pkgname) {
+       if (!ainfo->Pkgname()) {
                _ERR("App ID is NULL.");
                return;
        }
 
-       r = app_content_favorite_is_set(APP_CF_APPS, tdata->pkgname);
+       r = app_content_favorite_is_set(APP_CF_APPS, ainfo->Pkgname());
        if (r > 0) {
                img = elm_image_add(thumb);
                if (!img) {
@@ -377,8 +352,8 @@ void CAppsBaseLayout::m_PackThumbnail(struct thumb_data *tdata)
        if (m->cur_x == 0)
                m->top_right_thumb = thumb;
 
-       tdata->x = m->cur_x;
-       tdata->y = m->cur_y;
+       ainfo->SetCoordX(m->cur_x);
+       ainfo->SetCoordY(m->cur_y);
 
        elm_table_pack(m->table, thumb, m->cur_y++, m->cur_x, 1, 1);
        evas_object_show(thumb);
@@ -388,7 +363,7 @@ void CAppsBaseLayout::m_PackThumbnail(struct thumb_data *tdata)
                m->cur_y = 0;
        }
 
-       pkgname_ptr = strdup(tdata->pkgname);
+       pkgname_ptr = strdup(ainfo->Pkgname());
 
        Connect(thumb, EO_THUMBNAIL, TYPE_MOUSE_MOVE | TYPE_FOCUSED
                        | TYPE_KEY_DOWN | TYPE_UNFOCUSED | TYPE_MOUSE_DOWN);
@@ -415,7 +390,7 @@ ail_cb_ret_e CAppsBaseLayout::sm_CbAppFilter(const ail_appinfo_h appinfo, void *
        ASSERT(data);
 
        SAppsBaseLayout *m = (SAppsBaseLayout *)data;
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        char *pkgname, *name, *icon, *category, *version, *pkgid;
        int r, i;
 
@@ -424,6 +399,12 @@ ail_cb_ret_e CAppsBaseLayout::sm_CbAppFilter(const ail_appinfo_h appinfo, void *
                return AIL_CB_RET_CANCEL;
        }
 
+       ainfo = new CAppInfo;
+
+       ainfo->Create();
+       if (!ainfo)
+               return AIL_CB_RET_CANCEL;
+
        r = ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &pkgname);
        if (r != AIL_ERROR_OK)
                goto err;
@@ -460,35 +441,31 @@ ail_cb_ret_e CAppsBaseLayout::sm_CbAppFilter(const ail_appinfo_h appinfo, void *
                        return AIL_CB_RET_CONTINUE;
        }
 
-       tdata = (struct thumb_data *)calloc(1, sizeof(*tdata));
-       if (!tdata) {
-               _ERR("calloc failed.");
-               return AIL_CB_RET_CONTINUE;
-       }
-
        if (pkgname)
-               tdata->pkgname = strdup(pkgname);
+               ainfo->SetPkgname(pkgname);
        if (pkgid)
-               tdata->pkgid = strdup(pkgid);
+               ainfo->SetPkgid(pkgid);
        if (name)
-               tdata->name = strdup(name);
+               ainfo->SetName(name);
        if (icon)
-               tdata->icon = strdup(icon);
+               ainfo->SetIcon(icon);
        if (category)
-               tdata->category = strdup(category);
+               ainfo->SetCategory(category);
        if (version)
-               tdata->version = strdup(version);
+               ainfo->SetVersion(version);
 
-       m->menulist[APPS_LIST] = eina_list_append(m->menulist[APPS_LIST], tdata);
+       m->menulist[APPS_LIST] = eina_list_append(m->menulist[APPS_LIST], ainfo);
 
        r = app_content_favorite_is_set(APP_CF_APPS, pkgname);
        if (r > 0)
-               m->menulist[FAV_LIST] = eina_list_append(m->menulist[FAV_LIST], tdata);
+               m->menulist[FAV_LIST] = eina_list_append(m->menulist[FAV_LIST], ainfo);
 
        return AIL_CB_RET_CONTINUE;
 
 err:
        _ERR("ail_appinfo_get_str failed.");
+       ainfo->Destroy();
+       delete ainfo;
 
        return AIL_CB_RET_CONTINUE;
 }
@@ -537,7 +514,7 @@ Eina_List *CAppsBaseLayout::m_GetCategoryList(void)
        Eina_List *list = NULL;
        GList *l;
        ail_appinfo_h aih;
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        char *contents_id, *name, *icon, *pkgid;
        int i, idx, r;
 
@@ -573,22 +550,22 @@ Eina_List *CAppsBaseLayout::m_GetCategoryList(void)
                        continue;
                }
 
-               tdata = (struct thumb_data *)calloc(1, sizeof(*tdata));
-               if (!tdata) {
-                       _ERR("calloc failed.");
+               ainfo = new CAppInfo;
+
+               ainfo->Create();
+               if (!ainfo)
                        continue;
-               }
 
                if (contents_id)
-                       tdata->pkgname = strdup(contents_id);
+                       ainfo->SetPkgname(contents_id);
                if (name)
-                       tdata->name = strdup(name);
+                       ainfo->SetName(name);
                if (pkgid)
-                       tdata->pkgid = strdup(pkgid);
+                       ainfo->SetPkgid(pkgid);
                if (icon)
-                       tdata->icon = strdup(icon);
+                       ainfo->SetIcon(icon);
 
-               list = eina_list_append(list, tdata);
+               list = eina_list_append(list, ainfo);
 
                ail_destroy_appinfo(aih);
        }
@@ -627,19 +604,19 @@ void CAppsBaseLayout::m_SortTableContents(Eina_List *list)
 {
        ASSERT(list);
 
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        void *obj;
        Eina_List *l;
 
        if (m->sort_type == SORT_A_TO_Z) {
                EINA_LIST_FOREACH(list, l, obj) {
-                       tdata = (struct thumb_data *)obj;
-                       m_PackThumbnail(tdata);
+                       ainfo = (CAppInfo *)obj;
+                       m_PackThumbnail(ainfo);
                }
        } else if (m->sort_type == SORT_Z_TO_A) {
                EINA_LIST_REVERSE_FOREACH(list, l, obj) {
-                       tdata = (struct thumb_data *)obj;
-                       m_PackThumbnail(tdata);
+                       ainfo = (CAppInfo *)obj;
+                       m_PackThumbnail(ainfo);
                }
        }
 }
@@ -739,8 +716,10 @@ void CAppsBaseLayout::m_LoadBrowsingTable(void)
                return;
        }
 
-       m->menulist[APPS_LIST] = eina_list_sort(m->menulist[APPS_LIST], 0, sm_CbSortThumbs);
-       m->menulist[FAV_LIST] = eina_list_sort(m->menulist[FAV_LIST], 0, sm_CbSortThumbs);
+       m->menulist[APPS_LIST] = eina_list_sort(m->menulist[APPS_LIST],
+                       0, CAppInfo::s_SortTitleAZ);
+       m->menulist[FAV_LIST] = eina_list_sort(m->menulist[FAV_LIST],
+                       0, CAppInfo::s_SortTitleAZ);
 
        elm_object_content_set(scroller, table);
        elm_object_part_content_set(m->base, PART_APPTABLE, scroller);
@@ -750,13 +729,13 @@ void CAppsBaseLayout::m_UpdateFavoriteList(const char *pkgname)
 {
        ASSERT(pkgname);
 
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        void *obj;
        Eina_List *l;
 
        EINA_LIST_FOREACH(m->menulist[FAV_LIST], l, obj) {
-               tdata = (struct thumb_data *)obj;
-               if (!strcmp(pkgname, tdata->pkgname)) {
+               ainfo = (CAppInfo *)obj;
+               if (!strcmp(pkgname, ainfo->Pkgname())) {
                        m->menulist[FAV_LIST]
                                = eina_list_remove_list(m->menulist[FAV_LIST], l);
                        return;
@@ -791,7 +770,7 @@ bool CAppsBaseLayout::m_AddToFavoriteList(char *pkgname)
 {
        ASSERT(pkgname);
 
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        ail_appinfo_h aih;
        char *name, *icon, *category, *version, *pkgid;
        int r;
@@ -822,24 +801,26 @@ bool CAppsBaseLayout::m_AddToFavoriteList(char *pkgname)
        if (r != AIL_ERROR_OK)
                goto err;
 
-       tdata = (struct thumb_data *)calloc(1, sizeof(*tdata));
-       if (!tdata)
+       ainfo = new CAppInfo();
+
+       ainfo->Create();
+       if (!ainfo)
                goto err;
 
        if (pkgname)
-               tdata->pkgname = strdup(pkgname);
+               ainfo->SetPkgname(pkgname);
        if (name)
-               tdata->name = strdup(name);
+               ainfo->SetName(name);
        if (name)
-               tdata->pkgid = strdup(pkgid);
+               ainfo->SetPkgid(pkgid);
        if (icon)
-               tdata->icon = strdup(icon);
+               ainfo->SetIcon(icon);
        if (category)
-               tdata->category = strdup(category);
+               ainfo->SetCategory(category);
        if (version)
-               tdata->version = strdup(version);
+               ainfo->SetVersion(version);
 
-       m->menulist[FAV_LIST] = eina_list_append(m->menulist[FAV_LIST], tdata);
+       m->menulist[FAV_LIST] = eina_list_append(m->menulist[FAV_LIST], ainfo);
 
        ail_destroy_appinfo(aih);
 
@@ -867,7 +848,7 @@ void CAppsBaseLayout::sm_CbPackageUpdated(const char *type, const char *package,
 
        CAppsBaseLayout *This = (CAppsBaseLayout *)user_data;
        SAppsBaseLayout *m = (SAppsBaseLayout *)This->m;
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        void *obj;
        Eina_List *l;
        int r;
@@ -876,8 +857,8 @@ void CAppsBaseLayout::sm_CbPackageUpdated(const char *type, const char *package,
                return;
 
        EINA_LIST_FOREACH(m->menulist[APPS_LIST], l, obj) {
-               tdata = (struct thumb_data *)obj;
-               if (!strcmp(package, tdata->pkgname)) {
+               ainfo = (CAppInfo *)obj;
+               if (!strcmp(package, ainfo->Pkgname())) {
                        m->menulist[APPS_LIST] =
                                eina_list_remove_list(m->menulist[APPS_LIST],
                                        l);
@@ -886,8 +867,8 @@ void CAppsBaseLayout::sm_CbPackageUpdated(const char *type, const char *package,
        }
 
        EINA_LIST_FOREACH(m->menulist[FAV_LIST], l, obj) {
-               tdata = (struct thumb_data *)obj;
-               if (!strcmp(package, tdata->pkgname)) {
+               ainfo = (CAppInfo *)obj;
+               if (!strcmp(package, ainfo->Pkgname())) {
                        m->menulist[FAV_LIST] =
                                eina_list_remove_list(m->menulist[FAV_LIST],
                                        l);
@@ -990,38 +971,21 @@ bool CAppsBaseLayout::Create(CLayoutMgr *mgr, void *data)
        return true;
 }
 
-/**
- * @Frees the allocated list data memory.
- *
- * @param[in] tdata : app thumbnail data handler
- */
-void CAppsBaseLayout::m_FreeListItem(struct thumb_data *tdata)
-{
-       if (!tdata)
-               return;
-
-       free(tdata->pkgname);
-       free(tdata->name);
-       free(tdata->icon);
-       free(tdata->version);
-       free(tdata->category);
-       free(tdata);
-}
-
 void CAppsBaseLayout::Destroy(void)
 {
        ASSERT(m);
 
        CBaseLayout::Destroy();
 
-       struct thumb_data *tdata;
+       CAppInfo *ainfo = NULL;
        void *obj;
        int i;
 
        for (i = 0; i < m->category_cnt + 2; i++) {
                EINA_LIST_FREE(m->menulist[i], obj) {
-                       tdata = (struct thumb_data *)obj;
-                       m_FreeListItem(tdata);
+                       ainfo = (CAppInfo *)obj;
+                       ainfo->Destroy();
+                       delete ainfo;
                }
        }