Ringtone module 38/103938/1
authorRadek Kintop <r.kintop@samsung.com>
Sun, 11 Dec 2016 20:54:08 +0000 (21:54 +0100)
committerRadek Kintop <r.kintop@samsung.com>
Sun, 11 Dec 2016 20:54:08 +0000 (21:54 +0100)
- new feature: caller can specify custom file to be associated with Default item

Change-Id: I34927676b8f6d4fbaa9565bb5d18b52b21c24d87
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
setting-ringtone/include/setting-ringtone.h
setting-ringtone/src/setting-ringtone-main.c
setting-ringtone/src/setting-ringtone.c

index 23ac7b8d2615f88f05e1fdeb6441ddf26a9bd5bf..fead1223a9b5450c0ad072b64bd4aabfe4793fd3 100644 (file)
        sound_stream_info_h ringtone_sound_stream_info;
        player_h media_player;
 
-       char *dir_path;
-       char *appctl_file_path;
-       bool show_notification; /* by default, this application looks into ringtone directory*/
+       char *appctl_dir_path; /* This is the directory to be listed upon
+                               ring tone application startup.
+                               Normally this application looks into its default
+                               directory. If the caller passes custom
+                               directory, then it will also list files from
+                               there.
+                               Depends on appctl APP_CONTROL_DATA_PATH
+                               parameter. */
+       char *appctl_file_path; /* This is the filename to be selected upon
+                               ring tone application startup.
+                               Depends on appctl APP_CONTROL_DATA_SELECTED
+                               parameter. */
+       bool show_notification; /* By default, this application
+                               looks into ring tone directory.
+                               If this flag is set it will look
+                               into notifications directory.
+                               Depends on appctl "show_notification" parameter.
+                               */
+       char *default_substitution; /* This application displays "Default item"
+                                    if the caller is external application
+                                    (other than settings).
+                                    By default "Default" item is assigned
+                                    RINGTONE_FILE_PATH_DEF or
+                                    ALERT_FILE_PATH_DEF
+                                    (depending on show_notification flag).
+                                    The default_substitution allows external
+                                    application to change such assignment.
+                                    It can pass it's own default file path.
+                                    Depends on appctl "default_substitution"
+                                    parameter.*/
        bool caller_is_settings_app;
        char *selected_file_path;
 
index 57e136caa3815b76e4b30a5c487c30e46544092e..82dd41259ad68dcb0fdbda067764bd1067759ea6 100755 (executable)
@@ -144,10 +144,12 @@ static int setting_ringtone_destroy(void *cb)
        if (ad->media_player)
                ringtone_stop_sound(ad);
 
-       free(ad->dir_path);
+       free(ad->appctl_dir_path);
        free(ad->appctl_file_path);
        free(ad->selected_file_path);
-       ad->dir_path = ad->appctl_file_path = ad->selected_file_path = NULL;
+       free(ad->default_substitution);
+       ad->appctl_dir_path = ad->appctl_file_path = ad->selected_file_path =
+       ad->default_substitution = NULL;
 
        EINA_LIST_FREE(ad->filelist, node) {
                free(node->path);
@@ -355,15 +357,16 @@ static int _compare_cb(const void *d1, const void *d2)
 
 static char *_get_default_filepath(SettingRingtoneData *ad)
 {
-       char *default_ringtone = NULL;
        retv_if(ad == NULL, NULL);
 
+       /* This is an override from appctl parameter "default_substitution": */
+       if (ad->default_substitution)
+               return strndup(ad->default_substitution, PATH_MAX);
+
        if (ad->show_notification)
-               default_ringtone = strdup(ALERT_FILE_PATH_DEF);
-       else
-               default_ringtone = strdup(RINGTONE_FILE_PATH_DEF);
+               return strndup(ALERT_FILE_PATH_DEF, PATH_MAX);
 
-       return default_ringtone;
+       return strndup(RINGTONE_FILE_PATH_DEF, PATH_MAX);
 }
 
 static void _move_more_ctxpopup(SettingRingtoneData *ad)
@@ -535,8 +538,8 @@ static void _append_default_ringtones(SettingRingtoneData *ad)
                        SETTING_TRACE_ERROR(
                                "Failed to get default file list from %s",
                                ALERT_DIR_PATH);
-               append_custom_dir = (safeStrCmp(ALERT_DIR_PATH, ad->dir_path)
-                               && safeStrCmp(ALERT_DIR_PATH_1, ad->dir_path));
+               append_custom_dir = (safeStrCmp(ALERT_DIR_PATH, ad->appctl_dir_path)
+                               && safeStrCmp(ALERT_DIR_PATH_1, ad->appctl_dir_path));
        } else {
                ret = get_filelist_from_dir_path(RINGTONE_DIR_PATH,
                                                &ad->filelist);
@@ -544,18 +547,18 @@ static void _append_default_ringtones(SettingRingtoneData *ad)
                        SETTING_TRACE_ERROR(
                                "Failed to get default file list from %s",
                                RINGTONE_DIR_PATH);
-               append_custom_dir = (safeStrCmp(RINGTONE_DIR_PATH, ad->dir_path)
-                       && safeStrCmp(RINGTONE_DIR_PATH_1, ad->dir_path));
+               append_custom_dir = (safeStrCmp(RINGTONE_DIR_PATH, ad->appctl_dir_path)
+                       && safeStrCmp(RINGTONE_DIR_PATH_1, ad->appctl_dir_path));
        }
 
        /* Also if appctl caller has added custom dir, append it: */
-       if (append_custom_dir && ad->dir_path) {
-               SETTING_TRACE("ad->dir_path = %s", ad->dir_path);
-               ret = get_filelist_from_dir_path(ad->dir_path, &ad->filelist);
+       if (append_custom_dir && ad->appctl_dir_path) {
+               SETTING_TRACE("ad->appctl_dir_path = %s", ad->appctl_dir_path);
+               ret = get_filelist_from_dir_path(ad->appctl_dir_path, &ad->filelist);
                if (ret != 0)
                        SETTING_TRACE_ERROR(
                                "Failed to get customdir filelist, ret = %d %s",
-                               ret, ad->dir_path);
+                               ret, ad->appctl_dir_path);
        }
 }
 
@@ -683,6 +686,7 @@ static void _create_main_ui_list(SettingRingtoneData *ad)
                if (!safeStrCmp(full_path, ad->appctl_file_path)) {
                        cur_pos = cnt;
                        cur_item = item_data->item;
+                       free(ad->selected_file_path);
                        ad->selected_file_path = strdup(full_path);
                }
                cnt++;
index 9da8dcb73899d172b6514b429eddc64da1701bda..a398065a9efa2e0f3fa6163b783f7e873dd09f5b 100644 (file)
@@ -51,6 +51,11 @@ bool __parse_appctl_request(app_control_h service, void *priv)
        free(show_notification);
        show_notification = NULL;
 
+       ad->default_substitution = NULL;
+       (void)app_control_get_extra_data(service, "default_substitution",
+                                       &ad->default_substitution);
+
+
        (void)app_control_get_extra_data_array(service, APP_CONTROL_DATA_SELECTED, &paths, &paths_len);
        if (paths_len > 0) {
                ad->appctl_file_path = strdup(paths[0]);
@@ -63,22 +68,24 @@ bool __parse_appctl_request(app_control_h service, void *priv)
        paths_len = 0;
        (void)app_control_get_extra_data_array(service, APP_CONTROL_DATA_PATH, &paths, &paths_len);
        if (paths_len > 0) {
-               ad->dir_path = strdup(paths[0]);
+               ad->appctl_dir_path = strdup(paths[0]);
        } else {
-               ad->dir_path = strdup("");
+               ad->appctl_dir_path = strdup("");
        }
        free(paths);
 
-       if (!ad->dir_path || strnlen(ad->dir_path, PATH_MAX) == 0)
+       if (!ad->appctl_dir_path || strnlen(ad->appctl_dir_path, PATH_MAX) == 0)
                SETTING_TRACE("dir path is NULL, setting  only defaults will be shown %s", _TZ_SYS_SHARE"/settings/Ringtones");
 
        if (!ad->appctl_file_path || strnlen(ad->appctl_file_path, PATH_MAX))
-               SETTING_TRACE("selected path is NULL, setting to default ringtone");
+               SETTING_TRACE("selected path is NULL, setting to default ring tone");
 
        SETTING_TRACE("caller is settings app: %d %s", ad->caller_is_settings_app, caller_id);
-       SETTING_TRACE("dir path: %s", ad->dir_path);
+       SETTING_TRACE("dir path: %s", ad->appctl_dir_path);
        SETTING_TRACE("current file path: %s", ad->appctl_file_path);
-
+       if (ad->default_substitution)
+               SETTING_TRACE("Default file path will be set to %s",
+                               ad->default_substitution);
        free(caller_id);
 
        return TRUE;