Android App Development Masterclass using Kotlin
About Course
Become an Android app developer with this comprehensive masterclass, completely **FREE**. This free course covers everything you need to know to create Android apps that work on all devices, from the latest to older versions.
Learn how to use Kotlin programming, Android Studio, and best practices to create your first Android app. You’ll also learn how to test your apps on emulators or real devices, use databases and web services, work with Constraint Layout, and use powerful libraries. This course is perfect for beginners and experienced developers alike.
Taught by experienced software developers Tim Buchalka and Jean-Paul Roberts, you’ll gain the skills needed to land a job in the Android development field.
This course is from Udemy, a leading platform for online learning. Get started today!
What Will You Learn?
- Learn the core Android app development and Kotlin skills to build real Android apps.
- Learn how to target current and older versions of Android when writing your apps.
- Understand how to create Android apps using Kotlin.
- Be able to apply for Android app development roles.
Course Content
Introduction & Course Information
-
Introduction
01:53 -
A Message from the Professor
-
The Udemy Interface
06:08 -
Introduction to Android
19:22 -
Course Material Download Link
00:00
Downloading and Installing the Necessary Tools
-
Windows – Install Android Studio
11:18 -
Mac – Install Android Studio
06:35 -
Linux – Install Android Studio
11:35 -
Configure Android SDK on all Three Platforms
12:04 -
Android Studio Settings
03:01 -
Enable VT-X in BIOS
13:54
Hello World Android App
-
Your Programming Careers Questions Answered
01:53 -
Introduction
00:40 -
Android Studio Templates
08:01 -
More on Android Templates
08:25 -
Hello World
12:42 -
Tour of Android Studio
16:30 -
Setting Up a Virtual Device
15:11 -
Running on an emulator
09:50 -
Running on a physical Android device
12:26
Kotlin Tutorials
-
Kotlin Tutorial Setup
10:32 -
Kotlin Tutorial 1
09:09 -
Variables and Types
11:27 -
More on Variables and Types
11:49 -
String Concatenation and Interpolation
12:35 -
val and var and more on Declarations
10:19 -
Conditions
17:58 -
Classes
19:34 -
Objects and Instances
14:53 -
Challenge
06:24 -
Lists
10:25 -
More on Lists
12:00 -
toString Challenge
04:24 -
for Loops
14:07 -
for Encapsulation and Private Properties
13:19 -
Overloading Functions
08:13 -
Inheritance
12:50 -
More on Inheritance
10:10 -
Inheritance Continued
09:11 -
Further Inheritance
09:51 -
while Loops
14:18 -
for Loop Revisited
10:03 -
do while Loop
05:14 -
Loop Challenge
12:37
The Button Counter App
-
Introduction
02:27 -
Setup Play Project
11:39 -
The Constraint Layout
17:06 -
Constraints and Resizing
15:17 -
Positioning Widgets
07:52 -
Inner Lines within a Widget
09:33 -
Layouts on Different Devices
11:00 -
More on the Constraints
12:48 -
Baseline Constraints
09:55 -
Constraining Widgets
05:37 -
Add Scrolling Capabilities
13:32 -
The Button Counter App
14:50 -
Finish Layout
12:18 -
Coding Button Counter App
13:49 -
findViewById and r Class
12:46 -
Events and setonclicklistener
08:03 -
Testing and Challenge Time
14:10 -
Extending the Button App
10:36 -
Testing and Challenge
06:54 -
Fixing Kotlin Gradle Issues
03:58 -
The Activity Lifecycle
15:18 -
The Logcat Pane
09:04 -
Logging the Activity Lifecycle
09:34 -
Activity Lifecycle in Action
14:32 -
Saving and Restoring Instance State
15:09
Calculator App
-
Demo Calculator App
04:52 -
Calculator Interface Setup
15:37 -
Continue with Interface
16:30 -
Fine Tuning the Layout
15:28 -
Create Landscape Layout
09:02 -
Comparing FIles with Diff
17:12 -
Comparing Directories
08:29 -
Coding the Calculator
23:15 -
Add onClickListeners
07:04 -
Write Perform Operation Function
16:45 -
Bug Fix and Code Improvements
14:13 -
Bug Fix Challlenge and Save State
19:52 -
Widget References in Kotlin
07:29 -
Guidelines
13:53 -
Fixing Landscape Layout
12:40 -
Add Neg Button to Layout
07:16 -
Code Changes for Neg Button
08:31 -
Add Neg Button to Portrait
19:04
The Top 10 Downloaded App
-
Introduction
10:47 -
AsyncTask
14:39 -
Logging and Logcat
09:00 -
Download the RSS Feed
14:38 -
Reading the Data
20:05 -
Android Permissions
20:03 -
Writing Idiomatic Kotlin
15:00 -
More Idiomatic Kotlin
07:05 -
Parsing the Data
19:06 -
Create Xml Parse Function
15:08 -
Testing the App
10:12 -
ListView and ArrayAdapter
13:18 -
Code Changes for Array Adapter
17:02 -
onDestroy and Asynctask
07:31 -
Create Custom Adapter
11:43 -
Custom Adapter Code
17:19 -
Improving the Adapter
12:41 -
ViewHolder Pattern
12:09 -
Adding a Menu – Layout
08:59 -
Adding A Menu – Code
16:05 -
Menu Groups – Layout
09:31 -
Menu Groups – Code
15:56 -
Challenge Solution
15:31
The YouTube App
-
Setup
17:54 -
YouTube Activity
13:27 -
Adding Widgets Dynamically
09:59 -
Google API Key
11:41 -
Add Key to Code
07:57 -
The YouTube Player
13:33 -
onInitializationSuccess Method
13:11 -
Adding Listeners
10:43 -
Improving the Player
06:24 -
Extending App Layouts
05:28 -
Extending Youtube App Code
12:29 -
Implementing Intents and Challenge
17:53 -
Challenge Solution
05:10 -
More Error Handling
15:10
Flickr Browser App
-
Introduction
04:06 -
Flick App and Feeds
15:36 -
Json and Mini challenge
13:38 -
Log Tag and Companion Objects
15:39 -
Download JSON – doInBackground
12:14 -
Downloading the JSON
13:28 -
CallBacks
16:14 -
Project Diagram and Photo Class
08:21 -
GetFlickJsonData class
20:07 -
GetFlickrJsonData class continued
18:35 -
Uri Builder
12:02 -
Flickr Browser User Inferface
12:07 -
RecyclerView Layouts
15:09 -
Finishing Browse Layout
05:43 -
Search and PhotoDetail Activities
08:44 -
Nested Layouts
15:58 -
Recyclerview Adapter
17:29 -
onBindViewHolder and Picasso
14:12 -
Associate Adapter to Recyclerview
06:54 -
RecyclerItemClickListener
18:47 -
GestureDetector
15:43 -
Displaying the full photo
16:00 -
Serializable
17:00 -
Modify Photo Details Activity
05:56 -
Parcelable
09:05 -
Material Design
13:55 -
More on Material Design
09:50 -
AppCompat – Backwards Compatibility
06:33 -
Style Sheets
12:06 -
Custom Style Sheets
12:57 -
Namespaces
12:02 -
Other Material Design Changes
10:47 -
Differences in API Levels
08:58 -
String Resources
10:24 -
String Resources Placeholders
10:32 -
Adding the Search Feature
04:57 -
SearchView
13:16 -
More on SearchView
12:08 -
SearchView Events
09:32 -
SharedPreferences
10:20 -
Telling Fibs
08:29
Databases, the SQL Language and SQLite on Android
-
Introduction
01:17 -
Introduction to Databases
05:06 -
Database Terminology
10:42 -
Command Line and Path Setup for Windows
09:41 -
Command Line and Path Setup for Mac
08:06 -
Command Line and Path Setup for Ubuntu Linux
06:17 -
Introduction to Sqlite
11:15 -
More SQL with Sqlite
10:45 -
Sqlite Querying Data
16:06 -
Order By and Joins
13:18 -
More Complex Joins
11:51 -
Wild Cards and Views
15:17 -
Housekeeping and Challenge
14:23 -
Basic SQL in Android
10:22 -
Create Table Add Data and Test
11:43 -
Cursor and Navigation
17:49 -
Android File System
16:27 -
Content Providers
02:55 -
Setting up the Emulators
11:39 -
Contact Provider App Layout
07:42 -
The ContactsContract
10:14 -
ContentResolver and Abstraction
08:41 -
Retrieving Data with a ContentResolver
09:33 -
Permissions
13:32 -
Checking Permissions at Runtime
15:00 -
Testing the App
09:16 -
Avoiding Crashes Snackbars and a Challenge
08:11 -
More on Snackbars
10:59 -
Intents
14:41 -
Problems Storing State
06:24 -
Remove Saving of State
04:26 -
Test Scripts Challenge and Cleanup
07:08
ViewModel and LiveData
-
Introduction
02:17 -
Androids ViewModel Class
04:09 -
Using a ViewModel
13:36 -
Finish ViewModel Changes
21:48 -
Exposing LiveData
08:37 -
Swapping the ViewModel
07:46 -
ViewModel with Top 10 Downloader
10:27 -
Implement ViewModel
16:01 -
Final Changes
10:22 -
App Testing
04:26
TaskTimer App
-
The TaskTimer Application
18:30 -
Database Setup
11:50 -
Tasks Contract Class
07:07 -
AppDatabase Class
09:20 -
Create SQL for Tasks Table
08:39 -
Singleton AppDatabase Class
11:00 -
onUpgrade and Testing
12:14 -
The ContentProvider
17:49 -
uriMatcher
20:55 -
Updating Build Files
03:18 -
The Content URI
12:11 -
Register the ContentProvider
11:54 -
Using appendWhereEscapeString
12:18 -
Mime Types in the Content Provider
09:07 -
Content Provider Insert
09:11 -
Update and Delete
12:23 -
Testing Insert and Update
12:45 -
Testing Bulk Update and Delete
14:49 -
Main Menu UI
15:30 -
Task UI Layout
14:42 -
Task List Items Constraints
05:54 -
Add _ Edit Layout
16:59 -
The Kotlin Data Class
12:21 -
The Add _ Edit Fragment
18:53 -
Swapping Fragments
12:46 -
Multi-pane Fragments
13:19 -
Multi-pane Displays
15:49 -
Enabling Two-pane Mode
10:35 -
The Fragment Lifecycle Part 1
12:51 -
The Fragment Lifecycle Part 2
07:37 -
Logging the Fragment Lifecycle
14:55 -
Android SDK Gradle and Kotlin Updates
11:35 -
Up and Back Navigation for Fragments
07:49 -
Object can have More than One Type
03:47 -
Removing the Up Button
06:32 -
Back Navigation
06:43 -
Completing the AddEdit UI
10:16 -
Saving the Task Details
10:32 -
Test Saving
07:35 -
Updating Android Studio
04:36 -
Fixing New Kotlin Warnings
04:50 -
Layout Container
06:59 -
RecyclerView CursorAdapter
16:19 -
Introducing David Reidy
01:43 -
Tricky String Resources
12:16 -
The ViewModel Class
07:31 -
Subscribe to The ViewModel
03:28 -
Notifications and Observers
09:26 -
Responding to Taps
04:35 -
onClick Listeners
02:50 -
Responding to Clicks from the Adapter
04:32 -
Solution to The Interface Challenge
05:58 -
Deleting a Task from The Database
09:57 -
Accessing a Database on a Background Thread
07:42 -
Background Processing Using a Coroutine
04:37 -
Clean Up AddEditFragment
09:06 -
Saving in The ViewModel
05:21 -
Sharing ViewModel Instances
05:37
Dialogs
-
AndroidX
14:14 -
Introduction to Dialogs
04:23 -
AppDialog Class Part 1
15:52 -
AppDialog Class Part 2
08:48 -
Adding a Dialog to The App
05:52 -
Dialog CallBacks
11:44 -
Asserts and BuildConfig
08:14 -
Strange Dialog Behavior
05:54 -
Confirming Exit Without Saving
07:55 -
Implementing the Interface
04:19 -
Kotlin Extension Functions
08:45 -
Image Asset Studio
13:38 -
Create an About Dialog the Layout Part 1
10:56 -
Create an About Dialog the Layout Part 2
11:31 -
Displaying the About Dialog
12:11 -
Versioning and build.gradle
08:06 -
Dismissing the Dialogue
08:58 -
Supporting Older Versions
08:34 -
Compatibility Challenge Solution Part 1
15:03 -
Compatibility Challenge Solution Part 2
12:25
Settings Dialog
-
Introduction
03:05 -
Settings Dialog Layout
10:54 -
Settings Dialog
04:03 -
DefaultSharedPreferences
07:30 -
SeekBar Values
08:08 -
Quantity String Resources
09:30 -
Setting Dialog Title
03:40 -
Retain Instance State
06:17
Multiple Tables and Databases Upgrade
-
Introduction
04:13 -
A Correction and the Device File Explorer
07:13 -
Database Updates
11:45 -
Saving the Timing Data
06:20 -
The saveTiming Function
04:15 -
Testing Timings
03:37 -
Providing Feedback
04:54 -
Data Loss
03:58 -
Storing the Current Timing Records
04:05 -
Solution – Retrieving the Current Time Record
04:46 -
Solution Continued
02:01 -
Finish Solution and Test
06:48 -
When the Battery Dies
06:31
Reports
-
Creating Test Data
12:52 -
Generating the Test Data
03:36 -
Debug and Release Builds
10:07 -
Using a SQLite view
11:53 -
Adding the view to the Database
08:03 -
Adding the view to the ContentProvider
03:29 -
Testing the Database Upgrade
07:15 -
ConstraintLayout Chains
09:02 -
Chain Types
12:28 -
Finishing the reports layouts – challenge
10:18 -
The Landscape Layouts
09:16 -
The Report Adapter
10:42 -
The Durations Report Activity
12:10 -
Testing Different Locales
06:55 -
Creating the reports ViewModel
06:29 -
Using the DurationsViewModel
02:32 -
Sorting the Report Data
06:40 -
Vector Drawables and Asset Studio
13:09 -
The Report Menu
05:27 -
Report Menu Code – day_week toggle
07:38 -
The DatePickerDialog
15:22 -
Filtering by Date
05:56 -
Filtering in the DurationsViewModel
10:12 -
Testing the Report Filters
07:30 -
Unbuggy DatePickerDialog
09:39 -
Deleting old Timings data
09:23 -
Testing Mass Deletion
04:02 -
Observing the cursor in the ViewModel
04:27 -
A Minor Bug
05:01 -
Observing a Configuration Change
09:07 -
Testing the Bug Fix
08:04 -
Using the First Day Of Week Setting
06:13 -
Taking Advantage of Later Features
04:27 -
Testing the new DatePickerFragment
04:09 -
Observing SharedPreference changes
07:19 -
Solution to Ignore Short Timings Challenge
09:36
Tidying Up
-
Introduction
01:49 -
Plugin and Library Versions
06:19 -
Code Review
07:46 -
Code Review – The AppProvider Class
09:25 -
Code Review – CursorRecyclerViewAdapter
08:22 -
Code Review – MainActivity and the Contract classes
05:48 -
Kotlin and ViewModels
10:03 -
Another Breaking Change
05:26 -
Improvements to coroutines in a ViewModel
05:53 -
Dispatchers
03:47 -
Coroutines Don8217t Block
07:54 -
Bug Fixes and Ideas for Improvements
06:02 -
Prevent Deletion of Edited Task
10:26 -
Implementing Delete by Swiping – Part 1
07:51 -
Implementing Delete by Swiping – Part 2
06:08 -
Implementing Delete by Swiping – Part 3
08:13 -
Challenge – Bug Fix
05:33 -
Challenge – Deleting a task that’s being timed
05:24 -
Parameterised Queries
09:01 -
Adding the Parameters Table
08:23 -
Using the Parameterised View in our ViewModels
11:10 -
Refreshing the Report
02:41 -
Collation
03:43
Extra Information – Source Code, and Other Stuff
-
Bonus Lecture and Information
04:48
Earn a certificate
Add this certificate to your resume to demonstrate your skills & increase your chances of getting noticed.