package com.kabouzeid.gramophone.ui.fragments.player; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper; import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler; import com.kabouzeid.gramophone.ui.fragments.AbsMusicServiceFragment; import com.kabouzeid.gramophone.views.PlayPauseDrawable; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import me.zhanghai.android.materialprogressbar.MaterialProgressBar; /** * @author Karim Abou Zeid (kabouzeid) */ public class MiniPlayerFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback { private Unbinder unbinder; @BindView(R.id.mini_player_title) TextView miniPlayerTitle; @BindView(R.id.mini_player_play_pause_button) ImageView miniPlayerPlayPauseButton; @BindView(R.id.progress_bar) MaterialProgressBar progressBar; private PlayPauseDrawable miniPlayerPlayPauseDrawable; private MusicProgressViewUpdateHelper progressViewUpdateHelper; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); progressViewUpdateHelper = new MusicProgressViewUpdateHelper(this); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_mini_player, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); unbinder = ButterKnife.bind(this, view); view.setOnTouchListener(new FlingPlayBackController(getActivity())); setUpMiniPlayer(); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } private void setUpMiniPlayer() { setUpPlayPauseButton(); progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(getActivity()))); } private void setUpPlayPauseButton() { miniPlayerPlayPauseDrawable = new PlayPauseDrawable(getActivity()); miniPlayerPlayPauseButton.setImageDrawable(miniPlayerPlayPauseDrawable); miniPlayerPlayPauseButton.setColorFilter(ATHUtil.resolveColor(getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(getActivity())), PorterDuff.Mode.SRC_IN); miniPlayerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler()); } private void updateSongTitle() { miniPlayerTitle.setText(MusicPlayerRemote.getCurrentSong().title); } @Override public void onServiceConnected() { updateSongTitle(); updatePlayPauseDrawableState(false); } @Override public void onPlayingMetaChanged() { updateSongTitle(); } @Override public void onPlayStateChanged() { updatePlayPauseDrawableState(true); } @Override public void onUpdateProgressViews(int progress, int total) { progressBar.setMax(total); progressBar.setProgress(progress); } @Override public void onResume() { super.onResume(); progressViewUpdateHelper.start(); } @Override public void onPause() { super.onPause(); progressViewUpdateHelper.stop(); } private static class FlingPlayBackController implements View.OnTouchListener { GestureDetector flingPlayBackController; public FlingPlayBackController(Context context) { flingPlayBackController = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(velocityX) > Math.abs(velocityY)) { if (velocityX < 0) { MusicPlayerRemote.playNextSong(); return true; } else if (velocityX > 0) { MusicPlayerRemote.playPreviousSong(); return true; } } return false; } }); } @Override public boolean onTouch(View v, MotionEvent event) { return flingPlayBackController.onTouchEvent(event); } } protected void updatePlayPauseDrawableState(boolean animate) { if (MusicPlayerRemote.isPlaying()) { miniPlayerPlayPauseDrawable.setPause(animate); } else { miniPlayerPlayPauseDrawable.setPlay(animate); } } }