Fixed scrolling lags when loading album covers directly from their song files.

This commit is contained in:
Karim Abou Zeid 2015-08-23 17:03:39 +02:00
commit e1f0b32e9f
4 changed files with 46 additions and 33 deletions

View file

@ -15,6 +15,7 @@ import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.tag.images.Artwork;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
@ -73,14 +74,9 @@ public class PhonographImageDownloader extends BaseImageDownloader {
if (PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork()) { if (PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork()) {
ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(context, albumId); ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(context, albumId);
for (Song song : songs) { for (Song song : songs) {
try { byte[] albumCover = getAlbumCoverBinaryData(new File(song.data));
AudioFile audioFile = AudioFileIO.read(new File(song.data)); if (albumCover != null) {
byte[] albumCover = audioFile.getTagOrCreateAndSetDefault().getFirstArtwork().getBinaryData(); return new ByteArrayInputStream(albumCover);
if (albumCover != null) {
return new ByteArrayInputStream(albumCover);
}
} catch (@NonNull Exception e) {
e.printStackTrace();
} }
} }
} }
@ -92,14 +88,9 @@ public class PhonographImageDownloader extends BaseImageDownloader {
String[] data = imageUri.substring(SCHEME_SONG.length()).split("#", 2); String[] data = imageUri.substring(SCHEME_SONG.length()).split("#", 2);
if (PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork()) { if (PreferenceUtil.getInstance(context).ignoreMediaStoreArtwork()) {
try { byte[] albumCover = getAlbumCoverBinaryData(new File(data[1]));
AudioFile audioFile = AudioFileIO.read(new File(data[1])); if (albumCover != null) {
byte[] albumCover = audioFile.getTagOrCreateAndSetDefault().getFirstArtwork().getBinaryData(); return new ByteArrayInputStream(albumCover);
if (albumCover != null) {
return new ByteArrayInputStream(albumCover);
}
} catch (@NonNull Exception e) {
e.printStackTrace();
} }
} }
@ -107,6 +98,20 @@ public class PhonographImageDownloader extends BaseImageDownloader {
return getMediaProviderAlbumArtInputStream(id); return getMediaProviderAlbumArtInputStream(id);
} }
@Nullable
private static byte[] getAlbumCoverBinaryData(File song) {
try {
AudioFile audioFile = AudioFileIO.read(song);
Artwork artwork = audioFile.getTagOrCreateAndSetDefault().getFirstArtwork();
if (artwork != null) {
return artwork.getBinaryData();
}
} catch (@NonNull Exception e) {
e.printStackTrace();
}
return null;
}
@Nullable @Nullable
private InputStream getMediaProviderAlbumArtInputStream(int albumId) throws private InputStream getMediaProviderAlbumArtInputStream(int albumId) throws
FileNotFoundException { FileNotFoundException {

View file

@ -92,8 +92,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setStatusBarTransparent();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setStatusBarTransparent();
ButterKnife.bind(this); ButterKnife.bind(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@ -107,7 +107,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
setUpObservableListViewParams(); setUpObservableListViewParams();
setUpToolBar(); setUpToolBar();
setUpViews(); setUpViews();
animateFabCircularRevealOnEnterTransitionEnd(); animateAlbumArtBackgroundOnEnterTransitionEnd();
} }
@Override @Override
@ -115,7 +115,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
return wrapSlidingMusicPanelAndFab(R.layout.activity_album_detail); return wrapSlidingMusicPanelAndFab(R.layout.activity_album_detail);
} }
private void animateFabCircularRevealOnEnterTransitionEnd() { private void animateAlbumArtBackgroundOnEnterTransitionEnd() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getEnterTransition().addListener(new SimpleTransitionListener() { getWindow().getEnterTransition().addListener(new SimpleTransitionListener() {
@Override @Override
@ -372,6 +372,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAG_EDITOR_REQUEST) { if (requestCode == TAG_EDITOR_REQUEST) {
getAlbumFromIntentExtras();
albumTitleView.setText(album.title);
setUpAlbumArtAndApplyPalette(); setUpAlbumArtAndApplyPalette();
setResult(RESULT_OK); setResult(RESULT_OK);
} }

View file

@ -109,8 +109,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setStatusBarTransparent();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setStatusBarTransparent();
ButterKnife.bind(this); ButterKnife.bind(this);
if (shouldColorNavigationBar()) if (shouldColorNavigationBar())
@ -122,12 +122,16 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
initViews(); initViews();
setUpObservableListViewParams(); setUpObservableListViewParams();
setUpViews(); setUpViews();
setUpToolbar();
animateAlbumArtBackgroundOnEnterTransitionEnd();
}
setSupportActionBar(toolbar); @Override
//noinspection ConstantConditions protected View createContentView() {
getSupportActionBar().setTitle(null); return wrapSlidingMusicPanelAndFab(R.layout.activity_artist_detail);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
private void animateAlbumArtBackgroundOnEnterTransitionEnd() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getEnterTransition().addListener(new SimpleTransitionListener() { getWindow().getEnterTransition().addListener(new SimpleTransitionListener() {
@Override @Override
@ -153,11 +157,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
} }
@Override
protected View createContentView() {
return wrapSlidingMusicPanelAndFab(R.layout.activity_artist_detail);
}
private final SimpleObservableScrollViewCallbacks observableScrollViewCallbacks = new SimpleObservableScrollViewCallbacks() { private final SimpleObservableScrollViewCallbacks observableScrollViewCallbacks = new SimpleObservableScrollViewCallbacks() {
@Override @Override
public void onScrollChanged(int scrollY, boolean b, boolean b2) { public void onScrollChanged(int scrollY, boolean b, boolean b2) {
@ -203,7 +202,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setUpViews() { private void setUpViews() {
artistName.setText(artist.name); artistName.setText(artist.name);
setUpArtistImageAndApplyPalette(false); setUpArtistImageAndApplyPalette(false);
setUpSongListView(); setUpSongListView();
setUpAlbumRecyclerView(); setUpAlbumRecyclerView();
@ -347,8 +345,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) if (resultCode == RESULT_OK) {
albumAdapter.notifyDataSetChanged(); reloadDataSets();
}
} }
@Override @Override
@ -384,6 +383,13 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
} }
} }
private void setUpToolbar() {
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setTitle(null);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_artist_detail, menu); getMenuInflater().inflate(R.menu.menu_artist_detail, menu);

View file

@ -55,8 +55,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setStatusBarTransparent(); setStatusBarTransparent();
ButterKnife.bind(this);
getIntentExtras(); getIntentExtras();