package com.nf2m.adapter;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import android.provider.BaseColumns;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AlbumColumns;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import com.nf2m.R;
import com.nf2m.activity.TarMediaPlayerActivity;
import com.nf2m.fragment.AlbumsFragment;
import com.nf2m.viewholder.AlbumItemViewHolder;
import java.io.File;
import java.io.FileOutputStream;
public class AlbumCursorAdapter extends LibraryCursorAdapter<AlbumItemViewHolder> {
private static final String ALBUM_ART_URI = "content://media/external/audio/albumart";
private static final String ALBUM_ART_PATH = "album_art_path";
private static final int RESULT_CODE_GALLERY = 1;
private static final String ALBUM_ART_PATH_TAG = "album art path";
private static final String KEY_ALBUM_ID = "album_id";
private static final String KEY_DATA = "_data";
private static final String ANDROID_DATA_COM_ANDROID_PROVIDERS_MEDIA_ALBUMART = "/Android/data/com.android.providers.media/albumthumbs/";
public static final String ALBUM_THUMB_PATH = "album_thumb_path";
@Nullable
private Cursor albumCursor;
private final Context context;
private final AlbumsFragment fragment;
public AlbumCursorAdapter(Activity context, Cursor c, AlbumsFragment fragment) {
super(context, c, AlbumColumns.ALBUM);
this.fragment = fragment;
this.context = context;
albumCursor = c;
}
private String getChangeAlbumArtString() {
return context.getResources().getString(R.string.title_change_albumart);
}
@NonNull
@Override
public AlbumItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = inflateCustomViewAndListView(parent, R.layout.albums_custom_layout);
return new AlbumItemViewHolder(itemView, clickListener, longClickListener);
}
@Override
public void onBindViewHolder(@NonNull AlbumItemViewHolder holder, int position) {
albumCursor = getCursor();
if (albumCursor.moveToPosition(position)) {
String albumThumbPath = null;
String albumName = albumCursor
.getString(getColumnIndex(AlbumColumns.ALBUM));
final String albumArtPath = albumCursor
.getString(getColumnIndex(AlbumColumns.ALBUM_ART));
final String albumId = albumCursor.getString(albumCursor.getColumnIndexOrThrow(BaseColumns._ID));
holder.tvAlbumName.setText(albumName);
new AlbumArtChangeClickTask(holder, albumArtPath, albumId).execute();
if (albumArtPath != null) {
albumThumbPath = Environment.getExternalStorageDirectory() + ANDROID_DATA_COM_ANDROID_PROVIDERS_MEDIA_ALBUMART + "/thumb" + albumId;
writeThumbImage(albumThumbPath, albumArtPath);
}
AlbumsFragment.mImageFetcher.loadImage(albumThumbPath, holder.ivAlbumArt);
if (isPositionChecked(position)) {
holder.albumBackground.setVisibility(View.VISIBLE);
holder.ivCheck.setVisibility(View.VISIBLE);
} else {
holder.albumBackground.setVisibility(View.GONE);
holder.ivCheck.setVisibility(View.GONE);
}
}
}
private void writeThumbImage(@NonNull String albumThumbPath, String albumArtPath) {
Bitmap bThumb = BitmapFactory.decodeFile(albumThumbPath);
if (bThumb == null) {
File thumbFile = new File(albumThumbPath);
try {
FileOutputStream fosThumb = new FileOutputStream(thumbFile);
Bitmap albumArtBitmap = BitmapFactory.decodeFile(albumArtPath);
if (albumArtBitmap != null) {
Bitmap sbThumb = Bitmap.createScaledBitmap(albumArtBitmap, 200, 200, true);
sbThumb.compress(Bitmap.CompressFormat.JPEG, 55,
fosThumb);
}
fosThumb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public int getItemCount() {
albumCursor = getCursor();
return albumCursor.getCount();
}
private class AlbumArtChangeClickTask extends AsyncTask<Void, Void, Void> {
private final AlbumItemViewHolder holder;
private final String albumArtPath;
private final String albumId;
AlbumArtChangeClickTask(AlbumItemViewHolder holder, String albumArtPath, String albumId) {
this.holder = holder;
this.albumArtPath = albumArtPath;
this.albumId = albumId;
}
@Nullable
@Override
protected Void doInBackground(Void... params) {
albumChange(holder, albumArtPath, albumId);
return null;
}
}
private void albumChange(@NonNull final AlbumItemViewHolder holder, final String albumArtPath, final String albumId) {
((TarMediaPlayerActivity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
holder.ivChangeAlbum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String artPath = albumArtPath;
String artThumbPath;
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent chooser = Intent.createChooser(galleryIntent,
getChangeAlbumArtString());
File albumart = new File(Environment.getExternalStorageDirectory() + ANDROID_DATA_COM_ANDROID_PROVIDERS_MEDIA_ALBUMART);
if (!albumart.exists()) {
albumart.mkdirs();
}
if (artPath == null) {
artPath = Environment.getExternalStorageDirectory() + ANDROID_DATA_COM_ANDROID_PROVIDERS_MEDIA_ALBUMART + System.currentTimeMillis();
Log.i(ALBUM_ART_PATH_TAG, artPath);
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ALBUM_ID, albumId);
contentValues.put(KEY_DATA, artPath);
context.getContentResolver().insert(Uri.parse(ALBUM_ART_URI), contentValues);
context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
}
artThumbPath = Environment.getExternalStorageDirectory() + ANDROID_DATA_COM_ANDROID_PROVIDERS_MEDIA_ALBUMART + "/thumb" + albumId;
Intent intent = ((TarMediaPlayerActivity) context).getIntent();
intent.putExtra(ALBUM_ART_PATH,
artPath);
intent.putExtra(ALBUM_THUMB_PATH,
artThumbPath);
fragment.startActivityForResult(chooser,
RESULT_CODE_GALLERY);
}
});
}
});
}
}