# Руководство по тестированию 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
- [ ] Работает с проводными наушниками
- [ ] Корректная работа при низком заряде батареи
- [ ] Корректная работа в режиме энергосбережения
