
    to check if the build on f-droid worked: https://f-droid.org/wiki/page/Main_Page
    https://f-droid.org/wiki/page/Category:Apps_with_failing_builds
    
    
    Release checklist:
    - VersionName and VersionCode changed?
    - fastlane descriptions updated?
    - release tested?
    - removed debug output?
    - changelog for the version code written?
    
    
    TODO for android 12:
        [ ] https://developer.android.com/about/versions/12/web-intent-resolution#request-user-associate-app-with-domain
           upon login, request for the user to associate the app with the host used to log in
        [ ] for the meetings activity, set the PiP-Params to setSeamlessResizeEnabled(true);
        [ ] opt-out of stretching for overscroll?
        [ ] https://developer.android.com/about/versions/12/features/splash-screen
            customize the splash screen?
        [ ] app widget updates: https://developer.android.com/about/versions/12/features/widgets
        
    
    
    Roadmap:
        1.0.0:
            [x] fix the cache miss problem when logging in in the webview and using the back button, probably by excluding it from the history
            [x] try to get a new session cookie before running the NotificationService
                [x] also get a new cookie when the plugin pages return nothing/error, as this is the most likely cause, and try again once
            [x] deep links improvements
                [x] support for more link types
                    [x] courseware
                    [x] opencast
                    [x] meetings
                    [x] forum
                [x] for messages, load the message if it isn't already, and view it
                [x] link to the course info and member screens
                [x] open unknown link patterns in the WebView for the server
            [x] delete data which is not in a server response, but still in the database
            [x] better updating of messages, so not every message is downloaded on update, only the ones until a saved one is found
                [x] don't care about deleting messages deleted from the server, the user can just also delete them locally
                [x] when a message is deleted, don't sync with the server, just send a delete and delete it from the database
                [x] the user can still request a full sync via a button. The full sync deletes all messages, so make a confirmation dialog.
            [x] add the course members dialog
            [x] add the user info dialog
                [x] open the user info dialog when you click on a username in a message or in the members dialog
            [x] messages
                [x] add support for viewing the outbox
                [x] downloading message attachments
            [x] Document provider: only load an image preview if the file is < 5mb
            [x] bump version
            [x] update help text
            [x] new & more screenshots, with UI improvements
            [x] update description
            [x] write changelog
            [ ] update on play store
        1.1.0:
            [ ] fix Courseware for Stud.IP 5.0
            [ ] add the option to search for new news and forum entries when refreshing courses and color the icon red, to get the same feature as
                the web version
                [ ] add the option for the notification service to do this and emit extra notifications, even if the notification setting is turned off
            [ ] deep links improvements
                [ ] support for more link types
                    [ ] planner
            [ ] support for the planner
            [ ] app widgets
                [ ] planner
                    [ ] updates automatically when the planner is updated in the app
            [ ] add in-memory caching for up to 10 seconds for results from the document provider
            [ ] support for multiple accounts
                [ ] document provider: filenames have to include the server name and user id to be unique
                [ ] DB and API-prefs also have to include the server name and user id as the name
                [ ] when logging out, only the current account data should be deleted
                [ ] you should be able to switch accounts in the settings menu
                    [ ] changing accounts has to restart the app, in case there are multiple tasks open, which would use the old db and api
            [ ] OAuth
                [ ] add the option for the user to provide a OAuth consumer key and consumer secret, so private installations can enable OAuth
                    for app users without having to integrate the OAuth data into the sourcecode.
            [ ] blubber
                [ ] support for personal chats via blubber
                [ ] option to check for blubber messages more frequently than normal notifications, and to only enable this when connected to wifi
                    [ ] frequency up to 30 seconds
                    [ ] separate frequency for mobile data
                [ ] support for course blubbers
                [ ] if you invite people to a personal blubber, does it become a group chat? Yes
                [ ] whatsapp-like list for chats, try to emulate a messenger app with blubber
                [ ] intent filter to send a blubber to someone
                [ ] idea: encrypted blubber: use end-to-end-encryption with a pre-shared secret, Base64-encode the cypthertext and urlencode it
                    [ ] decryption will only work in the app
                    [ ] https://stackoverflow.com/questions/21081713/diffie-hellman-key-exchange-in-java
                        Use Diffie-Hellman to generate a shared key
            [ ] bump version
            [ ] update help text
            [ ] update description
            [ ] write changelog
            [ ] update on play store
        1.2.0:
            [ ] add support for JSONAPI (probably requires abstracting away the api routes a bit more)
                https://stackoverflow.com/questions/35502079/custom-converter-for-retrofit-2
                [ ] JSONAPI is enabled on demo.studip.de, use that to test the implementation
                [ ] JSONAPI has a route to get all files/folders for a course, use that for the search function
                [ ] database and everything should still use the data classes, let the JSONAPI format be translated to that
                [ ] JSONAPI to POJO library?
                [ ] use JSONAPI if possible
                [ ] for features only available for JSONAPI, fail gracefully and inform the user, or hide the feature to begin with, or emulate the feature
            [ ] bump version
            [ ] update help text
            [ ] update description
            [ ] write changelog
            [ ] update on play store
        1.3.0:
            [ ] option to input the file size limit of the Stud.IP system, to let the documents provider automatically break up and recombine
                files above the limit, to support arbitrarily large files
            [ ] plugins:
                [ ] vips
                [ ] etherpad
            [ ] bump version
            [ ] update help text
            [ ] update description
            [ ] write changelog
            [ ] update on play store
            
        
        
        
        [ ] make more specific rules for proguard, so unused code can be removed
        
        
        
        
        
        
    reduce size:
    https://developer.android.com/topic/performance/reduce-apk-size
    https://medium.com/@kevalpatel2106/how-you-can-decrease-application-size-by-60-in-only-5-minutes-47eff3e7874e
    
    
    
TODO: replace ListViews with RecyclerViews: LayoutManager: LinearLayoutManager, Scrollbar: Vertical
    
    
    
    
TODO

    maybe use Html.fromHtml for messages?
    
    
    
    
    
TODO: open issue with predefined content: https://docs.github.com/en/github/managing-your-work-on-github/about-automation-for-issues-and-pull-requests-with-query-parameters
    
    
    It seems like there is a bug that prevents you from posting on the Forum via the API. Use the dispatch route instead?
    
    
    opencast plugin: https://github.com/elan-ev/studip-opencast-plugin
    License: GPLv2 or later
    
    
    
   
    
    
TODO: use ACTION_CREATE_DOCUMENT do eliminate the storage permission altogether?
    
    
Document provider:
    https://developer.android.com/guide/topics/providers/create-document-provider
    https://medium.com/androiddevelopers/building-a-documentsprovider-f7f2fb38e86a
    Add a setting to load image previews from the provider always/only wifi/never
    
    
TODO: intent filter for sending a message to someone


    
    For the notification service:
    Notifications work over this api with the session cookie: /dispatch.php/jsupdater/get
    caution: just returns an empty list if the session isn't valid
    test whether it works with basic auth: no, only works with a session cookie.
    When using basic auth: add a method to API to refresh the session cookie.
    
    For the mails: presumably all javascript-used routes only work with a session cookie.
    Use the same technique for the route to get users
    
    
    
    
    https://developer.android.com/training/data-storage/room
    https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1#5e38
    https://developer.android.com/jetpack/guide
    
    
    use paging for large lists:
    https://developer.android.com/topic/libraries/architecture/paging.html
    
    messages: avoid reloading ALL messages, load one at a time and stop when the first cached message is encountered
    
    after logging in, check for available API-routes and tell the user if features aren't available because the provider disabled the API route
    add a settings button to re-perform the check, so the user doesn't have to log out if an API-route is enabled
    
    
    
    
TODO: JSONAPI: https://jsonapi.org/format
    getting only specific fields to save mobile data: https://jsonapi.org/format/#fetching-sparse-fieldsets
    
    

battery saving:
https://developer.android.com/training/efficient-downloads/regular_updates
https://developer.android.com/topic/performance/power




Add the ability to transfer app data to another phone via bluetooth.
A one-time-password is generated and the user has to enter it on the app of the other phone.
A key is derived from this password and all data encrypted with it.
https://developer.android.com/guide/topics/connectivity/bluetooth


IMPORTANT: If LiveData changes while an activity is in the stopped state and then returns to resumed, does it get the update?
https://developer.android.com/topic/libraries/architecture/livedata
Always up to date data
    If a lifecycle becomes inactive, it receives the latest data upon becoming active again.

https://developer.android.com/jetpack/guide#fetching_data
https://developer.android.com/topic/libraries/architecture/viewmodel
https://developer.android.com/reference/androidx/lifecycle/ViewModel
https://developer.android.com/topic/libraries/architecture/livedata


add app widgets for: messages, forums, course news, global news, calendar
https://developer.android.com/guide/topics/appwidgets
https://developer.android.com/guide/topics/appwidgets#preview
https://developer.android.com/guide/topics/appwidgets#fresh
https://developer.android.com/guide/topics/graphics/drawables#nine-patch


    
    
    

    general:
        To make a new icon from a svg, convert it to a png with GIMP and then use it in android studio
    
    plugins:
        plugins don't seem to have a REST api defined, probably because there wasn't an app for so long
        
        make issues on github for the plugins to define REST-APIs:
        https://github.com/virtUOS/courseware/issues
        https://github.com/virtUOS/studip-meeting/issues
        https://github.com/elan-ev/studip-opencast-plugin/issues
        
            
        vips:
            url: /plugins.php/vipsplugin/sheets?cid=
            
        
        
    
    
    
    
    