Make closing of `Downloader`s more concise.
*NOTE: This is only a WIP branch in so far as I haven't tested it, as it was done on the train before my holiday. The code is final though, so if people are happy it works, please merge.*
The base `Downloader` class now wraps the `InputStream` returned by
any child classes, in order to notify the child class when that stream
is closed. This prevents each child class having to figure out a way
to be notified of this.
This helps keep the API concise, because close handling is dealt with
without the need to add any public methods to the `Downloader` class
hierarchy.
Also removed some dead code which was unused.
See merge request !139
Ensure the "no apps to display" doesn't overlap with the category spinner.
There is no layout .xml file for the updated/installed list,
but there is for the available apps list. As a result, the `TextView` containing
the empty list message is added dynamically. With the recent improvements to
the category spinner, a `RelativeLayout` was used instead of a `ListView`. To
remedy this, the layout has been augmented to ensure the dynamically added
`TextView` still displays correctly.
*Before:*

*After:*

See merge request !162
There is no layout .xml file for the updated/installed list,
but there is for the available apps list. As a result, the `TextView` containing
the empty list message is added dynamically. With the recent improvements to
the category spinner, a `RelativeLayout` was used instead of a `ListView`. To
remedy this, the layout has been augmented to ensure the dynamically added
`TextView` still displays correctly.
Came across this whibluetooth swap.
I think it is reasonable to guard against null activities here, because
we are likely not releasing observers correctly, and thus the observer
may receieve a notification when the activity is not attached.
The base `Downloader` class now wraps the `InputStream` returned by
any child classes, in order to notify the child class when that stream
is closed. This prevents each child class having to figure out a way
to be notified of this.
Also removed some dead code which was unused.
Set category filter height to 48dp
This improves usability of the category spinner. Divider is now behind
it. This makes the layout visually more compact while keeping actual
touch target 48dp. See
http://www.google.com/design/spec/layout/metrics-keylines.html#metrics-keylines-touch-target-size
Before and after:


See merge request !161
New icon for Privileged Extension
Align Privileged Extension icon with current F-Droid icon. The # sign is associated with privileges because it's usually used by root shell. Lego blocks that can be plugged into each other are also known very well around the world.
"F-Droid Privileged Extension icon" by @relan is licensed under CC-BY-SA 3.0 or GPLv3+.
Smaller size:

Larger size:

Raster images are optimized using `optipng -o7 -zm1-9`.
See merge request !155
Make category filter look Material
Get rid of Gingerbred legacy.
Before and after (note the glitch below the spinner):


See merge request !159
Use darker primary colors for the Dark theme
Primary colors of the Light theme are too bright for the Dark theme. The difference should be especially noticeable on OLED screens.
Before and after:


See merge request !160
Translators:
ageru French
agilob Polish
Ajeje Brazorf Sardinian
Dario Tordoni Italian
Laura Arjona Reina Spanish
Ldm Public French
naofum Japanese
Osoitz Basque
Sérgio Marques Portuguese (Portugal)
We were fetching information on all installed packages and doing a linear
search. Which is silly and inefficient since we can directly fetch information
on a single installed package by id.
If it doesn't result in any version being marked as suggested, e.g. because it
is higher than 0 but lower than any available version, we end up with a NULL
suggestedVercode.
Run the Latest() algorithm after the Upstream() one, and have it pick up those
cases too by adding "OR suggestedVercode IS NULL". This way, we treat invalid
upstreamVercode values as if they were NULL.
Also some cleanup of comments.
Fixes#371.