Privacy Browser Android 3.17 was released on 12 February 2024. It adds Android’s download manager as an available download provider.
Some historical context is helpful for understanding this change. When Privacy Browser Android was first released it used Android’s download manager for handing file downloads. This was nice because it is built into Android. But it is also sometimes buggy. Which resulted in the addition of an option to have downloads handled by external apps in the 2.14 release. However, both of these options have limitations. Android’s download manager doesn’t respect Privacy Browser’s proxy settings, meaning that users who have a proxy set at the app level and use Android’s download manager bypass the proxy to download files, which, depending on the network topology, might fail or might result in a privacy compromise. In addition, it can’t handle data: URLs.
Using an external app is even more limited. In addition to the things that Android’s download manager can’t do, there is also no standard way to pass cookies to an external app, meaning that downloads from websites that require you to be logged in won’t work.
Because of this, in the 3.4 release I replaced both Android’s download manager and the download with external app option with an internal download provider. There are a lot of good things to like about this internal download provider. It overcomes all of the shortcomings of Android’s download manager and downloading with an external app listed above. But it is also fairly basic (at least currently). Although it can be used to download more than one file at a time, only the most recently initiated download will be displayed on the screen. It doesn’t have any mechanism for pausing or restarting downloads. And, somewhat surprising to me, the updating of the download status in the snackbar can cause significant delays, so much so that it slows down the actual download. This isn’t really noticeable on a small download or on a slower internet connection, but if you download a large file on a fast connection, it can take twice as long using Privacy Browser’s download provider compared to Android’s download manager, all because Android’s snackbar update implementation is exceedingly slow, even though I have spent some effort to throttle it to be more performant.
Because of this, in the 3.8 release I reimplemented the option to use an external download manager. And, with this release, we have come full circle and I am also adding Android’s download manager back as well. Because of the way Android preferences work, with the switch to a list preference the previous “use external app” preference selection does not copy over. For users who want to use an external app, they will need to select that again from the new list.
The text in the preference summary attempts to explain the differences in a concise manner.
The wasted space that Android automatically added between the navigation drawer toggle and URL text edit has been removed.
There is now an entry in the navigation drawer to scroll to the bottom/top of a page.
The user can now choose to display under camera cutouts in full-screen browsing mode. This is nice because it recaptures some of the space that those annoying camera cutouts have stolen. But it does have the negative drawback of also drawing under all other types of insets, including the keyboard, which means that sometimes important parts of the app can be covered by the keyboard in full-screen browsing mode if this option is enabled.
A bug was fixed that sometimes caused a new tab to be created without a corresponding page, leading to a crash. A similar bug was fixed that sometimes caused the wrong page to be set as active after creating a new tab. Fixing these bugs, particularly the first one, was the motivation for the timing of this release. Initially I had planned to implement a few other things first, but I decided to hold those off until 3.18 in order to get the fixes for these bugs into a production release.
A bug was fixed that caused website favorite icons to not update when navigating the history.
The default for scrolling the app bar was set to false for new installs. This is one of the changes where I like to get feedback on Mastodon first to make sure there isn’t something I haven’t anticipated about how people use the app.
The add domain dialog is no longer pre-populated with the current domain, because creating domain settings for the current domain is almost always accomplished through the Add Domain Settings option entry, meaning that when the user is creating domain settings using the add domain dialog it is usually because they want to create domain settings for something other than the current domain.
The URL progress bar has been moved to the bottom of the WebView when the bottom app bar is used. This is more consistent and places it next to the app bar.
The file name now defaults to the website title instead of the domain name when saving an MHT archive.
The progress bar was shrunk from 3dp to 2dp. I have always though 2dp looked better, but there was a bug that caused this to be invisible on API <= 22. However, as the current minimum API is now 24, that is no longer an issue.
I expect that the next release will implement a more sophisticated cookie management. It will also bump the minimum API to 26 (Android 8.0) to match Google’s WebView security support.