├── GitGuideline.md └── README.md /GitGuideline.md: -------------------------------------------------------------------------------- 1 | # Git Guideline 2 | 3 | 4 | ## Commit Message Guidelines 5 | ### Information in commit messages 6 | - Describe why a change is being made. 7 | - How does it address the issue? 8 | - Do not assume the reviewer understands what the original problem was. 9 | - Do not assume the code is self-evident/self-documenting. 10 | 11 | ### Rules of a great Git commit message 12 | - Capitalize the commit message 13 | - This is as simple as it sounds. Begin all subject lines with a capital letter. 14 | - **For example:** ```Fix typo in User model``` 15 | - **Instead of:** ```fix typo in user model``` 16 | - Do not end the subject line with a period 17 | - Trailing punctuation is unnecessary in subject lines. 18 | - **For example:** ```Refactor error handling``` 19 | - **Instead of:** ```Refactor error handling.``` 20 | - Describe what was done 21 | - Don't write a git commit subject line that talks about what you did, or what you are doing. 22 | - For Example: 23 | - ```Fixed onboard page swipe crash``` -- Don't 24 | - ```Fixing onboard page swipe crash``` -- Don't 25 | - ```Fix onboard page swipe crash``` -- Do 26 | - A properly formed Git commit subject line should always be able to complete the following sentence: 27 | - If applied, this commit will **_your subject line here_**: 28 | - If applied, this commit will ```fix onboard page swipe crash``` 29 | - If applied, this commit will ```remove deprecated methods``` 30 | - Notice how this doesn’t work for the other non-imperative forms: 31 | - If applied, this commit will *~~fixing onboard page swipe crash~~* 32 | - If applied, this commit will *~~removed deprecated methods~~* 33 | 34 | - The commit body must not contain more than 72 characters per line. 35 | - The commit subject or body must not contain Emojis. 36 | 37 | 38 | ## MR Guidelines 39 | - The change is as small as possible. 40 | - The MR must include Before and After screenshots if UI changes are made. 41 | - Clear title and description explaining the relevancy of the contribution. 42 | - Description includes any steps or setup required to ensure reviewers can view the changes you’ve made (for example, include any information about feature flags). 43 | - Always review code before committing it 44 | - Name your sub branches by convention 45 | - Use a consistent naming convention for your feature branches to identify the work done in the branch. 46 | - These are all good branch names: 47 | ``` - fix-onboard-screen-crash 48 | - add-author-profile 49 | - feature/app-analytics 50 | - bug/profile-button-editing 51 | 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Android Developer Roadmap 2023

2 | 3 | ![alt text](https://github.com/cp-radhika-s/Android-Roadmap/blob/main/image/og_image.png) 4 | 5 | The Android Developer Roadmap 2023 includes **29 practical exercises** that cover all the essential concepts used in day-to-day development. 6 | # Guidelines 7 | 8 | - Before starting any practical it's important to conduct research and learn the necessary concepts. 9 | 10 | - As you progress through the practical exercises, make sure to apply the new knowledge you've gained in subsequent exercises. 11 | 12 | - Follow android [material guideline](https://m3.material.io/get-started) for the best practices of user interface design 13 | - Follow the [recommendations for Android architecture](https://developer.android.com/topic/architecture/recommendations) 14 | 15 | # Table of contents 16 | * [Useful references](https://github.com/canopas/android-developer-roadmap-2023#useful-references) 17 | * [Android XML](https://github.com/canopas/android-developer-roadmap-2023#android-xml) 18 | * [Android Activity](https://github.com/canopas/android-developer-roadmap-2023#android-activity) 19 | * [Fragment](https://github.com/canopas/android-developer-roadmap-2023#fragment) 20 | * [Intent](https://github.com/canopas/android-developer-roadmap-2023#intent) 21 | * [Jetpack Compose](https://github.com/canopas/android-developer-roadmap-2023#jetpack-compose) 22 | * [Networking](https://github.com/canopas/android-developer-roadmap-2023#networking) 23 | * [App Architecture](https://github.com/canopas/android-developer-roadmap-2023#app-architecture) 24 | * [Datastore](https://github.com/canopas/android-developer-roadmap-2023#datastore) 25 | * [Database](https://github.com/canopas/android-developer-roadmap-2023#local-storage) 26 | * [Dependency Injection](https://github.com/canopas/android-developer-roadmap-2023#dependency-injection) 27 | * [Kotlin Coroutine & Flow](https://github.com/canopas/android-developer-roadmap-2023#kotlin-coroutine--flow) 28 | * [Broadcast Receiver](https://github.com/canopas/android-developer-roadmap-2023#broadcast-receiver--task-scheduling) 29 | * [Android Service](https://github.com/canopas/android-developer-roadmap-2023#android-service) 30 | 31 | ## Useful references 32 | The references provided are aimed at individuals who have no prior knowledge or experience in developing Android apps. They serve as a starting point for beginners in the field, providing basic knowledge that is necessary before diving into Android development. 33 | If you already have knowledge and experience in Android development, you may not need to refer to the provided resources. 34 | * [Develop your app's layout](https://developer.android.com/develop/ui/views/layout/declaring-layout) 35 | * [Introduction to activities](https://developer.android.com/guide/components/activities/intro-activities) 36 | * [The activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle) 37 | * [Jetpack compose](https://developer.android.com/jetpack/compose/tutorial) 38 | * App Architecture 39 | * [Guide to app architecture](https://developer.android.com/topic/architecture) 40 | * [Best practices and recommended Architecture](https://developer.android.com/courses/pathways/android-architecture) 41 | * Udemy courses - [Android App Development Masterclass](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/) 42 | * [Kotlin style guide](https://developer.android.com/kotlin/style-guide) 43 | 44 | # Android XML 45 | ### Practical 1 46 | 47 | #### Develop UI for a Messaging application 48 | * Implement an app using 3 Activities - Onboard, signIn and Home Activity 49 | * On the onboard screen, show brief introduction to the app's features, such as messaging, voice and video calls, and file sharing. 50 | - Show images, titles and subtitles to introduce app functionality. 51 | - Add a button to check the next/previous features. Also, the skip button to skip the onboarding flow. 52 | * On the sign-in screen, allow the user to enter their email and password, and add validation to ensure the user enters a valid email address and password. 53 | - Use dummy email/password to verify user input. 54 | * After a successful login, the user should be redirected to the Home screen. 55 | - On the Home screen, show a list of chats with sender name, profile, latest message and message time. 56 | - The user should not be able to go back to the login screen once redirected to the Home screen. 57 | - Use dummy data for chats 58 | - Add toggle button on Home screen to change the day/night theme 59 | * App should responsive for different resolutions. 60 | * Add support for day/night theme. 61 | * You can use any images or placeholder to make UI eye-catchy 62 | * App should follow material guidelines 63 | * Here's [UI for refrence](https://cdn.dribbble.com/userupload/3719280/file/original-5d6d206acf8adf5458091206369445f1.png?compress=1&resize=752x) 64 | 65 | ### Practical 2 66 | #### Develop collapsing toolbar for the News application 67 | * Home screen should show toolbar and news content 68 | * The toolbar on screen should initially display the app's logo and title. 69 | * As the user scrolls down to read news, the toolbar should collapse to provide more space for the content. 70 | - You can use any dummy text/images as article content. 71 | * When the user reaches the end of the news and reverses scrolls, the toolbar should re-expand and display the app's logo & title 72 | * You can use any images or placeholder to make UI eyecatchy 73 | * App should follow material guidelines 74 | * Here's [UI for reference](https://cdn.dribbble.com/users/663782/screenshots/3742414/media/67464fde751beb373b4c6fa962edf718.gif) 75 | 76 | ### Practical 3 77 | #### Implement Survey application 78 | * App will have one activity 79 | * On the Home screen display a survey form 80 | - Survey form should show questions, 4 options and a button for next question. 81 | - Show progress as user answers the question 82 | * Once the survey is completed, show a pop-up message thanking the user 83 | - Use the custom dialog to thank the user. 84 | - Dialog will have UI to show a thanks message, image and button to complete survey 85 | * Asks at least 3 questions with 4 options each. 86 | * App should ask users about the shopping experience. 87 | * You can use any images or placeholder to make UI eye-catchy 88 | * App should follow material guidelines 89 | * Here's [UI for reference](https://cubicleninjas.com/wp-content/uploads/2021/01/NA-2021-Web-Questionnaire-3.jpg) 90 | 91 | # Android Activity 92 | 93 | ### Practical 4 94 | #### Implement Video player 95 | * This will be single Activity app 96 | - App should have a view to show Video 97 | - One button to play and pause video 98 | * The player should follow the activity lifecycle, pause the player when the activity goes to the background and resume it when the activity returns to the foreground. 99 | * The player should also release resources when the app is no longer alive. 100 | * An application can play a video from local resource. 101 | * Use Exoplayer or MediaPlayer to play media 102 | 103 | ### Practical 5 104 | #### Implement SnapCam 105 | * This will be Two Activity app 106 | * Home screen should have PreviewView to show camera 107 | - It should have button to capture image 108 | - Button to show captured image preview 109 | - Save button on Toolbar to save captured image to the device's gallery. 110 | * On Preview Screen show image in fullscreen 111 | - Use Glide or coin for image preview 112 | - Add button to go back to camera screen 113 | * The camera resources should be release when the activity is no longer alive. 114 | 115 | 116 | ### Practical 6 117 | #### Implement Note-taking application 118 | * Single activity app 119 | - Which allows the user to enter a note 120 | - Use EditText to take input from the user. 121 | - Add a button to reset the note. 122 | * The application should have the ability to maintain the state of the EditText field, even after the device is rotated. 123 | * This means that when the user rotates the device, the EditText field should retain its previous contents, and the user should be able to continue editing the note without losing any data. 124 | 125 | # Fragment 126 | 127 | 128 | ### Practical 7 129 | #### Develop a Travel application 130 | * Implement the app using one activity only 131 | * Home screen should have a bottom bar with 3 tabs: Destinations, Search, and Settings. 132 | * The Destinations tab should display a list of popular travel destinations with images and descriptions. 133 | * The Search tab should Allow the user to search for destinations 134 | - Add search view to search different destination 135 | - Show a message in TextView to notify the user when the searched destination is not available 136 | - Use dummy data for destinations 137 | * The Settings tab should allow the user to customize app settings 138 | - Add a toggle button for notification and day/night theme settings. 139 | * App should preserve the state on tab change 140 | - If the user scrolled to the bottom of the destinations screen, it should preserve the scroll state across the tab change. 141 | - If a user searches for something on the search screen, the search result should be there when navigating to the search tab from other tabs. 142 | - If the user changed the setting's toggle, it should stay as it is when the user navigate between the tabs 143 | 144 | ### Practical 8 145 | #### Develop RecipeLister application 146 | * Single Activity app with two fragments - Home & detail fragment 147 | * On the Home fragment add RecyclerView to display the list of recipes. 148 | - Each list item should show the recipe name and a short description. 149 | - Tapping a recipe should open Detail Fragment. 150 | * On the Detail fragment show full recipe detail with recipe image and description 151 | - Add a back button to navigate back to the list of recipes. 152 | * Use dummy data for recipes 153 | 154 | 155 | ### Practical 9 156 | #### Implement App Browser 157 | * Single Activity app with two fragments - Home & browser fragment 158 | * On the Home fragment add an input field where the user can enter a URL and a button to open URL inside the app. 159 | * Once the user enters a valid URL and clicks the button, slide up the Browser fragment from the bottom of the screen 160 | - This fragment will show the content of the URL within a web view. 161 | - The fragment will also have a button to close it. 162 | - Add a menu in the action bar, which will have two options- copy and share the link 163 | - Copy option should copy the link to the clipboard 164 | - The share option should allow users to share links in other applications 165 | * The state of the fragment should be preserved on configuration changes such as screen rotation. 166 | 167 | # Intent 168 | 169 | ### Practical 10 170 | #### Develop QuickSend application 171 | * This will be single Activity app - QuickSendActivity 172 | * QuickSendActivity allows users to send emails 173 | - Add EditTextxs to input the receiver's email address and email content. 174 | - Add a button to send email 175 | - On click of it, the app should ask for the app to choose to send mail on. 176 | 177 | ### Practical 11 178 | #### Develop the TalkEasy application 179 | * The app will send and receive messages between two activities. 180 | * The app will use two Activities - Sender & Receiver Activities. 181 | * The Sender activity should have an edit text and a send button 182 | - When the user enters a message and clicks on the send button, open Receiver activity and show the message recieved from Sender Activity. 183 | * The Receiver activity should have an edit text and a reply button 184 | - When the user enters a reply message and clicks on the reply button, the replied message should be sent back to the Sender activity and displayed in a text view. 185 | 186 | 187 | ### Practical 12 188 | #### Create Deep Links to App Content 189 | * Implement an app that handles incoming link 190 | * The app will use one Activity- Home Activity 191 | * On Click of this link https://open.my.app?message={anymessage} from anywhere, the system should open Home Activity and show the message from a link 192 | * Use intent filter in manifest to handle deep link 193 | 194 | # Android Jetpack Compose 195 | 196 | ### Practical 13 197 | #### Implement user profile UI 198 | * The app will use a one Activity 199 | * Display a user's profile picture, name, and bio. 200 | * Use a placeholder for the image and profile data. 201 | * Add day/night theme support 202 | * Here's [UI for reference](https://cdn.dribbble.com/userupload/5207044/file/original-ceb3338a4a693f6ab102298dd3745716.jpg?compress=1&resize=1024x768) 203 | * 204 | ### Practical 14 205 | #### Develop an interactive UI for the Fitness application 206 | * App will provide a guided introduction to the app's features and functionality 207 | * The app will use one Activity 208 | * The onboard composable should include a welcome message and an introduction to the app's primary features, such as tracking workouts, setting goals, and accessing workout routines. 209 | - The onboard screen should have interactive elements such as buttons or sliders that allow the user to interact with the onboard screen 210 | - There should be next & previous buttons to go through features 211 | - Add an indicator to show pages 212 | - Add an option to skip the onboarding process. 213 | * After onboard flow completion navigate user to the Home composable 214 | - Home composable should show basic tips & tricks related to fitness 215 | - Add option to log out, on logout show onboard view. 216 | * Here's [UI for reference](https://cdn.dribbble.com/users/2321513/screenshots/13623207/media/00046acbffbf953281b06b5bf4685dfd.mp4) 217 | 218 | ### Practical 15 219 | #### Develop MathQuest quiz application 220 | * The app will have one quiz Activity 221 | * The home composable should be an entry point of the app 222 | - This should provide an introduction to the quiz and a button to start the quiz. 223 | * The quiz should ask 10 questions, one at a time, and provide four answer options for each question. 224 | - On click of the next button highlight the correct/wrong answer and show the next question 225 | - Show progress as the user answers the questions 226 | * After the user answers all questions, the app should display a result view 227 | - Which shows the number of correct answers and the total number of questions. 228 | - Show the excellence level based on the score such as poor, good and very good. 229 | - Add a button to restart the quiz so that the user can play again. 230 | * Implement day/night theme in the Quiz app 231 | * You can use images and placeholders to build eye-catchy UI 232 | * Here's [UI for reference](https://cdn.dribbble.com/users/2469034/screenshots/8210470/media/f02da6249ee8c25f187432c73d4eec27.png) 233 | 234 | # Networking 235 | 236 | ### Practical 16 237 | #### Develop ImageSaver application 238 | * Allow users to download an image from a given URL, display the image on the screen, and store the downloaded image file in the device's internal storage. 239 | * The app will use a one Activity 240 | - Screen will have one Text field to enter the URL 241 | - Buttons to download images and cancel downloads 242 | - Show download progress in the progress bar 243 | - Show download progress in the notification 244 | - Show the downloaded image on full screen, once the download succeed 245 | - Add a button to save downloaded images in Gallery. 246 | * Use Retrofit for networking 247 | 248 | 249 | ### Practical 17 250 | #### Implement OnlineUserDirectory 251 | * The app will use one Activity 252 | - Main composable should show list of users, retrieved from API. 253 | - Use LazyColumn to show users 254 | - Show summary of user in the list including name, image and email 255 | - GET Api Url : http://jsonplaceholder.typicode.com/users 256 | * On the user item click, display all albums of user on the next screen. 257 | - Use GridView to show albums 258 | - Show placeholder image for an album to make UI eye-catchy 259 | - GET Api Url : https://jsonplaceholder.typicode.com/albums?userId=1 260 | * On the Album item click, show all photos of album on the next screen. 261 | - Use GridView to show photos 262 | - Show thumb image in Grid 263 | - Use glide or coil to show the image 264 | - On click of items show image in full screen 265 | - GET Api Url : http://jsonplaceholder.typicode.com/photos?albumId=2 266 | * Use Retrofit for networking 267 | 268 | 269 | 270 | # App Architecture 271 | 272 | ### Practical 18 273 | #### Create My Journal application 274 | * Enable users to Add their daily thoughts, feelings, experiences, and ideas. 275 | * The app will have a one Activity 276 | - Show user's thoughts in Grid 277 | - Add TextField to take user input 278 | - Add a button to save the user's thought 279 | - Store inputs in ViewModel as state 280 | * User should be able to add multiple thoughts 281 | * The application should be able to persist data even when there is a configuration change, such as screen rotation. 282 | * Use MVVM app architecture 283 | 284 | 285 | ### Practical 19 286 | #### Implement Drink Explorer 287 | * Allow users to search for their favourite mocktail detail. 288 | * The app will have one Activity 289 | - Add a search bar that allows users to search for mocktails by name 290 | - GET Api Url : https://www.thecocktaildb.com/api/json/v1/1/search.php?s={vodka} 291 | - Default search text should be vodka. That means initially showing Vodka in the search bar and fetching vodka using API 292 | * When the user taps on a mocktail, the application should display the ingredients and detail of mocktail. 293 | - Api for getting ingredients and detail of mocktail: www.thecocktaildb.com/api/json/v1/1/lookup.php?i={itemId} 294 | - Use placeholder and dummy data if required 295 | * Use MVVM app architecture 296 | 297 | 298 | # DataStore 299 | 300 | ### Practical 20 301 | #### Develop Authentify 302 | * An application that takes user credentials and basic information of a user and navigates to the home screen after a successful login. 303 | * The app will have one Activity 304 | - First, the app will show the register form 305 | - Take the user's name, email and password for login 306 | - Other basic information such as an address, DOB, blood group and gender etc. 307 | - Add validation for email and password 308 | - Save user detail in DataStore 309 | - After registering, show a login form 310 | - Take email and password 311 | - Check whether the user is available or not. If the user does not exist, notify user to do registration 312 | - Add validation for email 313 | * Once the user logs in, the app should always show the home screen 314 | - It will show user details 315 | - Add logout & delete user option in the toolbar 316 | - Clear user session on logout 317 | - Until the user logs out app should show the home screen. 318 | - When the user clicks the logout/delete user button, the app should clear/delete the user session and navigate back to the login screen. 319 | 320 | 321 | # Local Storage 322 | 323 | ### Practical 21 324 | #### Develop EmployeeHub application 325 | * Build app using one activity 326 | * The application should display a list of employees on the home screen 327 | - Show basic details including their name and job title. 328 | * When a user clicks on an employee from the list, the application should display their full details 329 | - including their contact information, job title, and other important information. 330 | * The user should be able to add new employees to the directory by entering their basic information and saving it locally. 331 | - Save employee name, email, contact info, job title, address, DOB and blood group etc. 332 | * Additionally, the user should be able to update an employee's information by selecting them from the employee list and editing their details. 333 | * Finally, an employee should be deleted by swiping to delete from the home screen 334 | * Use SQLite to store data locally 335 | * Use MVVM app architecture 336 | 337 | ### Practical 22 338 | #### Implement MinionSpeak application 339 | * Allow users to translate English text to the language of the minions and display the translated text on the screen. 340 | * Build app using one activity 341 | * On the Home screen 342 | - Add a text field to enter the English text. 343 | - Add a button to translate. On click of a button make an API call. 344 | - Once the translation is complete, the translated text should be displayed on the screen in the language of the minions. 345 | - GET Request API with query parameter- “text” https://api.funtranslations.com/translate/minion.json?text=”banana” 346 | * Additionally, the application should store the translation history locally so that users can access their previous translations. 347 | * Add fab button to check history on the home screen 348 | * Add an option to delete the history 349 | * Use Room database 350 | 351 | # Dependency Injection 352 | 353 | ### Practical 23 354 | #### Implement University directory application 355 | * Allow users to browse and search universities from all around the world. 356 | * On Home screen 357 | - Add a dropdown to select the country 358 | - When a country is selected, display a list of universities located in that country from API. 359 | * Use Hilt for dependency injection 360 | * GET Request API - http://universities.hipolabs.com/search?country={country name} 361 | * Write Unit test for viewModel 362 | 363 | 364 | ### Practical 24 365 | #### Implement offline-first StoreMate product application 366 | * GET API - https://fakestoreapi.com/products 367 | * Build app using one activity 368 | * On Home screen 369 | - Retrieve the list of products from an API and displays it to the user using LazyGrid. 370 | - Show product name, image and button to favourite/unfavourite product 371 | * Allow the user to view the product by clicking on it. 372 | - Show all detail of the product 373 | - Add option to favourite/unfavourite the product 374 | * Add an option on the home screen to view favourite products 375 | - Show all favourite products 376 | - Add option to remove from favourite 377 | - Add option to remove all favourite item 378 | - Use can select multiple items with a long click and can remove all selected products from their favourite. 379 | * The application should have offline functionality, allowing the user to continue browsing products even when they do not have an internet connection. 380 | * The product data should be first fetched from the local database and then sync with remote API data. 381 | * Add swipe-to-delete functionality to remove products from local storage 382 | * Add swipe-to-refresh functionality to refresh the local database with remote data 383 | * Write Unit test for viewModel 384 | 385 | 386 | # Kotlin Coroutine & Flow 387 | 388 | ### Practical 25 389 | #### Implement count-down timer application using Kotlin coroutine. 390 | * Build app using one activity 391 | * On Home screen 392 | - Add text fields to take user input for hours, minutes and second 393 | - Button to start/stop the timer 394 | - Show remaining & elapsed time 395 | * The user should be able to set the duration of the timer and start it. 396 | * When the timer ends, the app should display a notification to indicate that the time is up. 397 | * Also play sound and vibrate device on timer completes 398 | * Write Unit test for viewModel 399 | 400 | 401 | ### Practical 26 402 | #### Implement a VocabVault app 403 | * Allow users to search for the definition of any word in the English language. 404 | * Build an app using one activity 405 | * On the Home screen 406 | - Users should be able to search for a word by typing it into a search bar 407 | - App should display as user type in the search view 408 | - The app should display the word's definition along with pronunciations, parts of speech, examples, and synonyms. 409 | - Add option to play pronunciations of word 410 | * Make sure the app will not make unnecessary API calls while typing in search view 411 | - Use debounce using Kotlin coroutine to avoid extra API calls 412 | * Use Kotlin coroutine 413 | * API - https://api.dictionaryapi.dev/api/v2/entries/en/ 414 | * Write Unit test for viewModel 415 | 416 | ### Practical 27 417 | #### Create a Contact Keeper application. 418 | * Build an app using one activity 419 | * On the Home screen 420 | - Show all Contacts on the home screen 421 | - Show name, phone number and profile 422 | - On click of contact show the contact profile 423 | - Add option to update contact detail 424 | - Add an option to delete a user by swiping to delete 425 | - Add option to add contact with person name, multiple phone numbers, profile image, blood group and address 426 | * Add screen to edit/show contact detail 427 | - Add option to delete contact 428 | * The app should also update contacts in real-time, so changes made by one user are reflected across all devices. 429 | * Use Firestore to store contact details. 430 | * Use Kotlin flow to get a real-time update 431 | * Write Unit test for viewmodel 432 | 433 | # Broadcast receiver & task scheduling 434 | 435 | ### Practical 28 436 | #### Create Stand Up! application 437 | * Remind users to stand up and walk around every fifteen minutes. 438 | * Build an app using one activity 439 | * On the Home screen 440 | - Add a Toggle button to turn alarm on and off 441 | - Add option to set reminder start time 442 | - Open Timepicker to select reminder start time 443 | * The application should display a notification when fifteen minutes have passed since the last reminder. 444 | * Use the Android AlarmManager to schedule reminder notifications. 445 | 446 | 447 | # Android Service 448 | 449 | ### Practical 29 450 | #### Create a Music player application 451 | * Allow users to play multiple songs. 452 | * Build an app using one activity 453 | * On the Home screen 454 | - Show a list of songs from the device 455 | - On click of the song open player from the bottom 456 | - Show play indicator for current playing song 457 | * On the Player screen 458 | - Show song thumb image if available or use placeholder 459 | - show song name 460 | - Add option to play/pause the song 461 | - Add options to play the next/previous song 462 | - Add options to forward/backwards song by 10 sec 463 | * Use an Android Service to play music in the background and show a notification of the current music being played. 464 | --------------------------------------------------------------------------------