├── 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 | 
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 |
--------------------------------------------------------------------------------