From eca41ab93a89d3f9b9f62e3bae0b21bb3662e785 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 17 Aug 2020 05:31:46 +0900 Subject: [PATCH] use view binding for all details activities --- .../ui/activities/AlbumDetailActivity.java | 92 +++++++------------ .../ui/activities/ArtistDetailActivity.java | 87 +++++++----------- .../ui/activities/GenreDetailActivity.java | 39 +++----- .../ui/activities/SearchActivity.java | 6 +- 4 files changed, 80 insertions(+), 144 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/AlbumDetailActivity.java index 696c197a..21bec730 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/AlbumDetailActivity.java @@ -7,19 +7,17 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.util.DialogUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; +import com.dkanada.gramophone.databinding.ActivityAlbumDetailBinding; import com.google.android.material.appbar.AppBarLayout; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; @@ -47,41 +45,12 @@ import org.jellyfin.apiclient.model.querying.ItemQuery; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder, AppBarLayout.OnOffsetChangedListener { public static final String EXTRA_ALBUM = "extra_album"; private Album album; - @BindView(R.id.app_bar_layout) - AppBarLayout appBarLayout; - @BindView(R.id.list) - RecyclerView recyclerView; - @BindView(R.id.image) - ImageView albumArtImageView; - @BindView(R.id.toolbar) - Toolbar toolbar; - @BindView(R.id.header) - View headerView; - - @BindView(R.id.artist_icon) - ImageView artistIconImageView; - @BindView(R.id.duration_icon) - ImageView durationIconImageView; - @BindView(R.id.song_count_icon) - ImageView songCountIconImageView; - @BindView(R.id.album_year_icon) - ImageView albumYearIconImageView; - @BindView(R.id.artist_text) - TextView artistTextView; - @BindView(R.id.duration_text) - TextView durationTextView; - @BindView(R.id.song_count_text) - TextView songCountTextView; - @BindView(R.id.album_year_text) - TextView albumYearTextView; + ActivityAlbumDetailBinding binding; private AlbumSongAdapter adapter; @@ -92,11 +61,13 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setDrawUnderStatusbar(); - ButterKnife.bind(this); + binding = ActivityAlbumDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + setDrawUnderStatusbar(); setUpObservableListViewParams(); - setUpToolBar(); + setUpToolbar(); setUpViews(); if (Build.VERSION.SDK_INT > 21) postponeEnterTransition(); @@ -120,7 +91,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public void onOffsetChanged (AppBarLayout appBarLayout, int verticalOffset) { float headerAlpha = Math.max(0, Math.min(1, 1 + (2 * (float) verticalOffset / headerViewHeight))); - headerView.setAlpha(headerAlpha); + binding.header.setAlpha(headerAlpha); } @Override @@ -135,7 +106,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setUpViews() { setUpRecyclerView(); setUpSongsAdapter(); - artistTextView.setOnClickListener(v -> { + binding.artistText.setOnClickListener(v -> { if (album != null) { NavigationUtil.goToArtist(AlbumDetailActivity.this, new Artist(album)); } @@ -162,7 +133,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements } }) .dontAnimate() - .into(new CustomPaletteTarget(albumArtImageView) { + .into(new CustomPaletteTarget(binding.image) { @Override public void onColorReady(int color) { setColors(color); @@ -172,25 +143,26 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setColors(int color) { toolbarColor = color; - appBarLayout.setBackgroundColor(color); + binding.appBarLayout.setBackgroundColor(color); setNavigationbarColor(color); setTaskDescriptionColor(color); - toolbar.setBackgroundColor(color); + binding.toolbar.setBackgroundColor(color); // needed to auto readjust the toolbar content color - setSupportActionBar(toolbar); + setSupportActionBar(binding.toolbar); setStatusbarColor(color); int secondaryTextColor = MaterialValueHelper.getSecondaryTextColor(this, ColorUtil.isColorLight(color)); - artistIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - durationIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - songCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - albumYearIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - artistTextView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); - durationTextView.setTextColor(secondaryTextColor); - songCountTextView.setTextColor(secondaryTextColor); - albumYearTextView.setTextColor(secondaryTextColor); + binding.artistIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + binding.durationIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + binding.songCountIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + binding.albumYearIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + + binding.artistText.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); + binding.durationText.setTextColor(secondaryTextColor); + binding.songCountText.setTextColor(secondaryTextColor); + binding.albumYearText.setTextColor(secondaryTextColor); } @Override @@ -199,11 +171,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements } private void setUpRecyclerView() { - appBarLayout.addOnOffsetChangedListener(this); + binding.appBarLayout.addOnOffsetChangedListener(this); } - private void setUpToolBar() { - setSupportActionBar(toolbar); + private void setUpToolbar() { + setSupportActionBar(binding.toolbar); //noinspection ConstantConditions getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -211,8 +183,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setUpSongsAdapter() { adapter = new AlbumSongAdapter(this, getAlbum().songs, R.layout.item_list, false, this); - recyclerView.setLayoutManager(new GridLayoutManager(this, 1)); - recyclerView.setAdapter(adapter); + binding.list.setLayoutManager(new GridLayoutManager(this, 1)); + binding.list.setAdapter(adapter); adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { @@ -291,7 +263,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements if (cab != null && cab.isActive()) { cab.finish(); } else { - recyclerView.stopScroll(); + binding.list.stopScroll(); super.onBackPressed(); } } @@ -306,10 +278,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements this.album = album; getSupportActionBar().setTitle(album.title); - artistTextView.setText(album.artistName); - songCountTextView.setText(MusicUtil.getSongCountString(this, album.songs.size())); - durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))); - albumYearTextView.setText(MusicUtil.getYearString(album.year)); + binding.artistText.setText(album.artistName); + binding.songCountText.setText(MusicUtil.getSongCountString(this, album.songs.size())); + binding.durationText.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))); + binding.albumYearText.setText(MusicUtil.getYearString(album.year)); if (album.songs.size() != 0) adapter.swapDataSet(album.songs); } diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/ArtistDetailActivity.java index 68479018..0a0f45c3 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/ArtistDetailActivity.java @@ -6,16 +6,11 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import butterknife.BindView; -import butterknife.ButterKnife; import java.util.List; @@ -25,6 +20,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.dkanada.gramophone.adapter.song.SongAdapter; +import com.dkanada.gramophone.databinding.ActivityArtistDetailBinding; import com.google.android.material.appbar.AppBarLayout; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; @@ -53,31 +49,7 @@ import org.jellyfin.apiclient.model.querying.ItemQuery; public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder, AppBarLayout.OnOffsetChangedListener { public static final String EXTRA_ARTIST = "extra_artist"; - @BindView(R.id.app_bar_layout) - AppBarLayout appBarLayout; - @BindView(R.id.albums) - RecyclerView albumRecyclerView; - @BindView(R.id.songs) - RecyclerView songRecyclerView; - @BindView(R.id.image) - ImageView artistImage; - @BindView(R.id.toolbar) - Toolbar toolbar; - @BindView(R.id.header) - View headerView; - - @BindView(R.id.duration_icon) - ImageView durationIconImageView; - @BindView(R.id.song_count_icon) - ImageView songCountIconImageView; - @BindView(R.id.album_count_icon) - ImageView albumCountIconImageView; - @BindView(R.id.duration_text) - TextView durationTextView; - @BindView(R.id.song_count_text) - TextView songCountTextView; - @BindView(R.id.album_count_text) - TextView albumCountTextView; + ActivityArtistDetailBinding binding; private MaterialCab cab; private int headerViewHeight; @@ -90,15 +62,17 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + binding = ActivityArtistDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + setDrawUnderStatusbar(); - ButterKnife.bind(this); - - usePalette = PreferenceUtil.getInstance(this).getAlbumArtistColoredFooters(); - setUpObservableListViewParams(); setUpToolbar(); setUpViews(); + usePalette = PreferenceUtil.getInstance(this).getAlbumArtistColoredFooters(); + if (Build.VERSION.SDK_INT > 21) postponeEnterTransition(); Artist artist = getIntent().getExtras().getParcelable(EXTRA_ARTIST); loadArtistImage(artist.primary); @@ -126,9 +100,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement } @Override - public void onOffsetChanged (AppBarLayout appBarLayout, int verticalOffset) { + public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { float headerAlpha = Math.max(0, Math.min(1, 1 + (2 * (float) verticalOffset / headerViewHeight))); - headerView.setAlpha(headerAlpha); + binding.header.setAlpha(headerAlpha); } @Override @@ -149,18 +123,18 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement } private void setUpSongListView() { - appBarLayout.addOnOffsetChangedListener(this); + binding.appBarLayout.addOnOffsetChangedListener(this); songAdapter = new SongAdapter(this, getArtist().songs, R.layout.item_list, false, this); - songRecyclerView.setLayoutManager(new GridLayoutManager(this, 1)); - songRecyclerView.setAdapter(songAdapter); + binding.songs.setLayoutManager(new GridLayoutManager(this, 1)); + binding.songs.setAdapter(songAdapter); } private void setUpAlbumRecyclerView() { - albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + binding.albums.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); albumAdapter = new HorizontalAlbumAdapter(this, getArtist().albums, usePalette, this); - albumRecyclerView.setAdapter(albumAdapter); + binding.albums.setAdapter(albumAdapter); albumAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { @@ -194,7 +168,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement } }) .dontAnimate() - .into(new CustomPaletteTarget(artistImage) { + .into(new CustomPaletteTarget(binding.image) { @Override public void onColorReady(int color) { setColors(color); @@ -209,27 +183,28 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement private void setColors(int color) { toolbarColor = color; - appBarLayout.setBackgroundColor(color); + binding.appBarLayout.setBackgroundColor(color); setNavigationbarColor(color); setTaskDescriptionColor(color); - toolbar.setBackgroundColor(color); + binding.toolbar.setBackgroundColor(color); // needed to auto readjust the toolbar content color - setSupportActionBar(toolbar); + setSupportActionBar(binding.toolbar); setStatusbarColor(color); int secondaryTextColor = MaterialValueHelper.getSecondaryTextColor(this, ColorUtil.isColorLight(color)); - durationIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - songCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - albumCountIconImageView.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); - durationTextView.setTextColor(secondaryTextColor); - songCountTextView.setTextColor(secondaryTextColor); - albumCountTextView.setTextColor(secondaryTextColor); + binding.durationIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + binding.songCountIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + binding.albumCountIcon.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN); + + binding.durationText.setTextColor(secondaryTextColor); + binding.songCountText.setTextColor(secondaryTextColor); + binding.albumCountText.setTextColor(secondaryTextColor); } private void setUpToolbar() { - setSupportActionBar(toolbar); + setSupportActionBar(binding.toolbar); // noinspection ConstantConditions getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -306,7 +281,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement if (cab != null && cab.isActive()) { cab.finish(); } else { - albumRecyclerView.stopScroll(); + binding.albums.stopScroll(); super.onBackPressed(); } } @@ -321,9 +296,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement this.artist = artist; getSupportActionBar().setTitle(artist.name); - songCountTextView.setText(MusicUtil.getSongCountString(this, artist.songs.size())); - albumCountTextView.setText(MusicUtil.getAlbumCountString(this, artist.albums.size())); - durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.songs))); + binding.songCountText.setText(MusicUtil.getSongCountString(this, artist.songs.size())); + binding.albumCountText.setText(MusicUtil.getAlbumCountString(this, artist.albums.size())); + binding.durationText.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.songs))); if (artist.songs.size() != 0) songAdapter.swapDataSet(artist.songs); if (artist.albums.size() != 0) albumAdapter.swapDataSet(artist.albums); diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/GenreDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/GenreDetailActivity.java index 83460299..8c89ff6b 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/GenreDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/GenreDetailActivity.java @@ -4,13 +4,12 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.TextView; import com.afollestad.materialcab.MaterialCab; +import com.dkanada.gramophone.databinding.ActivityGenreDetailBinding; import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; import com.kabouzeid.appthemehelper.ThemeStore; import com.dkanada.gramophone.R; @@ -31,18 +30,10 @@ import org.jellyfin.apiclient.model.querying.ItemQuery; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder { public static final String EXTRA_GENRE = "extra_genre"; - @BindView(R.id.recycler_view) - RecyclerView recyclerView; - @BindView(R.id.toolbar) - Toolbar toolbar; - @BindView(android.R.id.empty) - TextView empty; + ActivityGenreDetailBinding binding; private Genre genre; @@ -54,10 +45,13 @@ public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setDrawUnderStatusbar(); - ButterKnife.bind(this); + binding = ActivityGenreDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + setDrawUnderStatusbar(); setStatusbarColorAuto(); + setNavigationbarColorAuto(); setTaskDescriptionColorAuto(); @@ -83,11 +77,11 @@ public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements } private void setUpRecyclerView() { - ViewUtil.setUpFastScrollRecyclerViewColor(this, ((FastScrollRecyclerView) recyclerView), ThemeStore.accentColor(this)); - recyclerView.setLayoutManager(new LinearLayoutManager(this)); + ViewUtil.setUpFastScrollRecyclerViewColor(this, ((FastScrollRecyclerView) binding.recyclerView), ThemeStore.accentColor(this)); + binding.recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new SongAdapter(this, new ArrayList<>(), R.layout.item_list, false, this); - recyclerView.setAdapter(adapter); + binding.recyclerView.setAdapter(adapter); adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override @@ -99,8 +93,8 @@ public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements } private void setUpToolBar() { - toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); - setSupportActionBar(toolbar); + binding.toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); + setSupportActionBar(binding.toolbar); //noinspection ConstantConditions getSupportActionBar().setTitle(genre.name); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -144,21 +138,18 @@ public class GenreDetailActivity extends AbsSlidingMusicPanelActivity implements public void onBackPressed() { if (cab != null && cab.isActive()) cab.finish(); else { - recyclerView.stopScroll(); + binding.recyclerView.stopScroll(); super.onBackPressed(); } } private void checkIsEmpty() { - empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); + binding.empty.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } @Override protected void onDestroy() { - if (recyclerView != null) { - recyclerView.setAdapter(null); - recyclerView = null; - } + binding.recyclerView.setAdapter(null); if (wrappedAdapter != null) { WrapperAdapterUtils.releaseAll(wrappedAdapter); diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/SearchActivity.java index 2bd3760f..7c63801f 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/SearchActivity.java @@ -5,11 +5,9 @@ import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; -import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -35,7 +33,7 @@ import java.util.List; import java.util.Map; public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener { - public static final String QUERY = "query"; + public String QUERY = "query"; ActivitySearchBinding binding; @@ -85,7 +83,7 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie } @Override - protected void onSaveInstanceState(Bundle outState) { + protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString(QUERY, query); }