/*
* Copyright (C) 2015 Naman Dwivedi
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package com.naman14.timber.fragments;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.naman14.timber.R;
import com.naman14.timber.dataloaders.ArtistLoader;
import com.naman14.timber.lastfmapi.LastFmClient;
import com.naman14.timber.lastfmapi.callbacks.ArtistInfoListener;
import com.naman14.timber.lastfmapi.models.ArtistQuery;
import com.naman14.timber.lastfmapi.models.LastfmArtist;
import com.naman14.timber.models.Artist;
import com.naman14.timber.utils.ATEUtils;
import com.naman14.timber.utils.Constants;
import com.naman14.timber.utils.Helpers;
import com.naman14.timber.utils.ImageUtils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
public class ArtistDetailFragment extends Fragment {
long artistID = -1;
ImageView artistArt;
Toolbar toolbar;
CollapsingToolbarLayout collapsingToolbarLayout;
AppBarLayout appBarLayout;
boolean largeImageLoaded = false;
int primaryColor = -1;
public static ArtistDetailFragment newInstance(long id, boolean useTransition, String transitionName) {
ArtistDetailFragment fragment = new ArtistDetailFragment();
Bundle args = new Bundle();
args.putLong(Constants.ARTIST_ID, id);
args.putBoolean("transition", useTransition);
if (useTransition)
args.putString("transition_name", transitionName);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
artistID = getArguments().getLong(Constants.ARTIST_ID);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.fragment_artist_detail, container, false);
artistArt = (ImageView) rootView.findViewById(R.id.artist_art);
collapsingToolbarLayout = (CollapsingToolbarLayout) rootView.findViewById(R.id.collapsing_toolbar);
appBarLayout = (AppBarLayout) rootView.findViewById(R.id.app_bar);
if (getArguments().getBoolean("transition")) {
artistArt.setTransitionName(getArguments().getString("transition_name"));
}
toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
setupToolbar();
setUpArtistDetails();
getChildFragmentManager().beginTransaction().replace(R.id.container, ArtistMusicFragment.newInstance(artistID)).commit();
return rootView;
}
private void setupToolbar() {
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayHomeAsUpEnabled(true);
}
private void setUpArtistDetails() {
final Artist artist = ArtistLoader.getArtist(getActivity(), artistID);
collapsingToolbarLayout.setTitle(artist.name);
LastFmClient.getInstance(getActivity()).getArtistInfo(new ArtistQuery(artist.name), new ArtistInfoListener() {
@Override
public void artistInfoSucess(final LastfmArtist artist) {
if (artist != null) {
ImageLoader.getInstance().displayImage(artist.mArtwork.get(4).mUrl, artistArt,
new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnFail(R.drawable.ic_empty_music2)
.build(), new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
largeImageLoaded = true;
try {
new Palette.Builder(loadedImage).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch swatch = palette.getVibrantSwatch();
if (swatch != null) {
primaryColor = swatch.getRgb();
collapsingToolbarLayout.setContentScrimColor(primaryColor);
if (getActivity() != null)
ATEUtils.setStatusBarColor(getActivity(), Helpers.getATEKey(getActivity()), primaryColor);
} else {
Palette.Swatch swatchMuted = palette.getMutedSwatch();
if (swatchMuted != null) {
primaryColor = swatchMuted.getRgb();
collapsingToolbarLayout.setContentScrimColor(primaryColor);
if (getActivity() != null)
ATEUtils.setStatusBarColor(getActivity(), Helpers.getATEKey(getActivity()), primaryColor);
}
}
}
});
} catch (Exception ignored) {
}
}
});
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
setBlurredPlaceholder(artist);
}
}, 100);
}
}
@Override
public void artistInfoFailed() {
}
});
}
private void setBlurredPlaceholder(LastfmArtist artist) {
ImageLoader.getInstance().loadImage(artist.mArtwork.get(1).mUrl, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (getActivity() != null && !largeImageLoaded)
new setBlurredAlbumArt().execute(loadedImage);
}
});
}
@Override
public void onResume() {
super.onResume();
toolbar.setBackgroundColor(Color.TRANSPARENT);
if (primaryColor != -1 && getActivity() != null) {
collapsingToolbarLayout.setContentScrimColor(primaryColor);
String ateKey = Helpers.getATEKey(getActivity());
ATEUtils.setStatusBarColor(getActivity(), ateKey, primaryColor);
}
}
private class setBlurredAlbumArt extends AsyncTask<Bitmap, Void, Drawable> {
@Override
protected Drawable doInBackground(Bitmap... loadedImage) {
Drawable drawable = null;
try {
drawable = ImageUtils.createBlurredImageFromBitmap(loadedImage[0], getActivity(), 3);
} catch (Exception e) {
e.printStackTrace();
}
return drawable;
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null && !largeImageLoaded) {
artistArt.setImageDrawable(result);
}
}
@Override
protected void onPreExecute() {
}
}
}