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); } }); } }); } }