CS184 - Introduction to Mobile Application Development (using Android)

Spring 2022

This home page, the CS184 Slack Channel, and maybe a CS184 Piazza, will be used as centers of communication for the class. Homework submission will occur through the CS184 GauchoSpace. Make sure you are enrolled!

While the webpage provides you with up-to-date information about assignments and what is currently going on in class, homeworks will be submitted via GauchoSpace and possibly Gradescope, Piazza serves as an open forum: questions, answers, suggestions, etc., and the Slack channel provides focused channels for special topics and project groups.

General Information

Class Hours:    TR, 2:00pm-3:15pm | Section W 1:00pm-1:50pm (387-1015), 2:00pm-2:50pm (GIRV2115) or Friday 1:00pm-1:50pm, 2:00pm-2:50pm (HFH1135) 
Class Location: PSYCH1902
Instructor:     Tobias Höllerer
Office Hours:   Wed, 4pm-5pm or by appointment
e-mail:         holl@cs...
Discussion/Lab: W 1:00pm-1:50pm (387-1015), 2:00pm-2:50pm (GIRV2115) or Friday 1:00pm-1:50pm, 2:00pm-2:50pm (HFH1135) 
Samridhi Maheshwari, Shubham Talbar, Satyam Awasthi e-mail: {samridhimaheshwari,shubham_talbar,satyam}@ucsb... Office hours: Samridhi: TBA, Shubham: TBA, Satyam: TBA

Course Description

This course provides an introduction to developing applications for the Android mobile ecosystem.

Over the past 20 years, the use of information technology has undergone a clear transition from stationary office and desktop computing to mobile computing. This development was accompanied by the emergence of networked and social computing. The Sales of smartphones and tablet computers have by far outpaced the sales of conventional desktop PCs for years now. The way people today obtain computer literacy has changed: Apps and cloud computing have replaced desktop computing in many cases. Computing has shifted from office or home office work to an anywhere-and-anytime activity.

This course aims to prepare students for this extraordinary shift in commercial and societal focus. The possibilities of mobile device software development are endless. In this introductory course, we get your curiosity started and prepare you for more advanced app development.

Students will apply their gained knowledge in a series of practical assignments using the Android ecosystem that highlight selected portions of the software design cycle, as well as familiarize them with sound programming practices and effective tools and techniques to create successful applications. The course will also touch upon novel interaction concepts that go beyond what we normally see in today's mobile apps.

Course Requirements and Grading

This class teaches the theory and practice of effective software design for Android. You will learn about principles, procedures, and programming approaches. You will create, iterate, and evaluate interaction designs.

As we are switching back to an in-person in-class experience, the exact course requirements will emerge over the first week, once the instructor has been able to form an idea about students' resources, backgrounds and expectations.

There will definitely be a series of design and implementation assignments that lead up to individual or group class projects. There _may_ be one exam (in week 8 or 9). We will continuously assign reading and tutorial material from online resources, which is supposed to help your design efforts and to stimulate class participation. Here is how your final grade will be determined:  

In case you disagree with any grade, submit your grievance in writing (email or paper) to the grader responsible, explaining and documenting your case.

Lateness Policy

All assignments are due at midnight on the scheduled due date. To make the deadlines more manageable, each student will be allowed three "late days" during the quarter for which lateness will not be penalized. Late days may be applied to all assignments, including design sketches and programming assignments, but not the final project! Your  late days may be used as you see fit -- one or multiple per assignment -- but once you used a late day it's good and gone, you cannot reapply it to another assignment. Anything turned in after 12:00:00am until midnight the next day is one day late. Every day thereafter that an assignment is late, including weekends and holidays, counts as an additional late day.

Absolutely no late work will be accepted after the deadline if you have used up all your late days. If you're not done on time you must turn in what you have to receive partial credit. There will be no exceptions from this rule. Please make sure you understand this policy.

When making use of your late days, the online submission provides the timestamp that counts. 

Academic Misconduct

We will strictly enforce UCSB's academic misconduct policies. We use electronic tools to detect plagiarism among submitted homework solutions and sources from the internet. Read these guidelines before beginning each programming assignment. Any form of  plagiarism, collusion, or cheating will result in an "F" in this course and may result in suspension from UCSB for two quarters. When in doubt about any forms of receiving help on your assignments, ask us!

Open Door Policy

I would like the course to be informative and enjoyable. Let us know what you find just, good and interesting about the course. Let us know sooner if you feel something could be improved. See us, send an e-mail, or leave us a note.


Class Materials

See the handout column in the class schedule!


Other Sources

Warning: these sources are likely quite a bit outdated...


Class Schedule



/ Dis

Date Assigned
Topics Handout HW
HW due
 1 C1 Tue Mar 29

Introduction, Motivation,
Class Requirements, Policies


H1: Kotlin Chapters

H2: Android Studio (AS) Chapters

S1: Slides: Android Intro

B1: Java Review

Student Survey
D1 Wed/ Fri Mar 30 H1

Hand out
Nexus Tablets

Android Studio
Hello Android Example


Section Drive Folder(for Slides)  
C2 Thu Mar 31 H1

HW 1

Android: Overview, Historic Context, Discussion

Overview: Views / Layouts

H2 (update): Drive Folder with newer Android Studio Bumblebee Chapters HW1  
2 C3 Tue Apr 05 H2

Kotlin Examples

Android Studio

Overview: Views / Layouts

S2: Slides: Kotlin

S3: Slides: Android and Kotlin and AndroidOverview

D2 Wed Apr 06 H2

More Kotlin Tips & Tricks

Android Studio XML example towards HW2

Section Drive Folder(for Slides, Videos, & Code)    
C4 Thu Apr 07 H2

HW 2: First Android Program



S4: Slides: Layouts

S5: Slides: Constraint Layout

  Sun Apr 10       HW2 HW1
3 C5 Tue Apr 12  


Device-Independent UIs

GUI Widgets
Event Handling

S6: Slides: Event Handling / GUI Widgets    
D3 Wed Apr 13  

Tips: ConstraintLayout Programmatically

Project Discussion

Section Drive Folder(for Slides, Videos, & Code)    
C6 Thu Apr 14  

Activity Life Cycle 

S7: Slides: Activity Lifecycle (Slides with Java code not shown in class, but still useful)

  Sun Apr 17       HW3 HW2
4 C7 Tue Apr 19  

State Saving with
Bundles and


S8: Slides: State Saving with Android configChanges, Bundles, or Shared Preferences

S9: Slides: Intents

D4 Wed Apr 20  Nested Layouts
vs. complex ConstraintLayout
Section Drive Folder(for Slides, Videos, & Code)    
C8 Thu Apr 21   Intents

S10: Slides: Fragments
H2 Update: Fragment Chapters
H3: Jetpack: Model-View-ViewModel

  Sun Apr 24         HW3
5 C9 Tue Apr 26 H3

Multimedia Support:

H4: Jetpack: ViewModel Chapters

HW4 Preview

D5 Wed Apr 27 H4


Section Drive Folder(for Slides, Videos, & Code) HW4  
C10 Thu Apr 28 H4

Image Loading (Glide)
External Libraries

Asynchronous Threads

S11: Mediaplayer
S12: Speech to Text / Text to Speech
S13: 2D Graphics

H5: MultiTouch and Gestures

6 C11 Tue May 03 H4

HW4: Animation Demo



S13: Permissions
D6 Wed May 04  


Section Drive Folder(for Slides, Videos, & Code)    
C12 Thu May 05 H5

Permissions Example

Example code posted in Slack    
  Mon May 09         HW4
7 C13 Tue May 10  

Wrap-up: REST APIs

SQLite support

Jetpack Room

Example code posted in Slack

H6: Databases, Room, Cloud Storage

S15: Databases, SQLite

D7 Wed May 11  


Agile Methodology (Scrum)


    Group Project Idea
C14 Thu May 12  

Databases (2):

Remote Databases

S16: Firebase    
C15 Tue May 17  


Google Maps


S17: Google Maps, Location Sensing

D8 Wed May 18   Project Discussions      
C16 Thu May 19  



S18: Lists/RecyclerView     
9 C17 Tue May 24  



D9 Wed May 25   Project Discussions Room Change: 1132 Harold Frank Hall    
C18 Thu May 26  

UI Theming

Example Code posted in Slack    
10 C19 Tue May 31  

Jetpack Compose

Lecture Online Only. Please check our lecture recording list in the evening    
D10 Wed Jun 01  

Project Discussions

Room Change Back to Original Section Rooms (Trailer 387-1015 @ 1pm and Girvetz 2115 @ 2pm)!    
C20 Thu Jun 02  

Future of Mobile Applications





Tue Jun 07 4-7pm Project Presentations Overall Project Assessment    
  Thu Jun 09


Project Materials Due Overall Project Assessment    



For questions, please contact the instructor and/or TAs