TSAM-8325: Not Sound when receive message 92/90892/4
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Tue, 4 Oct 2016 16:01:29 +0000 (19:01 +0300)
committerAndrey Klimenko <and.klimenko@samsung.com>
Wed, 5 Oct 2016 12:06:34 +0000 (05:06 -0700)
Change-Id: I8aa0f94f52633919f99952c79c3103e546a4f664
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/MsgEngine/inc/MsgSettings.h
src/Common/MsgEngine/src/private/MsgSettingsPrivate.cpp
src/Common/MsgEngine/src/private/MsgSettingsPrivate.h
src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp
src/Common/MsgEngine/src/private/MsgUtilsPrivate.h
src/Settings/Controller/inc/Settings.h
src/Settings/Controller/src/Settings.cpp
src/Settings/Controller/src/SettingsSound.cpp

index 47e22a4e0d43fe19e216d08e9cf125a05285f7f7..55bf58c10554efdec4111e72ab2c8a4fa521f6cc 100644 (file)
@@ -36,6 +36,13 @@ namespace Msg
                 AppForegroundPolicy  // App is running and on foreground, but not in conversation.
             };
 
+            enum RingtoneType
+            {
+                DefaultRingtone,
+                SilentRingtone,
+                UserRingtone
+            };
+
         public:
             MsgSettings();
             virtual ~MsgSettings();
@@ -58,8 +65,10 @@ namespace Msg
             virtual void setAlerts(bool value) = 0;
             virtual bool getAlerts() const = 0;
 
-            virtual void setNotiSound(const std::string &soundPath) = 0;
-            virtual std::string getNotiSound() const = 0;
+            virtual void setRingtoneType(RingtoneType type) = 0;
+            virtual RingtoneType getRingtoneType() const = 0;
+            virtual void setRingtone(const std::string &soundPath) = 0;
+            virtual std::string getRingtone() const = 0;
 
             virtual void setVibration(bool value) = 0;
             virtual bool getVibration() const = 0;
@@ -97,7 +106,7 @@ namespace Msg
     {
         public:
             virtual ~IMsgSettingsListener() {}
-            virtual void onNotiSoundChanged(MsgSettings &msgSetting) {};
+            virtual void onRingtoneChanged(MsgSettings &msgSetting) {};
     };
 }
 
index 341669f7a137812f3dcf42fa9a67ae184236d054..c26e925395c71580e8cc626c6ddfd3caa5f90f67 100644 (file)
 #include <vconf-internal-msg-keys.h>
 #include <vconf.h>
 
-namespace
-{
-    const char *ringtoneDefault = "default";
-    const char *ringtoneSilent = "silent";
-}
-
 using namespace Msg;
 
 MsgSettingsPrivate::MsgSettingsPrivate(msg_handle_t serviceHandle)
@@ -153,47 +147,36 @@ bool MsgSettingsPrivate::getAlerts() const
     return res;
 }
 
-void MsgSettingsPrivate::setNotiSound(const std::string &soundPath)
+void MsgSettingsPrivate::setRingtoneType(RingtoneType type)
 {
-    if (soundPath.compare(ringtoneDefault) == 0)
-    {
-        msg_set_int_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_TYPE_INT, MSG_RINGTONE_TYPE_DEFAULT);
-    }
-    else if (soundPath.compare(ringtoneSilent) == 0)
-    {
-        msg_set_int_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_TYPE_INT, MSG_RINGTONE_TYPE_SILENT);
-    }
-    else
-    {
-        msg_set_int_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_TYPE_INT, MSG_RINGTONE_TYPE_USER);
-        msg_set_str_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_PATH_STR, soundPath.c_str(), soundPath.size());
-    }
+    msg_set_int_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_TYPE_INT, MsgUtilsPrivate::ringtoneTypeToNative(type));
     msg_set_general_opt(m_ServiceHandle, m_GeneralOpt);
-
     for(auto listener: m_Listeners)
     {
-        listener->onNotiSoundChanged(*this);
+        listener->onRingtoneChanged(*this);
     }
 }
 
-std::string MsgSettingsPrivate::getNotiSound() const
+MsgSettingsPrivate::RingtoneType MsgSettingsPrivate::getRingtoneType() const
 {
-    std::string soundPath;
     int type = MSG_RINGTONE_TYPE_DEFAULT;
     msg_get_int_value(m_GeneralOpt, MSG_GENERAL_RINGTONE_TYPE_INT, &type);
-    if (type == MSG_RINGTONE_TYPE_DEFAULT)
-    {
-        soundPath = ringtoneDefault;
-    }
-    else if (type == MSG_RINGTONE_TYPE_SILENT)
-    {
-        soundPath = ringtoneSilent;
-    }
-    else
+    return MsgUtilsPrivate::nativeToRingtoneType(type);
+}
+
+void MsgSettingsPrivate::setRingtone(const std::string &soundPath)
+{
+    MsgUtilsPrivate::setStr(m_GeneralOpt, MSG_GENERAL_RINGTONE_PATH_STR, soundPath);
+    msg_set_general_opt(m_ServiceHandle, m_GeneralOpt);
+    for(auto listener: m_Listeners)
     {
-        soundPath = MsgUtilsPrivate::getStr(m_GeneralOpt, MSG_GENERAL_RINGTONE_PATH_STR, FILENAME_MAX);
+        listener->onRingtoneChanged(*this);
     }
-    return soundPath;
+}
+
+std::string MsgSettingsPrivate::getRingtone() const
+{
+    return  MsgUtilsPrivate::getStr(m_GeneralOpt, MSG_GENERAL_RINGTONE_PATH_STR, MSG_FILEPATH_LEN_MAX);
 }
 
 void MsgSettingsPrivate::setVibration(bool value)
index 521099a4fbfd80834b6ecdb95e4aa6e72e9cee8a..9cb874e5cfc77d6b3ac9c83a2fb16f5a69101973 100644 (file)
@@ -45,8 +45,10 @@ namespace Msg
             virtual void setAlerts(bool value);
             virtual bool getAlerts() const;
 
-            virtual void setNotiSound(const std::string &soundPath);
-            virtual std::string getNotiSound() const;
+            virtual void setRingtoneType(RingtoneType type);
+            virtual RingtoneType getRingtoneType() const;
+            virtual void setRingtone(const std::string &soundPath);
+            virtual std::string getRingtone() const;
 
             virtual void setVibration(bool value);
             virtual bool getVibration() const;
index 09aae4fd04eac28b4f8da2a586e599c28210bfbf..58b944d499b745857f4d00cb91362cb35d9717c1 100644 (file)
@@ -364,3 +364,31 @@ MsgTransport::SendResult MsgUtilsPrivate::nativeToSendResult(int sendRes)
             return MsgTransport::SendFail;
     }
 }
+
+MsgSettings::RingtoneType MsgUtilsPrivate::nativeToRingtoneType(int type)
+{
+    switch(type)
+    {
+        case MSG_RINGTONE_TYPE_SILENT:
+            return MsgSettings::SilentRingtone;
+        case MSG_RINGTONE_TYPE_USER:
+            return MsgSettings::UserRingtone;
+        case MSG_RINGTONE_TYPE_DEFAULT:
+            return MsgSettings::DefaultRingtone;
+    }
+    return MsgSettings::DefaultRingtone;
+}
+
+int MsgUtilsPrivate::ringtoneTypeToNative(MsgSettings::RingtoneType type)
+{
+    switch(type)
+    {
+        case MsgSettings::SilentRingtone:
+            return MSG_RINGTONE_TYPE_SILENT;
+        case MsgSettings::UserRingtone:
+            return MSG_RINGTONE_TYPE_USER;
+        case MsgSettings::DefaultRingtone:
+            return MSG_RINGTONE_TYPE_DEFAULT;
+    }
+    return MSG_RINGTONE_TYPE_DEFAULT;
+}
index 184328983d1be00b8d88d55cdb9efaa9bfaaaa69..d3fe9534cdb18fe5b15f2ef26558544c813489e9 100644 (file)
@@ -52,6 +52,8 @@ namespace Msg
             static Message::NetworkStatus nativeToNetworkStatus(int status);
             static int activeNotifPolicyToNative(MsgSettings::ActiveNotifPolicy policy);
             static MsgTransport::SendResult nativeToSendResult(int sendRes);
+            static MsgSettings::RingtoneType nativeToRingtoneType(int type);
+            static int ringtoneTypeToNative(MsgSettings::RingtoneType type);
 
             static std::string getStr(msg_struct_t msgStruct, int field, int maxStrLen);
             static int setStr(msg_struct_t msgStruct, int field, const std::string &text);
index bab6884cccc8ab17406576582fed9c44ac4935d0..bfa86e1892d491cf958640f52499fcabfc57a058 100644 (file)
@@ -62,7 +62,7 @@ namespace Msg
             virtual void onCheckButtonChanged(SettingsListViewItem &item);
 
             // IMsgSettingsListener
-            virtual void onNotiSoundChanged(MsgSettings &msgSetting);
+            virtual void onRingtoneChanged(MsgSettings &msgSetting);
 
             // ISystemSettingsManager:
             virtual void onLanguageChanged();
index f4084e2eb9461677f96d20480a91e2f62cb703d3..5d519fd71c88b81a64dcbf8928a7f236ece882ba 100644 (file)
@@ -241,7 +241,16 @@ void Settings::updateSoundItem()
 {
     MSG_LOG("updateSoundItem activated!");
     m_pSoundItem->disabled(!getMsgSettings().getAlerts());
-    m_pSoundItem->setSubText(MediaUtils::getTitle(getMsgSettings().getNotiSound()));
+
+    std::string ringtoneName;
+    if(getMsgSettings().getRingtoneType() == MsgSettings::SilentRingtone)
+        ringtoneName = "Silent";
+    else if(getMsgSettings().getRingtoneType() == MsgSettings::DefaultRingtone)
+        ringtoneName = "Default";
+    else if(getMsgSettings().getRingtoneType() == MsgSettings::UserRingtone)
+        ringtoneName = MediaUtils::getTitle(getMsgSettings().getRingtone());
+
+    m_pSoundItem->setSubText(ringtoneName);
 }
 
 void Settings::updateVibrationItem()
@@ -396,7 +405,7 @@ void Settings::onCheckButtonChanged(SettingsListViewItem &item)
         callItemHandler(*settingItem);
 }
 
-void Settings::onNotiSoundChanged(MsgSettings &msgSetting)
+void Settings::onRingtoneChanged(MsgSettings &msgSetting)
 {
     updateSoundItem();
     m_pSoundItem->update();
index 1a6f4a26f2661f036314383cba8db3c4b03defab..e14628d199b00b0882406fc25c9976065181a671 100644 (file)
@@ -31,7 +31,6 @@ namespace
     const char *sRingtoneValueSingleFile = "SINGLE_FILE";
     const char *sRingtoneKeyFileType = "file_type";
     const char *sRingtoneValueSound = "SOUND";
-    const char *sRingtoneKeyMarkedMode = "marked_mode";
     const char *sRingtoneKeySilent = "silent";
     const char *sRingtoneValueSilentShow = "silent show";
     const char *sRingtoneKeyDefault = "default";
@@ -55,17 +54,25 @@ SettingsSound::~SettingsSound()
 
 static void soundPickerCb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
 {
-    char *ringtonePath = nullptr;
+    char *ringtone = nullptr;
 
-    app_control_get_extra_data(reply, sRingtoneKeyResult, &ringtonePath);
-    if (!ringtonePath)
-    {
+    app_control_get_extra_data(reply, sRingtoneKeyResult, &ringtone);
+    if(!ringtone)
         return;
+
+    auto *settings = static_cast<MsgSettings*>(user_data);
+
+    if(strcmp(ringtone, sRingtoneKeySilent) == 0)
+        settings->setRingtoneType(MsgSettings::SilentRingtone);
+    else if(strcmp(ringtone, sRingtoneKeyDefault) == 0)
+        settings->setRingtoneType(MsgSettings::DefaultRingtone);
+    else
+    {
+        settings->setRingtoneType(MsgSettings::UserRingtone);
+        settings->setRingtone(ringtone);
     }
 
-    std::string title(MediaUtils::getTitle(ringtonePath));
-    static_cast<MsgSettings*>(user_data)->setNotiSound(title);
-    free(ringtonePath);
+    free(ringtone);
 }
 
 void SettingsSound::launchSoundPicker()
@@ -73,16 +80,27 @@ void SettingsSound::launchSoundPicker()
     app_control_h h;
     app_control_create(&h);
     app_control_set_launch_mode(h, APP_CONTROL_LAUNCH_MODE_GROUP);
+
     app_control_add_extra_data(h, sRingtoneKeyPath, sRingtoneValuePath);
     app_control_add_extra_data(h, sRingtoneKeyDomain, PACKAGE_NAME);
     app_control_add_extra_data(h, sRingtoneKeySelectType, sRingtoneValueSingleFile);
     app_control_add_extra_data(h, sRingtoneKeyFileType, sRingtoneValueSound);
-    app_control_add_extra_data(h, sRingtoneKeyMarkedMode, m_SettingsHandle.getNotiSound().c_str());
     app_control_add_extra_data(h, sRingtoneKeySilent, sRingtoneValueSilentShow);
     app_control_add_extra_data(h, sRingtoneKeyDefault, sRingtoneValueDefaultShow);
     app_control_add_extra_data(h, sRingtoneKeyDrmType, sRingtoneValueDrmAll);
     app_control_add_extra_data(h, sRingtoneKeyTitle, msg("IDS_MSG_HEADER_MESSAGE_TONE_ABB").get());
 
+    std::string selectedData;
+    if(m_SettingsHandle.getRingtoneType() == MsgSettings::SilentRingtone)
+        selectedData = sRingtoneKeySilent;
+    else if(m_SettingsHandle.getRingtoneType() == MsgSettings::DefaultRingtone)
+        selectedData = sRingtoneKeyDefault;
+    else if(m_SettingsHandle.getRingtoneType() == MsgSettings::UserRingtone)
+        selectedData = m_SettingsHandle.getRingtone();
+
+    const char *selectedDataArray[] = {selectedData.c_str()};
+    app_control_add_extra_data_array(h, APP_CONTROL_DATA_SELECTED, selectedDataArray, 1);
+
     app_control_set_app_id(h, sRingtoneAppId);
     app_control_send_launch_request(h, soundPickerCb, &m_SettingsHandle);