From ee1d86098b603a530e59ef67b2e35651f64b3417 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 27 Aug 2020 12:06:40 +0900 Subject: [PATCH] migrate card player controls to view binding --- .../player/card/CardPlayerFragment.java | 8 +- .../CardPlayerPlaybackControlsFragment.java | 107 +++++++----------- .../FlatPlayerPlaybackControlsFragment.java | 7 +- 3 files changed, 48 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java index 386ed9e5..09f639ac 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java @@ -323,7 +323,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { float density = getResources().getDisplayMetrics().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; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //noinspection ConstantConditions - int x = (int) (fragment.playbackControlsFragment.playPauseFab.getX() + fragment.playbackControlsFragment.playPauseFab.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()); - float startRadius = Math.max(fragment.playbackControlsFragment.playPauseFab.getWidth() / 2, fragment.playbackControlsFragment.playPauseFab.getHeight() / 2); + int x = (int) (fragment.playbackControlsFragment.binding.playerPlayPauseFab.getX() + fragment.playbackControlsFragment.binding.playerPlayPauseFab.getWidth() / 2 + fragment.playbackControlsFragment.getView().getX()); + 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.binding.playerPlayPauseFab.getWidth() / 2, fragment.playbackControlsFragment.binding.playerPlayPauseFab.getHeight() / 2); float endRadius = Math.max(fragment.colorBackground.getWidth(), fragment.colorBackground.getHeight()); fragment.colorBackground.setBackgroundColor(newColor); backgroundAnimator = ViewAnimationUtils.createCircularReveal(fragment.colorBackground, x, y, startRadius, endRadius); diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerPlaybackControlsFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerPlaybackControlsFragment.java index 4480f7b1..2fcb8a4e 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerPlaybackControlsFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerPlaybackControlsFragment.java @@ -4,14 +4,13 @@ import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; import androidx.annotation.NonNull; -import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import com.dkanada.gramophone.databinding.FragmentCardPlayerPlaybackControlsBinding; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; -import android.widget.ImageButton; import android.widget.SeekBar; -import android.widget.TextView; import com.kabouzeid.appthemehelper.util.ColorUtil; 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.views.PlayPauseDrawable; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.Unbinder; - public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback { - private Unbinder unbinder; - - @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; + FragmentCardPlayerPlaybackControlsBinding binding; private PlayPauseDrawable playerFabPlayPauseDrawable; @@ -67,13 +44,14 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment @Override 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 public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - unbinder = ButterKnife.bind(this, view); setUpMusicControllers(); updateProgressTextColor(); } @@ -81,7 +59,6 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment @Override public void onDestroyView() { super.onDestroyView(); - unbinder.unbind(); } @Override @@ -135,17 +112,17 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment private void setUpPlayPauseFab() { final int fabColor = Color.WHITE; - TintHelper.setTintAuto(playPauseFab, fabColor, true); + TintHelper.setTintAuto(binding.playerPlayPauseFab, fabColor, true); playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity()); - playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called - playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN); - playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler()); - playPauseFab.post(() -> { - if (playPauseFab != null) { - playPauseFab.setPivotX(playPauseFab.getWidth() / 2); - playPauseFab.setPivotY(playPauseFab.getHeight() / 2); + binding.playerPlayPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called + binding.playerPlayPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN); + binding.playerPlayPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler()); + binding.playerPlayPauseFab.post(() -> { + if (binding.playerPlayPauseFab != null) { + binding.playerPlayPauseFab.setPivotX(binding.playerPlayPauseFab.getWidth() / 2); + binding.playerPlayPauseFab.setPivotY(binding.playerPlayPauseFab.getHeight() / 2); } }); } @@ -168,59 +145,59 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment private void setUpPrevNext() { updatePrevNextColor(); - nextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong()); - prevButton.setOnClickListener(v -> MusicPlayerRemote.back()); + binding.playerNextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong()); + binding.playerPrevButton.setOnClickListener(v -> MusicPlayerRemote.back()); } private void updateProgressTextColor() { int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false); - songTotalTime.setTextColor(color); - songCurrentProgress.setTextColor(color); + binding.playerSongTotalTime.setTextColor(color); + binding.playerSongCurrentProgress.setTextColor(color); } private void updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); - prevButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerNextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerPrevButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); } private void setUpShuffleButton() { - shuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode()); + binding.playerShuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode()); } private void updateShuffleState() { switch (MusicPlayerRemote.getShuffleMode()) { case MusicService.SHUFFLE_MODE_SHUFFLE: - shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerShuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); break; default: - shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerShuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); break; } } private void setUpRepeatButton() { - repeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode()); + binding.playerRepeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode()); } private void updateRepeatState() { switch (MusicPlayerRemote.getRepeatMode()) { case MusicService.REPEAT_MODE_NONE: - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); - repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); + binding.playerRepeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN); break; case MusicService.REPEAT_MODE_ALL: - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_white_24dp); + binding.playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); break; case MusicService.REPEAT_MODE_THIS: - repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp); - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp); + binding.playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN); break; } } public void show() { - playPauseFab.animate() + binding.playerPlayPauseFab.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -229,19 +206,17 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment } public void hide() { - if (playPauseFab != null) { - playPauseFab.setScaleX(0f); - playPauseFab.setScaleY(0f); - playPauseFab.setRotation(0f); - } + binding.playerPlayPauseFab.setScaleX(0f); + binding.playerPlayPauseFab.setScaleY(0f); + binding.playerPlayPauseFab.setRotation(0f); } private void setUpProgressSlider() { int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false); - progressSlider.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - progressSlider.getProgressDrawable().mutate().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN); + binding.playerProgressSlider.getThumb().mutate().setColorFilter(color, 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 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { @@ -254,9 +229,9 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment @Override public void onUpdateProgressViews(int progress, int total) { - progressSlider.setMax(total); - progressSlider.setProgress(progress); - songTotalTime.setText(MusicUtil.getReadableDurationString(total)); - songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress)); + binding.playerProgressSlider.setMax(total); + binding.playerProgressSlider.setProgress(progress); + binding.playerSongTotalTime.setText(MusicUtil.getReadableDurationString(total)); + binding.playerSongCurrentProgress.setText(MusicUtil.getReadableDurationString(progress)); } } diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/flat/FlatPlayerPlaybackControlsFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/flat/FlatPlayerPlaybackControlsFragment.java index d167c2f0..7384a036 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/flat/FlatPlayerPlaybackControlsFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/flat/FlatPlayerPlaybackControlsFragment.java @@ -124,10 +124,8 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment updatePlayPauseColor(); binding.playerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler()); binding.playerPlayPauseButton.post(() -> { - if (binding.playerPlayPauseButton != null) { - binding.playerPlayPauseButton.setPivotX(binding.playerPlayPauseButton.getWidth() / 2); - binding.playerPlayPauseButton.setPivotY(binding.playerPlayPauseButton.getHeight() / 2); - } + binding.playerPlayPauseButton.setPivotX(binding.playerPlayPauseButton.getWidth() / 2); + binding.playerPlayPauseButton.setPivotY(binding.playerPlayPauseButton.getHeight() / 2); }); } @@ -233,6 +231,7 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment if (musicControllerAnimationSet != null) { musicControllerAnimationSet.cancel(); } + prepareForAnimation(binding.playerPlayPauseButton); prepareForAnimation(binding.playerNextButton); prepareForAnimation(binding.playerPrevButton);