start view binding migration

This commit is contained in:
dkanada 2020-08-09 04:38:17 +09:00
commit cea025e20c
5 changed files with 79 additions and 112 deletions

View file

@ -11,6 +11,7 @@ import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.databinding.FragmentAlbumCoverBinding;
import com.dkanada.gramophone.glide.CustomGlideRequest;
import com.dkanada.gramophone.glide.CustomPaletteTarget;
import com.dkanada.gramophone.misc.CustomFragmentStatePagerAdapter;
@ -71,10 +72,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
public static class AlbumCoverFragment extends Fragment {
private static final String SONG_ARG = "song";
private Unbinder unbinder;
@BindView(R.id.player_image)
ImageView albumCover;
private FragmentAlbumCoverBinding binding;
private boolean isColorReady;
private int color;
@ -98,9 +96,9 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_album_cover, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
binding = FragmentAlbumCoverBinding.inflate(inflater);
return binding.getRoot();
}
@Override
@ -112,7 +110,6 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
colorReceiver = null;
}
@ -120,7 +117,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
CustomGlideRequest.Builder
.from(Glide.with(getContext()), song.primary)
.generatePalette(getActivity()).build()
.into(new CustomPaletteTarget(albumCover) {
.into(new CustomPaletteTarget(binding.playerImage) {
@Override
public void onColorReady(int color) {
setColor(color);

View file

@ -11,45 +11,35 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.AlbumCoverPagerAdapter;
import com.dkanada.gramophone.databinding.FragmentPlayerAlbumCoverBinding;
import com.dkanada.gramophone.helper.MusicPlayerRemote;
import com.dkanada.gramophone.misc.SimpleAnimatorListener;
import com.dkanada.gramophone.ui.fragments.AbsMusicServiceFragment;
import com.dkanada.gramophone.util.ViewUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements ViewPager.OnPageChangeListener {
public static final int VISIBILITY_ANIM_DURATION = 300;
private Unbinder unbinder;
@BindView(R.id.player_album_cover_viewpager)
ViewPager viewPager;
@BindView(R.id.player_favorite_icon)
ImageView favoriteIcon;
FragmentPlayerAlbumCoverBinding binding;
private Callbacks callbacks;
private int currentPosition;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_player_album_cover, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
binding = FragmentPlayerAlbumCoverBinding.inflate(inflater);
return binding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPager.addOnPageChangeListener(this);
viewPager.setOnTouchListener(new View.OnTouchListener() {
binding.playerAlbumCoverViewPager.addOnPageChangeListener(this);
binding.playerAlbumCoverViewPager.setOnTouchListener(new View.OnTouchListener() {
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
@ -71,8 +61,8 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
@Override
public void onDestroyView() {
super.onDestroyView();
viewPager.removeOnPageChangeListener(this);
unbinder.unbind();
binding.playerAlbumCoverViewPager.removeOnPageChangeListener(this);
}
@Override
@ -82,7 +72,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
@Override
public void onPlayMetadataChanged() {
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
binding.playerAlbumCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition());
}
@Override
@ -91,8 +81,8 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
}
private void updatePlayingQueue() {
viewPager.setAdapter(new AlbumCoverPagerAdapter(getFragmentManager(), MusicPlayerRemote.getPlayingQueue()));
viewPager.setCurrentItem(MusicPlayerRemote.getPosition());
binding.playerAlbumCoverViewPager.setAdapter(new AlbumCoverPagerAdapter(getFragmentManager(), MusicPlayerRemote.getPlayingQueue()));
binding.playerAlbumCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition());
onPageSelected(MusicPlayerRemote.getPosition());
}
@ -103,7 +93,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
@Override
public void onPageSelected(int position) {
currentPosition = position;
((AlbumCoverPagerAdapter) viewPager.getAdapter()).receiveColor(colorReceiver, position);
((AlbumCoverPagerAdapter) binding.playerAlbumCoverViewPager.getAdapter()).receiveColor(colorReceiver, position);
if (position != MusicPlayerRemote.getPosition()) {
MusicPlayerRemote.playSongAt(position);
}
@ -123,16 +113,16 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
}
public void showHeartAnimation() {
favoriteIcon.clearAnimation();
binding.playerFavoriteIcon.clearAnimation();
favoriteIcon.setAlpha(0f);
favoriteIcon.setScaleX(0f);
favoriteIcon.setScaleY(0f);
favoriteIcon.setVisibility(View.VISIBLE);
favoriteIcon.setPivotX(favoriteIcon.getWidth() / 2);
favoriteIcon.setPivotY(favoriteIcon.getHeight() / 2);
binding.playerFavoriteIcon.setAlpha(0f);
binding.playerFavoriteIcon.setScaleX(0f);
binding.playerFavoriteIcon.setScaleY(0f);
binding.playerFavoriteIcon.setVisibility(View.VISIBLE);
binding.playerFavoriteIcon.setPivotX(binding.playerFavoriteIcon.getWidth() / 2);
binding.playerFavoriteIcon.setPivotY(binding.playerFavoriteIcon.getHeight() / 2);
favoriteIcon.animate()
binding.playerFavoriteIcon.animate()
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1f)
@ -141,10 +131,10 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationCancel(Animator animation) {
favoriteIcon.setVisibility(View.INVISIBLE);
binding.playerFavoriteIcon.setVisibility(View.INVISIBLE);
}
})
.withEndAction(() -> favoriteIcon.animate()
.withEndAction(() -> binding.playerFavoriteIcon.animate()
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
.setInterpolator(new AccelerateInterpolator())
.scaleX(0f)

View file

@ -12,10 +12,9 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import com.dkanada.gramophone.databinding.FragmentFlatPlayerPlaybackControlsBinding;
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.MusicPlayerRemote;
@ -30,31 +29,8 @@ import com.dkanada.gramophone.views.PlayPauseDrawable;
import java.util.Collection;
import java.util.LinkedList;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment implements MusicProgressViewUpdateHelper.Callback {
private Unbinder unbinder;
@BindView(R.id.player_play_pause__button)
ImageButton playPauseButton;
@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;
FragmentFlatPlayerPlaybackControlsBinding binding;
private PlayPauseDrawable playPauseDrawable;
@ -75,13 +51,14 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_flat_player_playback_controls, container, false);
binding = FragmentFlatPlayerPlaybackControlsBinding.inflate(inflater);
return binding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
updateProgressTextColor();
}
@ -89,7 +66,6 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
@ -144,13 +120,13 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
private void setUpPlayPauseButton() {
playPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseButton.setImageDrawable(playPauseDrawable);
binding.playerPlayPauseButton.setImageDrawable(playPauseDrawable);
updatePlayPauseColor();
playPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseButton.post(() -> {
if (playPauseButton != null) {
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
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);
}
});
}
@ -173,57 +149,57 @@ public class FlatPlayerPlaybackControlsFragment 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 updatePlayPauseColor() {
playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
binding.playerPlayPauseButton.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;
}
}
@ -236,11 +212,11 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
LinkedList<Animator> animators = new LinkedList<>();
addAnimation(animators, playPauseButton, interpolator, duration, 0);
addAnimation(animators, nextButton, interpolator, duration, 100);
addAnimation(animators, prevButton, interpolator, duration, 100);
addAnimation(animators, shuffleButton, interpolator, duration, 200);
addAnimation(animators, repeatButton, interpolator, duration, 200);
addAnimation(animators, binding.playerPlayPauseButton, interpolator, duration, 0);
addAnimation(animators, binding.playerNextButton, interpolator, duration, 100);
addAnimation(animators, binding.playerPrevButton, interpolator, duration, 100);
addAnimation(animators, binding.playerShuffleButton, interpolator, duration, 200);
addAnimation(animators, binding.playerRepeatButton, interpolator, duration, 200);
musicControllerAnimationSet = new AnimatorSet();
musicControllerAnimationSet.playTogether(animators);
@ -257,11 +233,11 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
if (musicControllerAnimationSet != null) {
musicControllerAnimationSet.cancel();
}
prepareForAnimation(playPauseButton);
prepareForAnimation(nextButton);
prepareForAnimation(prevButton);
prepareForAnimation(shuffleButton);
prepareForAnimation(repeatButton);
prepareForAnimation(binding.playerPlayPauseButton);
prepareForAnimation(binding.playerNextButton);
prepareForAnimation(binding.playerPrevButton);
prepareForAnimation(binding.playerShuffleButton);
prepareForAnimation(binding.playerRepeatButton);
hidden = true;
}
@ -289,10 +265,10 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
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) {
@ -305,9 +281,9 @@ public class FlatPlayerPlaybackControlsFragment 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));
}
}

View file

@ -6,7 +6,7 @@
android:layout_height="match_parent">
<androidx.viewpager.widget.ViewPager
android:id="@+id/player_album_cover_viewpager"
android:id="@+id/player_album_cover_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />