Resolves jira TIZENIOT-1958 solves unusual behavior in adding tracks to playlist 00/245900/3
authorJagrat Patidar <j1.patidar@samsung.com>
Mon, 19 Oct 2020 10:16:47 +0000 (15:46 +0530)
committerJagrat Patidar <j1.patidar@samsung.com>
Mon, 19 Oct 2020 12:30:14 +0000 (18:00 +0530)
Change-Id: Ie94273436770bfecb47eb515430f06d7ae6587a8

src/view/mp-add-track-view.c
src/view/mp-list-view.c
src/view/mp-select-track-view.c

index 160088cf9da2965355d3a9eee9c12ae0a6761d56..2a9f8a98de5fb6f83f0d3fe305c616db97d99a88 100755 (executable)
@@ -147,6 +147,7 @@ static int _mp_add_track_view_update_option(void *thiz)
                        }
                }
        } else {
+               elm_object_disabled_set(view->done_btn, EINA_TRUE);
                Evas_Object *more_btn = NULL;
                more_btn =
                        elm_object_item_part_content_get(view->navi_it, "toolbar");
index b2cb7c0804a69774fecfda4c81854c2c725545dc..8578223b356120e2d42065cd0ea3f516edd22aaa 100755 (executable)
@@ -93,18 +93,41 @@ static void _mp_list_select_all_cb(void *data, Evas_Object * obj,
        it = mp_list_first_item_get(genlist);
        MpList_t *list = view->content_to_show;
 
-       ad->checkedList = NULL;
        char *uri = NULL;
        while (it) {
-               if (value) {
-                       it_data = elm_object_item_data_get(it);
-                       mp_media_info_get_file_path(it_data->handle, &uri);
+               it_data = elm_object_item_data_get(it);
+               mp_media_info_get_file_path(it_data->handle, &uri);
+               if (ad->checkedList && uri) {
+                       ad->checkedList = g_list_first(ad->checkedList);
+                       GList *l;
+                       if (value) {
+                               int flag = 0;
+                               for (l = ad->checkedList ; l != NULL ; l = l->next) {
+                                       if (g_strcmp0(l->data, uri) == 0) {
+                                               flag = 1;
+                                               break;
+                                       }
+                               }
+                               if (!flag) {
+                                       ad->checkedList = g_list_append(ad->checkedList, g_strdup(uri));
+                               }
+                       } else {
+                               for (l = ad->checkedList ; l != NULL ; l = l->next) {
+                                       if (g_strcmp0(l->data, uri) == 0) {
+                                               IF_FREE(l->data);
+                                               ad->checkedList = g_list_delete_link(ad->checkedList, l);
+                                               break;
+                                       }
+                               }
+                       }
+               } else {
                        if (uri) {
                                ad->checkedList = g_list_append(ad->checkedList, g_strdup(uri));
                        }
-                       SAFE_FREE(uri);
-                       mp_media_info_assign_null(it_data->handle);
                }
+               SAFE_FREE(uri);
+               mp_media_info_assign_null(it_data->handle);
+
                if (mp_list_item_select_mode_get(it) ==
                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY
                        || elm_object_item_disabled_get(it) == TRUE) {
@@ -118,8 +141,7 @@ static void _mp_list_select_all_cb(void *data, Evas_Object * obj,
 
        mp_view_update_options_edit((MpView_t *) view);
        mp_util_create_selectioninfo_with_count(view,
-                       mp_list_get_checked_count
-                       (list));
+                       g_list_length(ad->checkedList));
 
        endfunc;
 }
index 1da5eb67bb3aed1e2da9961769d5fcec15aad69b..3a42ced81acb179c6d8119b5986de71f3b14404e 100755 (executable)
@@ -61,6 +61,86 @@ static Eina_Bool _mp_select_track_view_back_cb(void *data,
        return EINA_TRUE;
 }
 
+static void _mp_select_track_view_list_append(MpTrackList_t * list,
+               mp_media_list_h svc_handle,
+               int count)
+{
+
+       struct appdata *ad = mp_util_get_appdata();
+       MP_CHECK(ad);
+
+       int index = 0;
+       for (index = 0; index < count; index++) {
+               mp_media_info_h item = NULL;
+               item = mp_media_info_list_nth_item(svc_handle, index);
+               mp_list_item_data_t *item_data;
+               item_data = calloc(1, sizeof(mp_list_item_data_t));
+               MP_CHECK(item_data);
+               item_data->handle = item;
+               item_data->index = index;
+               item_data->group_type = MP_GROUP_NONE;
+
+               char *file_path = NULL;
+               mp_media_info_get_file_path(item, &file_path);
+               if (ad->selector_mode_bit) {
+                       item_data->checked = EINA_FALSE;
+                       if (ad->checkedList) {
+                               ad->checkedList = g_list_first(ad->checkedList);
+                               GList *l;
+                               for (l = ad->checkedList ; l != NULL ; l = l->next) {
+                                       if (g_strcmp0(l->data, file_path) == 0) {
+                                               item_data->checked = EINA_TRUE;
+                                               break;
+                                       }
+                               }
+                       }
+               } else {
+                       item_data->checked =
+                                       mp_list_is_in_checked_path_list(list->checked_path_list,
+                                                       file_path);
+               }
+
+               item_data->it = elm_genlist_item_append(list->genlist, list->itc, item_data,
+                                       NULL, ELM_GENLIST_ITEM_NONE,
+                                       NULL, list);
+       }
+       endfunc;
+}
+
+static void _mp_track_list_item_del_cb(void *data, Evas_Object * obj)
+{
+       mp_list_item_data_t *item_data = data;
+       MP_CHECK(item_data);
+       SAFE_FREE(item_data);
+}
+
+static void mp_select_track_view_modify_list(MpTrackList_t *list)
+{
+       MP_CHECK(list);
+       elm_genlist_clear(list->genlist);
+
+       list->itc = elm_genlist_item_class_new();
+       if (list->itc) {
+               list->itc->item_style = "2line";
+               list->itc->func.text_get = NULL;
+               list->itc->func.content_get = NULL;
+               list->itc->func.del = _mp_track_list_item_del_cb;
+       }
+
+       mp_media_list_h svc_handle = NULL;
+       int count = 0;
+
+       mp_media_info_list_count(MP_TRACK_LIST_TYPE, MP_TRACK_LIST_TYPE_STR,
+                                       MP_TRACK_LIST_TYPE_STR2, MP_TRACK_ALL,
+                                       -1, &count);
+
+       mp_media_info_list_create(&svc_handle, MP_TRACK_LIST_TYPE,
+                       MP_TRACK_LIST_TYPE_STR, MP_TRACK_LIST_TYPE_STR2,
+                       MP_TRACK_ALL, -1, 0,
+                       count);
+       _mp_select_track_view_list_append(list, svc_handle, count);
+       DEBUG_TRACE("List modified to include all the checked songs");
+}
 void
 mp_select_track_view_add_to_playlist_cb(void *data, Evas_Object * obj,
                                                                                void *event_info)
@@ -71,7 +151,10 @@ mp_select_track_view_add_to_playlist_cb(void *data, Evas_Object * obj,
                                                                                                  MP_VIEW_ADD_TRACK);
        MP_CHECK(view);
 
-       mp_edit_cb_excute_add_to_playlist(data, view->playlist_id, NULL, true);
+       MpTrackList_t *list  = data;
+       mp_select_track_view_modify_list(list);
+
+       mp_edit_cb_excute_add_to_playlist(list, view->playlist_id, NULL, true);
 }
 
 static int _mp_select_track_view_update_options(void *thiz)