Below are links to all the source code in this course. You can download project source code for each lecture in the course individually.
Section 3 - Hello World Android App
Source code - Hello World Android App - More on Android Templates
Source code - Hello World Android App - Tour of Android Studio
Section 4 - Kotlin Tutorials
Source code - Kotlin Tutorials - Kotlin Tutorial Setup
Source code - Kotlin Tutorials - Kotlin Tutorial 1
Source code - Kotlin Tutorials - Variables and Types
Source code - Kotlin Tutorials - More on Variables and Types
Source code - Kotlin Tutorials - String Concatenation and Interpolation
Source code - Kotlin Tutorials - val and var and more on Declarations
Source code - Kotlin Tutorials - Conditions
Source code - Kotlin Tutorials - Classes
Source code - Kotlin Tutorials - Objects and Instances
Source code - Kotlin Tutorials - Lists
Source code - Kotlin Tutorials - More on Lists
Source code - Kotlin Tutorials - toString Challenge
Source code - Kotlin Tutorials - for Loops
Source code - Kotlin Tutorials - for Encapsulation and Private Properties
Source code - Kotlin Tutorials - Overloading Functions
Source code - Kotlin Tutorials - Inheritance
Source code - Kotlin Tutorials - More on Inheritance
Source code - Kotlin Tutorials - Inheritance Continued
Source code - Kotlin Tutorials - Further Inheritance
Source code - Kotlin Tutorials - while Loops
Source code - Kotlin Tutorials - for Loop Revisited
Source code - Kotlin Tutorials - do while Loop
Source code - Kotlin Tutorials - Loop Challenge
Section 5 - The Button Counter App
Source code - The Button Counter App - The Constraint Layout
Source code - The Button Counter App - Constraints and Resizing
Source code - The Button Counter App - Positioning Widgets
Source code - The Button Counter App - Inner Lines within a Widget
Source code - The Button Counter App - Layouts on Different Devices
Source code - The Button Counter App - More on the Constraints
Source code - The Button Counter App - Baseline Constraints
Source code - The Button Counter App - Constraining Widgets
Source code - The Button Counter App - Add Scrolling Capabilities
Source code - The Button Counter App - The Button Counter App
Source code - The Button Counter App - Finish Layout
Section 6 - Calculator App
Source code - Calculator App - Demo Calculator App
Source code - Calculator App - Calculator Interface Setup
Source code - Calculator App - Continue with Interface
Source code - Calculator App - Fine Tuning the Layout
Source code - Calculator App - Create Landscape Layout
Source code - Calculator App - Coding the Calculator
Source code - Calculator App - Add onClickListeners
Source code - Calculator App - Write Perform Operation Function
Source code - Calculator App - Bug Fix and Code Improvements
Source code - Calculator App - Bug Fix Challlenge and Save State
Source code - Calculator App - Widget References in Kotlin
Source code - Calculator App - Guidelines
Source code - Calculator App - Fixing Landscape Layout
Source code - Calculator App - Add Neg Button to Layout
Source code - Calculator App - Code Changes for Neg Button
Source code - Calculator App - Add Neg Button to Portrait
Section 7 - The Top 10 Downloader App
Source code - The Top 10 Downloader App - Introduction
Source code - The Top 10 Downloader App - AsyncTask
Source code - The Top 10 Downloader App - Logging and Logcat
Source code - The Top 10 Downloader App - Download the RSS Feed
Source code - The Top 10 Downloader App - Reading the Data
Source code - The Top 10 Downloader App - Android Permissions
Source code - The Top 10 Downloader App - Writing Idiomatic Kotlin
Source code - The Top 10 Downloader App - More Idiomatic Kotlin
Source code -The Top 10 Downloader App - Parsing the Data
Source code - The Top 10 Downloader App - Create Xml Parse Function
Source code - The Top 10 Downloader App - Testing the App
Source code - The Top 10 Downloader App - ListView and ArrayAdapter
Source code - The Top 10 Downloader App - Code Changes for Array Adapter
Source code - The Top 10 Downloader App - onDestroy and Asynctask
Source code - The Top 10 Downloader App - Create Custom Adapter
Source code - The Top 10 Downloader App - Custom Adapter Code
Source code - The Top 10 Downloader App - Improving the Adapter
Source code - The Top 10 Downloader App - ViewHolder Pattern
Source code - The Top 10 Downloader App - Challenge Solution
Section 8 - The YouTube app
Source code - The YouTube app - YouTube Activity
Source code - The YouTube app - Adding Widgets Dynamically
Source code - The YouTube app - Add Key to Code
Source code - The YouTube app - The YouTube Player
Source code - The YouTube app - onInitializationSuccess Method
Source code - The YouTube app - Adding Listeners
Source code - The YouTube app - Improving the Player
Source code - The YouTube app - Extending App Layouts
Source code - The YouTube app - Extending Youtube App Code
Source code - The YouTube app - Implementing Intents and Challenge
Source code - The YouTube app - Challenge Solution
Source code - The YouTube app - More Error Handling
Section 9 - Flickr Browser App
Source code - Flickr Browser App - Log Tag and Companion Objects
Source code - Flickr Browser App - Download JSON - doInBackground
Source code - Flickr Browser App - Downloading the JSON
Source code - Flickr Browser App - CallBacks
Source code - Flickr Browser App - GetFlickrJsonData class continued
Source code - Flickr Browser App - Uri Builder
Source code - Flickr Browser App - Flickr Browser User Inferface
Source code - Flickr Browser App - RecyclerView Layouts
Source code - Flickr Browser App - Finishing Browse Layout
Source code - Flickr Browser App - Search and PhotoDetail Activities
Source code - Flickr Browser App - Nested Layouts
Source code - Flickr Browser App - Recyclerview Adapter
Source code - Flickr Browser App - onBindViewHolder and Picasso
Source code - Flickr Browser App - Associate Adapter to Recyclerview
Source code - Flickr Browser App - RecyclerItemClickListener
Source code - Flickr Browser App - GestureDetector
Source code - Flickr Browser App - Displaying the full photo
Source code - Flickr Browser App - Serializable
Source code - Flickr Browser App - Modify Photo Details Activity
Source code - Flickr Browser App - Parcelable
Source code - Flickr Browser App - Custom Style Sheets
Source code - Flickr Browser App - Namespaces
Source code - Flickr Browser App - Other Material Design Changes
Source code - Flickr Browser App - Style Editor
Source code - Flickr Browser App - Differences in API Levels
Source code - Flickr Browser App - String Resources
Source code - Flickr Browser App - String Resources Placeholders
Source code - Flickr Browser App - Adding the Search Feature
Source code - Flickr Browser App - SearchView
Source code - Flickr Browser App - More on SearchView
Source code - Flickr Browser App - SearchView Events
Source code - Flickr Browser App - SharedPreferences
Source code - Flickr Browser App - Telling Fibs
Section 10 - Databases, the SQL Language and SQLite on Android
Source code - Databases, the SQL Language and SQLite on Android - Basic SQL in Android
Source code - Databases, the SQL Language and SQLite on Android - Create Table Add Data and Test
Source code - Databases, the SQL Language and SQLite on Android - Cursor and Navigation
Source code - Databases, the SQL Language and SQLite on Android - Contact Provider App Layout
Source code - Databases, the SQL Language and SQLite on Android - The ContactsContract
Source code - Databases, the SQL Language and SQLite on Android - Permissions
Source code - Databases, the SQL Language and SQLite on Android - Checking Permissions at Runtime
Source code - Databases, the SQL Language and SQLite on Android - Testing the App
Source code - Databases, the SQL Language and SQLite on Android - More on Snackbars
Source code - Databases, the SQL Language and SQLite on Android - Intents, setData and Uris
Source code - Databases, the SQL Language and SQLite on Android - Problems Storing State
Source code - Databases, the SQL Language and SQLite on Android - Remove Saving of State
Source code - Databases, the SQL Language and SQLite on Android - Test Scripts Challenge and Cleanup
Section 11 - ViewModel and LiveData
Source code - ViewModel and LiveData - Using a ViewModel
Source code - ViewModel and LiveData - Finish ViewModel Changes
Source code - ViewModel and LiveData - Exposing LiveData
Source code - ViewModel and LiveData - Swapping the ViewModel
Source code - ViewModel and LiveData - ViewModel with Top 10 Downloader
Source code - ViewModel and LiveData - Implement ViewModel
Source code - ViewModel and LiveData - Final Changes
Source code - ViewModel and LiveData - App Testing
Section 12 - TaskTimer App
Source code - TaskTimer App - Database Setup
Source code - TaskTimer App - Tasks Contract Class
Source code - TaskTimer App - AppDatabase Class
Source code - TaskTimer App - Create SQL for Tasks Table
Source code - TaskTimer App - Singleton AppDatabase Class
Source code - TaskTimer App - onUpgrade and Testing
Source code - TaskTimer App - The ContentProvider
Source code - TaskTimer App - uriMatcher
Source code - TaskTimer App - Updating Build Files
Source code - TaskTimer App - The Content URI
Source code - TaskTimer App - Register the ContentProvider
Source code - TaskTimer App - Using appendWhereEscapeString
Source code - TaskTimer App - Mime Types in the Content Provider
Source code - TaskTimer App - Content Provider Insert
Source code - TaskTimer App - Update and Delete
Source code - TaskTimer App - Testing Insert and Update
Source code - TaskTimer App - Testing Bulk Update and Delete
Source code - TaskTimer App - Main Menu UI
Source code - TaskTimer App - Task UI Layout
Source code - TaskTimer App - Task List Items Constraints
Source code - TaskTimer App - Add / Edit Layout
Source code - TaskTimer App - The Kotlin Data Class
Source code - TaskTimer App - The Add / Edit Fragment
Source code - TaskTimer App - Swapping Fragments
Source code - TaskTimer App - Multi-pane Fragments
Source code - TaskTimer App - Multi-pane Displays
Source code - TaskTimer App - Enabling Two-pane Mode
Source code - TaskTimer App - Logging the Fragment Lifecycle
Source code - TaskTimer App - Android SDK Gradle and Kotlin Updates
Source code - TaskTimer App - Up and Back Navigation for Fragments
Source code - TaskTimer App - Object can have More than One Type
Source code - TaskTimer App - Removing the Up Button
Source code - TaskTimer App - Back Navigation
Source code - TaskTimer App - Completing the AddEdit UI
Source code - TaskTimer App - Saving the Task Details
Source code - TaskTimer App - Test Saving
Source code - TaskTimer App - Updating Android Studio, Kotlin, and Gradle
Source code - TaskTimer App - Fixing New Kotlin Warnings
Source code - TaskTimer App - Layout Container
Source code - TaskTimer App - RecyclerView CursorAdapter
Source code - TaskTimer App - Tricking String Resources
Source code - TaskTimer App - The ViewModel Class
Source code - TaskTimer App - Subscribe to The ViewModel
Source code - TaskTimer App - Notifications and Observers
Source code - TaskTimer App - Responding to Taps
Source code - TaskTimer App - onClick Listeners, Interfaces and Callbacks
Source code - TaskTimer App - Responding to Clicks from the Adapter
Source code - TaskTimer App - Solution to The Interface Challenge
Source code - TaskTimer App - Deleting a Task from The Database
Source code - TaskTimer App - Accessing a Database on a Background Thread
Source code - TaskTimer App - Background Processing Using a Coroutine
Source code - TaskTimer App - Clean Up AddEditFragment
Source code - TaskTimer App - Saving in The ViewModel
Source code - TaskTimer App - Sharing ViewModel Instances
Section 13 - Dialogs
Source code - Dialogs - AndroidX
Source code - Dialogs - Introduction to Dialogs
Source code - Dialogs - AppDialog Class Part 2
Source code - Dialogs - Adding a Dialog to The App
Source code - Dialogs - Dialog CallBacks
Source code - Dialogs - Asserts and BuildConfig
Source code - Dialogs - Strange Dialog Behavior
Source code - Dialogs - Confirming Exit Without Saving
Source code - Dialogs - Implementing the Interface
Source code - Dialogs - Kotlin Extension Functions
Source code - Dialogs - Image Asset Studio
Source code - Dialogs - Create an About Dialog the Layout Part 2
Source code - Dialogs - Displaying the About Dialog
Source code - Dialogs - Versioning and build.gradle
Source code - Dialogs - Dismissing the Dialogue
Source code - Dialogs - Supporting Older Versions
Source code - Dialogs - Compatibility Challenge Solution Part 2
14. Settings Dialog
Source code - Settings Dialog - Introduction
Source code - Settings Dialog - Settings Dialog Layout
Source code - Settings Dialog - Settings Dialog
Source code - Settings Dialog - DefaultSharedPreferences
Source code - Settings Dialog - SeekBar Values
Source code - Settings Dialog - Quantity String Resources
Source code - Settings Dialog - Setting Dialog Title
Source code - Settings Dialog - Retain Instance State
15. Multiple Tables and Database Upgrades
Source code - Multiple Tables and Database Upgrades - Introduction
Source code - Multiple Tables and Database Upgrades - A Correction and the Device File Explorer
Source code - Multiple Tables and Database Upgrades - Database Updates
Source code - Multiple Tables and Database Upgrades - Saving the Timing Data
Source code - Multiple Tables and Database Upgrades - The saveTiming Function
Source code - Multiple Tables and Database Upgrades - Testing Timings
Source code - Multiple Tables and Database Upgrades - Providing Feedback
Source code - Multiple Tables and Database Upgrades - Data Loss
Source code - Multiple Tables and Database Upgrades - Storing the Current Timing Records
Source code - Multiple Tables and Database Upgrades - Solution - Retrieving the Current Time Record
Source code - Multiple Tables and Database Upgrades - Solution Continued
Source code - Multiple Tables and Database Upgrades - Finish Solution and Test
Source code - Multiple Tables and Database Upgrades - When the Battery Dies
16. Reports
Source code - Reports - Creating Test Data
Source code - Reports - Generating the Test Data
Source code - Reports - Debug and Release Builds
Source code - Reports - Using a SQLite view
Source code - Reports - Adding the view to the Database
Source code - Reports - Adding the view to the ContentProvider
Source code - Reports - Testing the Database Upgrade
Source code - Reports - ConstraintLayout Chains
Source code - Reports - Chain Types
Source code - Reports - Finishing the reports layouts - challenge
Source code - Reports - The Landscape Layouts
Source code - Reports - The Report Adapter
Source code - Reports - The Durations Report Activity
Source code - Reports - Testing Different Locales
Source code - Reports - Creating the reports ViewModel
Source code - Reports - Using the DurationsViewModel
Source code - Reports - Sorting the Report Data
Source code - Reports - Vector Drawables and Asset Studio
Source code - Reports - The Report Menu
Source code - Reports - Report Menu Code - day/week toggle
Source code - Reports - The DatePickerDialog
Source code - Reports - Filtering by Date
Source code - Reports - Filtering in the DurationsViewModel
Source code - Reports - Testing the Report Filters
Source code - Reports - Unbuggy DatePickerDialog
Source code - Reports - Deleting old Timings data
Source code - Reports - Testing Mass Deletion
Source code - Reports - Observing the cursor in the ViewModel
Source code - Reports - A Minor Bug
Source code - Reports - Observing a Configuration Change
Source code - Reports - Testing the Bug Fix
Source code - Reports - Using the First Day Of Week Setting
Source code - Reports - Taking Advantage of Later Features
Source code - Reports - Testing the new DatePickerFragment
Source code - Reports - Observing SharedPreference changes
Source code - Reports - Solution to Ignore Short Timings Challenge
17. Tidying up
Source code - Tidying up - Introduction
Source code - Tidying up - Plugin and Library Versions
Source code - Tidying up - Code Review
Source code - Tidying up - Code Review - The AppProvider Class
Source code - Tidying up - Code Review - MainActivity and the Contract classes
Source code - Tidying up - Kotlin and ViewModels
Source code - Tidying up - Another Breaking Change
Source code - Tidying up - Improvements to coroutines in a ViewModel
Source code - Tidying up - Dispatchers
Source code - Tidying up - Coroutines Dont Block
Source code - Tidying up - Bug Fixes and Ideas for Improvements
Source code - Tidying up - Prevent Deletion of Edited Task
Source code - Tidying up - Implementing Delete by Swiping - Part 1
Source code - Tidying up - Implementing Delete by Swiping - Part 2
Source code - Tidying up - Implementing Delete by Swiping - Part 3
Source code - Tidying up - Challenge - Bug Fix
Source code - Tidying up - Challenge - Deleting a task that's being timed
Source code - Tidying up - Parameterised Queries
Source code - Tidying up - Adding the Parameters Table
Source code - Tidying up - Using the Parameterised View in our ViewModels