UI/UX proposal for background downloading
Overview
This is the UI portion of #103 (closed). I find it helpful to mockup a UI for such a change to better understand what the requirements of the actual implementation will be. Feel free to provide critical (or positive!) feedback. In the future, I'll also create another issue for the implementation detail of #103 (closed) (i.e. with specifics of the classes, process flow involved, to get some feedback before going ahead with the implementation).
Current Problems
If you navigate to an app then click "Install", it will begin downloading. Once you press the back button, the downloading is effectively cancelled. Thus, the user must stay looking at an apps page in order to download it.
Solution
F-Droid will queue all downloads to run in the background. This background process will keep track of one or more downloads, so that when a user navigates to an app again, it can look up its download progress to re-show it.
Technical UI/UX Details
When a process is run in the background, the Android system dictates that it must have a sticky notification. Given this, it may as well be as helpful as possible, thus the mockups shown.
Mockups
Notifications
This first screenshot shows:
- The name of the app
- The fact it is downloading
- An icon indicating it is related to F-Droid (and downloading - is this overboard?)
- Status of the download
- Estimated time remaining
- Button to cancel download
- Button to view the app in F-Droid (which will also show its download status, but also the details of that app).
This second screenshot shows:
- The name of the app
- The download is complete
- A prompt for the user to know how to proceed with installation
Notes about these notifications:
- I presume the "Downloading" notification cannot be swiped away, because it is tied to the background process.
- I presume the "Ready to install" notification should be able to be swiped away. Would this be the user indicating that:
- They don't want to install now, but would like to when they go back to F-Droid?
- They never want to install this app, and F-Droid should discard the download?
F-Droid App
Note: It is likely that any first implementation will only use notifications. Once that is implemented, then we can consider if this is a desirable addition or not.
The best and least intrusive place I could think to show the user all downloading apps is in the "Installed" tab. However, I don't like my "Installed (1 + 2)" label on the tab, but didn't know how to indicate that some were also downloading.
In the future, F-Droid will likely be moving to a navigation drawer type interface, or perhaps something even more different. As such, it may become more obvious at that point where is an appropriate place to keep visual track of all current background downloads.
Considerations for the privileged extension
This does not deal explicitly with the privileged installer. That will have a more user friendly UX, in that once a user accepts the permissions of an .apk, then it can download and stall completely in the background.
However, the notifications of an app downloading and the view in the F-Droid app showing feedback about downloading should be the same. The only difference I can forsee is the lack of "Touch to install" in the notification (that notification will disappear when downloading is complete, or it will change to "App #1 (closed) installed"). Additionally, there will not be an "Install" button in the main view of the app, but rather as the app got installed automatically, it will likely just show like every other installed app.