This page is a recording of all Twitch streams related to the TOA project. Here are a few helpful sections for categorizing streams, or you can scroll down to see the chronological list.
Streams By Date
The following is a record of all TOA streams in chronological order.
- Stream One - Project Creation
- Stream Two - Developer Experience
- Stream Three - Design System
- Stream Four - Login Implementation
- Stream Five - Login Implementation Continued
- Stream Six - Dependency Injection Setup
- Stream Seven - Documentation
- Stream Eight - Pixel 6 & Material 3
- Stream Nine - Dev Experience & Kover Plugin
- Stream Ten - Task List UI
- Stream Eleven - Navigation
- Stream Twelve - Task Management Logic & UI
- Stream Thirteen - Add Task Support
- Stream Fourteen - Persistent Storage
- Stream Fifteen - Task Input Validation
- Stream Sixteen - Tasks by Date
- Stream Seventeen - Task Completion
- Stream Eighteen - Test Coverage
- Stream Nineteen - Task List Empty States
- Stream Twenty - Multi Module App Structure
- Stream Twenty One - Misc Feature Development
- Stream Twenty Two - Adaptive Layouts
- Stream Twenty Three - Misc Feature Development
- Stream Twenty Four - Small Feature Development
- Stream Twenty Five - Rescheduling Tasks
- Stream Twenty Six - Undo Rescheduling Tasks
- Stream Twenty Seven - Architecture Refactor
- Stream Twenty Eight - Splash Screen API
- Stream Twenty Nine - Preferred Tasks Per Day
- Stream Thirty - Maestro
- Stream Thirty One - Material 3 Date Picker
- Stream Thirty Two - Material 3 Toolbar & Design Tweaks
- Stream Thirty Three - Race Condition Fixes
- Stream Thirty Four - MainActivity UI Tests
- Stream Thirty Five - Bottom Bar For Settings
- Stream Thirty Six - Settings Implementation
- Stream Thirty Seven - Adaptive Navigation Types
Hot Topics
The following streams focus on specific hot topics in development, not just a feature.
Developer Experience Streams
The following streams touch on topics related to developer experience.
Login Screen
The following streams include work on our login screen.
Task List Screen
The following streams include work on our task list screen.
Add Task Screen
The following streams include work related to the add task screen.
In the very first stream, we discussed the purpose of this project, created a repo, and added a number of GitHub issues.
Date: September 1, 2021
YouTube: https://youtu.be/8Umvlpx-Wvg
Blog: https://androidessence.com/toa-twitch-series
PRs: N/A
In this stream, we discuss a number of ways to help dev experience in Android like CI tooling and static analysis.
Date: September 8, 2021
YouTube: https://youtu.be/ePpbpLyYI1w
Blog: https://androidessence.com/essential-dev-experience-concepts-android
PRs:
- GitHub Actions: AdamMc331#27
- Danger: AdamMc331#29
- Ktlint: AdamMc331#30
- Detekt: AdamMc331#31
- Git Hooks: AdamMc331#32
In this stream, we setup a design system for the application. We intended to add the app logo, but due to classic Android Studio issues we pivoted to also including the login UI.
PRs:
- Colors: AdamMc331#35
- Typography: AdamMc331#36
- Buttons: AdamMc331#37
- TextField: AdamMc331#38
- Login UI: AdamMc331#39
Date: September 22, 2021
YouTube:
- Design System: https://youtu.be/ilNi6Pl0FI0
- Login UI: https://youtu.be/VvILEVD5zFE
In this stream, we design the app architecture and build out the necessary components to power our login screen.
Date: September 29, 2021
PRs:
- Use Case: AdamMc331#40
- Repository: AdamMc331#41
- View State Update: AdamMc331#42
- View Model: AdamMc331#43
Notes:
- https://proandroiddev.com/why-you-need-use-cases-interactors-142e8a6fe576
- https://proandroiddev.com/kotlin-extension-functions-more-than-sugar-1f04ca7189ff
- https://handstandsam.com/2020/06/08/wrapping-mockito-mocks-for-reusability/
YouTube:
- Use Cases: https://youtu.be/F4WajzYPh9s
- Repository Layer: https://youtu.be/TWeu9fRNPWY
- View State: https://youtu.be/3UNa6l0KlcU
- View Model: https://youtu.be/pJOHI6Le3BE
In this stream, we continue working on our login screen implementation.
Date: October 6, 2021
Notes:
PRs:
- InvalidCredentials Test: AdamMc331#45
- Login Input Errors: AdamMc331#46
YouTube: https://youtu.be/mCQfK3J5K5w
In this stream, we implement the Hilt library and setup dependency injection for the login screen. We also took that implementation and used it to display the LoginScreen when our MainActivity starts up. At the end of all this, we tinker with the login UI and fix some weirdness around inputs.
Date: October 13, 2021
Notes:
PRs:
- Hilt: AdamMc331#52
- Login via MainActivity: AdamMc331#53
- Handle successful login flow: AdamMc331#54
- Handle Disabled Inputs: AdamMc331#55
- Password input modifications: AdamMc331#56
YouTube:
In this stream, we document the application architecture to help onboard newcomers to the project.
After documentation we moved into more tinkering and features. We also began the process of building out the home screen.
Date: October 20, 2021
PRs:
- Arch diagram: AdamMc331#57
- Edge to edge UI: AdamMc331#58
- Task list item: AdamMc331#59
- Task list: AdamMc331#60
YouTube: https://youtu.be/R_so92qDZ8g
In this stream, we unboxed the new Pixel 6 Pro and added Material 3 to the application.
Date: October 28, 2021
YouTube: https://youtu.be/JGbI32wPR6k
PRs:
- Material 3: AdamMc331#61
In this stream, we refactored how dependency versions are managed, and added a plugin to help us identify out of date dependencies.
We also added the Kover plugin for generating test coverage.
YouTube:
- Dependency Updates: https://youtu.be/nCA32eZPS9k
- Kover Plugin: https://youtu.be/Oa31C5MgWL4
PRs:
- Dependency Updates: AdamMc331#62
- Kover Plugin: AdamMc331#63
Notes:
- Kover Video: https://www.youtube.com/watch?v=jNu5LY9HIbw
- Kover Repo: https://github.com/Kotlin/kotlinx-kover
In this stream, we finished porting over the task list to Material 3. We also finalized some more view states of the task list screen.
PRs:
- Material 3: AdamMc331#64
- TaskListViewModel & Loading State: AdamMc331#65
- GetAllTasksUseCase: AdamMc331#67
YouTube: https://youtu.be/dY_divcBViI
In this stream, we added the Compose Destinations library and setup navigation between the login screen and the task list screen. We also looked at adding some unit tests.
PRs:
- Navigation: AdamMc331#68
- Animation: AdamMc331#69
- VM Unit tests: AdamMc331#70
Notes:
YouTube: https://youtu.be/Ag00oxuNCf8
In this stream, we started working on the task management logic and UI.
PRs:
- Use Cases: AdamMc331#71
- Add Task UI: AdamMc331#72
- Add Task VM & Navigation: AdamMc331#73
- Date Picker: AdamMc331#74
- Description Text Handling: AdamMc331#75
Notes:
YouTube:
- Domain Logic: https://youtu.be/Ra_vRayFyQk
- UI: https://youtu.be/iECoFOI5GdA
- Date Picker: https://youtu.be/nLwo9BUsqO0
In this stream, we added support for adding a task and seeing it return on the home screen.
PRs:
YouTube: https://youtu.be/729JQOr8uX8
We look at the Room library for persisting data on Android.
PRs:
- Room: AdamMc331#78
- Room Automigrations (unmerged comparison): https://github.com/AdamMc331/TOA/compare/development...TOA-13/auto_migrations
- Sqldelight (unmerged comparison): https://github.com/AdamMc331/TOA/compare/development...TOA-13/sqldelight
YouTube:
- Room: https://youtu.be/nxBA9eaEI3U
- SQLDelight: https://youtu.be/d2rH-eCihUQ
In this stream we added input validation to the add task screen so that we can't enter a task without a description or valid date.
PRs:
- Add Task Validation: AdamMc331#80
- Add Task Testing: AdamMc331#81
YouTube: https://youtu.be/n_NEt1go_xY
In this stream, we modified our task list screen to pull tasks for a specific date, and implemented button click listeners so the user can navigate forward and backward through dates.
PRs:
- Fab positioning: AdamMc331#83
- Tasks By Date: AdamMc331#85
- Tests: AdamMc331#86
YouTube:
- Filtering: https://youtu.be/mverOPRcSZo
- Tests: https://youtu.be/12O7qtAyaPc
In this stream, we added more functionality to our task list screen allowing the user to mark tasks as completed.
PRs:
- Mark task as complete: AdamMc331#91
- Showing headers for sections: AdamMc331#92
- Combining flows: AdamMc331#95
YouTube: https://youtu.be/sGjcE4JQ-cc
In this stream, we added JaCoCo for recording code coverage and also sending it to Coveralls.
PRs:
- Code Coverage: AdamMc331#96
- Additional Tests: AdamMc331#97
YouTube: https://youtu.be/s26bSXp2Tx4
In this stream, we added empty states to our task list screen that show when the user has no incomplete tasks, no completed tasks, or no scheduled tasks at all.
PRs:
- Empty states & tests: AdamMc331#101
YouTube: https://youtu.be/A0GgXIh8Kk8
In this stream, we began splitting the app into multiple modules that are KMM supported as well.
Resources:
Modularization posts:
- https://proandroiddev.com/android-modularization-preps-things-to-know-before-modularizing-your-app-deaf795aabec
- https://jeroenmols.com/blog/2019/03/06/modularizationwhy/
- https://droidkaigi.github.io/codelab-2020/en/index.html#0
KMM Process:
PRs:
- core-models module: AdamMc331#105
- core-data module: AdamMc331#106
- task-api module: AdamMc331#107
YouTube:
- Design module structure: https://youtu.be/Lfv2jvdlg6M
- Core models module: https://youtu.be/GdblAMkzXXU
- Core data & task api modules: https://youtu.be/d5SH9NegeUk
In this stream, we accomplished a few misc development tasks for the app.
PRs:
- Hide buttons for completed tasks: AdamMc331#108
- Sanitizing task input: AdamMc331#110
- Hide previews from coverage with custom lint check: AdamMc331#112
YouTube: https://youtu.be/e00U251gmyU
In this stream, we looked adaptive layouts in Jetpack Compose and updated some screens accordingly.
Resources:
PRs:
- Adaptive task list screen: AdamMc331#114
- Conditional navigation based on screen size: AdamMc331#115
YouTube: https://youtu.be/Spp9RRm3hIQ
PRs:
- Title change animation: AdamMc331#117
- Hide keyboard on task creation: AdamMc331#118
- Show date picker on title click: AdamMc331#121
YouTube: https://youtu.be/jTGz4Rp-9fQ
PRs:
- Copy updates: AdamMc331#129
- Auto focus description on add task screen: AdamMc331#130
- Sending date to add task UI: AdamMc331#131
YouTube:
- Copy updates: https://youtu.be/NKEwcCboIPI
- Auto focus text: https://youtu.be/PZMF94tvoMM
- Date to add task screen: https://youtu.be/zcLaJqtTvM8
PRs:
- Reschedule task: AdamMc331#132
- Reschedule task validation: AdamMc331#135
YouTube:
- Reschedule task: https://youtu.be/B1A7APVIjcU
- Reschedule task validation: https://youtu.be/UdSj72A72FY
PRs:
- Undo Rescheduling: AdamMc331#137
- Undo Task Completion: AdamMc331#138
YouTube: https://youtu.be/HWpBt7UNysY
PRs:
- Architecture docs:
YouTube:
- Coming Soon
In this stream we hooked into the Splash Screen API to have the Android 12 splash screen stay visible until we had the logged in state information.
PRs:
- Splash Screen:
- Observing logged in state (sort of):
YouTube:
- Coming Soon.
Resources:
- Splash screen docs: https://developer.android.com/guide/topics/ui/splash-screen
- Splash screen guide: https://itnext.io/a-comprehensive-guide-to-android-12s-splash-screen-api-644609c811fa
PRs:
- Preferred tasks data layer: AdamMc331#144
YouTube:
- Coming Soon.
Looked at Maestro UI testing framework.
// Adam to add more.
Added a date picker dialog from the latest compose material 3 alpha.
Resources:
- Material 3 1.1.0-alpha04: https://developer.android.com/jetpack/androidx/releases/compose-material3#1.1.0-alpha04
PRs:
YouTube:
Updated the toolbar of the app to use a Material 3 CenterAlignedTopAppBar. We also updated the task list UI for the main screen.
PRs:
- Toolbar: AdamMc331#164
- Task list tweaks: AdamMc331#167
- Result class replacement: AdamMc331#168
YouTube:
- Toolbar: https://youtu.be/youW1g-eFnA
- Task list tweaks: https://youtu.be/youW1g-eFnA
- Result class replacement: https://youtu.be/rjOABsFvOXY
Fixed a race condition that happened when trying to mark multiple tasks as completed.
PRs:
YouTube:
- Coming Soon
Added UI tests to validate which screen is shown when the user is logged in or not.
PRs:
YouTube:
- Coming Soon
In this stream, we built out the stub for the settings screen, allowing the user to specify a number of tasks per day to complete.
PRs:
- Navigation bar: AdamMc331#175
YouTube:
- Coming Soon
In this stream, we implemented the settings screen UI and data layer for modifying those preferences.
PRs:
YouTube:
- Coming Soon
In this stream, we implemented the material 3 window size class dependency & changed our navigation type based on screen width.
PRs:
- Adaptive navigation types: AdamMc331#181
- Old windowsize code cleanup: AdamMc331#182
YouTube:
- Coming Soon
In this stream, we modified the dependency management to use gradle version catalogs.
PRs:
- Gradle version catalogs: AdamMc331#185
YouTube:
- Coming Soon