# Руководство по тестированию Audio Focus ## Подготовка к тестированию ### Включение логирования Для отслеживания работы Audio Focus используйте команду: ```bash adb logcat -s PlayerService:I ``` Или для более подробного логирования: ```bash adb logcat | grep -E "PlayerService|AudioManager" ``` ## Тестовые сценарии ### 1. Тест взаимодействия с другими медиа-приложениями **Цель:** Убедиться, что радио не включается автоматически после других приложений **Шаги:** 1. Запустите приложение SoundWaveRadio 2. Выберите и запустите любую радиостанцию 3. Убедитесь, что радио воспроизводится 4. Откройте YouTube/Spotify/любое другое медиа-приложение 5. Запустите воспроизведение видео/музыки **Ожидаемый результат:** - Радио должно остановиться - Уведомление радио должно исчезнуть - Сервис PlayerService должен остановиться - В логах должно быть: `Audio focus lost permanently` и `Stopping service gracefully` - Радио НЕ должно включиться автоматически после остановки другого медиа **Проверка в логах:** ``` PlayerService: Audio focus changed: -1 PlayerService: Audio focus lost permanently PlayerService: Audio focus abandoned on stop PlayerService: Stopping service gracefully ``` --- ### 2. Тест временных прерываний (звонки) **Цель:** Убедиться, что радио возобновляется после звонка **Шаги:** 1. Запустите радио 2. Позвоните на телефон или используйте эмулятор звонка 3. Примите звонок 4. Завершите звонок **Ожидаемый результат:** - Во время звонка радио должно остановиться - После завершения звонка радио должно автоматически возобновиться - В логах: `Audio focus lost temporarily` → `Audio focus gained` **Проверка в логах:** ``` PlayerService: Audio focus changed: -2 PlayerService: Audio focus lost temporarily [после звонка] PlayerService: Audio focus changed: 1 PlayerService: Audio focus gained ``` --- ### 3. Тест Ducking (уведомления со звуком) **Цель:** Проверить уменьшение громкости при коротких звуках **Шаги:** 1. Запустите радио 2. Получите уведомление со звуком (например, от мессенджера) **Ожидаемый результат:** - Громкость радио должна уменьшиться до 20% - После окончания звука уведомления громкость должна восстановиться до 100% - Радио не должно останавливаться **Проверка в логах:** ``` PlayerService: Audio focus changed: -3 PlayerService: Audio focus lost, can duck [после уведомления] PlayerService: Audio focus changed: 1 PlayerService: Audio focus gained ``` --- ### 4. Тест закрытия приложения **Цель:** Проверить, что сервис правильно останавливается **Шаги:** 1. Запустите радио 2. Закройте приложение через Recent Apps (свайп вверх) **Ожидаемый результат:** - Если радио воспроизводится: сервис должен продолжить работу - Если радио на паузе: сервис должен остановиться **Проверка в логах (при воспроизведении):** ``` PlayerService: Task removed, isPlaying: true PlayerService: Keeping service alive - still playing ``` **Проверка в логах (на паузе):** ``` PlayerService: Task removed, isPlaying: false PlayerService: Stopping service - not playing PlayerService: Audio focus abandoned on stop ``` --- ### 5. Тест паузы через уведомление **Цель:** Проверить освобождение Audio Focus при паузе **Шаги:** 1. Запустите радио 2. Нажмите кнопку паузы в уведомлении **Ожидаемый результат:** - Радио должно остановиться - Audio Focus должен быть освобожден - Уведомление должно остаться, но сервис выйдет из foreground режима **Проверка в логах:** ``` PlayerService: Audio focus abandoned on pause PlayerService: onIsPlayingChanged: false PlayerService: Audio focus abandoned - playback stopped ``` --- ### 6. Тест отключения наушников **Цель:** Проверить автоматическую остановку при отключении наушников **Шаги:** 1. Подключите наушники 2. Запустите радио 3. Отключите наушники **Ожидаемый результат:** - Радио должно немедленно остановиться - Это обрабатывается через `setHandleAudioBecomingNoisy(true)` в ExoPlayer --- ### 7. Тест на Samsung устройствах **Цель:** Проверить интеграцию с системой Samsung **Особенности Samsung:** - Samsung имеет собственную реализацию Audio Focus - Может быть более строгая политика управления фоновыми сервисами **Шаги:** 1. Выполните все тесты выше на Samsung устройстве 2. Проверьте работу с Samsung Music 3. Проверьте работу с Bixby **Дополнительная проверка:** - Откройте настройки звука Samsung - Проверьте, что радио отображается в списке активных медиа-приложений - Проверьте управление через медиа-панель в шторке уведомлений --- ### 8. Тест множественных переключений **Цель:** Проверить стабильность при частых переключениях **Шаги:** 1. Запустите радио 2. Быстро переключайтесь между радио и другими медиа-приложениями 3. Повторите 5-10 раз **Ожидаемый результат:** - Не должно быть утечек памяти - Не должно быть зависаний - Audio Focus должен правильно переключаться - Не должно быть одновременного воспроизведения --- ## Проверка утечек ресурсов ### Проверка Audio Focus ```bash adb shell dumpsys audio | grep -A 20 "Audio Focus" ``` Убедитесь, что SoundWaveRadio не держит Audio Focus когда не воспроизводится. ### Проверка работающих сервисов ```bash adb shell dumpsys activity services | grep PlayerService ``` Убедитесь, что PlayerService останавливается когда не нужен. ### Проверка памяти ```bash adb shell dumpsys meminfo com.yaros.RadioUrl ``` Следите за ростом памяти при длительной работе. --- ## Известные проблемы и их решения ### Проблема: Радио не возобновляется после звонка **Решение:** Проверьте, что `resumeOnFocusGain` правильно устанавливается в `true` при `AUDIOFOCUS_LOSS_TRANSIENT` ### Проблема: Сервис не останавливается **Решение:** Проверьте логи, убедитесь что Audio Focus освобождается во всех необходимых местах ### Проблема: Одновременное воспроизведение с другими приложениями **Решение:** Убедитесь, что `setAudioAttributes(..., false)` установлен правильно, и Audio Focus обрабатывается вручную --- ## Автоматизированное тестирование Для автоматизации можно использовать следующие команды: ### Симуляция звонка ```bash adb shell am start -a android.intent.action.CALL -d tel:1234567890 ``` ### Симуляция уведомления ```bash adb shell cmd notification post -S bigtext -t 'Test' 'Tag' 'Test notification' ``` ### Проверка состояния сервиса ```bash adb shell dumpsys activity services com.yaros.RadioUrl/.PlayerService ``` --- ## Чек-лист для релиза - [ ] Все тесты пройдены на Android 8.0+ - [ ] Протестировано на Samsung устройстве - [ ] Протестировано на чистом Android (Pixel/эмулятор) - [ ] Нет утечек Audio Focus - [ ] Сервис корректно останавливается - [ ] Нет одновременного воспроизведения - [ ] Работает с наушниками Bluetooth - [ ] Работает с проводными наушниками - [ ] Корректная работа при низком заряде батареи - [ ] Корректная работа в режиме энергосбережения