This commit is contained in:
2026-02-05 13:47:39 +03:00
commit d4d78ba52b
295 changed files with 24155 additions and 0 deletions
+267
View File
@@ -0,0 +1,267 @@
# Руководство по тестированию 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
- [ ] Работает с проводными наушниками
- [ ] Корректная работа при низком заряде батареи
- [ ] Корректная работа в режиме энергосбережения