package com.nf2m.fragment;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.MediaStore.Audio.AlbumColumns;
import android.provider.MediaStore.Audio.AudioColumns;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.graphics.Palette;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AbsListView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.nf2m.R;
import com.nf2m.activity.TarMediaPlayerActivity;
import com.nf2m.adapter.AlbumCursorAdapter;
import com.nf2m.listener.ActionItemClick;
import com.nf2m.listener.OnItemClickListener;
import com.nf2m.model.Albums;
import com.nf2m.model.Library;
import com.nf2m.model.Songs;
import com.nf2m.util.ImageCache;
import com.nf2m.util.ImageFetcher;
import com.nf2m.util.Utils;
import com.nf2m.view.AutofitRecyclerView;
import java.io.File;
import java.io.FileOutputStream;
public class AlbumsFragment extends BaseFragment implements ActionItemClick, OnItemClickListener {
public static final String EXTRA_ALBUM = "album";
private static final String ALBUM_ART_PATH = "album_art_path";
private static final int REQUEST_CODE_GALLERY = 1;
public static final String EXTRA_ALBUM_ID = "album_id";
private AutofitRecyclerView lvAlbumList;
private Cursor albumCursor;
private AlbumCursorAdapter albumAdapter;
private static final String IMAGE_CACHE_DIR = "thumbs";
public static ImageFetcher mImageFetcher;
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((TarMediaPlayerActivity) getActivity()).setActionBarTitle(getString(R.string.title_albums));
}
void initFragment(@NonNull Cursor albumCursor, Albums albums) {
initImageFetcher();
initLvAlbumList();
initAlbums(albums);
initAlbumCursor(albumCursor);
initAlbumCursorAdapter();
lvAlbumListSetSongAdapter();
setLayoutManager();
setListeners();
setSearchSelection(AlbumColumns.ALBUM);
if (albumCursor.getCount() == 0) {
//RelativeLayout noSongs = (RelativeLayout) view.findViewById(R.id.noSongs);
//noSongs.setVisibility(View.VISIBLE);
}
}
private void initImageFetcher() {
int mImageThumbSize = getResources().getDimensionPixelSize(R.dimen.image_thumbnail_size);
ImageCache.ImageCacheParams cacheParams =
new ImageCache.ImageCacheParams(getActivity(), IMAGE_CACHE_DIR);
cacheParams.setMemCacheSizePercent(0.25f); // Set memory cache to 25% of app memory
// The ImageFetcher takes care of loading images into our ImageView children asynchronously
mImageFetcher = new ImageFetcher(getActivity(), mImageThumbSize);
mImageFetcher.setLoadingImage(R.drawable.empty_photo);
mImageFetcher.addImageCache(getActivity().getSupportFragmentManager(), cacheParams);
}
private void setListeners() {
albumAdapter.setOnItemClickListener(this);
albumAdapter.setOnLongItemClickListener(this);
lvAlbumList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
// Before Honeycomb pause image loading on scroll to help with performance
if (!Utils.hasHoneycomb()) {
mImageFetcher.setPauseWork(true);
}
} else {
mImageFetcher.setPauseWork(false);
}
}
});
}
private void lvAlbumListSetSongAdapter() {
lvAlbumList.setAdapter(albumAdapter);
setLvLibraryList(lvAlbumList);
fastScroller.setVisibility(View.GONE);
}
private void initAlbumCursorAdapter() {
albumAdapter = new AlbumCursorAdapter(getActivity(), albumCursor, this);
setLibraryAdapter(albumAdapter);
}
private void initAlbumCursor(Cursor albumCursor) {
this.albumCursor = albumCursor;
setLibraryCursor(albumCursor);
}
private void initAlbums(Albums albums) {
setLibraries(albums);
}
private void initLvAlbumList() {
lvAlbumList = (AutofitRecyclerView) view.findViewById(R.id.lvList);
}
@Nullable
@Override
public Cursor initSelectedItemCursor() {
Library songs = new Songs(getContext());
String[] albumsName = getStringArray(AudioColumns.ALBUM);
String selection = getSelection(AudioColumns.ALBUM, albumsName);
Cursor cursor = getContext().getContentResolver().query(songs.getUri(), null, selection,
null, null);
assert cursor != null;
setSelectedSongNumber(cursor.getCount());
return cursor;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CODE_GALLERY) {
new AlbumArtChangeTask(data).execute();
}
}
}
private class AlbumArtChangeTask extends AsyncTask<Void, Void, Void> {
private final Intent data;
public AlbumArtChangeTask(Intent data) {
this.data = data;
}
@Nullable
@Override
protected Void doInBackground(Void... params) {
try {
Uri imageUri = data.getData();
Bundle bundle = getActivity().getIntent().getExtras();
String albumArtPath = bundle.getString(ALBUM_ART_PATH);
String albumThumbPath = bundle.getString(AlbumCursorAdapter.ALBUM_THUMB_PATH);
File albumArtFile = new File(albumArtPath);
File albumThumbFile = new File(albumThumbPath);
Bitmap imageBitmap = BitmapFactory
.decodeStream(getContext().getContentResolver().openInputStream(
imageUri));
FileOutputStream fosArt = new FileOutputStream(
albumArtFile);
FileOutputStream fosThumb = new FileOutputStream(albumThumbFile);
if (imageBitmap != null) {
Bitmap sbArt = Bitmap.createScaledBitmap(imageBitmap, 800, 800, true);
sbArt.compress(CompressFormat.JPEG, 55,
fosArt);
Bitmap sbThumb = Bitmap.createScaledBitmap(imageBitmap, 200, 200, true);
sbThumb.compress(CompressFormat.JPEG, 55,
fosThumb);
}
fosArt.close();
fosThumb.close();
if (mImageFetcher != null) {
mImageFetcher.clearCache();
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
albumAdapter.notifyDataSetChanged();
}
});
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getContext(), R.string.title_image_error, Toast.LENGTH_SHORT).show();
}
return null;
}
}
private String getStringInCursor(@NonNull Cursor cursor, String uri) {
return cursor.getString(albumCursor.getColumnIndexOrThrow(uri));
}
@Override
public void actionClick(int position) {
albumCursor.moveToPosition(position);
String albumId = getStringInCursor(albumCursor,
BaseColumns._ID);
String albumName = getStringInCursor(albumCursor,
AudioColumns.ALBUM);
String albumArtPath = getStringInCursor(albumCursor,
AlbumColumns.ALBUM_ART);
String artistName = getStringInCursor(albumCursor, AlbumColumns.ARTIST);
String numberOfSongs = getStringInCursor(albumCursor, AlbumColumns.NUMBER_OF_SONGS);
AlbumSongFragment albumsFragment = new AlbumSongFragment();
Bundle bundle = new Bundle();
bundle.putString(EXTRA_ALBUM, albumName);
bundle.putString(EXTRA_ALBUM_ID, albumId);
albumsFragment.setArguments(bundle);
if (TarMediaPlayerActivity.sdkInt >= Build.VERSION_CODES.LOLLIPOP) {
initAnim(albumsFragment);
}
getFragmentManager().beginTransaction().replace(R.id.container, albumsFragment)
.addToBackStack(albumsFragment.getClass().getName()).commit();
BaseFragment.isAlbumSong = true;
BaseFragment.albumArtPath = albumArtPath;
BaseFragment.artistName = artistName;
BaseFragment.numberOfSongs = numberOfSongs;
BaseFragment.albumName = albumName;
}
@Override
public void onItemClick(int position) {
if (actionMode != null) {
toggleSelection(position);
return;
}
if (isFilter) {
position = getPositionInMainCursor(position);
actionClick(position);
searchView.clearFocus();
searchView.onActionViewCollapsed();
} else {
actionClick(position);
}
}
@Override
public void onPause() {
super.onPause();
mImageFetcher.setPauseWork(false);
mImageFetcher.setExitTasksEarly(true);
mImageFetcher.flushCache();
}
@Override
public void onResume() {
super.onResume();
mImageFetcher.setExitTasksEarly(false);
albumAdapter.notifyDataSetChanged();
}
@Override
public void onDestroy() {
mImageFetcher.closeCache();
albumCursor.close();
super.onDestroy();
}
@Override
public void setLayoutManager() {
lvAlbumList.setHasFixedSize(true);
}
}