/** Sets the shuffle button icon based on the current shuffle mode. */
 private void setShuffleButtonIcon() {
   if (mApp.isServiceRunning())
     if (mApp.getService().isShuffleOn() == true) {
       mShuffleButton.setImageResource(R.drawable.shuffle_highlighted);
     } else {
       mShuffleButton.setImageResource(UIElementsHelper.getIcon(mContext, "shuffle"));
     }
   else mShuffleButton.setImageResource(UIElementsHelper.getIcon(mContext, "shuffle"));
 }
 /** Sets the repeat button icon based on the current repeat mode. */
 private void setRepeatButtonIcon() {
   if (mApp.isServiceRunning())
     if (mApp.getService().getRepeatMode() == Common.REPEAT_OFF) {
       mRepeatButton.setImageResource(UIElementsHelper.getIcon(mContext, "repeat"));
     } else if (mApp.getService().getRepeatMode() == Common.REPEAT_PLAYLIST) {
       mRepeatButton.setImageResource(R.drawable.repeat_highlighted);
     } else if (mApp.getService().getRepeatMode() == Common.REPEAT_SONG) {
       mRepeatButton.setImageResource(R.drawable.repeat_song);
     } else if (mApp.getService().getRepeatMode() == Common.A_B_REPEAT) {
       mRepeatButton.setImageResource(R.drawable.repeat_song_range);
     } else mRepeatButton.setImageResource(UIElementsHelper.getIcon(mContext, "repeat"));
 }
        @Override
        public void onClick(View arg0) {
          // Toggle shuffle on/off.
          boolean shuffleOn = mApp.getService().toggleShuffleMode();

          if (shuffleOn) mShuffleButton.setImageResource(R.drawable.shuffle_highlighted);
          else mShuffleButton.setImageResource(UIElementsHelper.getIcon(mContext, "shuffle"));
        }
        @Override
        public void onClick(View arg0) {

          mApp.getService().clearABRepeatRange();
          if (mApp.getService().getRepeatMode() == Common.REPEAT_OFF) {
            mRepeatButton.setImageResource(R.drawable.repeat_highlighted);
            mApp.getService().setRepeatMode(Common.REPEAT_PLAYLIST);

          } else if (mApp.getService().getRepeatMode() == Common.REPEAT_PLAYLIST) {
            mRepeatButton.setImageResource(R.drawable.repeat_song);
            mApp.getService().setRepeatMode(Common.REPEAT_SONG);

          } else {
            mRepeatButton.setImageResource(UIElementsHelper.getIcon(mContext, "repeat"));
            mApp.getService().setRepeatMode(Common.REPEAT_OFF);
          }
        }
 /** Sets the background for the control buttons based on the selected theme. */
 private void setControlButtonsBackground() {
   mControlsLayoutHeader.setBackgroundResource(
       UIElementsHelper.getGridViewCardBackground(mContext));
 }
  @SuppressLint("NewApi")
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    mContext = getApplicationContext();
    mApp = (Common) getApplicationContext();
    mApp.setNowPlayingActivity(this);
    setNowPlayingActivityListener(mApp.getPlaybackKickstarter());

    // Set the UI theme.
    setTheme();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_now_playing);

    // Set the volume stream for this activity.
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

    // Drawer layout.
    if (!mApp.isTabletInLandscape()) {
      mDrawerLayout = (DrawerLayout) findViewById(R.id.main_activity_drawer_root);
      mDrawerParentLayout = (FrameLayout) findViewById(R.id.now_playing_drawer_frame_root);
      mCurrentQueueLayout = (RelativeLayout) findViewById(R.id.queue_drawer);
      mDrawerLayout.setDrawerListener(mDrawerListener);
      mDrawerLayout.setBackgroundColor(UIElementsHelper.getBackgroundColor(mContext));

    } else {
      mCurrentQueueLayout = (RelativeLayout) findViewById(R.id.queue_drawer);
    }

    // ViewPager.
    mViewPager = (VelocityViewPager) findViewById(R.id.nowPlayingPlaylistPager);

    // Seekbar indicator.
    mSeekbarIndicatorLayoutParent = (RelativeLayout) findViewById(R.id.seekbarIndicatorParent);
    mSeekbarIndicatorLayout = (RelativeLayout) findViewById(R.id.seekbarIndicator);
    mSeekbarIndicatorText = (TextView) findViewById(R.id.seekbarIndicatorText);

    mSeekbarIndicatorLayoutParent.setVisibility(View.GONE);
    mSeekbarIndicatorLayout.setBackgroundResource(
        UIElementsHelper.getGridViewCardBackground(mContext));
    mSeekbarIndicatorText.setTypeface(TypefaceHelper.getTypeface(mContext, "Roboto-Regular"));
    mSeekbarIndicatorText.setTextColor(UIElementsHelper.getThemeBasedTextColor(mContext));

    // Playback Controls.
    mControlsLayoutHeaderParent =
        (RelativeLayout) findViewById(R.id.now_playing_controls_header_parent);
    mControlsLayoutHeader = (RelativeLayout) findViewById(R.id.now_playing_controls_header);
    mPlayPauseButtonBackground = (RelativeLayout) findViewById(R.id.playPauseButtonBackground);
    mPlayPauseButton = (ImageButton) findViewById(R.id.playPauseButton);
    mNextButton = (ImageButton) findViewById(R.id.nextButton);
    mPreviousButton = (ImageButton) findViewById(R.id.previousButton);
    mShuffleButton = (ImageButton) findViewById(R.id.shuffleButton);
    mRepeatButton = (ImageButton) findViewById(R.id.repeatButton);

    // Song info/seekbar elements.
    mSeekbar = (SeekBar) findViewById(R.id.nowPlayingSeekBar);
    mStreamingProgressBar = (ProgressBar) findViewById(R.id.startingStreamProgressBar);
    mStreamingProgressBar.setVisibility(View.GONE);

    try {
      mSeekbar.setThumb(getResources().getDrawable(R.drawable.transparent_drawable));
    } catch (Exception e) {
      e.printStackTrace();
    }

    mPlayPauseButtonBackground.setBackgroundResource(UIElementsHelper.getShadowedCircle(mContext));
    mPlayPauseButton.setImageResource(R.drawable.pause_light);
    mPlayPauseButton.setId(R.drawable.pause_light);
    mNextButton.setImageResource(UIElementsHelper.getIcon(mContext, "btn_playback_next"));
    mPreviousButton.setImageResource(UIElementsHelper.getIcon(mContext, "btn_playback_previous"));

    if (mApp.getCurrentTheme() == Common.DARK_THEME) {
      mNextButton.setAlpha(1f);
      mPreviousButton.setAlpha(1f);
    }

    // KitKat specific layout code.
    setKitKatTranslucentBars();

    // Set the control buttons and background.
    setControlButtonsBackground();
    setPlayPauseButton();
    setShuffleButtonIcon();
    setRepeatButtonIcon();

    // Set the click listeners.
    mSeekbar.setOnSeekBarChangeListener(seekBarChangeListener);
    mNextButton.setOnClickListener(mOnClickNextListener);
    mPreviousButton.setOnClickListener(mOnClickPreviousListener);
    mPlayPauseButton.setOnClickListener(playPauseClickListener);
    mPlayPauseButtonBackground.setOnClickListener(playPauseClickListener);
    mShuffleButton.setOnClickListener(shuffleButtonClickListener);
    mRepeatButton.setOnClickListener(repeatButtonClickListener);

    // Apply haptic feedback to the play/pause button.
    mPlayPauseButtonBackground.setHapticFeedbackEnabled(true);
    mPlayPauseButton.setHapticFeedbackEnabled(true);
  }