De bedoeling is om met een eenvoudige login je favoriete artiesten te zien in een handige lijst. Deze data haal ik uit mijn vorige project, vinyla, van het vak webapplicaties IV.
De gebruiker kan meerdere artiesten aanduiden door op de foto van een artiest te drukken. Vervolgens kan de gebruiker ervoor kiezen om een persoonlijk station / playlist af te spelen van de gekozen artiest(en). Hiervoor verwijst de app automatisch naar door de gebruiker gekozen muziek-streaming app. Deze kan worden ingesteld via de instellingen knop.
Voor het vak Webapplicaties IV had ik een databank, API en webapplicatie geschreven waarbij de gebruiker zijn / haar favoriete albums kan opzoeken en toevoegen als favoriet, om er zo een mooi overzicht van te kunnen hebben.
Deze API gebruik ik voor android-vinyla ook. De applicatie maakt gebruik van 3 verschillende API's om zo tot het einddoel te komen:
- vinyla-API: zelfgeschreven om de gebruiker zijn / haar favoriete albums op te halen.
- Spotify-Token-API: een Spotify API om een vertrouwde token te kunnen ontvangen. Deze token is nodig om gebruik te maken van de volledige Spotify-API in stap 3.
- Spotify-API: een andere Spotify API om met een query de foto's op te halen van de gezochte artiesten.
- Gebruiker logt in met zijn / haar logingegevens.
- De app communiceert met vinyla-api om te controleren of de logingegevens correct zijn en krijgt een BearerAuth Token terug.
- Er wordt gecommuniceert met de Spotify-Token-API om een vertrouwde BearerAuth Token te krijgen van Spotify.
- Met de vinyla-token worden alle favoriete albums van vinyla gehaald.
- Aantal albums worden gefilterd per artiest, gesorteerd op hoe vaak een album van een artiest voorkomt. Deze lijst wordt gelimiteerd tot maximaal 30 artiesten.
- Aangezien Spotify een limiet heeft gesteld van batch-requests worden alle artiestenfoto's één voor één opgehaald van Spotify-API, samen met de Spotify-token.
- De gebruiker stelt zijn / haar favoriete muziekstreamingdienst in via de instellingen knop.
- De gebruiker duidt enkele artiesten aan en klikt vervolgens op de 'create station' knop om zo een persoonlijk station te ontvangen op zijn / haar gekozen steamingservice. (Het effectief afspelen van de muziek is niet geïmplementeerd.)
- UI opbouw: Er werd zoveel mogelijk gewerkt met recyclerviews zodat het scherm altijd wordt aangepast naargelang de schermgrootte. Daarnaast zijn er ook vele navigaties geanimeerd.
- UI technisch: Er worden binding adapters en gewone binding gebruikt. Er werd voor gezorgd dat de app een unieke en mooie look & feel heeft.
- Testing: Alle fragments worden getest met behulp van Espresso.
- Codekwaliteit: De meeste functies zijn onderverdeeld in kleinere subfuncties om de code duidelijker te maken. Daarnaast werden de meeste functies uitgelegd door boven de functies annotaties te schrijven.
- Lifecycle: Aangezien de applicatie geen gebruik maakt van CPU-heavy animaties werd er weinig gebruik gemaakt van een custom lifecycle. Enkel bij de onResume van het welkom scherm wordt er gecontroleerd of de applicatie alreeds een ingelogde gebruiker heeft door de Room Database te controleren.
- Netwerk: Er worden heel wat API-calls gebruikt met behulp van Retrofit, namelijk naar vinyla-api, spotify-token-api & spotify-api.
- Persistentie: De applicatie is voorzien van een Room Database die de gebruiker zelf opslaat en de instellingen die werden gekozen door de gebruiker. Deze worden automatisch opgehaald bij het openen van de app.
Welkom scherm: de gebruiker wordt begroet door een welkom scherm met een willekeurige achtergrond van albumhoezen.
Login en registreer scherm: alle gegevens zoals wachtwoord- en emailvereisten worden gecontroleerd. Ook een al gebruikt emailadres kan niet meer gebruikt worden.
Hoofd scherm: de gebruiker kan meerdere artiesten aanduiden en vervolgens klikken op 'create station'. De streamingservice kan ingesteld worden via de instellingen knop.
Kleine toelichting bij de schermen:
Er zijn niet enorm veel fragments gebruikt, maar het hoofdscherm bevat enorm veel code. De popup voor de instellingen of zelfs de redirect popup zouden ook aparte fragments kunnen zijn waardoor de applicatie groter lijkt. Maar dit zou volgens mij de look & feel van de applicatie beïnvloeden.
Alle schermen worden getest met behulp van het Espresso framework. Onderliggende code zonder de schermen effectief te gebruiken zijn niet gelukt om te testen.
De welcomeFragmentVisible test werkt alleen wanneer deze als eerste wordt uitgevoerd. Anders denkt de applicatie dat er al een gebruiker is ingelogd en wordt het welkoms scherm niet weergegeven.
Designs gemaakt in Figma met de UI van iOS maar zijn geprogrammeerd voor Android.