question: @ Override public void onAlbumUpdate ( ProviderIdentifier provider , final Album a ) throws RemoteException { if ( a == null ) { Log . w ( TAG , "Provider returned a null album" ) ; return ; } Album cached = mCache . getAlbum ( a . getRef ( ) ) ; boolean modified = false ; if ( cached == null ) { mCache . putAlbum ( provider , a ) ; cached = a ; modified = true ; } else if ( ! cached . isLoaded ( ) || ! cached . isIdentical ( a ) ) { cached . setName ( a . getName ( ) ) ; cached . setYear ( a . getYear ( ) ) ; cached . setIsLoaded ( a . isLoaded ( ) ) ; cached . setProvider ( a . getProvider ( ) ) ; if ( cached . getSongsCount ( ) != a . getSongsCount ( ) ) { Iterator < String > songsIt = a . songs ( ) ; while ( songsIt . hasNext ( ) ) { String songRef = songsIt . next ( ) ; cached . addSong ( songRef ) ; } } modified = true ; } if ( cached . getProvider ( ) == null ) { Log . e ( TAG , "Provider for " + cached . getRef ( ) + " is null!" ) ; } if ( modified ) { Iterator < String > songs = a . songs ( ) ; while ( songs . hasNext ( ) ) { String songRef = songs . next ( ) ; Song song = retrieveSong ( songRef , a . getProvider ( ) ) ; if ( song != null && song . isLoaded ( ) ) { String artistRef = song . getArtist ( ) ; if ( artistRef != null ) { Artist artist = retrieveArtist ( artistRef , song . getProvider ( ) ) ; if ( artist != null ) { artist . addAlbum ( a . getRef ( ) ) ; } else { if ( DEBUG ) Log . e ( TAG , "Artist is null!" ) ; } } } else { if ( DEBUG ) Log . e ( TAG , "Song is null!" ) ; } } postAlbumForUpdate ( cached ) ; } }
target:  Called by the providers when the details of an album have been updated.