~aleteoryx/muditaos

18f9227fceda261fc6b5ef61618ac1b9b90b8014 — Hubert Chrzaniuk 5 years ago e6fe2b9
[EGD-5716] Change sound priorities

Sound API has been extended with new playback types.
M module-apps/application-alarm-clock/widgets/AlarmOptionsItem.cpp => module-apps/application-alarm-clock/widgets/AlarmOptionsItem.cpp +1 -1
@@ 188,7 188,7 @@ namespace gui
                if (musicStatus == MusicStatus::Stop) {
                    musicStatus = MusicStatus::Play;
                    AudioServiceAPI::PlaybackStart(
                        application, audio::PlaybackType::Multimedia, songsList[actualVectorIndex].filePath);
                        application, audio::PlaybackType::Alarm, songsList[actualVectorIndex].filePath);
                }
                else if (musicStatus == MusicStatus::Play) {
                    musicStatus = MusicStatus::Stop;

M module-apps/application-meditation/widgets/MeditationTimer.cpp => module-apps/application-meditation/widgets/MeditationTimer.cpp +1 -1
@@ 164,7 164,7 @@ namespace gui

    void MeditationTimer::onInterval() const
    {
        AudioServiceAPI::PlaybackStart(application, audio::PlaybackType::Multimedia, intervalSoundPath);
        AudioServiceAPI::PlaybackStart(application, audio::PlaybackType::Meditation, intervalSoundPath);
    }

    void MeditationTimer::registerTimeoutCallback(const std::function<void()> &cb)

M module-audio/Audio/AudioCommon.hpp => module-audio/Audio/AudioCommon.hpp +4 -1
@@ 51,7 51,9 @@ namespace audio
        KeypadSound,
        CallRingtone,
        TextMessageRingtone,
        Last = TextMessageRingtone,
        Meditation,
        Alarm,
        Last = Alarm,
    };

    [[nodiscard]] const std::string str(const PlaybackType &playbackType) noexcept;


@@ 160,6 162,7 @@ namespace audio
        ProfileNotSet,
        DeviceFailure,
        TokenNotFound,
        Ignored,
        Failed
    };


M module-audio/Audio/AudioMux.cpp => module-audio/Audio/AudioMux.cpp +25 -5
@@ 9,11 9,13 @@ namespace audio
    namespace
    {
        const std::map<PlaybackType, uint8_t> PlaybackTypePriority = {
            {PlaybackType::Meditation, 1},
            {PlaybackType::CallRingtone, 2},
            {PlaybackType::TextMessageRingtone, 3},
            {PlaybackType::Notifications, 3},
            {PlaybackType::Multimedia, 4},
            {PlaybackType::KeypadSound, 5},
            {PlaybackType::Multimedia, 3},
            {PlaybackType::Alarm, 4},
            {PlaybackType::TextMessageRingtone, 5},
            {PlaybackType::Notifications, 5},
            {PlaybackType::KeypadSound, 6},
            {PlaybackType::None, static_cast<uint8_t>(PlaybackType::Last)},
        };
    } // namespace


@@ 159,6 161,24 @@ namespace audio

    constexpr bool AudioMux::IsMergable(const audio::PlaybackType &type) const
    {
        return !(type == audio::PlaybackType::Multimedia);
        switch (type) {
        case PlaybackType::None:
            [[fallthrough]];
        case PlaybackType::Notifications:
            [[fallthrough]];
        case PlaybackType::KeypadSound:
            [[fallthrough]];
        case PlaybackType::TextMessageRingtone:
            return true;
        case PlaybackType::CallRingtone:
            [[fallthrough]];
        case PlaybackType::Meditation:
            [[fallthrough]];
        case PlaybackType::Alarm:
            [[fallthrough]];
        case PlaybackType::Multimedia:
            return false;
        }
        return false;
    }
} // namespace audio

M module-audio/Audio/test/unittest_audio.cpp => module-audio/Audio/test/unittest_audio.cpp +8 -8
@@ 239,10 239,12 @@ TEST_CASE("Test AudioMux")
        std::vector<AudioMux::Input> audioInputs;
        AudioMux aMux(audioInputs);

        auto testPlaybackTypeLowPrio  = PlaybackType::Multimedia;
        auto testPlaybackTypeMidPrio  = PlaybackType::Notifications;
        auto testPlaybackTypeLowPrio  = PlaybackType::Alarm;
        auto testPlaybackTypeMidPrio  = PlaybackType::Multimedia;
        auto testPlaybackTypeHighPrio = PlaybackType::CallRingtone;

        auto mergableType = PlaybackType::Notifications;

        GIVEN("One Input")
        {
            WHEN("When idle input available")


@@ 270,9 272,8 @@ TEST_CASE("Test AudioMux")
            }
            WHEN("Should merge due to same mergable type active")
            {
                tkId = insertAudio(
                    audioInputs, Audio::State::Playback, testPlaybackTypeMidPrio, Operation::State::Idle, tokenIdx);
                auto retInput = aMux.GetAvailableInput(testPlaybackTypeMidPrio);
                tkId = insertAudio(audioInputs, Audio::State::Playback, mergableType, Operation::State::Idle, tokenIdx);
                auto retInput = aMux.GetAvailableInput(mergableType);
                REQUIRE(retInput == std::nullopt);
            }
        }


@@ 314,9 315,8 @@ TEST_CASE("Test AudioMux")
            }
            WHEN("Should merge due to same mergable type active")
            {
                insertAudio(
                    audioInputs, Audio::State::Playback, testPlaybackTypeMidPrio, Operation::State::Idle, tokenIdx);
                auto retInput = aMux.GetAvailableInput(testPlaybackTypeMidPrio);
                insertAudio(audioInputs, Audio::State::Playback, mergableType, Operation::State::Idle, tokenIdx);
                auto retInput = aMux.GetAvailableInput(mergableType);
                REQUIRE(retInput == std::nullopt);
            }
            WHEN("Should merge due to same mergable type active even if Idle available")

M module-services/service-audio/ServiceAudio.cpp => module-services/service-audio/ServiceAudio.cpp +12 -0
@@ 62,6 62,14 @@ sys::ReturnCodes ServiceAudio::InitHandler()
        {dbPath(Setting::Volume, PlaybackType::TextMessageRingtone, Profile::Type::PlaybackLoudspeaker),
         defaultVolumeHigh},

        {dbPath(Setting::Volume, PlaybackType::Meditation, Profile::Type::PlaybackHeadphones), defaultVolumeLow},
        {dbPath(Setting::Volume, PlaybackType::Meditation, Profile::Type::PlaybackBluetoothA2DP), defaultVolumeLow},
        {dbPath(Setting::Volume, PlaybackType::Meditation, Profile::Type::PlaybackLoudspeaker), defaultVolumeHigh},

        {dbPath(Setting::Volume, PlaybackType::Alarm, Profile::Type::PlaybackHeadphones), defaultVolumeLow},
        {dbPath(Setting::Volume, PlaybackType::Alarm, Profile::Type::PlaybackBluetoothA2DP), defaultVolumeLow},
        {dbPath(Setting::Volume, PlaybackType::Alarm, Profile::Type::PlaybackLoudspeaker), defaultVolumeHigh},

        // ROUTING
        {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingBluetoothHSP), "20"},
        {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingEarspeaker), "3"},


@@ 84,12 92,16 @@ sys::ReturnCodes ServiceAudio::InitHandler()
        {dbPath(Setting::EnableVibration, PlaybackType::KeypadSound, Profile::Type::Idle), defaultFalse},
        {dbPath(Setting::EnableVibration, PlaybackType::CallRingtone, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableVibration, PlaybackType::TextMessageRingtone, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableVibration, PlaybackType::Meditation, Profile::Type::Idle), defaultFalse},
        {dbPath(Setting::EnableVibration, PlaybackType::Alarm, Profile::Type::Idle), defaultTrue},

        {dbPath(Setting::EnableSound, PlaybackType::Multimedia, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::Notifications, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::KeypadSound, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::CallRingtone, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::TextMessageRingtone, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::Meditation, Profile::Type::Idle), defaultTrue},
        {dbPath(Setting::EnableSound, PlaybackType::Alarm, Profile::Type::Idle), defaultTrue},
    };

    for (const auto &setting : settingsCache) {