From cea025e20c4dfe352a7d6b0aa36e7c9947aadc21 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 9 Aug 2020 04:38:17 +0900 Subject: [PATCH] start view binding migration --- app/build.gradle | 4 + .../adapter/AlbumCoverPagerAdapter.java | 15 +-- .../player/PlayerAlbumCoverFragment.java | 56 ++++----- .../FlatPlayerPlaybackControlsFragment.java | 114 +++++++----------- .../layout/fragment_player_album_cover.xml | 2 +- 5 files changed, 79 insertions(+), 112 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bc6112db..f92a3caa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,10 @@ android { } } + buildFeatures { + viewBinding = true + } + lintOptions { disable 'MissingTranslation' abortOnError false diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/AlbumCoverPagerAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/AlbumCoverPagerAdapter.java index 090349de..dd39a007 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/AlbumCoverPagerAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/AlbumCoverPagerAdapter.java @@ -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); diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/PlayerAlbumCoverFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/PlayerAlbumCoverFragment.java index 0a27e8e8..994b6f56 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/PlayerAlbumCoverFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/PlayerAlbumCoverFragment.java @@ -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) 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 5404ad6e..d167c2f0 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 @@ -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 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)); } } diff --git a/app/src/main/res/layout/fragment_player_album_cover.xml b/app/src/main/res/layout/fragment_player_album_cover.xml index 4edcd170..3669e0de 100644 --- a/app/src/main/res/layout/fragment_player_album_cover.xml +++ b/app/src/main/res/layout/fragment_player_album_cover.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent">