![]() ![]() Backstack management □ The app ensures that the backstack is properly managed. This is made possible because the Spotify API allows the specification of timestamp and locale as query parameters. Time & Locale based in-app content □ The content displayed in the home screen is based on the current time and locale associated with the user's device. For example, in the search screen, the loading animation will be moved up when the on screen keyboard appears. It even accomondates the UI for the IME (on screen keyboard). Insets ⌨️ The app uses insets to ensure that the content of the screen doesn't get overlaid by system views. In certain cases, it even provides a retry button. This applies for the rest of the app as well. For example, if no tracks are found for a particular search query, then it’ll be specific and state that no “tracks” where found instead of displaying a generic “no results found” message. Specific error messages ⚠️ When there is an error, the app will try to be as specific as possible. For example, the album art associated with the first search result determines the background gradient color of the search screen. Dynamic theme □ This app uses Google’s Palette API to fetch the background color of the screens based on an image. Once the currently playing state changes, it will be notified to all the screens. This is achieved by maintaining a global playback state. Notable features Global Playback state ▶️ The currently playing track gets highlighted in any screen that contains the currently playing track. Java 8 Date/Time API for dealing with date and time.Kotlin Flows for creating reactive streams.Google's palette api for color extraction from image. ![]() Exoplayer for background playback and music controls.Retrofit for communicating with the Spotify API.Mokito-Kotlin for mocking dependencies in unit tests.Lottie compose for displaying animated resources such as a custom loading animation.Coil compose for image loading and caching.Table of contentsĭemo musify-demo-emulator.mp4 Screenshots I neither intend to release, nor do I plan on monetizing any part of this project. I built this project purely for educational purposes. It uses many API’s such as Hilt,Retrofit, and Paging 3. That is heavily inspired by the design of the official Spotify app with some custom design tweaks. It is also worth noting that it is not a complete one-on-one clone of the app. It isĬompletely built using Jetpack compose. Under the hood, it uses the Spotify API to fetch the data. Both podcasts episodes and tracks are available for playback. Musify is a clone of the popular Spotify app built completely using Jetpack compose. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |