Orbital Project by SaturnV @ 2020 NUS
Video Demo:
Team Name: SaturnV Proposed Level of Achievement: Apollo 11
Lunaris is a nice-looking NUS LumiNUS iOS client written in Swift. It has File downloading & management features as well as a built-in task management system combined with the announcement & conferencing features.
Motivation
When students want to download newly added files from all modules. They have to check all modules they have taken one by one and click the “show all files not downloaded”. What’s more frustrating is that, when newly added files are big or too many, iPhone and iPad will have to wait for a long time before “selected-download” is added to the downloading queue. If one accidentally refreshes the web page before “selected-download” being added to the downloading queue, there are no more “newly added files”, and he or she has to manually search in the “file” tab and try to recall what is new. Also, although the current luminous system already highlights which quiz or assignment is due soon and what are the recent announcements made. There isn’t a task management system with functionalities like tagging and setting expected finishing time for students to prioritize certain tasks, add preparatory tasks that are not mentioned in the announcements, or simply just add one’s own tasks.
Aim We hope to create a better user experience of LumiNUS on iOS mobile devices (specifically, iPhone) with our application named “Lunaris” - nice-looking (hopefully sticking with the Apple SwiftUI design code), intuitive user interface, with a useful and easy-to-use download function and file managing capacity, as well as a task ranking and tagging system.
User Stories As a student who has many modules, I want to download all the newly added files efficiently.As a student who backs up files using multiple net disk systems, I want to be able to sync all the files with third party net disks.As a student who is used to task management, I want to be able to add existing announcements and deadlines as a side note of tasks and remind myself of tasks I need to do within the app.
Scope of Project Our Lunaris App offers an elegant way to download files and manage tasks on LumiNUS. The iOS app starts with an interface with 4 tabs - Modules, Announcements, Files and Profile. These functions (except Files) provide the basic functionality of the LumiNUS platform as the website does. A download function with file management system can download files from LumiNUS and allow users to do basic operations on the downloaded files. A task management system to allow the users to manage their LumiNUS tasks - order the priority of the tasks, mark them as done or remove the tasks. Features to be completed by the mid of June:
- A mobile LumiNUS application, providing necessary functions students need on phones.
- A “Downloaded” interface integrated with Apple’s “Files” app, which can show all the files downloaded from LumiNUS.
Features to be completed by the mid of July:
- A complete, nice-looking and intuitive user interface design of the app.
- A task system which allows users to order the tasks, mark tasks as done, and swipe to remove the tasks.
Tech Stack
- Swift & SwiftUI
- Core Data
Milestone 2 - Features implemented and Problems encountered
Features Implemented
Please watch the video for a full hand-on demo
Dashboard
Cards showing modules taken this semester with fantastic animationShow upcoming eventsChange Preference (Appearance, Language, etc)Quick access to todo listNice animation revealing the preference tab
Modules
List of module taken this semesterSmooth transition to show the detailed information of a specific moduledetailed page showing announcements, files, etc
Downloads
Shows all downloadable files from LumiNUSShows all downloading files, with a circle progress bar to indicate progressShows all finished downloading tasksA button to show everything in the Files app of iOS
Tasks
Default to be retrieved from LumiNUS Tasks section or Conferencing section.Allow users’ customisationadd new tasks or scheduled meetingsdelete existing tasks or scheduled meetings (maybe someone of the same group has submitted and no need for you to work on this anymore, or scheduled meetings that are not your time slot)modify tasks or scheduled meetingsBuilt with iOS native technologiesSwiftUICoreData, such that the app can maintain the effects of user's operations later
Problems encountered and further feathers to add
Since there are no working LumiNUS APIs for now, the default data of the app is simply placeholders, but the data flow has been implemented. In the same time, we have also learnt from the internet about how to request and fetch data from HTTP APIs, so we believe it will not take too much time for us to transit from the current version to a fully workable LumiNUS with working APIs.While implementing the todo list, we found that such a todo list integrated with LumiNUS is indeed productive for NUS students, and therefore our users may want to use that on their computer. If time is enough for us in the end, we still consider moving this todo list to some backend database and implement a web application for this functionality.Currently, due to the limited time, we are not able to integrate cloud services uploading in this app, so we add a button to open a nested version of the system's Files app. This button will most likely be kept in the final version, but we would like to make it possible for users to automatically sync with their cloud services right in the app. However, currently we have no idea how to make that happen.
Milestone 3 Goals:
- User testing
- API
- Cloud uploading
- Item modification
- UI changes
Milestone 3 - New Features implemented, bugs squashed and user testing
New Features ImplementedPlease watch the video for a full hand-on demo
video link: https://drive.google.com/file/d/117pu0us7uZf91ahyFrj7yLDdKCTZATnA/view?usp=sharing
Dashboard
-
Added a refresh button to fetch new dataAdded notification feature for conferences.
-
Users can open the conference link in the notification center3.
-
Added “+” button to quickly add an announcement to the task manager.
-
Added clickable title (Announcements, Conferences) which will direct to all Announcements (Conferences) listMake every card clickable (Click conference card to open conference link, click announcement to view announcement detail)
Modules
- Added pull to refresh feature
- Added similar design to announcements and conferences seen in Dashboard
- Added Searchbar in every list
- Added files (downloadable), whose icons will change depending on the extension of the file
Downloads
-
Refined the UI design of the Downloads tab
-
Added progress bar for user to view the download progress
-
Added “view all in files app” button which will open files app
-
In files app, users can continue other operations such as preview, open in another app, and upload to different cloud services.
Tasks
1. Refine the UI Design of task managerAdded search bar to search for tasks
Bugs Squashed
Bugs & Solution
- shadow of the module card displayed abnormally in dark mode --> remove the shadow
- unnecessary abbreviation of list title. e.g. “MA1521 Announcements” displayed as “MA1521...” --> add a line breaker between module code and “Announcement” (“Conferences”) since the intended way is to display the title in two lines
- “unwrapping an optional value and find a nil” if a module without announcements or conferences is published --> properly initialize a module during update process
- if the user complete a task in the notification center, all tasks will be completed --> This error occurs because we have wrongly handled the response (add “notification observer” in every task ). The correct way to do this is to complete task in the AppDelegate immediately when the response comes back
- the search bar will “bounce around” when user click the search bar --> This bug is related to the emergence of the “cancel” button. It adds height to the search bar when it appears. We chose to use a different way to hide(show) it (by using opacity)
- When the user check a task, (s)he will still receive a notification of the already completed task --> Add a condition to check whether the task is completed before adding a notification to the queue. Also added clearPendingNotification to clear pending notification when the task’s due date changes
User testing and problems encountered We have used two methods to do user testing: 1. self evaluation 2. Usability testing with potential users with high-fidelity artefacts (working prototype)
Self evaluation
We are constantly evaluating whether the UI is intuitive, whether certain functions are necessary, etc. During the process of self evaluation, we have fixed bugs listed above and made an important decision to not incorporate the uploading feature. We find uploading inside the app is unnecessarily cumbersome and the result is not ideal. Hence we chose to save files in the “files app” where users can upload to their desired services and do other operations on files downloaded. Through self evaluation, we were able to fix many issues before we gave the prototype to our friends for the second phase of user testing
Usability testing with potential users with high-fidelity artefacts (working prototype)
We have chosen 5 of our friends to do the user testing. Honestly, without their help we might miss some potential bugs. They have also given many useful suggestions on UI. However due to limited time, we only managed to make changes based on some of their advice. The unfixed minor problems are listed below
- progress bar will display wrongly if the user attempts to download many files at once. (note: our downloader is single-threaded. When users try to download another file when the previous file has not completed, the progress bar of the previous file will stop. However, we have tested and found out that all files will be downloaded once the download of the last added file is complete. Hence it will only affect the appearance, but not actual usage of the app )
- while editing the title of a new task, the keyboard will disappear after a letter is typed.
- users suggest we add a feature to open files in the app. (note: we want to implement features to preview the file inside the app. However, Apple says that the api to open files inside “Files” is obsolete. Hence, we advise users to open “Files” app for further operations)
Thanks to our friends and their genuine feedback, we have realized many things that we can improve.