Improve android roadmap content (#7236)

* Phase - 1.

* Phase - 2 (B)

* Phase - 3 (C)

* Phase - 4 (D)

* Phase - 5 (E,F)

* Phase - 6 (G)

* Phase - 7 (I)

* Phase - 8 (J&K)

* Phase - 9 (L)

* Phase - 10 (M,N)

* Phase - 11 (O,P,R,S)

* Phase - 12 (T,U,V,W)

* Update animations@Xn1VQ-xOT67ZfJJTM4r1p.md

* Update src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

* Update basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md

* Update src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

* Update buttons@WhfzFOUpm0DFEj7Oeq21R.md

* Update src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
pull/7289/head
Vedansh 2 months ago committed by GitHub
parent b658591c45
commit 3d7bdc55bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      src/data/roadmaps/android/content/activity-lifecycle@FVg438cVBBzqJFkGWVbQM.md
  2. 7
      src/data/roadmaps/android/content/activity@nwuVlPmzwJ17mtVQ8Hi9w.md
  3. 8
      src/data/roadmaps/android/content/apollo-android@ww0fTbdXwVr-QIOClU7ng.md
  4. 15
      src/data/roadmaps/android/content/app-components@5Li8J5iR_ZuyIlxX0LYei.md
  5. 4
      src/data/roadmaps/android/content/app-shortcuts@xV475jHTlLuHtpHZeXb7P.md
  6. 7
      src/data/roadmaps/android/content/asynchronism@cFYZ2C7yNnY6NHKUNP2Z4.md
  7. 5
      src/data/roadmaps/android/content/authentication@Xv0es_z64vh-QzivMeAT3.md
  8. 8
      src/data/roadmaps/android/content/basics-of-kotlin@jl1FsQ5-WGKeFyaILNt_p.md
  9. 9
      src/data/roadmaps/android/content/basics-of-oop@j69erqfosSZMDlmKcnnn0.md
  10. 7
      src/data/roadmaps/android/content/bitbucket@5LFZdUiFYYU_1sYsouyan.md
  11. 5
      src/data/roadmaps/android/content/bottom-sheet@Z4Tbd5ClnqCXGPGG09F-G.md
  12. 6
      src/data/roadmaps/android/content/broadcast-receiver@tFuAToid1Fkmu96BDtW7K.md
  13. 7
      src/data/roadmaps/android/content/builder-pattern@784fiIdKrQDlIm3VIiJQN.md
  14. 5
      src/data/roadmaps/android/content/buttons@WhfzFOUpm0DFEj7Oeq21R.md
  15. 7
      src/data/roadmaps/android/content/chucker@7RKN1FNtRE_BE6QeAQrKb.md
  16. 2
      src/data/roadmaps/android/content/cloud-messaging@e3vHFaFFMV7kI9q6yf5e9.md
  17. 6
      src/data/roadmaps/android/content/common-services@ZEdn2yy-IwHN3kOYr2ZbC.md
  18. 4
      src/data/roadmaps/android/content/constraint@3fFNMhQIuuh-NRzSXYpXO.md
  19. 6
      src/data/roadmaps/android/content/content-provider@nkcdjrswv0WCzUs48BAt9.md
  20. 6
      src/data/roadmaps/android/content/coroutines@i_cKmTnGAYw8xpHwZHjAd.md
  21. 2
      src/data/roadmaps/android/content/crashlytics@xB4evbD07n1VrHOIpowV4.md
  22. 7
      src/data/roadmaps/android/content/create-a-basic-hello-world-app@5m_7DvInF8C_4Ml1xVI6L.md
  23. 6
      src/data/roadmaps/android/content/dagger@CK7Ce632fdTgxeFsRUVvd.md
  24. 8
      src/data/roadmaps/android/content/data-structures-and-algorithms@cNeT1dJDfgn0ndPzSxhSL.md
  25. 6
      src/data/roadmaps/android/content/debugging@6KbSUAoT_jTudFoIbwMpA.md
  26. 6
      src/data/roadmaps/android/content/dependency-injection@qtXM9K7wyjOFuEMlZrB3C.md
  27. 10
      src/data/roadmaps/android/content/design--architecture@jePGzTejFe4ryA5qFFmjl.md
  28. 7
      src/data/roadmaps/android/content/detekt@RUvuCp_JK5MQQT13SSHUV.md
  29. 8
      src/data/roadmaps/android/content/development-ide@ZRGsokU313Ky-anWbWK6q.md
  30. 2
      src/data/roadmaps/android/content/dialogs@Mtx0bY0drmaTw8sCM5YTl.md
  31. 6
      src/data/roadmaps/android/content/distribution@kc6buUsLAeZeUb4Tk0apM.md
  32. 2
      src/data/roadmaps/android/content/edittext@boMz0HZlMAsLdCZlpUo-H.md
  33. 6
      src/data/roadmaps/android/content/espresso@-ONSC-ImGSELbamKmjIlH.md
  34. 6
      src/data/roadmaps/android/content/explicit-intents@TmIeCF3xVCe5Sy3ITmM31.md
  35. 5
      src/data/roadmaps/android/content/factory-pattern@DeOxj6RzQBYfEWV-M1Ybm.md
  36. 7
      src/data/roadmaps/android/content/file-system@A4kdaj6AFueUgPI7hwKi5.md
  37. 6
      src/data/roadmaps/android/content/firebase-distribution@T7q_quNaIAuGi96OdnDT1.md
  38. 6
      src/data/roadmaps/android/content/firestore@3EEfKAd-ppIQpdQSEhbA1.md
  39. 7
      src/data/roadmaps/android/content/flow@W-WTIiQml8dLK6i_V69JK.md
  40. 2
      src/data/roadmaps/android/content/fragments@2iDJrxjXOt7o2fPp2HfRl.md
  41. 8
      src/data/roadmaps/android/content/git@rqSZ2ATeHbOdIQE9Jlb0B.md
  42. 7
      src/data/roadmaps/android/content/github@H-2eb8fLwz8IKYXbeSVKK.md
  43. 7
      src/data/roadmaps/android/content/gitlab@Q47BtQphp59NkkZoeNXmP.md
  44. 7
      src/data/roadmaps/android/content/google-admob@D4ZXQOKJkyFYNZIy-MJ9Y.md
  45. 5
      src/data/roadmaps/android/content/google-maps@S5FVF9rMgVSSDKXJW2GYb.md
  46. 7
      src/data/roadmaps/android/content/google-play-services@m5rumeynEbS8T27pelr0-.md
  47. 7
      src/data/roadmaps/android/content/google-playstore@HgRdgi2Hu4C8YLG5PXfoo.md
  48. 6
      src/data/roadmaps/android/content/hilt@ooo_k2k_vUBR_jQ7Ke6Et.md
  49. 2
      src/data/roadmaps/android/content/imageview@A4rtNULX_MoV93IH1Lgqw.md
  50. 6
      src/data/roadmaps/android/content/implicit-intents@gGdz3j33x0gfrFDp_rw8Z.md
  51. 6
      src/data/roadmaps/android/content/intent-filters@b-sfh6NoS-APqaNKm5L5S.md
  52. 6
      src/data/roadmaps/android/content/intent@hv_9imIQpthxEaMLXEUHI.md
  53. 7
      src/data/roadmaps/android/content/interface--navigation@4_e76QafrB419S2INOeKd.md
  54. 8
      src/data/roadmaps/android/content/java@RBABbkzD_uNFwEO-hssZO.md
  55. 6
      src/data/roadmaps/android/content/jetpack-benchmark@ACUJlDDR0jqEohsFzWEoQ.md
  56. 4
      src/data/roadmaps/android/content/jetpack-compose@60Vm-77rseUqpMiFvp-dA.md
  57. 4
      src/data/roadmaps/android/content/junit@gvGAwjk_nhEgxzZ_c3f6b.md
  58. 6
      src/data/roadmaps/android/content/kodein@dc7k50PjCYZcElHhCk66p.md
  59. 8
      src/data/roadmaps/android/content/koin@UMqZ-jmXKDXKuu8bzqDH_.md
  60. 7
      src/data/roadmaps/android/content/kotlin@qIzUv8-GgQnkqChEdgD50.md
  61. 7
      src/data/roadmaps/android/content/ktlint@zMbXQH17Q52opdbitPzj7.md
  62. 7
      src/data/roadmaps/android/content/leak-canary@3i4g9ZWgLxKb2UMgRJi4Q.md
  63. 2
      src/data/roadmaps/android/content/linear@U8iMGGOd2EgPxSuwSG39Z.md
  64. 6
      src/data/roadmaps/android/content/linting@77F9F3oI5CPgwgM_hxWfa.md
  65. 4
      src/data/roadmaps/android/content/listview@EzLjX4iRT7AxkAOsJYnSU.md
  66. 6
      src/data/roadmaps/android/content/livedata@TiokceMGU9caqiR0lbFYL.md
  67. 4
      src/data/roadmaps/android/content/mvc@w1A6wPKSd3Yh2luuHV-aE.md
  68. 4
      src/data/roadmaps/android/content/mvp@aF_xFIqTjQbENtC7pkXvJ.md
  69. 4
      src/data/roadmaps/android/content/mvvm@pSU-NZtjBh-u0WKTYfjk_.md
  70. 6
      src/data/roadmaps/android/content/navigation-components@o5rzmnaQeiSh9ocvfJPpK.md
  71. 8
      src/data/roadmaps/android/content/network@Yb6aKJMMCxU1QVltWg3Dr.md
  72. 6
      src/data/roadmaps/android/content/observer-pattern@N_auRfGKkeIIc-qiHLkR_.md
  73. 3
      src/data/roadmaps/android/content/okhttp@5pVuwOItAhUxxJX8ysAsn.md
  74. 9
      src/data/roadmaps/android/content/pick-a-language@Suws-7f_6Z1ChpfcnxX2M.md
  75. 3
      src/data/roadmaps/android/content/recycleview@xIvplWfe-uDr9iHjPT1Mx.md
  76. 4
      src/data/roadmaps/android/content/relative@yE0qAQZiEC9R8WvCdskpr.md
  77. 4
      src/data/roadmaps/android/content/remote-config@1Tz-Shj_Tuz2U8llEAcLr.md
  78. 6
      src/data/roadmaps/android/content/repository-pattern@ZF5XgO7I_J9928bD3CVXo.md
  79. 6
      src/data/roadmaps/android/content/retro@dDMRYiqrKyOBnRRQc8zsp.md
  80. 4
      src/data/roadmaps/android/content/room-database@Bfg4So5RlI09zFNcburJd.md
  81. 6
      src/data/roadmaps/android/content/rxjava@xk0vnWr7uESdzYRxwFjoK.md
  82. 6
      src/data/roadmaps/android/content/rxjava@zXsNEyRbb8UpEOAUv6FpY.md
  83. 6
      src/data/roadmaps/android/content/rxkotlin@4h37WBpYxRRyw9oH8ge7o.md
  84. 6
      src/data/roadmaps/android/content/rxkotlin@7rbsp1o5bzIJP11BRIoeG.md
  85. 6
      src/data/roadmaps/android/content/services@PcHmU1c9hqKyzSjwlRPHk.md
  86. 4
      src/data/roadmaps/android/content/shared-preferences@PKql1HY0PLMfp50FRELXL.md
  87. 6
      src/data/roadmaps/android/content/signed-apk@_FSlD_qTz5Xo0x3pB6sZI.md
  88. 6
      src/data/roadmaps/android/content/state-changes@oUjetA2eduvQIeLcQlLcu.md
  89. 6
      src/data/roadmaps/android/content/storage@0fNQWRxst8xRstIfPaPO6.md
  90. 2
      src/data/roadmaps/android/content/tabs@pEBpXv3Jf1AzBNHlvVrG8.md
  91. 6
      src/data/roadmaps/android/content/tasks--backstack@-O-G9bg36ut8NnZcdOaop.md
  92. 6
      src/data/roadmaps/android/content/testing@ZOQm5OlzCA-h_yxywwDrW.md
  93. 2
      src/data/roadmaps/android/content/textview@znvZp24L-PcQwkSObtixs.md
  94. 6
      src/data/roadmaps/android/content/the-fundamentals@HlUUGj3dOZ68t4gIjerXh.md
  95. 6
      src/data/roadmaps/android/content/threads@BeGrA5BDBMZP1Jy7n-wl-.md
  96. 6
      src/data/roadmaps/android/content/timber@VFOD4JrV8kZ2583G3oT95.md
  97. 2
      src/data/roadmaps/android/content/toast@BVgO9n7tGlVdiS72-hFSd.md
  98. 6
      src/data/roadmaps/android/content/version-control@5s1CqsYCOXjNroDHaGKGa.md
  99. 6
      src/data/roadmaps/android/content/what-is-and-how-to-use-gradle@FVxNjbDBxgf6vkZWw1Awt.md
  100. 6
      src/data/roadmaps/android/content/workmanager@OAb_JD64uGm2tPoue7w6t.md

@ -1,3 +1,7 @@
# Activity Lifecycle # Activity Lifecycle
The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience. The **Activity Lifecycle** in Android represents a series of states or events that an activity can go through from its creation to its destruction. The primary states or events are `onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`, and `onRestart()`. The method `onCreate()` is called when the activity is first created, followed by `onStart()` when the activity becomes visible to the user. The `onResume()` method executes when the user starts interacting with the application. `onPause()` and `onStop()` methods are invoked when the application is no longer in the foreground or visible to the user. The `onDestroy()` method is used when the activity is being completely removed from the memory. The `onRestart()` method is called after the system stops the activity and is about to start it again. The proper handling of these states ensures the efficient use of resources and a smooth user experience.
Visit the following resources to learn more:
- [@official@Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle)

@ -1,3 +1,8 @@
# Activity # Activity
`Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity. `Activity` in Android is a crucial component that represents a single screen with a user interface. It is just like a window in a desktop application. Android apps are typically made up of one or more activities, each having its interface which allows user interaction. When an app is launched, an instance of `Activity` is created, starting the lifecycle of that app. Every activity has its own lifecycle (create, start, resume, pause, stop, destroy) that keeps the state of a user's progress, and Android manages these states automatically. Activities can also have `Intent`, which allows them to interact with other components, such as starting another activity or getting a result from that activity.
Visit the following resources to learn more:
- [@official@Android Activity](https://developer.android.com/reference/android/app/Activity)
- [@article@Mastering Android Activities](https://medium.com/deuk/mastering-the-android-activity-lifecycle-best-practices-1d10f15d060a)

@ -1,3 +1,9 @@
# Apollo-Android # Apollo-Android
**Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries. **Apollo Android** is a set of tools for using GraphQL with Android, made by the Apollo community developers. It's fully written in Kotlin and it was designed to seamlessly integrate with any Android app, making fetching data across network and handling data in the client-side a breeze. Apollo Android runs your queries and mutations and returns results as generated Kotlin types. It also normalizes your data and caches your results for further speed enhancements. It operates both on Android and Kotlin/JVM backend environment. It's also coroutines-first making handling concurrency easy and effective. To use Apollo Android, you'll set up the plugin, point it at your GraphQL schema, and write GraphQL queries.
Visit the following resources to learn more:
- [@official@Apollo Android](https://www.apollographql.com/docs/kotlin/v2/)
- [@official@Apollo Docs](https://www.apollographql.com/docs/kotlin/)
- [@opensource@apollographql/apollo-kotlin - GraphQL for Android](https://github.com/apollographql/apollo-kotlin)

@ -1,15 +1,18 @@
# App Components # App Components
Android apps are primarily made up of five different types of components: Android apps are primarily made up of five different types of components:
1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity. 1. **Activities**: These are individual screens that a user can interact with. Any UI action like touching a button or swiping a screen will usually take place within an activity.
2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server. 2. **Services**: Unlike activities, services run in the background and don't have a user interface. They’re used for repetitive or long running operations, like playing music or pulling in a feed of data from a server.
3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events. 3. **Broadcast Receivers**: These are event listeners. The Android operating system uses them to respond to system-wide events.
4. **Content Providers**: They manage and share app data with other apps installed on the device. For security, data is not generally shared across apps. 4. **Content Providers**: They manage and share app data with other apps installed on the device. For security, data is not generally shared across apps.
5. **Intents**: These serve as messages or commands to the Android system. They're used to signal to the Android system that certain events have occurred. 5. **Intents**: These serve as messages or commands to the Android system. They're used to signal to the Android system that certain events have occurred.
Each app component is designed to serve different purposes and to have a well-defined lifecycle which defines how the component is created and destroyed. Visit the following resources to learn more:
- [@official@App Fundamentals](https://developer.android.com/guide/components/fundamentals)
- [@article@Android App Components](https://medium.com/android-hunger/android-app-components-activities-fragments-and-intents-ed7373455555)

@ -1,3 +1,7 @@
# App Shortcuts # App Shortcuts
App shortcuts in Android are designed to provide quick and convenient routes to specific actions or functions within your app from the device home screen. To use them, long-press an app's icon and a pop-up menu will appear with the available shortcuts. Depending on the app, you might be able to send a message, make a booking, navigate home, or perform some other specific task without having to first open the app and navigate to the desired function. These shortcuts can also be moved and placed individually on the home screen for even faster access. App shortcuts in Android are designed to provide quick and convenient routes to specific actions or functions within your app from the device home screen. To use them, long-press an app's icon and a pop-up menu will appear with the available shortcuts. Depending on the app, you might be able to send a message, make a booking, navigate home, or perform some other specific task without having to first open the app and navigate to the desired function. These shortcuts can also be moved and placed individually on the home screen for even faster access.
Visit the following resources to learn more:
- [@official@App Shortcuts](https://developer.android.com/guide/topics/ui/shortcuts)

@ -1,3 +1,8 @@
# Asynchronism # Asynchronism
Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread. Asynchronism in Android is a practice that defines operations, which can run independently from the main operation without following the program's linear flow. The Android system uses threads to handle asynchronous processes. These threads function independently, ensuring that complex or time-consuming operations do not interfere with the user interface or other essential parts of the application. Android provides various tools for carrying out asynchronous tasks, such as `Handler`, `ThreadPoolExecutor`, `IntentService`, `AsyncTask`, and `Loader` etc. These tools provide ways to execute tasks on different threads and communicate the results back to the main thread.
Visit the following resources to learn more:
- [@official@Asynchronous Tasks](https://developer.android.com/guide/background)
- [@article@Asynchronous Task Execution](https://medium.com/@cpvasani48/asynchronous-task-execution-in-android-a-guide-with-example-44732744f3b8)

@ -6,4 +6,7 @@ Firebase Authentication offers two methods to authenticate. These are using an `
Firebase Authentication provides a full suite of capabilities even beyond authentication to make your life easier, which includes Security Rules for Cloud Storage and Cloud Firestore, Firebase Dynamic Links, and Firebase Invites. Firebase Authentication provides a full suite of capabilities even beyond authentication to make your life easier, which includes Security Rules for Cloud Storage and Cloud Firestore, Firebase Dynamic Links, and Firebase Invites.
Remember to always keep your development environment and Firebase console synced for smooth development operations. Any changes to the authentication method in the Firebase console should be reflected in your app and vice versa. Visit the following resources to learn more:
- [@official@Firebase Authentication](https://firebase.google.com/docs/auth)
- [@official@Firebase Authentication: Android](https://firebase.google.com/docs/auth/android/start)

@ -1,3 +1,9 @@
# Basics of Kotlin # Basics of Kotlin
Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development. Kotlin's syntax is more concise than Java, which means less code to write and read, and fewer opportunities for errors. It provides several high-level features like lambdas, coroutines and higher order functions that help making the code more clean and understandable. Key basics of Kotlin include control flow statements (if, when, for, while), variables (mutable and non-mutable), null safety, classes and objects, inheritance, interfaces, and exception handling. While learning Kotlin, experience with Java will certainly be helpful, but it's not a prerequisite. Kotlin is a concise, multi-platform, and fun language developed by JetBrains. Learn how to use Kotlin for Android, server-side, and cross-platform development, and explore its features, news, and community. Kotlin is a statically-typed programming language that runs on the Java Virtual Machine (JVM) and can be used to develop all types of Android apps. It is Google's preferred language for Android app development.
Visit the following resources to learn more:
- [@official@Kotlin](https://kotlinlang.org/)
- [@official@Kotlin Docs](https://kotlinlang.org/docs/getting-started.html)
- [@article@Kotlin Tutorial for Beginners](https://www.w3schools.com/kotlin/index.php)

@ -1,3 +1,10 @@
# Basics of OOP # Basics of OOP
In Android development, understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses "Objects" - entities that contain both data and functions that manipulate the data. Key concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit. By understanding these fundamentals, you can create more efficient and effective Android apps. Understanding the `Basics of Object-Oriented Programming (OOP)` is crucial. OOP is a programming paradigm that uses "Objects" - entities that contain both data and functions that manipulate the data.
Key concepts include `Classes`, which are blueprints from which objects are created; `Objects`, instances of a class; `Inheritance`, where one class acquires properties from another; `Polymorphism`, the ability of an object to take many forms; `Abstraction`, showing only necessary details and hiding implementation from the user; and `Encapsulation`, the concept of wrapping data and the methods that work on data within one unit.
Visit the following resources to learn more:
- [@official@Object-Oriented Programming - Wikipedia](https://en.wikipedia.org/wiki/Object-oriented_programming)
- [@official@OOP in Kotlin](https://developer.android.com/codelabs/basic-android-kotlin-compose-classes-and-objects)

@ -1,3 +1,8 @@
# BitBucket # BitBucket
Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo. Bitbucket is a web-based hosting service that is owned by Atlassian. Bitbucket uses either Mercurial or Git revision control systems, allowing users to manage and maintain their code. This platform is mainly used for code and code review. Bitbucket provides both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts) as of September 2010. It originally offered only Mercurial support. Bitbucket integrates with other Atlassian software like JIRA, HipChat, Confluence and Bamboo.
Visit the following resources to learn more:
- [@official@Bitbucket](https://bitbucket.org/)
- [@article@Bitbucket for Developers](https://www.atlassian.com/software/bitbucket)

@ -2,9 +2,10 @@
`Bottom sheets` are surfaces containing supplementary content that are anchored to the bottom of the screen. `Bottom sheets` are surfaces containing supplementary content that are anchored to the bottom of the screen.
There are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets. There are several attributes that can be used to adjust the behavior of both standard and modal bottom sheets.
Behavior attributes can be applied to standard bottom sheets in xml by setting them on a child View set to `app:layout_behavior` or programmatically. Behavior attributes can be applied to standard bottom sheets in xml by setting them on a child View set to `app:layout_behavior` or programmatically.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@Android developers: Bottom sheets](https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog) - [@official@Android developers: Bottom Sheets](https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog)

@ -1,3 +1,7 @@
# Broadcast Receiver # Broadcast Receiver
**Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter. **Broadcast Receivers** in Android are components that respond to system-wide broadcast announcements. They can be registered to respond to a specific type of broadcasts or implement a user-defined broadcast. While you can initiate a broadcast from your app, they are generally used for receiving system notifications or communicating with other applications. However, keep in mind that they cannot display a user interface, but they can start activities if necessary, which do have a user interface. A `BroadcastReceiver` class must override the `onReceive()` method where each message is received as an `Intent` object parameter.
Visit the following resources to learn more:
- [@official@Broadcast Receiver](https://developer.android.com/reference/android/content/BroadcastReceiver)

@ -1,3 +1,8 @@
# Builder Pattern # Builder Pattern
The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor. The **Builder Pattern** in Android is used to construct complex objects step by step. It separates the construction of an object from its representation. The pattern involves a `Builder` class which is used to construct the `Product` class. The Builder class typically has a method for each part that may be used to construct a Product. It also has a method for returning the final product. The Builder pattern is useful in situations where you might have multiple ways to create an object or when an object requires a large number of parameters for its constructor.
Visit the following resources to learn more:
- [@official@Builder Pattern](https://developer.android.com/kotlin/style-guide#builder-pattern)
- [@article@Android Builder Pattern](https://medium.com/kayvan-kaseb/builder-design-pattern-in-android-a38dccb75485)

@ -2,6 +2,9 @@
A `button` consists of text or an icon, or both, that communicates what action occurs when the user taps it. A `button` consists of text or an icon, or both, that communicates what action occurs when the user taps it.
Buttons are UI widgets that allow users to interact with an application by tapping on them. A button typically consists of text, an icon, or a combination of both, and communicates what action will occur when the user taps it.
Learn more from the following resources: Learn more from the following resources:
- [@official@Android Developers: Button](https://developer.android.com/develop/ui/views/components/button) - [@official@Android Developers: Button](https://developer.android.com/develop/ui/views/components/button)
- [@official@Create a Button - Android](https://developer.android.com/quick-guides/content/create-button)

@ -1,3 +1,8 @@
# Chucker # Chucker
`Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently. `Chucker` is an open-source debugging library created for Android applications. It has been designed to be easy to use and convenient for developers. This library intercepts and records all HTTP requests and responses inside your application, which helps to visualize and share this information in an understandable and easy-to-read format. Using Chucker's distinct features, you can inspect all the HTTP and HTTPS traffic going in and out of your app directly. In addition, it provides other nifty features such as a user-friendly interface to view the server's raw response. It's like having a built-in network inspector in your debugging tool, enabling you to solve network-related issues more efficiently.
Visit the following resources to learn more:
- [@opensource@ChuckerTeam/chucker - Chucker On GitHub](https://github.com/ChuckerTeam/chucker)
- [@article@Network Traffic Inspection with Chucker](https://medium.com/tech-takeaways/simple-android-network-traffic-inspection-with-chucker-and-seismic-1e6162c51f64)

@ -5,4 +5,4 @@ Firebase Cloud Messaging (FCM) is a powerful, battery-efficient messaging servic
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://firebase.google.com/docs/cloud-messaging/android/client) - [@official@Documentation](https://firebase.google.com/docs/cloud-messaging/android/client)
- [@video@Firebase Cloud Messaging](https://www.youtube.com/watch?v=sioEY4tWmLI&list=PLl-K7zZEsYLkuHRCtHTpi6JYHka8oHLft) - [@video@Firebase Cloud Messaging](https://www.youtube.com/watch?v=sioEY4tWmLI&list=PLl-K7zZEsYLkuHRCtHTpi6JYHka8oHLft)

@ -1,3 +1,7 @@
# Common Services # Common Services
In Android, "Common Services" are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs. Common Services are functional units or components provided by the Android system for use by developers. These services include things such as Location Services (used to determine the device's geographical location), Notification Services (handles the display and management of user notifications), and Sensor Services (interacts with hardware sensors). Other common services are Network and Connectivity Services, Account Manager, and Data Storage Services among others. They simplify the development process by handling complex functionalities behind the scenes, allowing developers to focus on the application's specific needs.
Visit the following resources to learn more:
- [@official@Common Services](https://developer.android.com/guide/components/services)

@ -4,5 +4,5 @@ Lets you create large, complex layouts with a flat view hierarchy—no nested vi
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: ConstraintLayout in xml](https://developer.android.com/develop/ui/views/layout/constraint-layout) - [@official@Android: ConstraintLayout in XML](https://developer.android.com/develop/ui/views/layout/constraint-layout)
- [@official@Android developers: ContraintLayout in compose](https://developer.android.com/develop/ui/compose/layouts/constraintlayout) - [@official@Android: ConstraintLayout in Compose](https://developer.android.com/develop/ui/compose/layouts/constraintlayout)

@ -1,3 +1,7 @@
# Content Provider # Content Provider
A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application. A **Content Provider** in Android is a key component that allows applications to securely share data with other applications. They act as a layer between databases and applications to enhance data security. Content providers manage access to a structured set of data by handling data transactions, implementing data security, and maintaining isolation between applications. They provide an abstracted interface which is used to access data, while the underlying storage method (Like SQLite database, web, or any other method) remains hidden. This mechanism aids in retrieving data from a non-relational source in a structured way. They're used primarily when data needs to be shared between multiple applications, not just within a single application.
Visit the following resources to learn more:
- [@official@Content Provider](https://developer.android.com/guide/topics/providers/content-providers)

@ -1,3 +1,7 @@
# Coroutines # Coroutines
In Android, `coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive. `Coroutines` refer to a concurrency design pattern that you can use on Android to simplify code that executes asynchronously. `Coroutines` provide a way to write asynchronous, non-blocking code in a natural, sequential manner. The fundamental building blocks of `coroutines` are `suspend` functions which are simply functions that can be paused and resumed at later times. They are the key to writing non-blocking asynchronous code and represent a single unit of asynchronous computation. This aspect of `coroutines` makes them useful for managing long-running tasks that might otherwise block the main thread and cause your application to become unresponsive.
Visit the following resources to learn more:
- [@official@Coroutines](https://kotlinlang.org/docs/coroutines-overview.html)

@ -4,5 +4,5 @@
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://firebase.google.com/docs/crashlytics/get-started?platform=android) - [@official@Crashlytics Documentation](https://firebase.google.com/docs/crashlytics/get-started?platform=android)
- [@video@Firebase: Crashlytics](https://www.youtube.com/watch?v=LhjTAkifr6g) - [@video@Firebase: Crashlytics](https://www.youtube.com/watch?v=LhjTAkifr6g)

@ -1,6 +1,7 @@
# Create a basic Hello World App # Create a Hello World App
The "Hello World" app is a simple project that you can build when you're getting started with Android development. It's often the first program that beginners learn to build in a new system. It's usually considered the simplest form of program that displays a message to the user - "Hello, World!" In Android, this involves creating a new project from the Android Studio and setting up the main activity. The main activity file is primarily written in Java or Kotlin where you can code for the display message, while the layout design view can be created in the XML file. The "Hello World" app is a simple project that you can build when you're getting started with Android development. It's often the first program that beginners learn to build in a new system. It's usually considered the simplest form of program that displays a message to the user - "Hello, World!" In Android, this involves creating a new project from the Android Studio and setting up the main activity. The main activity file is primarily written in Java or Kotlin where you can code for the display message, while the layout design view can be created in the XML file.
Resources: Visit the follow resources to learn more:
- [@article@Create your first android app](https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app)
- [@official@Create Your First Android Application](https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app)

@ -1,3 +1,7 @@
# Dagger # Dagger
[Dagger](https://dagger.dev/) is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes. Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square that's focused on simplicity and speed. Dagger's primary focus is on compile-time analysis of dependencies, code simplicity, and clarity. It uses annotations to define dependencies, thus aiding in easy readability and understanding of the code. Dagger also eliminates the use of reflection to inject dependencies, thus boosting performance. It offers custom scopes to control the lifespan of instances and ensures that dependencies are Singleton across the entire lifespan of certain scopes.
Visit the following resources to learn more:
- [@official@Dagger](https://dagger.dev/)

@ -1,5 +1,9 @@
# DataStructures and Algorithms # DataStructures and Algorithms
In Android, **data structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree. **Data Structures** are primarily used to collect, organize and perform operations on the stored data more effectively. They are essential for designing advanced-level Android applications. Examples include Array, Linked List, Stack, Queue, Hash Map, and Tree.
Meanwhile, **algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications. **Algorithms** are a sequence of instructions or rules for performing a particular task. In Android, algorithms can be used for data searching, sorting, or performing complex business logic. Some commonly used algorithms are Binary Search, Bubble Sort, Selection Sort, etc. A deep understanding of data structures and algorithms is crucial in optimizing the performance and the memory consumption of the Android applications.
Visit the following resources to learn more:
- [@article@Data Structures and Algorithms in Android](https://medium.com/@pranamsharma.1997/importance-of-data-structure-and-algorithms-in-android-app-development-75eed9f73909)

@ -1,3 +1,7 @@
# Debugging # Debugging
"Debugging" is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points. Additionally, you can use log messages to monitor the behavior of your application, which is especially useful for understanding the state of your app during runtime. Remember that before debugging, you need to build your app in debug mode. Debugging is a critical step in the app development process. In Android development, it includes identifying and fixing errors, or bugs, in your code. You can debug Android apps using several tools and techniques. For example, Android Studio, the primary integrated development environment (IDE) for Android, comes with a built-in debugging tool, the Android Debug Bridge (ADB). This command-line tool allows you to communicate your device and perform various actions like installing and debugging apps. Android Studio also supports step-by-step debugging, where you can set breakpoints in your code and inspect the application state at those points.
Visit the following resources to learn more:
- [@official@Debugging](https://developer.android.com/studio/debug)

@ -1,3 +1,7 @@
# Dependency Injection # Dependency Injection
`Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code. `Dependency Injection` is a technique where an object does not need to create its own dependencies; instead, dependencies are provided (or injected) at runtime. This technique is highly beneficial in Android Development. It helps in creating loosely coupled and easily testable code. For example, the `Retrofit` instance that your application requires to make network calls can be created somewhere else and can be injected whenever required using libraries like `Dagger`, `Koin` or `Hilt`. The `ViewModel` instances can also be injected rather than being created in the required classes directly. Through dependency injection, plugins ensure the code becomes easier to change, understand, and maintain, hence, improving the quality of the code.
Visit the following resources to learn more:
- [@official@Dependency Injection](https://developer.android.com/training/dependency-injection)

@ -1,3 +1,11 @@
# Architecture and Design Patterns # Architecture and Design Patterns
In Android, **Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like [Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), [Model-View-Presenter (MVP)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter), [Model-View-ViewModel (MVVM)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel), and [Model-View-Intent (MVI)](https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary. **Design Architecture** refers to structuring the code in a way that increases its readability, maintainability, and testability. There are several ways to design architecture like Model-View-Controller (MVC), Model-View-Intent (MVI). Each of these define the interaction between the data, the logic, and the UI layers. Google’s recommended architectural pattern is Android Architecture Components which follow the principles of the MVVM pattern. Bear in mind that an architecture is not a rigid structure that fits all solutions. Rather, it serves as a guideline and can be tweaked as necessary.
Visit the following resources to learn more:
- [@official@Android Architecture Components](https://developer.android.com/topic/libraries/architecture)
- [@article@Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
- [@article@Model-View-Presenter (MVP)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter)
- [@article@Model-View-ViewModel (MVVM)](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel)
- [@article@Model-View-Intent (MVI)](https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started)

@ -1,3 +1,8 @@
# Detekt # Detekt
`Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs. `Detekt` is a static code analysis tool for the Kotlin programming language. It operates on the abstract syntax tree provided by the Kotlin compiler and can run in the command line or as a task in your Gradle build script. Detekt provides complexity reports that can be used to identify overly complex code and help simplify it. It also checks for a variety of potential bugs and code smells, including issues with formatting, naming conventions, exception handling, and more. Moreover, Detekt is highly configurable, allowing you to enable, disable, or modify the behavior of its checks to suit your project's needs.
Visit the following resources to learn more:
- [@official@Detekt](https://detekt.dev/)
- [@opensource@Detekt: Static Code Analysis for Kotlin](https://github.com/detekt/detekt)

@ -1,3 +1,9 @@
# Development IDE # Development IDE
"Development IDE" refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team. Development IDE refers to Development Integrated Development Environment that is vital for Android App development. For Android, the primary IDE is **Android Studio**. This official IDE from Google includes everything you need to build an Android app, such as a code editor, code analysis tools, emulators for all of Android's supported OS versions and hardware configurations, and more. Other popular IDEs include **Eclipse** (with an Android Developer Tools plugin), **NetBeans**, and **IntelliJ IDEA**. Each of these IDEs tends to have its own set of specialized features, but all are designed to provide the tools and services needed for Android development. The choice of IDE often depends on the specific needs and preferences of the developer or development team.
Visit the following resources to learn more:
- [@official@Android Studio](https://developer.android.com/studio)
- [@official@Android Studio Documentation](https://developer.android.com/studio/intro)
- [@official@Android Studio Plugins](https://developer.android.com/studio/intro/studio-plugins)

@ -3,4 +3,4 @@
A `DialogFragment` is a special fragment subclass that is designed for creating and hosting dialogs. Although you don't need to host your **dialog** within a fragment, doing so lets the `FragmentManager` manage the state of the dialog and automatically restore the dialog when a configuration change occurs. A `DialogFragment` is a special fragment subclass that is designed for creating and hosting dialogs. Although you don't need to host your **dialog** within a fragment, doing so lets the `FragmentManager` manage the state of the dialog and automatically restore the dialog when a configuration change occurs.
Learn more from the following resources: Learn more from the following resources:
- [@official@Android Developers: Dialogs](https://developer.android.com/guide/fragments/dialogs) - [@official@Android Developers: Dialogs](https://developer.android.com/guide/fragments/dialogs)

@ -1,3 +1,7 @@
# Distribution # Distribution
Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged rollouts, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines. Distribution in Android refers to the methods and channels you can use to get your Android application into the hands of users. You can choose to distribute your app on the Google Play Store, which is the official app store for the Android operating system. This platform makes your app available to users in various countries around the world. Additionally, you can also opt to distribute your app through other third-party app stores or even your own website. Furthermore, Google provides a range of distribution options such as country targeting, device targeting, and staged roll-outs, which can be customized according to your distribution strategy. Remember, when you submit your application for distribution, you must adhere to the respective app store's policy and content guidelines.
Visit the following resources to learn more:
- [@official@Google Play Developer Distribution](https://developer.android.com/distribute)

@ -4,4 +4,4 @@
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: EditText](https://developer.android.com/reference/android/widget/EditText) - [@official@Android developers: EditText](https://developer.android.com/reference/android/widget/EditText)

@ -1,3 +1,7 @@
# Espresso # Espresso
Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher. It's important to note that Espresso tests are written based on what the user can see on the screen. Espresso is a testing framework provided by Android to create UI tests for Android applications. It automatically synchronizes your test actions with the UI of your application, ensuring that your test will only proceed when the necessary UI activities have been completed. In Espresso, you can programmatically simulate user interactions like clicking buttons, typing text, or swiping screens, and then examine the UI's state to confirm it's as expected. Espresso tests can run on devices running Android 4.3 (API level 18) or higher.
Visit the following resources to learn more:
- [@official@Espresso](https://developer.android.com/training/testing/espresso)

@ -1,3 +1,7 @@
# Explicit Intents # Explicit Intents
**Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent. **Explicit Intents** are primarily used within an application's own boundaries. In explicit intents you specify the component that needs to be responded to the intent. Therefore, the target component must be specified by calling methods such as `setComponent(ComponentName)`, `setClass(Context, Class)`, or `setClassName(String, String)`. This means that explicit intents are typically used for launching activities, broadcasting messages, starting services within the app. Explicit intents are not resolved by the system but are passed to the component identified in the intent.
Visit the following resources to learn more:
- [@official@Explicit Intents](https://developer.android.com/guide/components/intents-filters#explicit)

@ -34,4 +34,7 @@ public class AnimalFactory {
} }
} }
``` ```
In the code above, `AnimalFactory` is the factory class responsible to create and return instances of `Dog` and `Cat` classes.
Visit the following resources to learn more:
- [@official@Android: Factory Pattern](https://developer.android.com/guide/components/intents-filters#factory)

@ -1,3 +1,8 @@
# File System # File System
The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions. The Android operating system uses a specific File System structure to store and manage files. It’s primarily based on the Linux File system, with some specific Android features. The File System includes several key directories that are used for specific purposes. For instance, directories such as `/system` hold system apps and firmware, while `/data` contains user data, settings and installed applications, and `/sdcard` usually represents an internal or external SD card for additional storage. It's worth mentioning directories like `/proc`, `/dev`, and `/sys` which are virtual file systems and house important system files. As an Android developer, understanding these directories can help you interact with Android's file system more effectively. Note that access to some of these directories may be restricted depending on system permissions.
Visit the following resources to learn more:
- [@official@Android File System](https://developer.android.com/training/data-storage/)
- [@article@Android File System](https://www.androidauthority.com/android-file-system-1010817/)

@ -1,3 +1,7 @@
# Firebase Distribution # Firebase Distribution
Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle. Firebase Distribution is a development tool within the Google Firebase suite that allows you to share pre-release versions of your Android apps with your development team. It enables you to distribute your app binaries to multiple testers and teams to get feedback before the app's official launch. Firebase Distribution supports both Android and iOS applications and works in tandem with other features, like Firebase Crashlytics, to effectively manage the testing and debugging aspects of your application's lifecycle.
Visit the following resources to learn more:
- [@official@Firebase Distribution](https://firebase.google.com/docs/app-distribution)

@ -1,3 +1,7 @@
# FireStore # FireStore
Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients. Firestore, often referred to as Firebase Firestore or Cloud Firestore, is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud. Firestore comes with features like expressive querying, real-time updates, and automatic multi-region data replication. It is designed to offer seamless integration with other Firebase and Google Cloud products. It provides a cloud-based NoSQL database, which means the data is stored as collections of documents. Each document, in turn, contains a set of key-value pairs. Firestore ensures durable networking, so data syncs across client apps in real-time, even when the device is offline, making it easier for you to work with distributed data that can be kept in sync across various clients.
Visit the following resources to learn more:
- [@official@Firestore](https://firebase.google.com/docs/firestore)

@ -1,3 +1,8 @@
# Flow # Flow
`Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in backpressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem. `Flow` in Android development is part of the Kotlin Coroutines library. It is a type that can emit multiple values sequentially, making it perfect for working with any data streams or any streams of events that aren't instantaneous. Like Observables, `Flow` is also based on the observer pattern, meaning it can emit values and these emissions can be observed and reacted to. However, `Flow` comes with built-in back pressure handling and the ability to transform, filter, or combine these flows in a sequence. Along with Coroutines, `Flow` encourages a more predictable and simplified concurrency design without callback hell problem.
Visit the following resources to learn more:
- [@official@Flow](https://kotlinlang.org/docs/flow.html)
- [@official@Flow: Coroutines](https://kotlinlang.org/docs/flow-coroutines.html)

@ -4,4 +4,4 @@ A `Fragment` represents a reusable portion of your app's UI. A fragment defines
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android Developers: Fragments](https://developer.android.com/guide/fragments) - [@official@Android Developers: Fragments](https://developer.android.com/guide/fragments)

@ -1,3 +1,9 @@
# Git # Git
`Git` is a highly efficient and flexible distributed version control system that was created by Linus Torvalds, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging. Yet, Git has a high learning curve and can be complex for beginners to understand the command line interface. Furthermore, Git also allows you to create `tags` to reference certain points in your history for milestone or version releases. `Git` is a highly efficient and flexible distributed version control system that was created by **Linus Torvalds**, the creator of Linux. It allows multiple developers to work on a project concurrently, providing tools for non-linear development and tracking changes in any set of files. Git has a local repository with a complete history and version-tracking capabilities, allowing offline operations, unlike SVN. It ensures data integrity and provides strong support for non-linear development with features such as branching and merging.
Visit the following resources to learn more:
- [@roadmap@Git and Github Roadmap](https://roadmap.sh/git-github)
- [@official@Git](https://git-scm.com/)
- [@official@Git Documentation](https://git-scm.com/docs)

@ -1,4 +1,9 @@
# GitHub # GitHub
**GitHub** is a cloud-based hosting service for managing software version control using Git. It provides a platform for enabling multiple developers to work together on the same project at the same time. With GitHub, codes can be stored publicly, allowing for collaboration with other developers or privately for individual projects. Key features of GitHub include code sharing, task management, and version control, among others. GitHub also offers functionalities such as bug tracking, feature requests, and task management for the project. **GitHub** is a cloud-based hosting service for managing software version control using Git. It provides a platform for enabling multiple developers to work together on the same project at the same time. With GitHub, codes can be stored publicly, allowing for collaboration with other developers or privately for individual projects. Key features of GitHub include code sharing, task management, and version control, among others. GitHub also offers functionalities such as bug tracking, feature requests, and task management for the project.
For Android development, it supports Gradle-based android projects, plugins for Android Studio and JetBrains IntelliJ IDEA, making version control operations more user-friendly.
Visit the following resources to learn more:
- [@roadmap@Git and Github Roadmap](https://roadmap.sh/git-github)
- [@official@GitHub](https://github.com/)
- [@official@Github Documentation](https://docs.github.com/)

@ -1,3 +1,8 @@
# GitLab # GitLab
`Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment. `Gitlab` is a web-based DevOps lifecycle tool which provides a Git-repository manager, along with continuous integration and deployment pipeline features, using an open-source license, developed by GitLab Inc. Users can manage and create their software projects and repositories, and collaborate on these projects with other members. `Gitlab` also allows users to view analytics and open issues of their project. It stands next to other version control tools like `GitHub` and `Bitbucket`, but comes with its own set of additional features and nuances. For Android development, `Gitlab` can be particularly useful owing to its continuous integration and deployment system which can automate large parts of the app testing and deployment.
Visit the following resources to learn more:
- [@official@Gitlab](https://about.gitlab.com/)
- [@official@Gitlab Documentation](https://docs.gitlab.com/)

@ -1,3 +1,8 @@
# Google AdMob # Google AdMob
Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue. Google AdMob is a mobile advertising platform designed for app developers to monetize their apps by displaying ads from over 1 million Google advertisers. AdMob supports a wide range of ad formats, such as banner ads, interstitial ads, video ads, and more. It offers a powerful mediator that enables you to display ads from multiple sources, which includes the Google Mobile Ads SDK, third-party ad networks, and house ad campaigns. Furthermore, AdMob provides analytical tools to better understand your users and maximize ad revenue.
Visit the following resources to learn more:
- [@official@Google AdMob](https://admob.google.com/home/)
- [@official@Google AdMob Documentation](https://admob.google.com/home/get-started/)

@ -1,3 +1,8 @@
# Google Maps # Google Maps
Google Maps is a crucial service on Android, offering powerful, user-friendly mapping technology and local business information. Google Maps features include street maps, satellite imagery, 360° panoramic views of streets (Street View), real-time traffic conditions (Google Traffic), and route planning for traveling by foot, car, bicycle and air, or public transportation. The service's interface includes a function to overlay various layers such as traffic density, public transit lines, and cycling paths. Google Maps for Android also provides an API, which allows developers to interface with and control certain aspects of the Google Maps service in their applications. This capability subjects to certain usage limits and requirements set by Google. Google Maps is a crucial service on Android, offering powerful, user-friendly mapping technology and local business information. Google Maps features include street maps, satellite imagery, 360° panoramic views of streets (Street View), real-time traffic conditions (Google Traffic), and route planning for traveling by foot, car, bicycle and air, or public transportation. The service's interface includes a function to overlay various layers such as traffic density, public transit lines, and cycling paths. Google Maps for Android also provides an API, which allows developers to interface with and control certain aspects of the Google Maps service in their applications. This capability subjects to certain usage limits and requirements set by Google.
Visit the following resources to learn more:
- [@official@Google Maps](https://developers.google.com/maps/documentation/android-sdk/overview)
- [@official@Google Maps Documentation](https://developers.google.com/maps/documentation/android-sdk/intro)

@ -1,3 +1,8 @@
# Google Play Services # Google Play Services
*Google Play Services* is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more. *Google Play Services* is a proprietary background service and API package for Android devices from Google. Operated by Google, the service provides core functionalities like authentication for Google services, synchronized contacts, access to all the latest user privacy settings, and higher quality, lower-powered location-based services. It also speeds up offline searches, provides more immersive maps, and improves gaming experiences. Google Play Services play a crucial role in the operation of various other applications, including those not developed by Google. Moreover, it improves the overall Android experience by speeding up offline searches, providing more detailed maps, enhancing gaming experiences, and more.
Visit the following resources to learn more:
- [@official@Google Play Services](https://developer.android.com/google/play-services)
- [@official@Google Play Services Documentation](https://developer.android.com/google/play-services/overview.html)

@ -1,3 +1,8 @@
# Google Playstore # Google Playstore
**Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly. **Google Play Store** is the official distribution channel for Android apps and other digital media content. It is a global online software store developed and operated by Google. Developers submit their applications to Google Play through the Play Console where Google Play's automated systems scan for potentially malicious code and content violations, before they are published on the Play Store. Users can then browse, download, and use these applications on their Android devices or via the web. Purchases, downloads, and user feedback can be tracked via the Google Play Console. Owners of Android devices can also configure automatic updates for the applications they have installed from the store. This platform supports multiple languages and multiple forms of payment methods, making it accessible and customer-friendly.
Visit the following resources to learn more:
- [@official@Google Play Store](https://play.google.com/store)
- [@official@Google Play Store Documentation](https://developer.android.com/distribute/googleplay)

@ -1,3 +1,7 @@
# Hilt # Hilt
Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you. Moreover, Hilt provides predefined set of components tied to the Android lifecycle which helps to handle scoped instances. Hilt is a dependency injection library for Android that reduces the boilerplate code that you would normally need to write when setting up manual dependency injection in your project. It is based on the Dagger library, but it simplifies the implementation process and streamlines the use of Dagger in Android apps. To set it up, you must annotate your Android classes and Hilt will automatically generate and provide the necessary dependencies for you.
Visit the following resources to learn more:
- [@official@Hilt](https://developer.android.com/training/dependency-injection/hilt-android)

@ -4,4 +4,4 @@ Displays image resources, for example Bitmap or Drawable resources. ImageView is
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@Android developers: ImageView](https://developer.android.com/reference/android/widget/ImageView) - [@article@Android Developers: ImageView](https://developer.android.com/reference/android/widget/ImageView)

@ -1,3 +1,7 @@
# Implicit Intents # Implicit Intents
In Android development, **Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `<intent-filter>` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent. An ideal example of an implicit intent is opening a URL. You do not need to know the specific activity that can handle this request, you just declare an intent to view a web page and Android system will select the suitable app that can open the URL. **Implicit Intents** do not specify the target component explicitly like Explicit Intents. Instead, they allow the system to find a suitable component matching the Intent description to handle the request. The system will find an activity that can handle this intent by comparing the `<intent-filter>` section in the `AndroidManifest.xml` of all apps installed on the device against the Implicit Intent.
Visit the following resources to learn more:
- [@official@Implicit Intents](https://developer.android.com/guide/components/intents-filters#implicit)

@ -1,3 +1,7 @@
# Intent Filters # Intent Filters
`Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the <intent-filter> XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver). `Intent Filters` in Android are essential components of the Android system where you can declare the capabilities of your activities, services, and broadcast receivers. An intent filter is an expression found in your app's manifest file, defined in the `<intent-filter>` XML element. Android uses these filters to determine the appropriate components for incoming intents, which can be either explicit or implicit. Your app's ability to respond to intents depends on the filters you define. The filters are set of conditions comprised of `action`, `category`, and `data` which your activity or service is able to perform. If the incoming `Intent` matches with defined `Intent Filters`, Android system will permit that `Intent` to your Component (Activity, Service, or Broadcast Receiver).
Visit the following resources to learn more:
- [@official@Intent Filters](https://developer.android.com/guide/components/intents-filters)

@ -1,3 +1,7 @@
# Intent # Intent
"Intent" in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform. The Intent can be explicit, in which you specify the component to start or implicit, where you declare a general action to perform, allowing a component from another app to handle it. Implicit intents are often used to request another app's functionality, such as showing a user a location on a map or taking a photo. "Intent Filters" are then used by the components to advertise their capabilities to handle different types of intents. Intent in Android is a software mechanism used for late runtime binding between components, such as activities, content providers, and services. It is essentially a passive data structure holding an abstract description of an operation that the Android system is requested to perform.
Visit the following resources to learn more:
- [@official@Intent](https://developer.android.com/reference/android/content/Intent)

@ -1,3 +1,8 @@
# Interface and Navigation # Interface and Navigation
In Android development, the concepts of "Interface" and "Navigation" are crucial. The "Interface" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android. Meanwhile, "Navigation" refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within the app, following a clear path, like a map. Android uses the Navigation Component, a suite of libraries, tools, and guidance on constructing in-app navigation. Understanding both these elements, Interface and Navigation, is fundamental to creating an intuitive and user-friendly Android application. In Android development, the concepts of "Interface" and "Navigation" are crucial. The "Interface" often refers to the Graphical User Interface (GUI) that users interact with. This includes buttons, text fields, image views, scroll views and other UI elements that the users can interact with to perform certain tasks. Tools like XML and Material Designs are used for interface design in Android.
Visit the following resources to learn more:
- [@official@Android Developers: Interface](https://developer.android.com/guide/topics/ui/declaring-layout.html)
- [@official@Android Developers: Navigation](https://developer.android.com/guide/navigation)

@ -1,3 +1,9 @@
# Java # Java
Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of "write once, run anywhere" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps. Java is a statically-typed language, which can be beneficial for detecting errors at compile-time rather than at runtime. Oracle, who owns Java, provides comprehensive documentation and support for the language. Java is a popular programming language used for Android development due to its robustness and ease of use. Its object-oriented structure allows developers to create modular programs and reusable code. The language was built with the philosophy of "write once, run anywhere" (WORA), meaning compiled Java code can run on all platforms without the need for recompilation. Android’s API and core libraries are primarily written in Java, therefore understanding Java is fundamental in creating diverse and powerful Android apps.
Visit the following resources to learn more:
- [@roadmap@Java Roadmap](https://roadmap.sh/java)
- [@official@Java](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)
- [@official@Java Documentation](https://docs.oracle.com/en/java/javase/11/docs/api/)

@ -1,3 +1,7 @@
# Jetpack Benchmark # Jetpack Benchmark
Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat. Jetpack Benchmark is a library within the Android Jetpack Suite that allows developers to quickly and accurately measure the performance of their apps. This library can help measure CPU, memory, and IO performance of code in Android apps. Developers can define some specific code paths to be benchmarked by wrapping the code in `BenchmarkRule.measureRepeated {}`. In addition, it automatically takes care of warmup, measures your code performance, and outputs benchmarking results to the Android Studio's logcat.
Visit the following resources to learn more:
- [@official@Jetpack Benchmark](https://developer.android.com/studio/profile/benchmark)

@ -2,5 +2,7 @@
`Jetpack Compose` is a modern toolkit for building native Android UI. It simplifies and accelerates UI development on Android with less code, powerful tools, and intuitive Kotlin APIs. `Jetpack Compose` offers a declarative approach to designing UI, where you can simply describe what your UI should look like at any given point of your app’s state, and `Compose` takes care of updating the view hierarchy, making UI development more efficient. It also integrates well with existing Android apps, letting you adopt its benefits at your own pace. `Jetpack Compose` is a modern toolkit for building native Android UI. It simplifies and accelerates UI development on Android with less code, powerful tools, and intuitive Kotlin APIs. `Jetpack Compose` offers a declarative approach to designing UI, where you can simply describe what your UI should look like at any given point of your app’s state, and `Compose` takes care of updating the view hierarchy, making UI development more efficient. It also integrates well with existing Android apps, letting you adopt its benefits at your own pace.
Visit the following resources to learn more:
- [@official@Jetpack Compose](https://developer.android.com/jetpack/compose)
- [@video@Jetpack Compose Crash Course](https://www.youtube.com/watch?v=6_wK_Ud8--0) - [@video@Jetpack Compose Crash Course](https://www.youtube.com/watch?v=6_wK_Ud8--0)
- [@feed@Explore top posts about Jetpack Compose](https://app.daily.dev/tags/jetpack-compose?ref=roadmapsh)

@ -1,8 +1,8 @@
# JUnit # JUnit
**JUnit** is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs. JUnit is a popular testing framework for Java programming. It forms the basis for many other testing libraries and tools in the Android ecosystem, making it important for any Android developer to become familiar with. The basic use of JUnit involves annotations such as `@Test`, indicating methods that represent a single test case. Other useful features include `@Before` and `@After` which allow for setup and teardown processes to be defined clearly. Another powerful feature in JUnit is the ability to create parameterized tests, effectively running the same test multiple times with different inputs.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://developer.android.com/training/testing/local-tests) - [@official@Documentation](https://developer.android.com/training/testing/local-tests)
- [@video@Junit for android](https://www.youtube.com/watch?v=jE1vQGVHaQA) - [@video@Junit for android](https://www.youtube.com/watch?v=jE1vQGVHaQA)

@ -1,3 +1,7 @@
# Kodein # Kodein
`Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a "Define in Use" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality. `Kodein` is one of the recommended dependency injection frameworks suitable for Android development. This open-source Kotlin library simplifies the DI process by allowing developers to bind various types of dependencies, such as singleton, factory, or provider bindings into containers or `Kodein` modules. It promotes dependency declaration where used, instead of prior declaration. It follows a "Define in Use" principle that enables easy-to-use, easy-to-debug and very idiomatic Kotlin code. It's also worth noting that `Kodein` works hand in hand with Android's lifecycle and provides easy integration with popular libraries such as Android Architecture Components, leveraging their functionality.
Visit the following resources to learn more:
- [@official@Kodein](https://insert-kodein.io/)

@ -1,3 +1,9 @@
# Koin # Koin
[Koin](https://insert-koin.io) is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including [Android Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html) and [Kotlin Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html), amongst others. Koin is a lightweight dependency injection framework developed specifically for Kotlin developers. It uses functional resolution only - no proxy, no code generation, no reflection, and offers simplicity by leveraging Kotlin's language features. While Koin is not related to the Android platform, it provides specific extensions enabling an efficient integration into your Android applications, including Android Architecture Components and Kotlin Coroutines amongst others.
Visit the following resources to learn more:
- [@official@Koin](https://insert-koin.io)
- [@official@Android Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html)
- [@officialKotlin Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html)

@ -2,8 +2,9 @@
`Kotlin` is a cross-platform, statically typed general-purpose programming language with type inference. Developed by JetBrains, the makers of the world’s leading IDEs, Kotlin has a syntax, which is more expressive and concise. This allows for more readable and maintainable code. It is fully interoperable with Java and comes with no limitations. It can be used almost everywhere Java is used today, for server-side development, Android apps, and much more. Kotlin introduces several improvements for programmers over Java, which makes it a preferred choice for many developers. With more concise code base and modern programming concept support - it's certainly a future of Android app development. `Kotlin` is a cross-platform, statically typed general-purpose programming language with type inference. Developed by JetBrains, the makers of the world’s leading IDEs, Kotlin has a syntax, which is more expressive and concise. This allows for more readable and maintainable code. It is fully interoperable with Java and comes with no limitations. It can be used almost everywhere Java is used today, for server-side development, Android apps, and much more. Kotlin introduces several improvements for programmers over Java, which makes it a preferred choice for many developers. With more concise code base and modern programming concept support - it's certainly a future of Android app development.
Use following resources to learn more: Visit the following resources to learn more:
- [@video@Learn Kotlin Programming for Beginners - Free Code Camp](https://youtu.be/EExSSotojVI?si=4VPW8ZHa2UMX0HH1) - [@official@Kotlin](https://kotlinlang.org/)
- [@official@Kotlin Documentation](https://kotlinlang.org/docs/home.html)
- [@article@Learn Kotlin - w3schools](https://www.w3schools.com/kotlin/) - [@article@Learn Kotlin - w3schools](https://www.w3schools.com/kotlin/)
- [@feed@Explore top posts about Kotlin](https://app.daily.dev/tags/kotlin?ref=roadmapsh) - [@video@Learn Kotlin Programming for Beginners - Free Code Camp](https://youtu.be/EExSSotojVI?si=4VPW8ZHa2UMX0HH1)

@ -1,3 +1,8 @@
# Ktlint # Ktlint
`ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed. `ktlint` is a static code analysis tool. It enforces a highly consistent style and adheres extensively to the official Kotlin coding conventions. `ktlint` does not have any configuration options (by design). The only exceptions are disabling specific rule(s) and specifying indentation size. `ktlint` can check, as well as automatically fix your code. Its main goal is to bring unified code style to your project. It works on the command line as well, so it can be hooked up into your continuous integration pipeline. It also has Ant, Gradle and Maven wrappers. You can use Ktlint on any Android/Kotlin project, as long as you have Gradle or Maven installed.
Visit the following resources to learn more:
- [@official@Ktlint](https://ktlint.github.io/)
- [@opensource@Ktlint: Static Code Analysis for Kotlin](https://github.com/pinterest/ktlint)

@ -1,3 +1,8 @@
# Leak Canary # Leak Canary
LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc. LeakCanary is a powerful open-source memory leak detection library for Android and Java. It is integrated into your app, and once you run your app, LeakCanary immediately starts watching for memory leaks and captures a memory dump if it detects one. After investigation, it will present a full stack trace to help you pinpoint the exact location of the memory leak. With the LeakCanary's user-friendly interface, you can then analyze the memory leak right in your app. The most recent version of LeakCanary also includes other improvements like automatic detection of leaks in Activity, Fragment, View, ViewModel, LiveData, etc.
Visit the following resources to learn more:
- [@official@Leak Canary](https://square.github.io/leakcanary/)
- [@opensource@LeakCanary on GitHub](https://github.com/square/leakcanary)

@ -6,4 +6,4 @@
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: Linear Layout](https://developer.android.com/develop/ui/views/layout/linear) - [@official@Linear Layout](https://developer.android.com/develop/ui/views/layout/linear)

@ -1,3 +1,7 @@
# Linting # Linting
`Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash. `Linting` in Android is a tool that analyzes the source code of your application to identify potential errors, bugs, stylistic errors, and suspicious constructs. The term Linting came from a Unix utility that examined C language source code. In Android, it not only checks for potential Java issues but also for XML layout files and provides alerts for issues it encounters regarding usability, performance, and accessibility. For instance, it may scrutinize a draft of your AndroidManifest.xml file for potential duplication of elements or other anomalies that would cause the app to crash.
Visit the following resources to learn more:
- [@official@Linting](https://developer.android.com/studio/write/lint)

@ -1,9 +1,9 @@
# ListView # ListView
Displays a vertically-scrollable collection of views, where each view is positioned immediatelybelow the previous view in the list. Displays a vertically-scrollable collection of views, where each view is positioned immediately below the previous view in the list.
For a more modern, flexible, and performant approach to displaying lists, use `RecyclerView`. For a more modern, flexible, and performant approach to displaying lists, use `RecyclerView`.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: ListView](https://developer.android.com/reference/android/widget/ListView) - [@official@ListView](https://developer.android.com/reference/android/widget/ListView)

@ -1,3 +1,7 @@
# LiveData # LiveData
`LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components. `LiveData` is a data holder class that can be observed within a given lifecycle. This means that an `Observer` can be added in a pair with a `LifecycleOwner`, and this observer will be notified about modifications of the `LiveData` object only if the associated `LifecycleOwner` is in active state. `LiveData` respects the lifecycle state of app components, such as activities, fragments, or services, and it only updates app-component observers that are in an active lifecycle state. Furthermore, `LiveData` automatically removes the observers when their associated `LifecycleOwner` moves to the `Destroyed` state. This combination of `LiveData` and `LifecycleOwner` helps you to manage appropriate and efficient updates because `LiveData` takes into consideration the lifecycle state of your app components.
Visit the following resources to learn more:
- [@official@LiveData](https://developer.android.com/topic/libraries/architecture/livedata)

@ -2,7 +2,7 @@
MVC or `Model View Controller` is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected components. MVC or `Model View Controller` is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected components.
Components: ## Components:
- `Model`: The internal representations of information. This can often be an Interactor or UseCase - `Model`: The internal representations of information. This can often be an Interactor or UseCase
- `View`: The interface that presents information to and accepts it from the user - `View`: The interface that presents information to and accepts it from the user
@ -11,4 +11,4 @@ Components:
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@MVC](https://developer.mozilla.org/en-US/docs/Glossary/MVC) - [@article@MVC](https://developer.mozilla.org/en-US/docs/Glossary/MVC)
- [@article@Model–view–controller](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) - [@article@Model View Controller](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

@ -8,4 +8,6 @@ MVP is divided into three components:
- `View`: Takes care of updating the graphical part of the application. It acts as a passive view, only receiving data and requesting actions to be performed. - `View`: Takes care of updating the graphical part of the application. It acts as a passive view, only receiving data and requesting actions to be performed.
- `Presenter`: Handles all the logic related to the graphical interface that the View requests. It provides the View with the data it needs to display on the screen. - `Presenter`: Handles all the logic related to the graphical interface that the View requests. It provides the View with the data it needs to display on the screen.
This structure helps to create a clear separation of concerns, making your codebase more modular and easier to maintain. Visit the following resources to learn more:
- [@article@Model View Presenter](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter)

@ -10,5 +10,5 @@ Components:
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@Android Developers: View Model](https://developer.android.com/topic/libraries/architecture/viewmodel) - [@official@Android Developers: View Model](https://developer.android.com/topic/libraries/architecture/viewmodel)
- [@article@Wikipedia](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) - [@article@Wikipedia](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel)

@ -1,3 +1,7 @@
# Navigation Components # Navigation Components
The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController. The **Navigation Components** are part of Android Jetpack and are designed to simplify the implementation of navigation in your Android app. These components help you follow best practices, handle deep linking, and provide a consistent user experience across deep and conditional navigation. They also automate many common tasks, such as handling Up and Back actions correctly across many different types of devices. The Navigation component consists of three key parts which are Navigation graph, NavHost, and NavController.
Visit the following resources to learn more:
- [@official@Navigation Components](https://developer.android.com/guide/navigation)

@ -1,3 +1,9 @@
# Network # Network
In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes. The **Network** component also involves tools for network monitoring and testing, which can be useful for optimizing app performance and dealing with connectivity issues. Be aware, some network operations are subject to system imposed restrictions and require specific permissions. In Android, the `Network` component offers vital capabilities that enable communication and interaction among users, between users and remote servers, and between users and cloud services. Android provides a variety of APIs and services to interact with networks. The primary APIs are the `ConnectivityManager`, `WifiManager`, `TelephonyManager`, and `BluetoothManager` APIs, among others. ConnectivityManager, for example, can tell you about network connectivity changes.
Visit the following resources to learn more:
- [@official@Network](https://developer.android.com/guide/topics/connectivity)
- [@official@ConnectivityManager](https://developer.android.com/reference/android/net/ConnectivityManager)
- [@official@WifiManager](https://developer.android.com/reference/android/net/wifi/WifiManager)

@ -1,3 +1,7 @@
# Observer Pattern # Observer Pattern
The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependants, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern. The **Observer Pattern** is a software design pattern in which an object, known as the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes. This is usually done by calling one of their methods. It's mainly used for implementing distributed event handling systems and is viewed as a good practice to follow, making your design more robust, flexible, and scalable. The subject to be observed triggers events and observers react to the change or the event that they are listening to. In Android, observable libraries like `LiveData`, `RxJava`, `Flow`, and other reactive streams allow the implementation of observer pattern.
Visit the following resources to learn more:
- [@article@Observer Pattern](https://en.wikipedia.org/wiki/Observer_pattern)

@ -4,4 +4,5 @@
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://github.com/square/okhttp) - [@official@OkHttp](https://square.github.io/okhttp/)
- [@opensource@OkHttp on GitHub](https://github.com/square/okhttp)

@ -1,3 +1,10 @@
# Pick a Language # Pick a Language
When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++. Java is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers. Lastly, C++ can be used in Android development through the Android Native Development Kit (NDK), though it comes with more complexities and is usually not recommended for beginners. Your selection might depend on your existing familiarity with these languages, the complexity and specific requirements of your project, and the resources or libraries you wish to use. When developing for Android, one crucial step is picking a programming language to use. There are multiple languages you can choose from, but the three most popular ones are Java, Kotlin, and C++.
Java is the original language used for Android development and is widely used, making it a good choice for beginners due to the wealth of resources and developer communities. Kotlin is a newer option that is fully supported by Google and Android Studio, and addressing many of the drawbacks of Java which makes it a popular choice for many developers.
Visit the following resources to learn more:
- [@official@Pick a Language](https://developer.android.com/studio/write/java8-support)
- [@official@Kotlin vs Java](https://developer.android.com/kotlin)

@ -6,5 +6,4 @@ As the name implies, RecyclerView recycles those individual elements. When an it
Learn more from the following resources: Learn more from the following resources:
- [@article@Android Developers: Create dynamic lists with RecyclerView](https://developer.android.com/develop/ui/views/layout/recyclerview) - [@official@Create Dynamic Lists with RecyclerView](https://developer.android.com/develop/ui/views/layout/recyclerview)

@ -2,8 +2,8 @@
A **RelativeLayout** in Android is a type of ViewGroup that allows you to position child views relative to each other or relative to the parent layout. It's a flexible layout where you can arrange the child views in relation to one another based on certain rules, making it suitable for creating complex UI designs. A **RelativeLayout** in Android is a type of ViewGroup that allows you to position child views relative to each other or relative to the parent layout. It's a flexible layout where you can arrange the child views in relation to one another based on certain rules, making it suitable for creating complex UI designs.
**RelativeLayout** was commonly used in earlier Android development, but with the introduction of `ConstraintLayout`, it's less frequently used in modern apps. **RelativeLayout** was commonly used in earlier Android development, but with the introduction of `ConstraintLayout`, it's less frequently used in modern apps.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: Relative Layout](https://developer.android.com/develop/ui/views/layout/relative) - [@official@Relative Layout](https://developer.android.com/develop/ui/views/layout/relative)

@ -4,5 +4,5 @@ Firebase Remote Config is a cloud service offered by Firebase. It lets you chang
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://firebase.google.com/docs/remote-config/get-started?platform=android) - [@official@Remote Config](https://firebase.google.com/docs/remote-config/get-started?platform=android)
- [@video@Firebase: Remote config](https://www.youtube.com/watch?v=pcnnbjAAIkI) - [@video@Getting Started with Remote Config](https://www.youtube.com/watch?v=pcnnbjAAIkI)

@ -1,3 +1,7 @@
# Repository Pattern # Repository Pattern
In Android design architecture, the `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository. The `Repository Pattern` separates the data sources from the rest of the application. It acts as a mediator between different data sources, such as persistent models, web services, or caches. Instead of having the network and database calls spread out throughout your ViewModel, they are encapsulated within a Repository class. This separation will make the code clean, easy to read and testable. It provides a simple API for data access, the rest of the app doesn't need to know where the data is coming from it just asks the repository.
Visit the following resources to learn more:
- [@article@Repository Pattern](https://en.wikipedia.org/wiki/Repository_pattern)

@ -1,8 +1,8 @@
# Retrofit # Retrofit
**Retrofit** is a type-safe HTTP client for Android. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`) and the query parameters. The main advantage of **Retrofit** over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls. Retrofit is a type-safe HTTP client for Android. It's designed to connect your application with an API or a back-end web service. Retrofit uses annotations to encode details about the API's operations and requests, such as the HTTP method (`GET`, `POST`, `PUT`, `DELETE`, `HEAD`) and the query parameters. The main advantage of **Retrofit** over other similar libraries is in its simplicity and intuitiveness, and it efficiently handles all network calls.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@oficial@Documentation](https://square.github.io/retrofit/) - [@official@Retrofit Documentation](https://square.github.io/retrofit/)
- [@video@Retrofit in Android Studio](https://www.youtube.com/watch?v=KJSBsRKqNwU) - [@video@Retrofit in Android Studio](https://www.youtube.com/watch?v=KJSBsRKqNwU)

@ -4,5 +4,5 @@
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Save data in a local database using Room](https://developer.android.com/training/data-storage/room) - [@official@Room Database](https://developer.android.com/training/data-storage/room)
- [@video@The full beginner guide for Room in Android](https://www.youtube.com/watch?v=bOd3wO0uFr8&t=10s) - [@video@The Full Beginner's Guide for Room in Android](https://www.youtube.com/watch?v=bOd3wO0uFr8&t=10s)

@ -1,7 +1,7 @@
# RxJava # RxJava
RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data. RxJava, standing for Reactive Extensions for the JVM, is a library in the Java and Android ecosystem that allows developers to write asynchronous, event-based programs. It is developed according to reactive programming principles and it supports multi-threading operations. One can create data streams from just about anything - variables, data structures, inputs, etc. and these streams could be used with functional programming methods to process the data.
In Android, RxJava is often used in combination with Retrofit, to handle API calls or with Room, to handle tasks involving the database. This library provides a set of operators such as `map()`, `filter()`, `concat()`, `merge()`, `flatmap()` etc. to handle tasks such as chain asynchronous operations, perform computations, or transform data. Visit the following resources to learn more:
There are three important entities in RxJava - 'Observable', 'Observer' and 'Subscription'. 'Observable' is a data stream that does some work, 'Observer' watches the 'Observable' and does something when the 'Observable’ changes, and 'Subscription' is what ties an 'Observer' to an 'Observable' - linking their lifecycles and allowing 'Observer’s to unsubscribe (to stop receiving updates) when they’re destroyed. In other words, 'Subscription' is what allows you to manage memory and prevent crashes due to leaks. - [@opensource@RxJava on GitHub](https://github.com/ReactiveX/RxJava)

@ -1,3 +1,7 @@
# RxJava # RxJava
RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner. In other words, it provides a way to manage asynchronicity and concurrency in your code. RxJava (Reactive Extensions for the JVM) is a powerful library for composing asynchronous and event-based programs using observable sequences in Java. If you are an Android developer, you might be familiar with callbacks and async tasks to perform long-running operations in the background. However, handling multiple async tasks and nested callbacks can produce code that's complicated to read and maintain. To alleviate such complexities, RxJava provides tools and methods to create, transform and chain Observable sequences in a clean and declarative manner.
Visit the following resources to learn more:
- [@opensource@RxJava on GitHub](https://github.com/ReactiveX/RxJava)

@ -1,3 +1,7 @@
# RxKotlin # RxKotlin
`RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others. It is especially beneficial for mobile development where UI thread and background thread coordination is essential. `RxKotlin` is a lightweight language extension to Java for Android development, enabling Android apps to be built using Kotlin with Reactivex. It brings the power of reactive programming paradigm to Kotlin, extending its capabilities for processing asynchronous streams of data. It allows you to express static (e.g., already known) or dynamic (e.g., future unknown) data streams, and perform various operations on them easily. Key concepts of `RxKotlin` include Observables, Observers and Schedulers. Observables represent the data streams, Observers interact with the data stream, and Schedulers determine on which thread operations are performed. RxKotlin helps manage background tasks, handle asynchronous data streams, and implement complex UIs, among others.
Visit the following resources to learn more:
- [@opensource@ReactiveX/RxKotlin - RxKotlin on GitHub](https://github.com/ReactiveX/RxKotlin)

@ -1,3 +1,7 @@
# RxKotlin # RxKotlin
`RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use. `RxKotlin` is a lightweight library that adds convenient extension functions to `RxJava`. It allows developers to use RxJava with Kotlin in a more idiomatic way, thus making code more readable and understandable. While `RxJava` is a Java-based implementation of Reactive Extensions, `RxKotlin` is essentially a wrapper that includes extension functions and other constructs to take full advantage of Kotlin's features, such as its syntactic simplicity and ease of use.
Visit the following resources to learn more:
- [@opensource@RxKotlin](https://github.com/ReactiveX/RxKotlin)

@ -1,3 +1,7 @@
# Services # Services
**Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC). **Services**: A service in Android is an app component that performs operations in the background without a user interface. It can be started by an application component, like an activity, and it will continue to run in the background even if the user switches to another application. There are two types of services in Android, namely, `Started Service` and `Bound Service`. A `Started Service` is used to perform a single operation, such as downloading a large file. On the other hand, a `Bound Service` offers a client-server interface that allows components to interact with the service, send requests, receive results, and even perform interprocess communication (IPC).
Visit the following resources to learn more:
- [@official@Services](https://developer.android.com/guide/components/services)

@ -1,8 +1,8 @@
# Shared Preferences # Shared Preferences
Shared Preferences in Android are used to store data in **key-value** pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`. Shared Preferences in Android are used to store data in key-value pairs. It works similar to a tiny database where you can save small pieces of data such as settings or the state of an application. When data is saved to Shared Preferences, it persists across user sessions, even if your application is killed or gets deleted. Data in Shared Preferences is not typically used for large amounts of data. To perform actions such as saving, retrieving, or editing data in Shared Preferences, you use an instance of `SharedPreferences.Editor`.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Documentation](https://developer.android.com/training/data-storage/shared-preferences) - [@official@Shared Preferences Documentation](https://developer.android.com/training/data-storage/shared-preferences)
- [@video@SharedPreferences in Android](https://www.youtube.com/watch?v=rJ3uwqko9Ew) - [@video@SharedPreferences in Android](https://www.youtube.com/watch?v=rJ3uwqko9Ew)

@ -1,3 +1,7 @@
# Signed APK # Signed APK
A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks. Please make sure that you keep your private key in a safe place for future updates to your app, losing it would imply that you cannot update your app anymore. A **Signed APK** is a version of your app that you prepare for distribution in the Play Store or other Android markets. When you sign your app using a private key, you authenticate your identity as the developer of the app. It is a required step by the Android system that ensures only updates to the APK that are from the original developer will be accepted. The Android system refuses to install an app if it's not signed appropriately, thereby protecting users from potential security risks.
Visit the following resources to learn more:
- [@official@Signing Your App](https://developer.android.com/studio/publish/app-signing)

@ -1,3 +1,7 @@
# State Changes # State Changes
In Android, an "Activity" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The "Created" state occurs when an activity instance is being created. The "Started" state is when the activity is visible to the user, while "Resumed" is when the activity is interacting with the user. An activity is "Paused" when it loses focus but is partly visible, "Stopped" when it's not visible, "Restarted" when the activity is about to be started, and "Destroyed" when the activity is finished or the system is temporarily destroying it. "Activity" is a crucial component that represents a single screen with a user interface. One or more active activities make up an Application. These activities can go through different states in their lifecycle, often due to user interaction or system interruption. The primary states of an Activity include `Created`, `Started`, `Resumed`, `Paused`, `Stopped`, `Restarted`, and `Destroyed`. The "Created" state occurs when an activity instance is being created. The "Started" state is when the activity is visible to the user, while "Resumed" is when the activity is interacting with the user. An activity is "Paused" when it loses focus but is partly visible, "Stopped" when it's not visible, "Restarted" when the activity is about to be started, and "Destroyed" when the activity is finished or the system is temporarily destroying it.
Visit the following resources to learn more:
- [@official@Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle)

@ -1,3 +1,7 @@
# Storage # Storage
On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further subcategorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions. To control the access to these storage types, Android provides a file-based and a Scoped Storage framework. The latter limits apps' access to external storage and gives users more control over their data. On Android devices, storage refers to where your data such as apps, photos, videos, and music are saved. It can be categorized into two types: internal and external storage. Internal Storage is where data is stored that's tied directly to your app. This data is private by default and not accessible by other apps. External Storage, on the other hand, is a shared space where all apps can read and write data. It can be further sub-categorized into Public and Private directories. Public directories are shared among all apps while private directories are specific to your app but can be accessed by other apps if they have the appropriate permissions.
Visit the following resources to learn more:
- [@official@Storage](https://developer.android.com/guide/topics/data/data-storage)

@ -4,4 +4,4 @@ Tabs in Android Studio are a UI component used to organize content into multiple
Visit the following resources to learn more: Visit the following resources to learn more:
- [@official@Android developers: Material Tabs](https://developer.android.com/reference/com/google/android/material/tabs/package-summary) - [@official@Material Tabs](https://developer.android.com/reference/com/google/android/material/tabs/package-summary)

@ -1,3 +1,7 @@
# Tasks and Backstack # Tasks and Backstack
The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept. The **tasks backstack** in Android refers to the way Android manages and arranges tasks in a stack-like structure. Every task has a stack of activities, which is referred to as the task's back stack. The activities are placed in the order they are opened. When a new activity is started, it is placed at the top of the stack and becomes the running activity, while the previous activity is paused and put into the back stack. When you press the back button, the current activity is destroyed and the activity at the top of the back stack becomes active again. Android defines how to navigate between tasks and activities using this back stack concept.
Visit the following resources to learn more:
- [@official@Tasks and Backstack](https://developer.android.com/guide/components/activities/tasks-and-back-stack)

@ -1,3 +1,7 @@
# Testing # Testing
***Android Testing*** is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing. These can effectively test different parts of your app, assuring its robustness. **Testing** is a crucial part of the app development process. It involves validating the functionality, performance, usability, and consistency of your app before deploying it to the Play Store. There are two types of testing methods notably used: **Unit testing** and **Instrumentation Testing**. Unit testing, as the name suggests, tests each unit or segment of your code separately. It doesn't require Android dependencies and hence, runs faster. Instrumentation testing, on another hand, requires Android dependencies and is slower. Instrumentation testing tests the UIs, simulates user interactions and validates the navigation between different parts of your app. Android provides built-in testing frameworks like `JUnit` for unit testing and `Espresso` for Instrumentation testing.
Visit the following resources to learn more:
- [@official@Testing](https://developer.android.com/training/testing)

@ -4,4 +4,4 @@ TextView is a widget that is seen in every android application. This widget is u
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@Android developers: TextView](https://developer.android.com/reference/android/widget/TextView) - [@article@TextView](https://developer.android.com/reference/android/widget/TextView)

@ -1,3 +1,7 @@
# The Fundamentals # The Fundamentals
"The Fundamentals" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals. "The Fundamentals" of Android primarily concentrate on 5 components; Activities, Services, Broadcast Receivers, Content Providers, and Intents. **Activities** are essentially what you see on your screen; each screen in an app is a separate activity. **Services** run in the background to perform long-running operations or to perform work for remote processes. They do not provide a user interface. **Broadcast Receivers** respond to broadcast messages from other applications or from the system itself. These messages are often in the form of Intents. **Content Providers** manage a shared set of app data that other apps can query or modify, through a structured interface. Finally, **Intents** are messaging objects which facilitate the communication between the aforementioned components. Understanding these five core concepts is key to mastering Android fundamentals.
Visit the following resources to learn more:
- [@official@The Fundamentals](https://developer.android.com/guide/components/fundamentals)

@ -1,3 +1,7 @@
# Threads # Threads
In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI. In Android, a `Thread` is a concurrent unit of execution. It has its own call stack, but can share its state with other threads in the same process, i.e., they can share the same memory area. They're primarily used in Android to perform operations in the background. One important aspect to note is that Android UI operations are not thread-safe, meaning they should always be done on the UI thread. Operations on `Threads` are typically managed through `Handler`, `Looper` and `MessageQueue` classes. Android also provides high-level constructs like `AsyncTask` and `Loader` for managing threads in relation to the UI.
Visit the following resources to learn more:
- [@official@Threads](https://developer.android.com/guide/components/processes-and-threads)

@ -1,3 +1,7 @@
# Timber # Timber
`Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application. `Timber` is a logging utility tool that has been specifically extended from the `Log` class of Android. It has been built to simplify the logging process while aiming to reduce the amount of boilerplate code the developer has to write. It was designed and is maintained by Jake Wharton, a renowned contributor in the Android Developer community. In Timber, each log message is directed to the next available logger, reducing the redundancy of manually assigning log tags. The simplicity of Timber is highlighted by its ability to log without defining any tag. Most importantly, Timber only logs messages in debug builds by default, avoiding potential data leaks in your production application.
Visit the following resources to learn more:
- [@opensource@Timber on GitHub](https://github.com/JakeWharton/timber)

@ -4,4 +4,4 @@ A `toast` provides simple feedback about an operation in a small popup. It only
Visit the following resources to learn more: Visit the following resources to learn more:
- [@article@Android developers: Toast](https://developer.android.com/guide/topics/ui/notifiers/toasts) - [@official@Toast](https://developer.android.com/guide/topics/ui/notifiers/toasts)

@ -1,3 +1,7 @@
# Version Control Systems # Version Control Systems
_Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial. _Version Control_ is a system that records changes to a file or set of files over time so that you can recall specific versions later. An essential tool for software development, it helps to track changes, enhance collaboration, and manage different versions of a project. Two common types of version control systems are Centralized Version Control System (CVCS) and Distributed Version Control System (DVCS). CVCS uses a central server to store all versions of a project, with users getting snapshots from that server. Examples include SVN and Perforce. On the other hand, DVCS allows multiple developers to work on a single project simultaneously. Each user has a complete backup of all versions of the work. Examples include Git and Mercurial.
Visit the following resources to learn more:
- [@article@Version Control Systems](https://en.wikipedia.org/wiki/Version_control)

@ -1,10 +1,12 @@
# What is and how to use Gradle? # What is and how to use Gradle?
**Using Gradle**: Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app. Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app.
Visit the following resources to learn more: Visit the following resources to learn more:
- [@video@Introduction to Gradle for Complete Beginners - 25minutes](https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA) - [@official@Gradle Build Tool](https://gradle.org/)
- [@official@Gradle Documentation](https://docs.gradle.org/current/userguide/getting_started_eng.html)
- [@video@Gradle Course for Beginners - 55minutes](https://www.youtube.com/watch?v=R6Z-Sxb837I) - [@video@Gradle Course for Beginners - 55minutes](https://www.youtube.com/watch?v=R6Z-Sxb837I)
- [@video@Introduction to Gradle for Complete Beginners - 25minutes](https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA)
- [@article@Get going with Gradle - PDF](https://assets.gradlehero.com/get-going-with-gradle/get-going-with-gradle-book.pdf) - [@article@Get going with Gradle - PDF](https://assets.gradlehero.com/get-going-with-gradle/get-going-with-gradle-book.pdf)
- [@feed@Explore top posts about Gradle](https://app.daily.dev/tags/gradle?ref=roadmapsh) - [@feed@Explore top posts about Gradle](https://app.daily.dev/tags/gradle?ref=roadmapsh)

@ -1,3 +1,7 @@
# WorkManager # WorkManager
`WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest. You can have constraints too for your work execution like work only when there's Internet or work only when the device is in idle state. It also supports work-chaining where you can create a chain of works to be performed in a specific order. `WorkManager` is an Android library introduced by Google to execute tasks in a predictable and reliable manner. It's designed for tasks that require guaranteed execution, even if the app has been closed or the device restarts. It is backwards compatible up to API 14 and uses JobScheduler for API 23 and above, whilst using a combination of BroadcastReceiver + AlarmManager for APIs 14 and up. Regardless of the device API level, WorkManager works for all Android devices. Three types of work are supported by WorkManager - OneTimeWorkRequest, PeriodicWorkRequest, and DelayedWorkRequest.
Visit the following resources to learn more:
- [@official@WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)

Loading…
Cancel
Save