@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);
  }
}

@ 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 ) ; } }
called by the providers when the details of an album have been updated .
