The first retrieval of notice board entries after lookup will take a while because lecturer images are loaded from hm.edu and thus it takes about 5 - 10 seconds.
Don't do that in the notice board view but rather show a dialog or separate screen preparing the first app start and loading lecturer images. Otherwise the user will think the notice board entry lookup is slow, which we dont want since the app should make a fast impression.
We need a REST API in order to use firebase cloud notifications and target specific user groups.
Thus setup the server (VM) with a Java application server + database server.
Develop application which realizes the REST API.
Lastly setup continuous deployment of the REST API application to the application server via a GitHub branch which builds the application on Travis and deploys it to the application server.
(Optionally) Use Let's Encrypt to encrypt http connection of the server to the app.
In the old app we had a periodic pull for notice board entries and other resource data in order to check whether it changed.
People like me do not want to check the app and manually refresh the notice board everyday but rather be notified by the app about new notice board entries.
We will need a general way to support periodic background tasks. I did some research:
Currently Flutter does not directly support periodic background tasks but there are already plans to implement it in the future (See here). There is a plugin available which will do the job for android and iOS just fine: https://pub.dartlang.org/packages/background_fetch
The job is to create an abstraction around the used background_fetch plugin in order to replace it with the official Flutter implementation once it is ready. Create an example for fetching notice board entries every half an hour. Document the usage in the Wiki for developers to use it with ease.
Summing up:
Implement background_fetch in an own periodic background task abstraction
Create notice board entry refresh every 30 minutes
Document usage in the Wiki
Notification in case the notice board received new entries
I already added a view in the navigation view of the app for the privacy policy statement which we'll definitely need.
@LokiNightray@thomai You mentioned that the university has a pattern which we must use (in case the app is distributed by us and not over me), Can we get that?
Some services (public notice board, appointments, etc.) can be easily be made visible for non-logged-in users. People without ZPA login might want to use the public app services as well.
Tasks to do for completion:
Make login skippable (Smaller non-raised button below the login button)
Implement static method isLoggedIn() in another utility class ZPA which is checking the CredentialStorage for stored credentials. We can then call ZPA.isLoggedIn() from anywhere in the app.
Hide non-viewable items in the navigation(s) when not logged in
Implement public notice board for non-logged in users
We use the flutter_markdown package to display the notice board entries.
As you can see here there is already a onTapLink callback in the markdown widget that we can use.
It should open the systems default browser when tapping on a link.
The old app had an android widget which displayed the week plan events for the current day. To ensure that people won't miss it after the release we should provide it.
It is quiet common for students to search for a professor to write them an e-mail or seek more information about them (website, etc.). Normally you would end up here.
To make it more comfortable for students to find them and write them e-mails, it would be nice if there were a browser view within the app where you can easily search for profs.
It would be cool to provide continuous delivery to the play store via Travis builds.
This means that releases will automatically be delivered via the Google Play Store API to the Google Play Store on push to a specific branch (like alpha for alpha releases, beta for beta releases and master for production releases).
Currently we only have an icon "timelapse" from material icons in front of each notice board entries validity range.
It would be cool to replace it with a dynamic pie diagram showing the range.
Once #24 is done there will be german and english available as languages. Nevertheless all the applications content like notice board entries, weekplan entries are written in german.
Google provides the Google Translator API which can even translate HTML (for the notice board entry content which is HTML (at least in case of the HTML crawler provider)).
The idea is to provide on-the-fly translations in the correct locale once the locale differs from the original content (german).
When you look into the appointments you'll notice that the appointment start date is always the appointment end date, thus there is only shown one date.
A static notification that shows the next lecture coming up would be helpful (optionally hide the notification until the next day, if the last lecture has passed etc.)
The notice board (Schwarzes Brett) has already been implemented and gets the data from the ZPA. If we want to provide news/events other than these mentioned in the notice board we would need another view.
Maybe use the same view as the notice board and just mark them in a different way (color the title, add a badge in different color, etc.)
Every once in a while I'd like to look at how my schedule actually is looking like, just like I can when using the ZPA. The week plan is good but does not give a good overview over your schedule.
It should be an actual schedule where you can overlook the whole week just like in ZPA.
Currently we only have the navigation bar and the floating action button for navigation. We will need the floating action button for example for creating custom events in the weekview. Thus we need another way to navigate. Create an additional view and navigation item in the bottom navigation bar ("More...") which will contain additional menu items.
When using the week plan it automatically scrolls to the monday of the current week. It would be better if we could scroll to the current day of the current week and show the next week on, e.g. Sunday or Saturday