Vale, una vez terminado el guarreo con el ciclo de vida, toca implementar la lógica de negocio propia de la aplicación. Al ser JustPlay un reproductor de mp3 y ogg, vamos a ver que lógica tenemos que implementar:
Funcionalidad Detallada
- Gestión de la lista de reproducción, añadir directorios y canciones sueltas, borrar la lista de reproducción, eliminar canciones en particular y reordenarla mediante drag&drop.
- Reproducir: Reproducir toda la playlist desde el principio hasta el final dándole al botón de play.
- Reproducir una canción: Empezar a reproducir toda la playlist desde la canción seleccionada.
- Parar: Parar la reproducción, al darle a play se volverá a reproducir la lista desde el principio.
- Pausar: Parar la reproducción, al darle a play se continuará con la reproducción donde estaba.
- Canción anterior: Reproducir la canción anterior, en caso de ser la primera se reproducirá desde el principio.
- Canción siguiente: Reproducir la canción siguiente, en caso de ser la última no se hará nada.
- Avance rápido: Avanzar 15 sgs en la canción. Si la posición actual de la canción + 15 sgs > longitud de la canción, se pasa a la siguiente canción.
- Retroceso: Retroceder 15 sgs en la canción. Si la posición actual de la canción - 15 sgs < 0, se comienza desde el principio.
Definición de Responsabilidades
Entre los artefactos existentes voy a dividir la responsabilidad de la siguiente manera:
MediaPlayer:
- Gestión de la interfaz del usuario.
- Mostrar la playlist y los controles.
- Toda la lógica de negocio la delega en MediaService y MediaThread
FileExplorer
- Mostrar los contenidos de la memoria del teléfono, recordando el último directorio visitado.
- Enviar a MediaPlayer una canción en concreto o las contenidas en un directorio y sus subdirectorios.
MediaServiceBinder
- Devuelve una instancia de MediaService al objeto que lo solicite (MediaPlayer en este caso).
MediaService
- Mantiene vivo MediaThread aunque se cierre MediaPlayer.
- Presenta las notificaciones al usuario en la barra de estado.
- Gestiona el CallManager que permite parar la reproducción cuando hay una llamada y volverla a iniciar cuando esta termina.
MediaThread
- Gestiona la reproducción de la playlist implementando toda la funcionalidad detallada arriba.