Team Project (30 pts)
Projects are the final part of the course. You will form teams, come up with your own idea for an Android* application, implement it and finally present your solution & write a short report on it.
*Other platforms are also welcome, if you agree this with the course instructor beforehand
Projects team size: 3-4 persons.
Requirements
The topic is up for you to design. However, we require you to compose your idea based on certain 'building blocks'. They can be picked based on suitability to your project idea. These building blocks have to be integrated and displayed in a cohesive story. However, certain implicit requirements also apply to the projects, regardless of which blocks you choose (see them below).
In the presentation, you have to play through this story while showing all the features of your system and how they provide value to your chosen domain(s).
Some feature blocks include topics not covered in the course so far, giving you a chance to learn something completely new if you wish.
Implicit requirements
Below is required regardless of which blocks you choose:
- The application does not unexpectedly crash, takes care of lifecycle & permissions management
- Rotating the screen, hitting home/return button in the app should not cause crashes.
- The app can take care of requesting necessary permissions and will not crash if they are missing.
- Use resource files to manage constants used in your app logic & GUI:
- Text values - strings.xml
- Make use of string formatting at least once!
- Colours, Styles - colors.xml and styles.xml
- Dimensions used in UI layout files: dimens.xml
- Text values - strings.xml
- The application uses Threading, Coroutines or other background worker mechanisms to delegate some work off the UI thread.
- The result of the background work should still be notified in the UI.
Functional Blocks
Choose at least 3 functional blocks per your preference
- Persistent Storage - the app provides persistent storage, choose either:
- Local, on-device (Room DB)
- Cloud storage (Firestore DB)
- Integrating with Web Services or Cloud Services either:
- Integrate some REST API to your app
- You may also write your own HTTP API / server code and host it somewhere, e.g. Heroku
- Use some cloud service, such as Firebase Cloud Messaging
- Integrate some REST API to your app
- Location-awareness or Sensors:
- Make use of some of the on-device sensors: fingerprint reader, accelerometer, GPS, etc
- Make use of the Map view
- Uses Services
- The app can run a background service
- A notification should always be displayed when the service is running
- The user should be able to open the application from the notification and have a way of manually stopping the service.
- The app can run a background service
- New API: make use of some API not covered in the course so far
- Choose from:
- WorkManager API
- Calendar Content Provider
- Camera API
- MediaPlayer
- Bluetooth
- Google authentication
- App Widget
- Something else: consult course instructors if your proposal is OK.
Cohesiveness of the functionality
Note: If you implement a block, but it does not serve a purpose to the general topic/story of the app (e.g. randomly displaying sensor values in a contact manager app), you will lose points for Complexity and Cohesiveness (see grading info), even though you implemented that block. Instead, you should make sure the minimum 3 blocks form a meaningful whole.
For example, using sensor data + a contact manager usually doesn't make sense. But if your scenario involves functionality where sensors are used in a gesture recognition app that has a feature of sharing recognized gesture pattern with friends (contacts) - this makes more sense!
Other remarks.
Feel free to bring in additional assumptions or solutions to complement the above, but make sure to document them in your report.