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 ....
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.
Wednesday 3:30PM - 4:20PM (SWH 10081, Burnaby)
Friday 2:30 PM – 4:20 PM (K9500, Burnaby)
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.
CMPT 225 with a minimum grade of C-.
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]
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.
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.*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.
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.
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.
The MyRuns document captures the complete app specification and lab assignment information. Please read this a couple of times and refer back to it.