Fixed scrolling lags when loading album covers directly from their song files.
This commit is contained in:
parent
1350454484
commit
e1f0b32e9f
4 changed files with 46 additions and 33 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue