@UiThread
 private void updatePlayPauseIcon(@PlayerState.PlayState String playStatus) {
   playPauseButton.setImageResource(
       (PlayerState.PLAY_STATE_PLAY.equals(playStatus))
           ? mActivity.getAttributeValue(R.attr.ic_action_av_pause)
           : mActivity.getAttributeValue(R.attr.ic_action_av_play));
 }
  @MainThread
  public void onEventMainThread(HandshakeComplete event) {
    // Event might arrive before this fragment has connected to the service (e.g.,
    // the activity connected before this fragment did).
    // XXX: Verify that this is possible, since the fragment can't register for events
    // until it's connected to the service.
    if (mService == null) {
      return;
    }

    Log.d(TAG, "Handshake complete");

    dismissConnectingDialog();

    if (mFullHeightLayout) {
      nextButton.setEnabled(true);
      prevButton.setEnabled(true);
      shuffleButton.setEnabled(true);
      repeatButton.setEnabled(true);

      nextButton.setImageResource(mActivity.getAttributeValue(R.attr.ic_action_av_next));
      prevButton.setImageResource(mActivity.getAttributeValue(R.attr.ic_action_av_previous));
      seekBar.setEnabled(true);
    } else {
      mProgressBar.setEnabled(true);
    }

    PlayerState playerState = getPlayerState();

    // May be no players connected.
    // TODO: These views should be cleared if there's no player connected.
    if (playerState == null) return;

    updateUiFromPlayerState(playerState);
  }
  @MainThread
  public void onEventMainThread(ConnectionChanged event) {
    Log.d(TAG, "ConnectionChanged: " + event);

    // The fragment may no longer be attached to the parent activity.  If so, do nothing.
    if (!isAdded()) {
      return;
    }

    // Handle any of the reasons for disconnection, clear the dialog and show the
    // DisconnectedActivity.
    if (event.connectionState == ConnectionState.DISCONNECTED) {
      dismissConnectingDialog();
      DisconnectedActivity.show(mActivity);
      return;
    }

    if (event.connectionState == ConnectionState.CONNECTION_FAILED) {
      dismissConnectingDialog();
      DisconnectedActivity.showConnectionFailed(mActivity);
      return;
    }

    if (event.connectionState == ConnectionState.LOGIN_FAILED) {
      dismissConnectingDialog();
      DisconnectedActivity.showLoginFailed(mActivity);
      return;
    }

    // Any other event means that a connection is in progress, make sure the dialog is showing.
    showConnectingDialog();

    // Ensure that option menu item state is adjusted as appropriate.
    getActivity().supportInvalidateOptionsMenu();

    playPauseButton.setImageResource(mActivity.getAttributeValue(R.attr.ic_action_av_connect));

    if (mFullHeightLayout) {
      nextButton.setEnabled(false);
      prevButton.setEnabled(false);
      shuffleButton.setEnabled(false);
      repeatButton.setEnabled(false);

      albumArt.setImageResource(R.drawable.icon_album_noart_fullscreen);
      nextButton.setImageResource(0);
      prevButton.setImageResource(0);
      shuffleButton.setImageResource(0);
      repeatButton.setImageResource(0);
      updatePlayerDropDown(Collections.<Player>emptyList(), null);
      artistText.setText(getText(R.string.disconnected_text));
      currentTime.setText("--:--");
      totalTime.setText("--:--");
      seekBar.setEnabled(false);
      seekBar.setProgress(0);
    } else {
      albumArt.setImageResource(R.drawable.icon_album_noart);
      mProgressBar.setEnabled(false);
      mProgressBar.setProgress(0);
    }
  }
 @UiThread
 private void updateRepeatStatus(RepeatStatus repeatStatus) {
   if (mFullHeightLayout && repeatStatus != null) {
     repeatButton.setImageResource(mActivity.getAttributeValue(repeatStatus.getIcon()));
   }
 }
 @UiThread
 private void updateShuffleStatus(ShuffleStatus shuffleStatus) {
   if (mFullHeightLayout && shuffleStatus != null) {
     shuffleButton.setImageResource(mActivity.getAttributeValue(shuffleStatus.getIcon()));
   }
 }