package com.wm.remusic.fragment;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
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.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.wm.remusic.R;
import com.wm.remusic.adapter.PlaylistDetailAdapter;
import com.wm.remusic.info.MusicInfo;
import com.wm.remusic.provider.PlaylistsManager;
import com.wm.remusic.service.MediaService;
import com.wm.remusic.service.MusicTrack;
import com.wm.remusic.uitl.CommonUtils;
import com.wm.remusic.uitl.IConstants;
import com.wm.remusic.uitl.ImageUtils;
import com.wm.remusic.uitl.MusicUtils;
import com.wm.remusic.widget.DividerItemDecoration;
import java.util.ArrayList;
/**
* Created by wm on 2016/3/8.
*/
public class PlaylistDetailFragment extends Fragment {
private long playlsitId = -1;
private String albumPath, playlistname;
private PlaylistsManager playlistsManager;
private SimpleDraweeView albumArtSmall;
private ImageView albumArt;
private TextView albumTitle, albumDetails;
private RecyclerView recyclerView;
private PlaylistDetailAdapter mAdapter;
private Toolbar toolbar;
private CollapsingToolbarLayout collapsingToolbarLayout;
private AppBarLayout appBarLayout;
private Context context;
//接受广播
private BroadcastReceiver mStatusListener = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(IConstants.PLAYLIST_ITEM_MOVED)) {
reloadAdapter();
} else if (action.equals(IConstants.MUSIC_COUNT_CHANGED)) {
refreshPlaylist();
reloadAdapter();
}
}
};
public static PlaylistDetailFragment newInstance(long id, String albumArt, String name) {
PlaylistDetailFragment fragment = new PlaylistDetailFragment();
Bundle args = new Bundle();
args.putLong("playlistid", id);
args.putString("albumart", albumArt);
args.putString("playlistname", name);
fragment.setArguments(args);
return fragment;
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
((ViewGroup) getView().getParent()).setFitsSystemWindows(true);
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
playlsitId = getArguments().getLong("playlistid");
albumPath = getArguments().getString("albumart");
playlistname = getArguments().getString("playlistname");
}
context = getActivity();
playlistsManager = PlaylistsManager.getInstance(context);
}
@TargetApi(21)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(
R.layout.fragment_playlist_detail, container, false);
albumArt = (ImageView) rootView.findViewById(R.id.album_art);
albumTitle = (TextView) rootView.findViewById(R.id.album_title);
albumDetails = (TextView) rootView.findViewById(R.id.album_details);
albumArtSmall = (SimpleDraweeView) rootView.findViewById(R.id.albumArtSmall);
toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
toolbar.setPadding(0, CommonUtils.getStatusHeight(getActivity()) / 2, 0, 0);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
collapsingToolbarLayout = (CollapsingToolbarLayout) rootView.findViewById(R.id.collapsing_toolbar);
appBarLayout = (AppBarLayout) rootView.findViewById(R.id.app_bar);
//recyclerView.setEnabled(false);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setHasFixedSize(true);
setUpEverything();
return rootView;
}
private void setUpEverything() {
setupToolbar();
loadAllLists();
setAlbumart();
}
private void setupToolbar() {
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
ab.setHomeAsUpIndicator(R.drawable.actionbar_back);
ab.setDisplayHomeAsUpEnabled(true);
ab.setTitle("歌单");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
//collapsingToolbarLayout.setTitle("歌单");
}
private void loadAllLists() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... unused) {
ArrayList<MusicTrack> musicInfos = playlistsManager.getPlaylist(playlsitId);
long[] ids = new long[musicInfos.size()];
for (int i = 0; i < musicInfos.size(); i++) {
ids[i] = musicInfos.get(i).mId;
}
ArrayList<MusicInfo> mList = MusicUtils.getMusicLists(getContext(), ids);
mAdapter = new PlaylistDetailAdapter(getActivity(), playlsitId, mList);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
recyclerView.setAdapter(mAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
}
}.execute();
}
//更新adapter界面
public void reloadAdapter() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... unused) {
ArrayList<MusicTrack> musicInfos = playlistsManager.getPlaylist(playlsitId);
long[] ids = new long[musicInfos.size()];
for (int i = 0; i < musicInfos.size(); i++) {
ids[i] = musicInfos.get(i).mId;
}
ArrayList<MusicInfo> mList = MusicUtils.getMusicLists(getContext(), ids);
mAdapter.updateDataSet(playlsitId, mList);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
mAdapter.notifyDataSetChanged();
}
}.execute();
}
@Override
public void onResume() {
super.onResume();
toolbar.setBackgroundColor(Color.TRANSPARENT);
reloadAdapter();
IntentFilter f = new IntentFilter();
f.addAction(IConstants.MUSIC_COUNT_CHANGED);
f.addAction(IConstants.PLAYLIST_ITEM_MOVED);
f.addAction(MediaService.META_CHANGED);
getActivity().registerReceiver(mStatusListener, f);
}
@Override
public void onPause() {
super.onPause();
getActivity().unregisterReceiver(mStatusListener);
}
private void refreshPlaylist() {
}
private void setAlbumart() {
albumTitle.setText(playlistname);
albumArtSmall.setImageURI(Uri.parse(albumPath));
final Drawable drawable;
try {
drawable = Drawable.createFromStream(getContext().getContentResolver().openInputStream(Uri.parse(albumPath)), null);
new setBlurredAlbumArt().execute(ImageUtils.getBitmapFromDrawable(drawable));
} catch (Exception e) {
}
}
private class setBlurredAlbumArt extends AsyncTask<Bitmap, Void, Drawable> {
@Override
protected Drawable doInBackground(Bitmap... loadedImage) {
Drawable drawable = null;
try {
drawable = ImageUtils.createBlurredImageFromBitmap(loadedImage[0], getContext(), 20);
} catch (Exception e) {
e.printStackTrace();
}
return drawable;
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null) {
if (albumArt.getDrawable() != null) {
final TransitionDrawable td =
new TransitionDrawable(new Drawable[]{
albumArt.getDrawable(),
result
});
albumArt.setImageDrawable(td);
td.startTransition(200);
} else {
albumArt.setImageDrawable(result);
}
}
}
@Override
protected void onPreExecute() {
}
}
}