Mark variables that can be marked as final.
Remove unused imports.
Remove unnecessary " extends Object".
Remove an unnecessary null check.
Remove unnecessary null check for wifiLock.
Use the enhanced for-loop syntax.
Add a unit test for ImageCache.hashKeyForDisk().
Use Guava's MD5 hash and hash-to-string functions.
Merge branch 'lint' into develop

* lint:
  Use Guava's MD5 hash and hash-to-string functions.
  Add a unit test for ImageCache.hashKeyForDisk().
  Use the enhanced for-loop syntax.
  Remove unnecessary null check for wifiLock.
  Remove an unnecessary null check.
  Remove unnecessary " extends Object".
  Remove unused imports.
  Mark variables that can be marked as final.
Use 'com.android.application' as the Android Gradle plugin.
Update to Guava 17.0.0.
Use v20 of the Support and AppCompat libraries.
Fix bug where the current song information might be lost on fragment pause.

When NowPlayingFragment pauses (device rotation, moving to another activity,
etc) updatePlayerSubscriptionState() is called. This realised that there
were no clients that cared about second-to-second updates connected to the
service, so unsubscribed from status updates.

The unsubscription command did not use the same set of tags as the subscribe
command. So when the server responded to the unsubscribe command the response
contained less data. In particular, the artwork URL was missing.

The service would receive the response, parse it (with missing artwork URL)
and update the information about the currently playing song, including
setting the artwork URL to null.

Then NowPlayingFragment would resume and use the song info to load the
song artwork. But the artwork URL is null, so the generic art was loaded
instead.

Then the service re-subscribes to status updates, including being advised
of the song's URL.  A second or so later a new status update comes in
(including the song's URL) but because the rest of the song info hasn't
changed this is considered to be the same song, so the displayed information
is not refreshed.

Fix this by sending the same set of tags when unsubscribing from status
updates as when subscribing, to ensure that the information is consistent.