Correct a method name in a log string.
Merge branch 'develop' of https://github.com/nikclayton/android-squeezer into develop
WIP: Support different themes for the UI.

Start by supporting the existing "Theme.AppCompat" and
"Theme.AppCompat.Light.DarkActionBar" themes.

- Implement a preference for the user's choice of theme ("squeezer.theme")
  and a ListPreference in the UI to show it to the user.

- Update BaseActivity to deal with theme changes at runtime.

- Add drawables for holo light versions of the AV player controls.

- Use styleable attributes to refer to the drawables, and update everything
  that referred to the drawable to use the attribute instead, so that the
  the drawable appropriate for the theme is used.
Ensure the actionbar spinner drop downs follow the applied theme.

Prior to this change they had the incorrect colour on the light +
dark action bar theme.

- Adjust Util.getSpinnerItemView and getActionBarSpinnerItemView to
  take a Context parameter instead of an Activity. Use the context to
  fetch the layout inflater. This ensures the layout inflater uses the
  correct theme.

- Pass the ArrayAdapter's context as the parameter for the actionbar.

As the ArrayAdapter's context comes from actionBar.getThemedContext()
this ensures that the correct theme is used.
Refactor theme management code for ease of use with other activities.

- Move the code in to its own ThemeManager class.

- Call the ThemeManager from SettingsActivity so it follows the theme.
Style the current playlist list correctly.

- Highlight the currently playing item using abc_light_pressed_*
  drawables from appcompat.v7.

- Use the normal android background colour for un-highlighted items.

This uses the correct colours for the selected style.
Move the Theme enum and default values into the ThemeManager.
WIP: Start working on an ExpandableListView to show groups of players.

- Create PlayerListAdapter to hold information about groups of players.

- Create item_list_players.xml to show player groups.

- Update PlayerListActivity to use both of these.

- Add a callback method to IServicePlayersCallback when player sync groups
  change.

Much still to be done -- this doesn't work yet. There's no integration with
the server.
WIP: Display all players in an ExpandableListView.

- Initial work to support fetching the list of sync. groups from the server.
  SqueezeService can send and parse the request, and ConnectionState can now
  track this information. This is provided in onPlayersChanged callbacks.

- Introduce model/PlayerSyncGroup to hold the sync group information.

- Change PlayerListActivity to extend ItemListActivity instead of
  BaseListActivity<Player>, as BaseListActivity makes assumptions that don't
  hold.

- Extend PlayerListAdapter, and start managing the child adapters properly.
  Flesh out the various get*() methods so that PlayerListActivity can
  show all the active players.
Add downloaded files to the media library.

Since we can't download the file directly to it's final destination, we
can't have the download manager request that the file be scanned by the
media server.

Instead we do it in broadcast receiver which listens for completed
downloads.

As it is not allowed to bind to a service from a broadcast receiver,
we can't call MediaScannerConnection.scanFile, because it internally
binds to the media service.

So we use the ACTION_MEDIA_SCANNER_SCAN_FILE intent action to have the
file scanned.

This fixes a comment on issue #55.
Use an explicit version of Gradle to ensure reproducibility.
Ensure the text on the volume display panel is legible.

As the panel always has a dark background ensure that the text colour
is Android's primary/secondary colours for dark backgrounds.

Without this the theme-specific colours are chosen, and when the theme
is Light.DarkActionBar the theme colour is black/dark-grey.
Prepare the release for 1.1.0-beta-5.
Fix an NPE in updatePlayerDropDown().

Require that the "players" parameter be non-null. In the one case
where null was passed use Collections.<Player>emptyList() instead.
WIP: More work on player sync groups. Bugs remain (see XXX comments).

- Use the syncmaster / syncslaves attributes of Players, instead of the
  syncgroups command. This keeps all the information tied to the Players
  instead of having to fetch additional data from the server.

- Change PlayerListAdapter::updatePlayers() to use this information to
  construct the groups for the expandable list.

- Make the list of players in the expandable list stable by using their
  MAC address ID, converted to a long, as the child ID. Introduce a utility
  method to do the conversion, with a test.

- Add a specific view for the group header of players, with a minimum
  height.

- Instead of the service keeping track of a single PlayerState for the
  active player, make PlayerState a member of each Player

- Track the player's syncmaster and syncslaves in the PlayerState.

- Adjust all the PlayerState::set*() methods to return a boolean indicating
  whether or not the value was changed. Use this in the service to determine
  wether to call each specific callback.

- Track all the seen players in a Map in ConnectionState. Add methods to
  modify the map as appropriate.

- Delete the IServicePlayersCallback::onSyncGroupsChanged() method, and
  the ISqueezeService::syncgroups() method.
Add a feature graphic, which is now a requirement for Google Play.
WIP: Fix NPEs involving the bound service.

- Mark BaseActivity::getService() as potentially returning null.
WIP: Rename "service" to "mService".
Avoid NPEs when registering callbacks.

- Pass the connection to the bound service as a parameter to
  BaseActivity::onServiceConnected().

- Pass this connection as a parameter to BaseActivity::registerCallback()
  via BaseActivity::maybeRegisterCallbacks().

- Update subclasses to use this connection instead of calling getService().
Fix the REORDER_TO_FRONT 4.4.2 problem

The problem and workaround is described in:
https://code.google.com/p/android/issues/detail?id=63570

The suggested workaround requires the REORDER_TASKS permission, so this
also included.

Signed-off-by: Kurt Aaholst <kaaholst@gmail.com>