Use adapter events to react to filter changes

This commit is a small refactoring of the filtering mechanisms.

First of all, we previously used a ConstraintClickedListener, which
then would set the constraint on the adapter. This is pretty stupid
since we might as well just set the constraint on the adapter directly.
The indirection gives nothing.

Also, we were passing a lot of state from UnibeerActivity into the
badly named ShowConstraintOptionsDialogClickListener. It's now moved
directly into UnibeerActivity which is somewhat cleaner.
ShowConstraintOptionsDialogClickListener not needed anymore
Move out generic beer list activity code

We want to reuse as much as possible when making tasted beers a
separate activity. This refactoring introduces a generic
BeerListActivity from which UnibeerActivity inherits. BeerListActivity
knows how to show and filter beers given some list of beers.

UnibeerActivity provides the list by updating if necessary and then
load the data file.

A future tasted beers activity may then be given a list of tasted beers
(without updating or loading anything again) and show this.
Introduce activity for tasted beers

This introduces an activity for tasted beers so that the code compiles.
It crashes awfully when asked to start though. Apparently context is
null.
Get rid of Context in BeerModel

Ok, so giving Context to every BeerModel was a bad idea since it
changes/can become null during execution of the app. Also, it made
serialization of a BeerModel difficult.

This commit lets setRating(), getRating(), and hasRating() all take a
Context. The inner serializable BeerModel has also been removed, and
the rest of the code has been adapted for this change.
Remove ConstraintGenerationStrategy for tasted beers.

This is no longer needed since tasted beers is no longer treated as a
filter (although it is).
Generate list of tasted beers only

Final step. This generates a list of tasted beers and shows it in a
TastedBeerListActivity.
Separate methods for menu options
Rename FilterableCollectionAdapter to FilterableListAdapter
Introduce ConstraintButton

This commit introduces the ConstraintButton, a custom button component
which renders according to a given constraint. Polymorphism is used to
determine the type of constraint and the background is set accordingly.
Use String.format to create button text
Introduce ConstraintButtonClickListener
Set an initial constraint when adding constraint options

This is slightly cleaner, I think. Also it's more consistent since a
constraint kind will now always has a default value.
Don't allow adding a constraint kind without setting an initial constraint
Let TastedBeerListActivity know how to create an intent for it
ConstraintButton background was never "no filter"

Polymorphism cheated me big time. Obviously it doesn't find the method
with the closest match, so Java would always pick
setConstraint(Constraint<T>) and use the "filter activated" background.
Let DetailsActivity know how to create itself
Small corrections, no behavior changed
Move XML parsing onto background thread

This completely fixes the UI glitch that happens when the user cancels
the update.
Properly launch activity for random beer