migrate card player controls to view binding

This commit is contained in:
dkanada 2020-08-27 12:06:40 +09:00
commit ee1d86098b
3 changed files with 48 additions and 74 deletions

View file

@ -323,7 +323,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
float density = getResources().getDisplayMetrics().density; float density = getResources().getDisplayMetrics().density;
playingQueueCard.setCardElevation((6 * slide + 2) * density); playingQueueCard.setCardElevation((6 * slide + 2) * density);
playbackControlsFragment.playPauseFab.setElevation((2 * Math.max(0, (1 - (slide * 16))) + 2) * density); playbackControlsFragment.binding.playerPlayPauseFab.setElevation((2 * Math.max(0, (1 - (slide * 16))) + 2) * density);
} }
} }
@ -369,9 +369,9 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
Animator backgroundAnimator; Animator backgroundAnimator;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//noinspection ConstantConditions //noinspection ConstantConditions
int x = (int) (fragment.playbackControlsFragment.playPauseFab.getX() + fragment.playbackControlsFragment.playPauseFab.getWidth() / 2 + fragment.playbackControlsFragment.getView().getX()); int x = (int) (fragment.playbackControlsFragment.binding.playerPlayPauseFab.getX() + fragment.playbackControlsFragment.binding.playerPlayPauseFab.getWidth() / 2 + fragment.playbackControlsFragment.getView().getX());
int y = (int) (fragment.playbackControlsFragment.playPauseFab.getY() + fragment.playbackControlsFragment.playPauseFab.getHeight() / 2 + fragment.playbackControlsFragment.getView().getY() + fragment.playbackControlsFragment.progressSlider.getHeight()); int y = (int) (fragment.playbackControlsFragment.binding.playerPlayPauseFab.getY() + fragment.playbackControlsFragment.binding.playerPlayPauseFab.getHeight() / 2 + fragment.playbackControlsFragment.getView().getY() + fragment.playbackControlsFragment.binding.playerProgressSlider.getHeight());
float startRadius = Math.max(fragment.playbackControlsFragment.playPauseFab.getWidth() / 2, fragment.playbackControlsFragment.playPauseFab.getHeight() / 2); float startRadius = Math.max(fragment.playbackControlsFragment.binding.playerPlayPauseFab.getWidth() / 2, fragment.playbackControlsFragment.binding.playerPlayPauseFab.getHeight() / 2);
float endRadius = Math.max(fragment.colorBackground.getWidth(), fragment.colorBackground.getHeight()); float endRadius = Math.max(fragment.colorBackground.getWidth(), fragment.colorBackground.getHeight());
fragment.colorBackground.setBackgroundColor(newColor); fragment.colorBackground.setBackgroundColor(newColor);
backgroundAnimator = ViewAnimationUtils.createCircularReveal(fragment.colorBackground, x, y, startRadius, endRadius); backgroundAnimator = ViewAnimationUtils.createCircularReveal(fragment.colorBackground, x, y, startRadius, endRadius);

View file

@ -4,14 +4,13 @@ import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.dkanada.gramophone.databinding.FragmentCardPlayerPlaybackControlsBinding;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator; import android.view.animation.DecelerateInterpolator;
import android.widget.ImageButton;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.TextView;
import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.ColorUtil;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper; import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
@ -26,31 +25,9 @@ import com.dkanada.gramophone.ui.fragments.AbsMusicServiceFragment;
import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.MusicUtil;
import com.dkanada.gramophone.views.PlayPauseDrawable; import com.dkanada.gramophone.views.PlayPauseDrawable;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback { public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback {
private Unbinder unbinder; FragmentCardPlayerPlaybackControlsBinding binding;
@BindView(R.id.player_play_pause_fab)
FloatingActionButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
SeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
private PlayPauseDrawable playerFabPlayPauseDrawable; private PlayPauseDrawable playerFabPlayPauseDrawable;
@ -67,13 +44,14 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_card_player_playback_controls, container, false); binding = FragmentCardPlayerPlaybackControlsBinding.inflate(inflater);
return binding.getRoot();
} }
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers(); setUpMusicControllers();
updateProgressTextColor(); updateProgressTextColor();
} }
@ -81,7 +59,6 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
unbinder.unbind();
} }
@Override @Override
@ -135,17 +112,17 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
private void setUpPlayPauseFab() { private void setUpPlayPauseFab() {
final int fabColor = Color.WHITE; final int fabColor = Color.WHITE;
TintHelper.setTintAuto(playPauseFab, fabColor, true); TintHelper.setTintAuto(binding.playerPlayPauseFab, fabColor, true);
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity()); playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called binding.playerPlayPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN); binding.playerPlayPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler()); binding.playerPlayPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> { binding.playerPlayPauseFab.post(() -> {
if (playPauseFab != null) { if (binding.playerPlayPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2); binding.playerPlayPauseFab.setPivotX(binding.playerPlayPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2); binding.playerPlayPauseFab.setPivotY(binding.playerPlayPauseFab.getHeight() / 2);
} }
}); });
} }
@ -168,59 +145,59 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
private void setUpPrevNext() { private void setUpPrevNext() {
updatePrevNextColor(); updatePrevNextColor();
nextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong()); binding.playerNextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
prevButton.setOnClickListener(v -> MusicPlayerRemote.back()); binding.playerPrevButton.setOnClickListener(v -> MusicPlayerRemote.back());
} }
private void updateProgressTextColor() { private void updateProgressTextColor() {
int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false); int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false);
songTotalTime.setTextColor(color); binding.playerSongTotalTime.setTextColor(color);
songCurrentProgress.setTextColor(color); binding.playerSongCurrentProgress.setTextColor(color);
} }
private void updatePrevNextColor() { private void updatePrevNextColor() {
nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerNextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
prevButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerPrevButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
} }
private void setUpShuffleButton() { private void setUpShuffleButton() {
shuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode()); binding.playerShuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode());
} }
private void updateShuffleState() { private void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) { switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE: case MusicService.SHUFFLE_MODE_SHUFFLE:
shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerShuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break; break;
default: default:
shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerShuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break; break;
} }
} }
private void setUpRepeatButton() { private void setUpRepeatButton() {
repeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode()); binding.playerRepeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode());
} }
private void updateRepeatState() { private void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) { switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE: case MusicService.REPEAT_MODE_NONE:
repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_white_24dp);
repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerRepeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break; break;
case MusicService.REPEAT_MODE_ALL: case MusicService.REPEAT_MODE_ALL:
repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_white_24dp);
repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break; break;
case MusicService.REPEAT_MODE_THIS: case MusicService.REPEAT_MODE_THIS:
repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp); binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp);
repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); binding.playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break; break;
} }
} }
public void show() { public void show() {
playPauseFab.animate() binding.playerPlayPauseFab.animate()
.scaleX(1f) .scaleX(1f)
.scaleY(1f) .scaleY(1f)
.rotation(360f) .rotation(360f)
@ -229,19 +206,17 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
} }
public void hide() { public void hide() {
if (playPauseFab != null) { binding.playerPlayPauseFab.setScaleX(0f);
playPauseFab.setScaleX(0f); binding.playerPlayPauseFab.setScaleY(0f);
playPauseFab.setScaleY(0f); binding.playerPlayPauseFab.setRotation(0f);
playPauseFab.setRotation(0f);
}
} }
private void setUpProgressSlider() { private void setUpProgressSlider() {
int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false); int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false);
progressSlider.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); binding.playerProgressSlider.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
progressSlider.getProgressDrawable().mutate().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN); binding.playerProgressSlider.getProgressDrawable().mutate().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN);
progressSlider.setOnSeekBarChangeListener(new SimpleOnSeekbarChangeListener() { binding.playerProgressSlider.setOnSeekBarChangeListener(new SimpleOnSeekbarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) { if (fromUser) {
@ -254,9 +229,9 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
@Override @Override
public void onUpdateProgressViews(int progress, int total) { public void onUpdateProgressViews(int progress, int total) {
progressSlider.setMax(total); binding.playerProgressSlider.setMax(total);
progressSlider.setProgress(progress); binding.playerProgressSlider.setProgress(progress);
songTotalTime.setText(MusicUtil.getReadableDurationString(total)); binding.playerSongTotalTime.setText(MusicUtil.getReadableDurationString(total));
songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress)); binding.playerSongCurrentProgress.setText(MusicUtil.getReadableDurationString(progress));
} }
} }

View file

@ -124,10 +124,8 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
updatePlayPauseColor(); updatePlayPauseColor();
binding.playerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler()); binding.playerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
binding.playerPlayPauseButton.post(() -> { binding.playerPlayPauseButton.post(() -> {
if (binding.playerPlayPauseButton != null) {
binding.playerPlayPauseButton.setPivotX(binding.playerPlayPauseButton.getWidth() / 2); binding.playerPlayPauseButton.setPivotX(binding.playerPlayPauseButton.getWidth() / 2);
binding.playerPlayPauseButton.setPivotY(binding.playerPlayPauseButton.getHeight() / 2); binding.playerPlayPauseButton.setPivotY(binding.playerPlayPauseButton.getHeight() / 2);
}
}); });
} }
@ -233,6 +231,7 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
if (musicControllerAnimationSet != null) { if (musicControllerAnimationSet != null) {
musicControllerAnimationSet.cancel(); musicControllerAnimationSet.cancel();
} }
prepareForAnimation(binding.playerPlayPauseButton); prepareForAnimation(binding.playerPlayPauseButton);
prepareForAnimation(binding.playerNextButton); prepareForAnimation(binding.playerNextButton);
prepareForAnimation(binding.playerPrevButton); prepareForAnimation(binding.playerPrevButton);