| Date | Topic | Assignments | 
 | Mon 01/15 | Kotlin resources
(Java review slides below) 
 | 
Course summary slidesFrom Java to Kotlin quick examples
 Kotlin basic syntax
 Kotlin cheatsheat
 Kotlin Koans
 Kotlin by example
 Kotlin's let, apply, also, with and run functions   (and VIDEO)
 Kotlin idioms
 Kotlin nested and inner classes
 Kotlin docs
 Android studio will convert Java files and pasted Java code to Kotlin
 | 
 | Mon 01/15 | Course slides 
 | 
Course summary slidesAndroid SQLite
 Dealing with JSON
 Maps
 | 
 | Tue 01/16 | Course Intro, Kotlin introduction, App overview 
 | 
HW: What are your goals for this course? (undergrad course only)What is Android?
 For course videos, feel free to listen at 1.25x or 1.5x, the Global Speed controller plugin for Chrome gives you even more control
 Video: Creating a simple Android app in Kotlin
 Video (older, screen only): Creating a simple Android app in Kotlin
 Screen Video: How to use Android studio and debugging tips
 Video: Philosophy of learning programming
 | 
 | Thu 01/18 | GUI widgets and layout 
 | 
HW due one minute before noon -- What are your goals for this course (in canvas)?HW 0 out (see canvas)
 HW 1 (Peck) (in canvas)
 Video demo of Homework 1 Peck
 Android Docs: Constraint Layout
 External: Constraint layout chains
 Android Docs: View Binding
 Video: Widgets
 Video tutorial: Linear and Constraint layouts
 Video tutorial: Icons and Images
 | 
 | Tue 01/23 | Android idioms in Kotlin.  Lambdas.  Debugging. 
 | 
HW 0 due 12:30pmVideo: Lambda functions in Kotlin
 Video: Basic View Binding
 Video: View Binding (Demo)
 Video: Andriod history: Finding views
 Video: Short tour of a gradle file
 | 
 | Thu 01/25 | Flipped classroom - Layout 
 | 
Watch the video and look at web pages BEFORE classVideo: Layout flipped classroom (FC0 - layout) requirements
 Android Docs: Linear Layout
 Android Docs: Linear Layout weights
 Android Docs: Constraint Layout details
 External Constraint Layout Tutorial
 | 
 | Tue 01/30 | Implicit and explicit intents.  Activities and their lifecycle. 
 | 
Android Docs: Implicit intentsVideo: Implicit intents
 Android Docs: Activity lifecycle
 Android Docs: Intents
 Android Docs: Intent with result
 Android Docs: addMenuProvider
 Video tutorial: Explicit intent example
 | 
 | Thu 02/01 | Flipped classroom - Activities and Intents 
 | 
Watch the video BEFORE classVideo: FC1 - Intents and activities
 Video: older FC1 that goes over the code more
 | 
 | Fri 02/02 | 
 | 
HW 2 Fling out (in canvas)Video demo of HW 2 Fling
 | 
 | Tue 02/06 | Recycler view 
 | 
Video: RecyclerView slidesVideo: RecyclerView code walk through part 1
 Video: RecyclerView code walk through part 2 (Adapter)
 Video: RecyclerViewDiff code walk through
 Android docs: RecyclerView
 External: Recycler View parts and functionality
 | 
 | Wed 02/07 | 
 | 
Homework 1 Peck due at 11:59pm | 
 | Thu 02/08 | Flipped classroom - RecyclerView 
 | 
Video RecyclerView Flipped classroom demoVideo: RecyclerView and ViewHolder
 External tutorial on RecyclerView
 Android Docs: RecylerView and Cards
 External page on RecylerView and ViewHolder and ViewBinding
 | 
 | Tue 02/13 | Fragments, ViewModel, Navigation 
 | 
Android Docs: FragmentsViewModel Overview
 Video: Fragments, Navigation, ViewModel for recycler view lists
 Android docs: Navigation getting started
 Android docs: NavigationUI
 | 
 | Thu 02/15 | Flipped classroom - Fragments and Navigation 
 | 
Video: Fragment flipped classroomAndroid docs: Navigation getting started
 Android docs: Navigate to a destination
 Android docs: SafeArgs example
 | 
 | Tue 02/20 | ViewModel, LiveData, Model-View-Viewmodel (MVVM) 
 | 
Screen video: FilterClock demoAndroid docs: LiveData overview
 External LiveData
 External MVVM on Android
 Android docs: Guide to app architecture
 | 
 | Wed 02/21 | 
 | 
HW 2 Fling due at 11:59pmHW 3 Music Player out (in canvas)
 Screen Video: HW 3 media player demo
 | 
 | Thu 02/22 | Flipped classroom - ViewModel and LiveData 
 | 
Video: FC LiveData and ViewModel demoVideo: Coroutines and Handler/Runnable (AbsurdClock)
 | 
 | Tue 02/27 | Network services - Retrofit, JSON 
 | 
Public APIsUsing Kotlin coroutines with architecture components
 External Retrofit and Kotlin coroutines
 JSON pretty printer
 | 
 | Thu 02/29 | Flipped classroom - network services 
 | 
Video: trivia game demo and background
 Video: JSON tools
 | 
 | Tue 03/05 | Firebase authentication and Firestore 
 |  | 
 | Wed 03/06 | 
 | 
Homework 3 Music player due at 11:59pmHW 4 Tetrominoes out (in canvas)
 Video: HW4 Demo
 Video: Overriding onDraw of a View (DemoDraw)
 | 
 | Thu 03/07 | Flipped classroom - Firebase Authentication 
 | 
Key Principles of Software ArchitectureVideo: FC firebase demo
 Firebase UI for authentication
    older Video: FC firebase console setup
    older Video: FC firebase user setup and demo
        older older Video: SHA-1 certificate fingerprint generation for Android
 | 
 | Tue 03/12 | Spring break 
 |  | 
 | Thu 03/14 | Spring break 
 |  | 
 | Mon 03/18 | Project demo signup (in-person only) 
 | 
Please sign up now for your project demo on 4/4 (in-person only) | 
 | Tue 03/19 | Databases and SQL 
 | 
Relational database and SQL backgroundSQLite on Android, ContentValues, Cursor, column data (slides)
 Design principles for an Android app that interacts with a database
 Demo of the Notebook app
 The data model for Notebook (with sqlite3 demo)
 Code walkthrough of the Notebook app
 Implementing ImageRoll in Notebook
 SQLiteOpenHelper code walkthrough in Notebook
 How to take pictures in Android (slides)
 How to take pictures in Android (code)
 Android Docs: SQLiteDatabase
 External: SQLite tutorial
 | 
 | Wed 03/20 | 
 | 
HW 5 Reddit out (in canvas)Screen video: HW5 Reddit demo
 | 
 | Thu 03/21 | Flipped classroom - SQL 
 | 
Video: SQL FC Demo, including sqlite3 | 
 | Fri 03/22 | 
 | 
Project Ideas Due at start of class  | 
 | Tue 03/26 | Firestore 
 | 
Referential integrity for Notebook and FireNoteGetting started with Google's Firestore
 FireNote functionality demo
 The data model for FireNote (with Firebase console demo)
 Firebase Storage in FireNote
 Code walkthrough of FireNote app
 Implementing ImageRoll in FireNote
 Most of these links are just the first of a series of pages well worth reading
 Firestore
 Firestore storage
 FirebaseUI
 | 
 | Wed 03/27 | 
 | 
Homework 4 Tetrominoes due at 11:59pm | 
 | Thu 03/28 | Flipped classroom - Photo list 
 | 
Photolist demoScreen video explaining the data model for the flipped classroom
 | 
 | Fri 03/29 | Anonymous peer review 
 | 
Anonymous peer review due at 11:59pm | 
 | Tue 04/02 | Maps 
 | 
Video: Tutorial on Goole maps in AndroidAndroid map docs
 Getting an API key
 Watch out for billing
 | 
 | Thu 04/04 | Flipped classroom - Maps 
 | 
PROJECT DEMO (in-person only)Video: Maps flipped classroom demo
 Android docs: Signing apps
 Video: Generating a Google API key and using it for maps
 Android Docs: Geocoder
 MapFragment
 | 
 | Tue 04/09 | Databases, comparing Notebook with FireNote 
 | 
Video: Hex demoVideo: Hex data model
 Sign up here for final demo
 | 
 | Wed 04/10 | HW5 Due 
 | 
Homework 5 Reddit due at 11:59pm | 
 | Thu 04/11 | Catch up, Brent Waters guest lecture 
 |  | 
 | Tue 04/16 | Persistent state, shared preferences 
 | 
Video: Saving state in AndroidData and file storage overview
 Android docs: Saving UI states
 Android docs: Saved state module for ViewModel
 Android: Files
 All the things we're doing wrong but take for granted: a retrospective glance at Android development
 | 
 | Thu 04/18 | Industry talk, Claire Bingham, Emery Coxe, and Caryn from First Dollar talking about Jetpack Compose 
 |  | 
 | Mon 04/22 | Project demos 1:00-6:30pm 
 |  | 
 | Tue 04/23 | Project demos 
 |  | 
 | Thu 04/25 | Catch up, Brent Waters guest lecture 
 |  | 
 | Fri 04/26 | Write up due 
 | 
Project writeup pdf due on canvas at 12:01pm.  | 
 | Sat 04/27 | Project demos 12:00pm-1:00pm 
 |  |