Want to be the next Nick D'Aloisio who at the ripe old age of 17 sold his smartphone app to Yahoo for $27 million?

Want to know the ins and outs of rolling your own Android app?

Want to develop your own app as part of a group project?

Then read on ....

Android

The coolest technology to emerge over the last decade is the smartphone -- it's had a huge impact on our lives. Today, Android operating system hold over 70% share of the global market.

If you've been curious about programming phones and creating great apps then this course is for you. We'll focus on programming Android phones -- sorry iPhone.

The course is heavy on programming assignments and has a final group project. 

Lectures

Wednesday 3:30PM - 4:20PM (SWH 10081, Burnaby)

Friday 2:30 PM – 4:20 PM (K9500, Burnaby)

Zoom link

Teaching assistants

Hiren Naresh Bangani <hnb@sfu.ca>

Anmol Malhotra <ama302@sfu.ca>

Zheng Wu <zwa190@sfu.ca>

Please use Canvas Discussion Board for lecture/assignment/project related questions. They will be answered by TAs. Do not email your TAs or me directly unless there is something urgent. Discussions among students are welcome but will not be followed closely by TAs.

Office hours

Hiren Naresh Bangani: Tuesdays 5:00 - 7:00pm (Zoom link)

Anmol Malhotra: Mondays 1:00 - 3:00pm (Zoom link)

XD: Wednesdays 4:20 - 5:20pm (Zoom link)

Zheng Wu: Thursdays 9:30 - 11:30am (Zoom link)

What we'll teach you

The goal of this course is to teach students how to design, implement, test, and debug smartphone applications on android phones. Students will learn how to take their innovative ideas from conception to the android market through a series of rigorous hands-on programming assignments and group projects.

This is an introductory course aimed at undergraduate students (but graduate students are most welcome) who have programming experience. However, there is a significant amount of programming in this course requiring a commitment on the part of the student.

Topics covered: the android development environment including the Android Studio IDE; key programming paradigms; UI design including views, activities, and fragments; activity/fragment life cycle; Model-View-ViewModel (MVVM) architecture; data persistence including SQLite; content providers; threads and coroutines; data access object; phone sensors and activity recognition; location-based services (e.g., Google Maps); background services; broadcast receivers; and Firebase.

Android programming concepts are reinforced through a set of thematic programming exercises that introduce these topics and incrementally allow the student to build a complex application; that is, programming labs form a set of components that collectively implement a continuous sensing application. The resulting phone app allows user to log their exercises (e.g., walks, runs) and display them on Google maps.

A key part of this course is group projects where students will work in small teams for joint problem solving. This should be a fun, creative and group-oriented experience. You will need to be organized to do well in the allotted time.

This course is based on Kotlin programming.

Prerequisites

CMPT 225 with a minimum grade of C-.

Coursework and grading

The coursework is as follows: There are 6 assignments, and a group project. Write your code in Kotlin. We do not use JAVA in this class.

Checkout the this page for the design and coding advice for the assignments and project. For each assignment, you can download a sample apk to run app to see how it operates. You will need to implement the app by yourself. The sample apps are not perfect in handling edge conditions (e.g. losing data upon screen orientation change). You will need to take care of them. Marking rubric will be provided when marks are released.

50% - Thematic programming exercises

There are 5 programming assignments. These labs are designed to help students learn the android programming environment and key programming paradigms. Assignments are done individually. Each lab will receive the same percentage of the grade.

Labs are graded on completeness of the required features, the correctness of the functionality, and the robustness: note, if your lab runs on your phone but crashes on your grader’s phone, talk to your grader and you will be graded using your phone. 

You should download, inspect and run all code examples in the notes (.zip files) to fully understand concepts and patterns taught in class. However, you cannot under any circumstances "copy and paste'' these examples into your solutions for your submissions. You should use these coding examples as a learning tool but always code your own interpretation of these coding examples in your solutions if you choose to use the patterns; that is, look at the code and understand how it works but always code your own versions of these patterns if you use them in your solution. If you copy and paste any class code there will be a 15% penalty and you will have to recode and resubmit your lab.

The MyRuns document captures the complete app specification and lab assignment information. You should read through the design specification for the complete MyRuns app a couple of times before starting the lab sequence. For each lab we give you a running example of the solution called an APK. Your job is to functionally replicate each APK. Again, the sample apps are not perfect in handling edge conditions (e.g. losing data upon screen orientation change). You will need to take care of them.

10% - Standalone/non thematic programming exercise

In addition to building the MyRuns app over the term there is a standalone non-thematic program challenge on week 3:

Stress Meter -- a cool tool with navigation view UI for getting at the stress. (8%)

40% - Group projects

In the final project, students will develop their own app.

Projects are made up of a small (4-5 people) teams and require strong collaboration and a problem solving mindset. The goals of this activity are to help you develop the confidence, skills, and habits necessary to write real phone apps while part of a multi-person team.

Project page should include: the idea, pitch slides, team, who is doing what, show and tell milestones.

Note, an up-to-date project page will be more of a running blog on your project progress and graded for completeness. I should be able to go there and read where you are. Be creative.

There is a focus on working code and a demoable app. Rules of demo day. The professor should be able to download app and it should work off the shelf.

Each team member will get the same grade assuming all goes well. The grade will breakdown as follows:

3% Pitch

4% Show_and_tell_1 UI mockup, MVVM design, some functions.

4% Show_and_tell_2 improved UI and project components.

29% Final project and project presentation [demo, we do look at code quantity/quality, webpage]

Submission of programming assignments

Please include your first and last name when you name your package and app when starting a new Android Studio project. For example, you can name your MyRuns using FirstName_LastName_AssignmentName (e.g. Jun_Gong_MyRuns1). Similarly, your package can be something like jun_gong.example.com.

You need to submit your work through Canvas and you need to put your files (Android Studio project, AssignmentName.apk, README.txt if needed) into a folder and name your folder FirstName_LastName_AssignmentName (e.g. Matthew_Seegmiller_MyRuns1). Finally, you need to zip your folder and use the same name to name your zip file. Please leave a note in README.txt if you want to tell your grader that you are using your free 24-hour pass. Information should also show up in README.txt if your lab is built on top of the implementation of a class example. It is a violation of honor code if you fail to do so. 

Policy for late assignments

You should always aim to get your lab in on time.

Penalties: < 8 hours: 10%; < 24 hours: 20%; < 48 hours: 40%; more: no credit.
During the term, some of you may email me to ask for extensions for individual assignments. I understand that life is not easy and there are many different reasons (e.g., being sick) for you to be late on getting your assignments done in time. So I give you two free 24-hour passes without penalties. When you use a pass(es), put a note in your README.txt file and email the TA. Note that these are atomic units -- you can't divide them up, before you ask.

Something you need to be aware of is that since I have already given you the extensions, I will not respond to any email concerning your requests for more extensions. This means no more extensions will be given other than the two free passes that you already have so you should not use the passes unless it is absolutely necessary.

*No assignment will be accepted 3 days after the due days, including the use of free passes. 

It is not good to fall behind because it limits the time you can spend on the next lab which comes out as you finish the current one. Therefore, three final pieces of advice:

  Don't fall behind in this course.
  Don't fall behind in this course.
  Don't fall behind in this course.

Policy on Joint Work and the SFU Honor Code

No joint work is allowed except the project. You should complete all the assignments by yourself. Discussion is allowed but you are not allowed to share source code.

For the project, you will need to work jointly on writing code. But you cannot take code from anywhere (e.g., the web or any other source). It has to be the joint product of the team. One caveat: no sharing of code between teams. As above, teams can discuss code, show each other snippets on the white board, but not share source code. The project phase of the course is a friendly competition so there isn't a lot of incentive to share code.

We hate to state this since you all know it but it is necessary to be explicit here:

You would be amazed at how easy it is to tell when people work together on problem sets, particularly coding exercises. Think about the simple shell commands we run against your source code from labs and projects to compare your lab assignments and projects against every other assignment and project ever submitted since this course started - it takes less that a millisecond to run these checks - no effort on our behalf.

We use the moss tool from Stanford to run regular checks against all submitted code. To quote the website

"Moss (for a Measure Of Software Similarity) is an automatic system for determining the similarity of programs. To date, the main application of Moss has been in detecting plagiarism in programming classes. Since its development in 1994, Moss has been very effective in this role. The algorithm behind moss is a significant improvement over other cheating detection algorithms (at least, over those known to us)"

Similarly, we know how to use Google too. You should not under any circumstance look at or use code from students that have previously taken this course. The message is simple - please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at SFU are severe, starting with suspension and including expulsion. If you are unsure about anything, please ask.

We take the Honor Code very seriously, so please, if you are unclear on any matter regarding this policy, do not hesitate to see me in office hours, and we will be more than happy to answer your questions.

Coding style

Please write clean code using good coding styles. As the course moves on you will get dinged for poor coding styles. Checkout this single guideline for advice:

Android code style guidelines (1) and (2)

Also, checkout a summary of design and coding tips.

MyRuns project document

The MyRuns document captures the complete app specification and lab assignment information. Please read this a couple of times and refer back to it.