Transition lag fix
- in both Album and Artist View
This commit is contained in:
parent
496b64a5cf
commit
41502ee01e
13 changed files with 118 additions and 157 deletions
|
|
@ -68,12 +68,12 @@ public class App extends Application {
|
|||
return getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
|
||||
}
|
||||
|
||||
public void addToRequestQueue(Request request) {
|
||||
public void addToVolleyRequestQueue(Request request) {
|
||||
request.setTag(TAG);
|
||||
getRequestQueue().add(request);
|
||||
getVolleyRequestQueue().add(request);
|
||||
}
|
||||
|
||||
public RequestQueue getRequestQueue() {
|
||||
public RequestQueue getVolleyRequestQueue() {
|
||||
if (requestQueue == null) {
|
||||
requestQueue = Volley.newRequestQueue(this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ public class LastFMAlbumImageLoader {
|
|||
callback.onAlbumImageLoaded(null, null);
|
||||
}
|
||||
});
|
||||
app.addToRequestQueue(albumInfoJSONRequest);
|
||||
app.addToVolleyRequestQueue(albumInfoJSONRequest);
|
||||
}
|
||||
|
||||
public static interface AlbumImageLoaderCallback {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public class LastFMArtistBiographyLoader {
|
|||
callback.onArtistBioLoaded("");
|
||||
}
|
||||
});
|
||||
app.addToRequestQueue(artistInfoJSONRequest);
|
||||
app.addToVolleyRequestQueue(artistInfoJSONRequest);
|
||||
}
|
||||
|
||||
public static interface ArtistBioLoaderCallback {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public class LastFMArtistImageLoader {
|
|||
}
|
||||
} else {
|
||||
Log.i(TAG, queryArtist + " is not in cache.");
|
||||
downloadArtistImage(context, queryArtist, callback);
|
||||
downloadArtistJSONAndStartImageDownload(context, queryArtist, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ public class LastFMArtistImageLoader {
|
|||
}
|
||||
}
|
||||
|
||||
private static void downloadArtistImage(final Context context, final String artist, final ArtistImageLoaderCallback callback) {
|
||||
private static void downloadArtistJSONAndStartImageDownload(final Context context, final String artist, final ArtistImageLoaderCallback callback) {
|
||||
Log.i(TAG, "Downloading details for " + artist);
|
||||
App app = (App) context.getApplicationContext();
|
||||
String artistUrl = LastFMArtistInfoUtil.getArtistUrl(artist);
|
||||
|
|
@ -89,7 +89,7 @@ public class LastFMArtistImageLoader {
|
|||
callback.onArtistImageLoaded(null);
|
||||
}
|
||||
});
|
||||
app.addToRequestQueue(artistInfoJSONRequest);
|
||||
app.addToVolleyRequestQueue(artistInfoJSONRequest);
|
||||
}
|
||||
|
||||
public static interface ArtistImageLoaderCallback {
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public class LastFMArtistThumbnailLoader {
|
|||
callback.onArtistThumbnailLoaded(null);
|
||||
}
|
||||
});
|
||||
app.addToRequestQueue(artistInfoJSONRequest);
|
||||
app.addToVolleyRequestQueue(artistInfoJSONRequest);
|
||||
}
|
||||
|
||||
public static interface ArtistThumbnailLoaderCallback {
|
||||
|
|
|
|||
|
|
@ -70,12 +70,6 @@ public class AlbumJSONStore extends SQLiteOpenHelper {
|
|||
cursor.close();
|
||||
}
|
||||
return null;
|
||||
} @Override
|
||||
public void onCreate(final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + AlbumJSONColumns.NAME +
|
||||
" (" + AlbumJSONColumns.ALBUMANDARTIST_NAME + " TEXT NOT NULL," +
|
||||
AlbumJSONColumns.JSON + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
public void removeItem(final String albumAndArtistName) {
|
||||
|
|
@ -84,6 +78,12 @@ public class AlbumJSONStore extends SQLiteOpenHelper {
|
|||
albumAndArtistName.trim().toLowerCase()
|
||||
});
|
||||
|
||||
} @Override
|
||||
public void onCreate(final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + AlbumJSONColumns.NAME +
|
||||
" (" + AlbumJSONColumns.ALBUMANDARTIST_NAME + " TEXT NOT NULL," +
|
||||
AlbumJSONColumns.JSON + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
public interface AlbumJSONColumns {
|
||||
|
|
@ -94,6 +94,7 @@ public class AlbumJSONStore extends SQLiteOpenHelper {
|
|||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
|
||||
db.execSQL("DROP TABLE IF EXISTS " + AlbumJSONColumns.NAME);
|
||||
|
|
|
|||
|
|
@ -70,12 +70,6 @@ public class ArtistJSONStore extends SQLiteOpenHelper {
|
|||
cursor.close();
|
||||
}
|
||||
return null;
|
||||
} @Override
|
||||
public void onCreate(final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + ArtistJSONColumns.NAME +
|
||||
" (" + ArtistJSONColumns.ARTIST_NAME + " TEXT NOT NULL," +
|
||||
ArtistJSONColumns.JSON + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
public void removeItem(final String artistName) {
|
||||
|
|
@ -84,6 +78,12 @@ public class ArtistJSONStore extends SQLiteOpenHelper {
|
|||
artistName.trim().toLowerCase()
|
||||
});
|
||||
|
||||
} @Override
|
||||
public void onCreate(final SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + ArtistJSONColumns.NAME +
|
||||
" (" + ArtistJSONColumns.ARTIST_NAME + " TEXT NOT NULL," +
|
||||
ArtistJSONColumns.JSON + " TEXT NOT NULL);"
|
||||
);
|
||||
}
|
||||
|
||||
public interface ArtistJSONColumns {
|
||||
|
|
@ -94,6 +94,7 @@ public class ArtistJSONStore extends SQLiteOpenHelper {
|
|||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
|
||||
db.execSQL("DROP TABLE IF EXISTS " + ArtistJSONColumns.NAME);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.kabouzeid.materialmusic.ui.activities;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
|
|
@ -8,7 +9,6 @@ import android.os.Bundle;
|
|||
import android.os.Handler;
|
||||
import android.support.v7.graphics.Palette;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.transition.Transition;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
|
@ -33,7 +33,6 @@ import com.kabouzeid.materialmusic.model.Album;
|
|||
import com.kabouzeid.materialmusic.model.Song;
|
||||
import com.kabouzeid.materialmusic.ui.activities.base.AbsFabActivity;
|
||||
import com.kabouzeid.materialmusic.ui.activities.tageditor.AlbumTagEditorActivity;
|
||||
import com.kabouzeid.materialmusic.util.ImageLoaderUtil;
|
||||
import com.kabouzeid.materialmusic.util.MusicUtil;
|
||||
import com.kabouzeid.materialmusic.util.Util;
|
||||
import com.kabouzeid.materialmusic.util.ViewUtil;
|
||||
|
|
@ -129,10 +128,11 @@ public class AlbumDetailActivity extends AbsFabActivity implements OnMusicRemote
|
|||
}
|
||||
}
|
||||
};
|
||||
private Bitmap albumCover;
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if (Util.hasLollipopSDK()) postponeEnterTransition();
|
||||
app = (App) getApplicationContext();
|
||||
setTheme(app.getAppTheme());
|
||||
setUpTranslucence();
|
||||
|
|
@ -154,8 +154,19 @@ public class AlbumDetailActivity extends AbsFabActivity implements OnMusicRemote
|
|||
setUpObservableListViewParams();
|
||||
setUpToolBar();
|
||||
setUpViews();
|
||||
lollipopTransitionImageWrongSizeFix();
|
||||
animateEnterActivity();
|
||||
if (!Util.hasLollipopSDK()) animateEnterActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void goToAlbum(int albumId) {
|
||||
if (album.id != albumId) {
|
||||
goToAlbum(albumId);
|
||||
}
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
|
|
@ -191,27 +202,38 @@ public class AlbumDetailActivity extends AbsFabActivity implements OnMusicRemote
|
|||
albumTitleView.setScaleY(0);
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private void setUpAlbumArtAndApplyPalette() {
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getAlbumArtUri(album.id).toString(), albumArtImageView, new ImageLoadingListener() {
|
||||
@Override
|
||||
public void onLoadingStarted(String imageUri, View view) {
|
||||
albumArtImageView.setImageResource(R.drawable.default_album_art);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
|
||||
albumArtImageView.setImageResource(R.drawable.default_album_art);
|
||||
if (Util.hasLollipopSDK()) {
|
||||
startPostponedEnterTransition();
|
||||
animateEnterActivity();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, final View view, Bitmap loadedImage) {
|
||||
albumCover = loadedImage;
|
||||
applyPalette(loadedImage);
|
||||
if (Util.hasLollipopSDK()) {
|
||||
startPostponedEnterTransition();
|
||||
animateEnterActivity();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingCancelled(String imageUri, View view) {
|
||||
albumArtImageView.setImageResource(R.drawable.default_album_art);
|
||||
if (Util.hasLollipopSDK()) {
|
||||
startPostponedEnterTransition();
|
||||
animateEnterActivity();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -351,53 +373,6 @@ public class AlbumDetailActivity extends AbsFabActivity implements OnMusicRemote
|
|||
.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void goToAlbum(int albumId) {
|
||||
if (album.id != albumId) {
|
||||
goToAlbum(albumId);
|
||||
}
|
||||
}
|
||||
|
||||
private void lollipopTransitionImageWrongSizeFix() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {
|
||||
@Override
|
||||
public void onTransitionStart(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionEnd(Transition transition) {
|
||||
if (albumCover == null) {
|
||||
ImageLoader.getInstance().displayImage(MusicUtil.getAlbumArtUri(album.id).toString(), albumArtImageView, new ImageLoaderUtil.defaultAlbumArtOnFailed());
|
||||
} else {
|
||||
albumArtImageView.setImageBitmap(albumCover);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionCancel(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionPause(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionResume(Transition transition) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableViews() {
|
||||
super.enableViews();
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
package com.kabouzeid.materialmusic.ui.activities;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v13.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
|
|
@ -78,11 +78,10 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
private int toolbarColor;
|
||||
private int tabHeight;
|
||||
|
||||
private Bitmap artistImage;
|
||||
|
||||
private Fragment currentFragment;
|
||||
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setUpTranslucence(true, true);
|
||||
|
|
@ -94,7 +93,47 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
setUpObservableListViewParams();
|
||||
setUpToolBar();
|
||||
setUpViews();
|
||||
lollipopTransitionImageWrongSizeFix();
|
||||
|
||||
if (Util.hasLollipopSDK()) {
|
||||
getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {
|
||||
@Override
|
||||
public void onTransitionStart(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionEnd(Transition transition) {
|
||||
setUpArtistImageAndApplyPalette();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionCancel(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionPause(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionResume(Transition transition) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void goToArtist(int artistId) {
|
||||
if (artist.id != artistId) {
|
||||
super.goToArtist(artistId);
|
||||
}
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
|
|
@ -274,21 +313,17 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
}
|
||||
|
||||
private void setUpArtistImageAndApplyPalette() {
|
||||
if (artistImage == null) {
|
||||
LastFMArtistImageLoader.loadArtistImage(this, artist.name, new LastFMArtistImageLoader.ArtistImageLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistImageLoaded(Bitmap artistImage) {
|
||||
if (artistImage != null) {
|
||||
ArtistDetailActivity.this.artistImage = artistImage;
|
||||
artistImageView.setImageBitmap(artistImage);
|
||||
applyPalette(artistImage);
|
||||
}
|
||||
LastFMArtistImageLoader.loadArtistImage(this, artist.name, new LastFMArtistImageLoader.ArtistImageLoaderCallback() {
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
public void onArtistImageLoaded(Bitmap artistImage) {
|
||||
if (artistImage != null) {
|
||||
artistImageView.setImageBitmap(artistImage);
|
||||
applyPalette(artistImage);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
artistImageView.setImageBitmap(artistImage);
|
||||
applyPalette(artistImage);
|
||||
}
|
||||
//if (Util.hasLollipopSDK()) startPostponedEnterTransition();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void applyPalette(Bitmap bitmap) {
|
||||
|
|
@ -335,60 +370,6 @@ public class ArtistDetailActivity extends AbsFabActivity implements OnMusicRemot
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void goToArtist(int artistId) {
|
||||
if (artist.id != artistId) {
|
||||
super.goToArtist(artistId);
|
||||
}
|
||||
}
|
||||
|
||||
private void lollipopTransitionImageWrongSizeFix() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {
|
||||
@Override
|
||||
public void onTransitionStart(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionEnd(Transition transition) {
|
||||
if (artistImage == null) {
|
||||
LastFMArtistImageLoader.loadArtistImage(ArtistDetailActivity.this, artist.name, new LastFMArtistImageLoader.ArtistImageLoaderCallback() {
|
||||
@Override
|
||||
public void onArtistImageLoaded(Bitmap artistImage) {
|
||||
if (artistImage != null) {
|
||||
artistImageView.setImageBitmap(artistImage);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
artistImageView.setImageBitmap(artistImage);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionCancel(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionPause(Transition transition) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransitionResume(Transition transition) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_artist_detail, menu);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.app.Activity;
|
|||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v13.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
|
|
@ -14,7 +13,6 @@ import android.support.v7.app.ActionBar;
|
|||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.transition.Explode;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
|
|
@ -73,16 +71,12 @@ public class MainActivity extends AbsFabActivity
|
|||
R.id.navigation_drawer,
|
||||
drawerLayout
|
||||
);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
getWindow().setExitTransition(new Explode());
|
||||
}
|
||||
}
|
||||
|
||||
private void setUpViewPager() {
|
||||
viewPagerAdapter = new MainActivityViewPagerAdapter(this);
|
||||
viewPager.setAdapter(viewPagerAdapter);
|
||||
slidingTabLayout.setDistributeEvenly(true);
|
||||
//slidingTabLayout.setDistributeEvenly(true);
|
||||
slidingTabLayout.setSelectedIndicatorColors(Util.resolveColor(MainActivity.this, R.attr.colorAccent));
|
||||
slidingTabLayout.setViewPager(viewPager);
|
||||
}
|
||||
|
|
@ -318,7 +312,7 @@ public class MainActivity extends AbsFabActivity
|
|||
pages = new SparseArray<>();
|
||||
context = activity;
|
||||
titles = new String[]{
|
||||
context.getResources().getString(R.string.all_songs),
|
||||
context.getResources().getString(R.string.songs),
|
||||
context.getResources().getString(R.string.albums),
|
||||
context.getResources().getString(R.string.artists),
|
||||
context.getResources().getString(R.string.genres),
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ public class NavigationDrawerFragment extends Fragment {
|
|||
|
||||
private void setUpListView() {
|
||||
final ArrayList<NavigationDrawerItem> navigationDrawerItems = new ArrayList<>();
|
||||
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.all_songs), R.drawable.songs));
|
||||
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.songs), R.drawable.songs));
|
||||
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.albums), R.drawable.album));
|
||||
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.artists), R.drawable.interpret));
|
||||
navigationDrawerItems.add(new NavigationDrawerItem(getString(R.string.genres), R.drawable.songs));
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import android.graphics.Bitmap;
|
|||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.provider.MediaStore;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
|
|
@ -191,4 +192,12 @@ public class Util {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean hasLollipopSDK() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
|
||||
}
|
||||
|
||||
public static boolean hasKitKatSDK() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue