/** Update all active widget instances by pushing changes */
  public void performUpdate(final MusicPlaybackService service, final int[] appWidgetIds) {
    final RemoteViews appWidgetView =
        new RemoteViews(service.getPackageName(), R.layout.app_widget_large_alternate);

    final CharSequence trackName = service.getTrackName();
    final CharSequence artistName = service.getArtistName();
    final CharSequence albumName = service.getAlbumName();
    final Bitmap bitmap = service.getAlbumArt();

    // Set the titles and artwork
    appWidgetView.setTextViewText(R.id.app_widget_large_alternate_line_one, trackName);
    appWidgetView.setTextViewText(R.id.app_widget_large_alternate_line_two, artistName);
    appWidgetView.setTextViewText(R.id.app_widget_large_alternate_line_three, albumName);
    appWidgetView.setImageViewBitmap(R.id.app_widget_large_alternate_image, bitmap);

    // Set correct drawable for pause state
    final boolean isPlaying = service.isPlaying();
    if (isPlaying) {
      appWidgetView.setImageViewResource(
          R.id.app_widget_large_alternate_play, R.drawable.btn_playback_pause);
      if (ApolloUtils.hasJellyBean()) {
        appWidgetView.setContentDescription(
            R.id.app_widget_large_alternate_play, service.getString(R.string.accessibility_pause));
      }
    } else {
      appWidgetView.setImageViewResource(
          R.id.app_widget_large_alternate_play, R.drawable.btn_playback_play);
      if (ApolloUtils.hasJellyBean()) {
        appWidgetView.setContentDescription(
            R.id.app_widget_large_alternate_play, service.getString(R.string.accessibility_play));
      }
    }

    // Set the correct drawable for the repeat state
    switch (service.getRepeatMode()) {
      case MusicPlaybackService.REPEAT_ALL:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_repeat, R.drawable.btn_playback_repeat_all);
        break;
      case MusicPlaybackService.REPEAT_CURRENT:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_repeat, R.drawable.btn_playback_repeat_one);
        break;
      default:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_repeat, R.drawable.btn_playback_repeat);
        break;
    }

    // Set the correct drawable for the shuffle state
    switch (service.getShuffleMode()) {
      case MusicPlaybackService.SHUFFLE_NONE:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_shuffle, R.drawable.btn_playback_shuffle);
        break;
      case MusicPlaybackService.SHUFFLE_AUTO:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_shuffle, R.drawable.btn_playback_shuffle_all);
        break;
      default:
        appWidgetView.setImageViewResource(
            R.id.app_widget_large_alternate_shuffle, R.drawable.btn_playback_shuffle_all);
        break;
    }

    // Link actions buttons to intents
    linkButtons(service, appWidgetView, isPlaying);

    // Update the app-widget
    pushUpdate(service, appWidgetIds, appWidgetView);

    // Build the notification
    if (ApolloUtils.isApplicationSentToBackground(service)) {
      service.mBuildNotification = true;
    }
  }