Add system, ringtone, notification volume at media plugin
authorJinWang An <jinwang.an@samsung.com>
Mon, 25 Nov 2019 01:02:03 +0000 (10:02 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Thu, 19 Mar 2020 04:30:37 +0000 (13:30 +0900)
media/MediaFactory.cpp
media/MediaFactory.h
media/SoundVolume.cpp [moved from media/MediaVolume.cpp with 70% similarity]
media/SoundVolume.h [moved from media/MediaVolume.h with 88% similarity]
media/tizen_media_rule.xml
unittests/mdsp_test_media.cpp

index a54aa10..58ce479 100644 (file)
 #include "MediaFactory.h"
 #include "plugin-log.h"
 #include "MediaPlayer.h"
-#include "MediaVolume.h"
+#include "SoundVolume.h"
 
 MODES_NAMESPACE_USE;
 
 MediaFactory::MediaFactory()
 {
        actionMap[MediaPlayer::NAME] = PLAYER;
-       actionMap[MediaVolume::NAME] = VOLUME;
+       actionMap[SoundVolume::NAME[MEDIA_VOLUME]] = MEDIA_VOLUME;
+       actionMap[SoundVolume::NAME[SYSTEM_VOLUME]] = SYSTEM_VOLUME;
+       actionMap[SoundVolume::NAME[RINGTONE_VOLUME]] = RINGTONE_VOLUME;
+       actionMap[SoundVolume::NAME[NOTIFICATION_VOLUME]] = NOTIFICATION_VOLUME;
 }
 
 MediaAction* MediaFactory::createAction(const std::string &key)
@@ -39,8 +42,17 @@ MediaAction* MediaFactory::createAction(const std::string &key)
        case PLAYER:
                action = new MediaPlayer();
                break;
-       case VOLUME:
-               action = new MediaVolume();
+       case MEDIA_VOLUME:
+               action = new SoundVolume(MEDIA_VOLUME, SOUND_TYPE_MEDIA);
+               break;
+       case SYSTEM_VOLUME:
+               action = new SoundVolume(SYSTEM_VOLUME, SOUND_TYPE_SYSTEM);
+               break;
+       case RINGTONE_VOLUME:
+               action = new SoundVolume(RINGTONE_VOLUME, SOUND_TYPE_RINGTONE);
+               break;
+       case NOTIFICATION_VOLUME:
+               action = new SoundVolume(NOTIFICATION_VOLUME, SOUND_TYPE_NOTIFICATION);
                break;
        default:
                action = nullptr;
index 2e76df3..c7c01ce 100644 (file)
@@ -30,8 +30,11 @@ public:
        void destroyAction(MediaAction *action);
 private:
        enum actionKey{
-               PLAYER,
-               VOLUME
+               MEDIA_VOLUME,
+               SYSTEM_VOLUME,
+               RINGTONE_VOLUME,
+               NOTIFICATION_VOLUME,
+               PLAYER
        };
 
        std::map<std::string, enum actionKey> actionMap;
similarity index 70%
rename from media/MediaVolume.cpp
rename to media/SoundVolume.cpp
index ed2725f..960cc9c 100644 (file)
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "MediaVolume.h"
+#include "SoundVolume.h"
 #include <string>
 #include <sstream>
 #include <modes_errors.h>
 
 MODES_NAMESPACE_USE;
 
-const std::string MediaVolume::NAME = "volume";
+// It should align with actionKey in MediaFactory
+const std::string SoundVolume::NAME[4] = {
+       "mediaVolume",
+       "systemVolume",
+       "ringtoneVolume",
+       "notificationVolume"
+};
 
-MediaVolume::MediaVolume()
-       : MediaAction(NAME), oldVal(-1), volumeCallbackID(0), cb(NULL), cbData(NULL), requestVal(-1)
+SoundVolume::SoundVolume(int key, sound_type_e soundType)
+       : MediaAction(NAME[key]), oldVal(-1), volumeCallbackID(0), cb(NULL), cbData(NULL), requestVal(-1), type(soundType)
 {
 }
 
-void MediaVolume::volumeChangedCB(sound_type_e type, unsigned int volume, void *user_data)
+void SoundVolume::volumeChangedCB(sound_type_e type, unsigned int volume, void *user_data)
 {
-       MediaVolume *action = (MediaVolume*)user_data;
+       SoundVolume *action = (SoundVolume*)user_data;
        RET_IF(NULL == user_data);
 
        if (action->requestVal != (int)volume)
                action->cb(action->cbData);
 }
 
-int MediaVolume::set(int val)
+int SoundVolume::set(int val)
 {
        requestVal = val;
-       int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, &oldVal);
+       int ret = sound_manager_get_volume(type, &oldVal);
        if (SOUND_MANAGER_ERROR_NONE != ret) {
                ERR("sound_manager_get_volume() Fail(%s)", get_error_message(ret));
                return MODES_ERROR_SYSTEM;
@@ -52,7 +58,7 @@ int MediaVolume::set(int val)
                return MODES_ERROR_NONE;
        }
 
-       ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, val);
+       ret = sound_manager_set_volume(type, val);
        if (SOUND_MANAGER_ERROR_NONE != ret) {
                ERR("sound_manager_set_volume() Fail(%s)", get_error_message(ret));
                return MODES_ERROR_SYSTEM;
@@ -61,15 +67,15 @@ int MediaVolume::set(int val)
        return MODES_ERROR_NONE;
 }
 
-void MediaVolume::undo()
+void SoundVolume::undo()
 {
-       int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, oldVal);
+       int ret = sound_manager_set_volume(type, oldVal);
        if (SOUND_MANAGER_ERROR_NONE != ret) {
                ERR("sound_manager_set_volume() Fail(%s)", get_error_message(ret));
        }
 }
 
-std::string MediaVolume::serialize()
+std::string SoundVolume::serialize()
 {
        std::ostringstream ostr;
 
@@ -77,7 +83,7 @@ std::string MediaVolume::serialize()
        return ostr.str();
 }
 
-int MediaVolume::parse(const std::string &archive)
+int SoundVolume::parse(const std::string &archive)
 {
        std::istringstream iss(archive);
        iss >> oldVal;
@@ -85,7 +91,7 @@ int MediaVolume::parse(const std::string &archive)
        return MODES_ERROR_NONE;
 }
 
-int MediaVolume::setChangedCallback(valueChangedCB callback, void *userData)
+int SoundVolume::setChangedCallback(valueChangedCB callback, void *userData)
 {
        int ret = sound_manager_add_volume_changed_cb(volumeChangedCB, this, &volumeCallbackID);
        if (SOUND_MANAGER_ERROR_NONE != ret) {
@@ -97,7 +103,7 @@ int MediaVolume::setChangedCallback(valueChangedCB callback, void *userData)
        return MODES_ERROR_NONE;
 }
 
-void MediaVolume::unSetChangedCallback(valueChangedCB callback, void *userData)
+void SoundVolume::unSetChangedCallback(valueChangedCB callback, void *userData)
 {
        int ret = sound_manager_remove_volume_changed_cb(volumeCallbackID);
        if (SOUND_MANAGER_ERROR_NONE != ret) {
similarity index 88%
rename from media/MediaVolume.h
rename to media/SoundVolume.h
index b9da085..86406c7 100644 (file)
 
 MODES_NAMESPACE_BEGIN
 
-class MediaVolume : public MediaAction {
+class SoundVolume : public MediaAction {
 public:
-       static const std::string NAME;
-       MediaVolume();
-       ~MediaVolume() = default;
+       static const std::string NAME[4];
+       SoundVolume(int key, sound_type_e soundType);
+       ~SoundVolume() = default;
 
        int set(int val) override;
        void undo() override;
@@ -42,6 +42,7 @@ private:
        valueChangedCB cb;
        void *cbData;
        int requestVal;
+       sound_type_e type;
 };
 
 MODES_NAMESPACE_END
index e796bce..747bd49 100644 (file)
@@ -5,10 +5,25 @@
       <desc>Audio/Video player</desc>
       <domain>Multimedia</domain>
     </rule>
-    <rule name="media.volume" type="int" since="6.0" plugin="media">
+    <rule name="media.mediaVolume" type="int" since="6.0" plugin="media">
       <alias name="MEDIA_MUTE">0</alias>
       <desc>Media volume</desc>
       <domain>Multimedia</domain>
     </rule>
+    <rule name="media.systemVolume" type="int" since="6.0" plugin="media">
+      <alias name="SYSTEM_MUTE">0</alias>
+      <desc>System volume</desc>
+      <domain>Multimedia</domain>
+    </rule>
+    <rule name="media.ringtoneVolume" type="int" since="6.0" plugin="media">
+      <alias name="RINGTONE_MUTE">0</alias>
+      <desc>Ringtone volume</desc>
+      <domain>Multimedia</domain>
+    </rule>
+    <rule name="media.notificationVolume" type="int" since="6.0" plugin="media">
+      <alias name="NOTIFICATION_MUTE">0</alias>
+      <desc>Notification volume</desc>
+      <domain>Multimedia</domain>
+    </rule>
   </actionRule>
 </tizenModes>
index 89073ee..b30ed8e 100644 (file)
@@ -66,12 +66,23 @@ protected:
                return G_SOURCE_REMOVE;
        }
 
-       static gboolean mediaVolumeSetUndoIdler(gpointer data)
+       static gboolean VolumeSetUndoIdler(gpointer data)
        {
                PluginAction *action;
-               result = plugin->set("volume", 5, &action);
+               result = plugin->set("mediaVolume", 5, &action);
                EXPECT_EQ(MODES_ERROR_NONE, result);
+               plugin->undo(action);
+
+               result = plugin->set("systemVolume", 2, &action);
+               EXPECT_EQ(MODES_ERROR_NONE, result);
+               plugin->undo(action);
 
+               result = plugin->set("ringtoneVolume", 9, &action);
+               EXPECT_EQ(MODES_ERROR_NONE, result);
+               plugin->undo(action);
+
+               result = plugin->set("notificationVolume", 1, &action);
+               EXPECT_EQ(MODES_ERROR_NONE, result);
                plugin->undo(action);
 
                g_main_loop_quit(loop);
@@ -96,7 +107,7 @@ TEST_F(MediaPluginTest, setUndoMediaPlay)
 
 TEST_F(MediaPluginTest, setUndoMediaVolume)
 {
-       g_idle_add(mediaVolumeSetUndoIdler, plugin);
+       g_idle_add(VolumeSetUndoIdler, plugin);
        g_main_loop_run(loop);
 }