Adding share feature 69/257869/4
authorJagrat Patidar <j1.patidar@samsung.com>
Wed, 5 May 2021 05:12:51 +0000 (10:42 +0530)
committerJagrat Patidar <j1.patidar@samsung.com>
Wed, 5 May 2021 06:35:43 +0000 (12:05 +0530)
Change-Id: I966745159382939142660085236f53787a849ed1

14 files changed:
inc/mp-resource.h
res/po/en.po
res/po/en_PH.po
res/po/en_US.po
src/common/include/mp-edit-callback.h
src/common/mp-edit-callback.c
src/include/mp-define.h
src/view/include/mp-edit-view.h
src/view/mp-album-detail-view.c
src/view/mp-all-view.c
src/view/mp-artist-detail-view.c
src/view/mp-edit-view.c
src/view/mp-list-view.c
src/view/mp-playlist-detail-view.c

index 6aac21780f42f73d7fad9620afe98ac65113995d..2b8cec90df43433b61197ab90a57907852c7e982 100755 (executable)
@@ -55,6 +55,7 @@
 #define        STR_MP_DONT_ASK_AGAIN   "IDS_MUSIC_BUTTON_DONT_ASK_AGAIN"
 #define        STR_MP_ENABLE_MOTION            "IDS_MUSIC_BUTTON_ENABLE_MOTION"
 #define        STR_MP_DELETE                   ("IDS_MUSIC_OPT_DELETE")
+#define        STR_MP_SHARE                    ("IDS_MUSIC_OPT_SHARE")
 #define        STR_MP_CANCEL                           "IDS_MUSIC_SK_CANCEL"
 #define        STR_MP_OK                                       "IDS_COM_SK_OK"
 #define STR_MP_CLOSE                           "IDS_COM_BODY_CLOSE"
index d1fb09cd8767df80799ad499e633c383f405b1f7..736fde288edb24dbcc15856b2744014d65a48ae9 100755 (executable)
@@ -1369,6 +1369,9 @@ msgstr "Unable to play music during calls."
 msgid "IDS_MUSIC_OPT_DELETE"
 msgstr "Delete"
 
+msgid "IDS_MUSIC_OPT_SHARE"
+msgstr "Share"
+
 msgid "IDS_MUSIC_HEADER_SELECT"
 msgstr "Select"
 
index 889a2a4e4c2207f93ff243d79d7bce8056f1d908..eb70189bf218b5d50cc20a14c447c955c55c42d7 100755 (executable)
@@ -1369,6 +1369,9 @@ msgstr "Unable to play music during calls."
 msgid "IDS_MUSIC_OPT_DELETE"
 msgstr "Delete"
 
+msgid "IDS_MUSIC_OPT_SHARE"
+msgstr "Share"
+
 msgid "IDS_MUSIC_HEADER_SELECT"
 msgstr "Select"
 
index 03bad50ca5f723c7c5955e88e5fece161543f097..9d4776ac6d1c5f1d65241273f2df25eb4a710387 100755 (executable)
@@ -1369,6 +1369,9 @@ msgstr "Unable to play music during calls."
 msgid "IDS_MUSIC_OPT_DELETE"
 msgstr "Delete"
 
+msgid "IDS_MUSIC_OPT_SHARE"
+msgstr "Share"
+
 msgid "IDS_MUSIC_HEADER_SELECT"
 msgstr "Select"
 
index 362bb75e833946cb96a1c8195194c3cc610a65aa..6f7fad5dc9b8bf897d9b30823fb6c139d1648a18 100755 (executable)
@@ -27,6 +27,7 @@ typedef enum {
 
 #include "music.h"
 void mp_edit_create_delete_popup(void *data);
+void mp_edit_create_share(void *data);
 void mp_edit_create_add_to_playlist_popup(void *data);
 #ifndef MP_SOUND_PLAYER
 void *mp_edit_get_delete_thread();
index bb290277bb6043762bcfcf459002384b0d1a3b71..43615af011e37f6357c7aca02fa32df5f6d01d01 100755 (executable)
@@ -70,6 +70,9 @@ static int g_selected_count;
 static int g_selected_tracklist_count;
 static void *g_playlist_handle;
 static char *g_playlist_name;
+static app_control_h g_share_service = NULL;
+static char **g_share_list = NULL;
+static int g_share_list_size = 0;
 
 void mp_edit_cb_excute_track_delete(void *data);
 static void _mp_edit_message_popup_response_cb(void *data, Evas_Object * obj, void *event_info);
@@ -2178,6 +2181,197 @@ _mp_edit_delete_popup_response_cb(void *data, Evas_Object * obj,
        return;
 }
 
+static void mp_share_view_create_launch_share_panel()
+{
+       char *pOperation = MP_SHARE_OPERATION_SINGLE;
+       int counter;
+       int err = 0;
+
+       if (g_share_list_size > 1) {
+               pOperation = MP_SHARE_OPERATION_MULTIPLE;
+       }
+
+       if (!g_share_list) {
+               DEBUG_TRACE("[WARNING] Fail to get uri at first.");
+               goto ERROR_EXCEPTION;
+       }
+
+       if (!g_share_service) {
+               err = app_control_create(&g_share_service);
+               if (err != APP_CONTROL_ERROR_NONE) {
+                       DEBUG_TRACE("Fail to create ug service handle - [0x%x]",
+                                                err);
+                       goto ERROR_EXCEPTION;
+               }
+       }
+
+       err = app_control_set_uri(g_share_service, g_share_list[0]);
+       if (err != APP_CONTROL_ERROR_NONE) {
+               DEBUG_TRACE("Fail to set uri into ug service handle - [0x%x]",
+                                        err);
+               goto ERROR_EXCEPTION;
+       }
+
+       err = app_control_set_operation(g_share_service, pOperation);
+       if (err != APP_CONTROL_ERROR_NONE) {
+               DEBUG_TRACE("app_control_add_extra_data_array().. [0x%x]", err);
+               goto ERROR_EXCEPTION;
+       }
+
+       if (g_share_list_size >= 1) {
+               err = app_control_add_extra_data_array(g_share_service,
+                                                                                               "http://tizen.org/appcontrol/data/path",
+                                                                                               (const char
+                                                                                                **) (&g_share_list[1]),
+                                                                                               g_share_list_size - 1);
+               if (err != APP_CONTROL_ERROR_NONE) {
+                       DEBUG_TRACE("[WARNING] app_control_add_extra_data_array() [0x%x]", err);
+                       goto ERROR_EXCEPTION;
+               }
+       }
+
+       err = app_control_send_launch_request(g_share_service, NULL, NULL);
+       if (err != APP_CONTROL_ERROR_NONE) {
+               DEBUG_TRACE("[WARNING] app_control_send_launch_request().. [0x%x]", err);
+               goto ERROR_EXCEPTION;
+       }
+
+       elm_naviframe_item_pop(GET_NAVIFRAME);
+
+       return;
+       ERROR_EXCEPTION:
+       if (g_share_service) {
+               app_control_destroy(g_share_service);
+               g_share_service = NULL;
+       }
+
+       if (g_share_list) {
+               for (counter = 0; counter < g_share_list_size; counter++) {
+                       if (g_share_list[counter]) {
+                               free(g_share_list[counter]);
+                               g_share_list[counter] = NULL;
+                       }
+               }
+               free(g_share_list);
+               g_share_list = NULL;
+       }
+}
+
+void mp_edit_create_share(void *data)
+{
+       DEBUG_TRACE("");
+       struct appdata *ad = mp_util_get_appdata();
+       MP_CHECK(ad);
+
+       MpList_t *list = data;
+       MP_CHECK(list);
+
+       int counter = 0;
+       int total_items = 0;
+       int total_appended_items = 0;
+       int extra_data_size = 0;
+
+       g_share_list_size = 0;
+
+       char **service_extra_data_uri = NULL;
+
+       GList *selected_list;
+       GList *node;
+
+       mp_list_selected_item_data_get(list, &selected_list);
+       total_items = g_list_length(selected_list);
+
+       if (total_items == 0) {
+               DEBUG_TRACE("Nothing selected to share");
+               return;
+       }
+
+       extra_data_size = total_items;
+
+       if (extra_data_size) {
+               service_extra_data_uri =
+                       (char **) calloc(extra_data_size, sizeof(char *));
+
+               /** Store the list so the share panel can be updated later
+                *  g_share_list size needs to bigger than total music size
+                *  because first url will be added twice, one for single share and
+                *  one for multiple share.
+                *  so g_share_list alloc size = extra_data_size + 1
+                */
+
+               g_share_list = (char **) calloc((extra_data_size + 1), sizeof(char *));
+       }
+
+       node = g_list_first(selected_list);
+       while (node) {
+               char *share_file_uri = NULL;
+               mp_list_item_data_t *item = node->data;
+               if (item && item->handle) {
+                       char *file_path = NULL;
+                       mp_media_info_get_file_path(item->handle, &file_path);
+                       share_file_uri = g_strdup(file_path);
+               }
+
+               if (share_file_uri) {
+                       counter++;
+                       g_share_list[0] = strdup(share_file_uri);
+                       g_share_list_size++;
+                       break;
+               } else {
+                       DEBUG_TRACE("share_file_uri does not exist.");
+               }
+               node = g_list_next(node);
+               IF_FREE(share_file_uri);
+       }
+
+       DEBUG_TRACE("counter = %d", counter);
+
+       node = g_list_first(selected_list);
+       if (extra_data_size > 0 && service_extra_data_uri) {
+               for (counter = 0; counter < total_items; counter++) {
+                       char *share_file_uri = NULL;
+                       mp_list_item_data_t *item = node->data;
+                       if (item && item->handle) {
+                               char *file_path = NULL;
+                               mp_media_info_get_file_path(item->handle, &file_path);
+                               char *path = g_strdup(file_path);
+                               share_file_uri = path;
+                       }
+                       node = g_list_next(node);
+
+                       if (share_file_uri) {
+                               if (total_appended_items < extra_data_size) {
+                                       service_extra_data_uri[total_appended_items] = share_file_uri;
+                                       DEBUG_TRACE("Appending share item : %s, Total Appended item : %d",
+                                                                       (const char **)service_extra_data_uri[total_appended_items],
+                                                                       total_appended_items);
+                                       total_appended_items++;
+                                       g_share_list[g_share_list_size++] = strdup(share_file_uri);
+                                       continue;
+                               } else {
+                                       DEBUG_TRACE("[WARNING] OVERFLOW ALOOCATED MEMORY SIZE.");
+                                       free(share_file_uri);
+                               }
+                       } else {
+                               DEBUG_TRACE("share_file_uri does not exist.");
+                       }
+               }
+       }
+
+       mp_share_view_create_launch_share_panel();
+
+       if (service_extra_data_uri) {
+               for (counter = 0; counter < extra_data_size; counter++) {
+                       if (service_extra_data_uri[counter]) {
+                               free(service_extra_data_uri[counter]);
+                               service_extra_data_uri[counter] = NULL;
+                       }
+               }
+               free(service_extra_data_uri);
+               service_extra_data_uri = NULL;
+       }
+}
+
 void mp_edit_create_delete_popup(void *data)
 {
        DEBUG_TRACE("");
index 186d54886546ac033f1403d02ac29dcab0ae05cc..26ea25be0689eedfa147f69a1d382a3605af150b 100755 (executable)
@@ -81,6 +81,9 @@
 
 #define THEME_NAME "mp-custom-winset-style.edj"
 
+#define MP_SHARE_OPERATION_SINGLE "http://tizen.org/appcontrol/operation/share"
+#define MP_SHARE_OPERATION_MULTIPLE "http://tizen.org/appcontrol/operation/multi_share"
+
 #define TITLE_H 90
 #define START_Y_POSITION       94
 
@@ -320,6 +323,7 @@ typedef enum {
        MP_DONE_ADD_TRACK_TYPE,
        MP_DONE_SELECT_ADD_TRACK_TYPE,
        MP_DONE_MAX,
+       MP_DONE_SHARE_TYPE,
 } mp_done_operator_type_t;
 
 typedef enum {
index 5fa48cafc531330ea7189e16eb874469c3bc87e7..1a8b9f10a812783c4acdcc63495b1599dbda35a3 100755 (executable)
@@ -61,6 +61,8 @@ MpEditView_t *mp_edit_view_create(Evas_Object * parent, MpList_t * list,
 #endif
 void mp_edit_view_delete_cb(void *data, Evas_Object * obj,
                                                        void *event_info);
+void mp_edit_view_share_cb(void *data, Evas_Object * obj,
+                                                       void *event_info);
 void mp_edit_view_remove_cb(void *data, Evas_Object * obj,
                                                        void *event_info);
 void mp_edit_view_list_item_reorder_update_cb(void *data,
index e0caef573effa4d3197aaf43346273addfd88d40..df1891dd4d69e7c61db45024b41db51812ed6bb1 100755 (executable)
@@ -42,6 +42,10 @@ static void _mp_album_detail_view_tracklist_edit_cb(void *data,
                                                                                                        Evas_Object * obj,
                                                                                                        void *event_info);
 
+static void _mp_album_detail_view_share_cb(void *data,
+                                                                                                       Evas_Object * obj,
+                                                                                                       void *event_info);
+
 static void _mp_album_detail_view_cb(void *data, Evas_Object * obj,
                                                                         void *event_info)
 {
@@ -118,6 +122,11 @@ static void _mp_album_detail_view_normal_more_btn_cb(void *data,
                                                                         MP_PLAYER_MORE_BTN_DELETE_IMAGE,
                                                                         _mp_album_detail_view_tracklist_edit_cb,
                                                                         view);
+               mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
+                                                                        STR_MP_SHARE,
+                                                                        MP_PLAYER_MORE_BTN_DELETE_IMAGE,
+                                                                        _mp_album_detail_view_share_cb,
+                                                                        view);
        }
 #ifdef MP_FEATURE_PERSONAL_PAGE
        if (mp_util_is_personal_page_on()) {
@@ -167,6 +176,18 @@ static void _mp_album_detail_view_tracklist_edit_cb(void *data,
        mp_common_show_edit_view((MpListView_t *) view, MP_DONE_DELETE_TYPE);
 }
 
+static void _mp_album_detail_view_share_cb(void *data,
+                                                                                                       Evas_Object * obj,
+                                                                                                       void *event_info)
+{
+       eventfunc;
+       MpAlbumDetailView_t *view = (MpAlbumDetailView_t *) data;
+       MP_CHECK(view);
+
+       mp_evas_object_del(view->more_btn_ctxpopup);
+       mp_common_show_edit_view((MpListView_t *) view, MP_DONE_SHARE_TYPE);
+}
+
 Eina_Bool _mp_album_detail_view_tracklist_back_cb(void *data,
                                                                                                  Elm_Object_Item * it)
 {
index 3685067446d8b7672ec0984d88e732e2145c8970..58a5b7c11d22e6366c4b92e3b87d06a17cdb4f81 100755 (executable)
@@ -30,6 +30,8 @@
 
 static void _mp_all_view_edit_cb(void *data, Evas_Object * obj,
                                                                 void *event_info);
+static void mp_all_view_share_cb(void *data, Evas_Object * obj,
+                                                                void *event_info);
 static void _mp_all_view_content_load(void *thiz, MpTab_e tab);
 
 #define TAB_COUNT 4
@@ -166,6 +168,12 @@ void _mp_all_view_normal_more_btn_cb(void *data, Evas_Object * obj,
                                        mp_common_create_search_view_cb,
                                        view);
                }
+               if (index == MP_TAB_SONGS) {
+                       mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
+                                       STR_MP_SHARE, NULL,
+                                       mp_all_view_share_cb,
+                                       view);
+               }
 #ifdef MP_FEATURE_PERSONAL_PAGE
                if (index == MP_TAB_SONGS) {
                        if (mp_util_is_personal_page_on()) {
@@ -220,6 +228,17 @@ static void _mp_all_view_edit_cb(void *data, Evas_Object * obj,
        mp_common_show_edit_view((MpListView_t *) view, MP_DONE_DELETE_TYPE);
 }
 
+static void mp_all_view_share_cb(void *data, Evas_Object * obj,
+                                                                void *event_info)
+{
+       eventfunc;
+       MpAllView_t *view = (MpAllView_t *) data;
+       MP_CHECK(view);
+
+       mp_evas_object_del(view->more_btn_ctxpopup);
+       mp_common_show_edit_view((MpListView_t *) view, MP_DONE_SHARE_TYPE);
+}
+
 Eina_Bool _mp_all_view_pop_cb(void *data, Elm_Object_Item * it)
 {
        startfunc;
index da7ebe888210d029b7b0d5a6fb15283944eccc4e..841a68d8dd683d30510a33f4ba06d218529d0c63 100755 (executable)
@@ -30,6 +30,9 @@
 static void _mp_artist_detail_view_tracklist_edit_cb(void *data,
                                                                                                         Evas_Object * obj,
                                                                                                         void *event_info);
+static void _mp_artist_detail_view_share_cb(void *data,
+                                                                                                        Evas_Object * obj,
+                                                                                                        void *event_info);
 static void _mp_artist_detail_view_content_load(void *thiz);
 
 static void _mp_artist_detail_view_cb(void *data, Evas_Object * obj,
@@ -113,6 +116,11 @@ static void _mp_artist_detail_view_normal_more_btn_cb(void *data,
                                                                         MP_PLAYER_MORE_BTN_DELETE_IMAGE,
                                                                         _mp_artist_detail_view_tracklist_edit_cb,
                                                                         view);
+               mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
+                                                                        STR_MP_SHARE,
+                                                                        MP_PLAYER_MORE_BTN_DELETE_IMAGE,
+                                                                        _mp_artist_detail_view_share_cb,
+                                                                        view);
        }
 #ifdef MP_FEATURE_PERSONAL_PAGE
        if (mp_util_is_personal_page_on()) {
@@ -167,6 +175,18 @@ static void _mp_artist_detail_view_tracklist_edit_cb(void *data,
        mp_common_show_edit_view((MpListView_t *) view, MP_DONE_DELETE_TYPE);
 }
 
+static void _mp_artist_detail_view_share_cb(void *data,
+                                                                                                       Evas_Object * obj,
+                                                                                                       void *event_info)
+{
+       eventfunc;
+       MpArtistDetailView_t *view = (MpArtistDetailView_t *) data;
+       MP_CHECK(view);
+
+       mp_evas_object_del(view->more_btn_ctxpopup);
+       mp_common_show_edit_view((MpListView_t *) view, MP_DONE_SHARE_TYPE);
+}
+
 /*static Eina_Bool _mp_artist_detail_view_tracklist_back_cb(void *data, Elm_Object_Item *it)
 {
        eventfunc;
index b9891a338aaf0f972f9c6ec3d1a3ab7be1d945ab..68ad92fadeea02ded8996a74460ef6f5d7c2cc90 100755 (executable)
@@ -87,6 +87,15 @@ mp_edit_view_add_to_playlist_cb(void *data, Evas_Object * obj,
        mp_edit_create_add_to_playlist_popup(view->content_to_show);
 }
 
+void
+mp_edit_view_share_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       eventfunc;
+       MpEditView_t *view = data;
+       MP_CHECK(view);
+       mp_edit_create_share(view->content_to_show);
+}
+
 void
 mp_edit_view_delete_cb(void *data, Evas_Object * obj, void *event_info)
 {
index 583f1241d946fba15e917273ac73fcc0b68a96bd..8dadc762f95ac380a1080d68771c85debe991425 100755 (executable)
@@ -254,6 +254,12 @@ static Evas_Object *_mp_list_view_set_done_button(void *thiz, bool edit,
                                                                                                view->navi_it,
                                                                                                mp_select_track_view_add_to_playlist_cb,
                                                                                                view->content_to_show);
+               } else if (type == MP_DONE_SHARE_TYPE) {
+                       done_button =
+                               mp_widget_create_navi_right_btn(view->layout,
+                                                                                               view->navi_it,
+                                                                                               mp_edit_view_share_cb,
+                                                                                               view);
                }
                MP_CHECK_NULL(done_button);
                view->done_btn = done_button;
index f6d617b50f04b1e685a8faa580e881dd8bcdb76d..82b03939d240541021c4315775bffdafabc1ac0d 100755 (executable)
@@ -41,6 +41,9 @@ static void _mp_playlist_detail_view_tracklist_reorder_cb(void *data,
                obj,
                void
                *event_info);
+static void mp_playlist_detail_view_share_cb(void *data,
+               Evas_Object * obj,
+               void *event_info);
 
 static void _mp_playlist_detail_view_cb(void *data, Evas_Object * obj,
                void *event_info) {
@@ -150,16 +153,23 @@ static void _mp_playlist_detail_view_normal_more_btn_cb(void *data,
                                        MP_PLAYER_MORE_BTN_EDIT,
                                        mp_playlist_detail_view_tracklist_edit_cb,
                                        view);
+                       mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
+                                       STR_MP_SHARE,
+                                       NULL,
+                                       mp_playlist_detail_view_share_cb,
+                                       view);
                }
 
                if (count) {
-                       /*search */
+                       /*search*/
                        mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
                                        STR_MP_SEARCH, NULL,
                                        mp_common_create_search_view_cb,
                                        view);
+
                }
 
+
 #ifndef MP_FEATURE_NO_END
                mp_util_ctxpopup_item_append(view->more_btn_ctxpopup,
                                STR_MP_END,
@@ -198,6 +208,17 @@ void mp_playlist_detail_view_tracklist_edit_cb(void *data,
        mp_common_show_edit_view((MpListView_t *) view, MP_DONE_REMOVED_TYPE);
 }
 
+static void mp_playlist_detail_view_share_cb(void *data,
+               Evas_Object * obj,
+               void *event_info) {
+       eventfunc;
+       MpPlaylistDetailView_t *view = (MpPlaylistDetailView_t *) data;
+       MP_CHECK(view);
+
+       mp_evas_object_del(view->more_btn_ctxpopup);
+       mp_common_show_edit_view((MpListView_t *) view, MP_DONE_SHARE_TYPE);
+}
+
 static void _mp_playlist_detail_view_tracklist_reorder_cb(void *data,
                Evas_Object *
                obj,