Assignment 2 - Android Application
Important Information
This assignment is due on Sunday 28 April 23:55 (Week 8).
This is an individual assignment.
This assignment is worth 20% of your final grade.
This assignment addresses ILOs 1, 2 and 3.
Marking Rubric
Assignment 2,3,4 2024
Assignment 2,3,4 2024.docx (docx, 41.8KB) (these are the same, but this might be easier to read)
Background
In assignment 1, your task was to design, prototype, and evaluate a mobile application for the app described in the Assignment Theme. Your task for this assignment 2 is to now implement an Android application loosely based upon that prototype which provides the required functionality from the Assignment Theme.
The goal of this assignment is to assess your ability to implement Android Applications, and to demonstrate your understanding of the fundamentals of mobile device programming when applied to a practical context.
Specification
You must create a native Android application (i.e. you cannot use Flutter or other Cross-Platform tools for this assignment). Your native application must be written in Kotlin.
Aside from checking for functionality, your program will be assessed on its robustness (i.e. does the application crash), usability, and aesthetics. You will not be assessed on your coding style, commenting, or indentation, however given the scale of this application, you are advised to use good programming practice to assist in development.
UPDATE: What is "Robustness"?
When marking this assignment, we will be checking for bugs by trying to break your application. Common things we will do are:
- Try and enter words/letters into a number text box
- Try various unexpected routes throughout your app
You will only be marked down for very obvious bugs. We won't be trying very crazy edge-cases like seeing how the app works without internet connectivity for example.
Clarification from Assignment 1
The following points clarify and add on to the Assignment Theme.
You do not need to implement any of the following functionality:
- Sign-in/register/multiple users
- Videos
- Payments/microtransations
Even if your assignment 1 prototype had these features you do not need to implement these things. Similarly, if your Assignment 1 prototype is missing some of the features specified here and in the Assignment Theme, you should still include the features in this assignment.
There are no marks for how well your assignment matches your Assignment 1 prototype.
Data Persistence
Data entered by the user should persist between runs of the application. You must use Firebase Firestore as your data persistence method (i.e. you cannot use SQLite or SharedPreferences as your primary persistence method).
Because your app will be connecting to the database on the Firebase servers, it means that the data you see in your app will be the same data that your marker can see when they mark your application. As a result:
- It is okay for your application to already have data in it when it is marked
- The data in the database when you submit it should be sensible (not things like “asdf” “blah” etc), no swears, but funny things are allowed to make the marking process more fun
- You should check that your application still works when there is nothing in the database (i.e. it should not crash, and should function properly if there are no attempts or button presses).
For a top-level assignment, pictures associated with attempts will persist in the database. However the mark for this is in the CRA is associated with the “Camera/Photo” item, not the “Data Persistence” item (i.e. you can still get an HD on “Data Persistence” if your pictures don’t save).
Devices / Screen Size
In mobile development, a big issue is that of making sure our applications look good and function well on the wide range of devices that are available (with varying screen size, aspect ratio, DPI, etc). We use tools like ConstraintLayouts and detection of screen size (not covered in this unit) to provide alternate layouts for different devices.
For the purposes of ensuring this assignment isn't too difficult (within the time frame provided), you are only required to ensure your application looks good on one given device (/emulator) of your choice.
Similarly, you may choose design your application to only work with one given screen orientation (i.e. portrait or landscape).
To assist with marking, please ensure you indicate either in your documentation or on MyLO submission notes what device and orientation you have tested your layout on, so that your marker may use the same one.
Use of Tutorial Code and Outside Code
You are more than welcome to use the Week 5 tutorial base code or completed Week 5 tutorial work as a base of your assignment—in fact this is encouraged. You do not need to reference this in your assignment.
You are expressly prohibited from using any other code online as a template for this assignment. Small snippets of code (such as stackoverflow answers and definitely code from the Android documentation) may be used with code comments showing the URL of where the code came from.
Third-party libraries (for example, for things like date-pickers, data persistence, user interface elements, drag/drop, and camera/sharing, etc.) must not be used.
While the tutorials and lectures in this unit will have shown you how to build a simple application with navigation, listing data, updating data from a Firestore database, sharing and camera functionality, it is expected that you may come across problems you will need to solve yourself by researching documentation or guides online. If you do so, you need to include this information in your documentation (see below).
It is expected that before asking your tutor or the lecturer for help, that you have already done some basic research on your problem or error message. After that, we are more than happy to provide as much help as possible (it’s what we’re here for!)
Exception: Use of Glide and Firebase Cloud Storage for HD-level Camera/photo data persistence
Storage of images in a Firebase database is a slightly complex topic given the 1MB limit of Firebase documents. You could just resize your image to be quite small, and store the base64 encode of the image in a standard Firebase field, or you might opt to use Firebase Cloud Storage, documented here: https://firebase.google.com/docs/storage/android/download-files.
One approach in that documentation talks about using a third-party plugin called Glide (although the bytes[] alternative doesn't need this). You may use this plugin ONLY for the data persistence of images component of the assignment.
Use of ChatGPT and GitHub Copilot
You are permitted to use the generated outputs of ChatGPT and GitHub Copilot for this assignment. These tools (and their future iterations) are likely to be part of the workflows programmers will use in the future, so it makes sense that you practice using them. Some notes:
- Whenever you use the output of ChatGPT or Copilot in your code, you must reference it using a code comment, and in the references list document that you submit for your assignment.
- To reference your use of ChatGPT, you should "share" the conversation in which you obtained the code/guidance.
- You cannot use ChatGPT or Copilot to produce the majority of your code.
- When using the output of ChatGPT and Copilot, always be careful of any mistakes or bugs that may be present in the code. These tools can produce output quickly, but it is not always mistake-free.
Note this is the policy of this unit, me allowing to use ChatGPT here is not precedent for your to use it in your other units.
Assignment Submission
The following files must be submitted via MyLO before the due date:
- One zip file, containing the project files.
- You should create this ZIP file using the File -> Export -> Export to Zip option. Submit the ZIP file which is created.
- A PDF file containing (this file is not marked, but if it is not present, or the contents are wrong, you will lose 5% of your mark for this assignment) :
- Which device/emulator type you would like the marker to test with
- A list of references used in your assignment including:
- any tutorials you followed either whole or in part
- any code snippets from online forums like StackOverflow
- where you used ChatGPT or Copilot
- this should be both a shared link to the conversation, and a brief description of what questions you asked ChatGPT
- or a direct statement that you did not use ChatGPT or Copilot for your assignment
- A list of the Activities your app has, and a brief description of how these Activities interrelate