com.aniruddhc.acemusic.player.ListViewFragment.ListViewCardsAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.aniruddhc.acemusic.player.ListViewFragment.ListViewCardsAdapter.java

Source

/*
 * Copyright (C) 2014 Saravan Pantham
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.aniruddhc.acemusic.player.ListViewFragment;

import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.andraskindler.quickscroll.Scrollable;
import com.aniruddhc.acemusic.player.AsyncTasks.AsyncAddToQueueTask;
import com.aniruddhc.acemusic.player.Dialogs.AddToPlaylistDialog;
import com.aniruddhc.acemusic.player.Dialogs.CautionEditArtistsDialog;
import com.aniruddhc.acemusic.player.Dialogs.ID3sArtistEditorDialog;
import com.aniruddhc.acemusic.player.Helpers.TypefaceHelper;
import com.aniruddhc.acemusic.player.Helpers.UIElementsHelper;
import com.aniruddhc.acemusic.player.R;
import com.aniruddhc.acemusic.player.Utils.Common;
import com.aniruddhc.acemusic.player.ImageTransformers.PicassoCircularTransformer;

import java.util.HashMap;

/**
 * Generic ListView adapter for ListViewFragment.
 * 
 * @author Saravan Pantham
 */
public class ListViewCardsAdapter extends SimpleCursorAdapter implements Scrollable {

    private Context mContext;
    private Common mApp;
    private ListViewFragment mListViewFragment;
    public static ListViewHolder mHolder = null;
    private String mName = "";

    //HashMap for DB column names.
    private HashMap<Integer, String> mDBColumnsMap;
    public static final int TITLE_TEXT = 0;
    public static final int SOURCE = 1;
    public static final int FILE_PATH = 2;
    public static final int ARTWORK_PATH = 3;
    public static final int FIELD_1 = 4; //Empty fields for other 
    public static final int FIELD_2 = 5;
    public static final int FIELD_3 = 6;
    public static final int FIELD_4 = 7;
    public static final int FIELD_5 = 8;

    public ListViewCardsAdapter(Context context, ListViewFragment listViewFragment,
            HashMap<Integer, String> dbColumnsMap) {

        super(context, -1, listViewFragment.getCursor(), new String[] {}, new int[] {}, 0);
        mContext = context;
        mListViewFragment = listViewFragment;
        mApp = (Common) mContext.getApplicationContext();
        mDBColumnsMap = dbColumnsMap;

    }

    /**
     * Quick scroll indicator implementation.
     */
    @Override
    public String getIndicatorForPosition(int childPosition, int groupPosition) {
        Cursor c = (Cursor) getItem(childPosition);
        String title = c.getString(c.getColumnIndex(mDBColumnsMap.get(TITLE_TEXT)));
        if (title != null && title.length() > 1)
            return "  " + title.substring(0, 1) + "  ";
        else
            return "  N/A  ";
    }

    /**
     * Returns the current position of the top view in the list/grid.
     */
    @Override
    public int getScrollPosition(int childPosition, int groupPosition) {
        // TODO Auto-generated method stub
        return childPosition;
    }

    /**
     * Returns the individual row/child in the list/grid.
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Cursor c = (Cursor) getItem(position);

        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, parent, false);

            mHolder = new ListViewHolder();
            mHolder.leftImage = (ImageView) convertView.findViewById(R.id.listViewLeftIcon);
            mHolder.titleText = (TextView) convertView.findViewById(R.id.listViewTitleText);
            mHolder.subText = (TextView) convertView.findViewById(R.id.listViewSubText);
            mHolder.rightSubText = (TextView) convertView.findViewById(R.id.listViewRightSubText);
            mHolder.overflowIcon = (ImageButton) convertView.findViewById(R.id.listViewOverflow);
            mHolder.subTextParent = (RelativeLayout) convertView.findViewById(R.id.listViewSubTextParent);

            //Remove the sub text's parent layout for playlists list view.
            if (mListViewFragment.getFragmentId() == Common.PLAYLISTS_FRAGMENT) {
                mHolder.subTextParent.setVisibility(View.GONE);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mHolder.titleText
                        .getLayoutParams();
                params.addRule(RelativeLayout.CENTER_VERTICAL);
                mHolder.titleText.setLayoutParams(params);

            }

            mHolder.titleText.setTextColor(UIElementsHelper.getThemeBasedTextColor(mContext));
            mHolder.subText.setTextColor(UIElementsHelper.getSmallTextColor(mContext));
            mHolder.rightSubText.setTextColor(UIElementsHelper.getSmallTextColor(mContext));
            mHolder.leftImage.setImageResource(UIElementsHelper.getEmptyCircularColorPatch(mContext));

            mHolder.titleText.setTypeface(TypefaceHelper.getTypeface(mContext, "Roboto-Regular"));
            mHolder.subText.setTypeface(TypefaceHelper.getTypeface(mContext, "Roboto-Regular"));
            mHolder.rightSubText.setTypeface(TypefaceHelper.getTypeface(mContext, "Roboto-Regular"));

            mHolder.overflowIcon.setImageResource(UIElementsHelper.getIcon(mContext, "ic_action_overflow"));
            mHolder.overflowIcon.setOnClickListener(overflowClickListener);
            mHolder.overflowIcon.setFocusable(false);
            mHolder.overflowIcon.setFocusableInTouchMode(false);

            convertView.setTag(mHolder);
        } else {
            mHolder = (ListViewHolder) convertView.getTag();
        }

        //Retrieve data from the cursor.
        String titleText = "";
        String source = "";
        String filePath = "";
        String artworkPath = "";
        String field1 = "";
        String field2 = "";
        String field3 = "";
        String field4 = "";
        String field5 = "";
        try {
            titleText = c.getString(c.getColumnIndex(mDBColumnsMap.get(TITLE_TEXT)));
            source = c.getString(c.getColumnIndex(mDBColumnsMap.get(SOURCE)));
            filePath = c.getString(c.getColumnIndex(mDBColumnsMap.get(FILE_PATH)));
            artworkPath = c.getString(c.getColumnIndex(mDBColumnsMap.get(ARTWORK_PATH)));
            field1 = c.getString(c.getColumnIndex(mDBColumnsMap.get(FIELD_1)));
            field2 = c.getString(c.getColumnIndex(mDBColumnsMap.get(FIELD_2)));
            field3 = c.getString(c.getColumnIndex(mDBColumnsMap.get(FIELD_3)));
            field4 = c.getString(c.getColumnIndex(mDBColumnsMap.get(FIELD_4)));
            field5 = c.getString(c.getColumnIndex(mDBColumnsMap.get(FIELD_5)));

        } catch (NullPointerException e) {
            //e.printStackTrace();
        }

        //Set the tags for this grid item.
        convertView.setTag(R.string.title_text, titleText);
        convertView.setTag(R.string.song_source, source);
        convertView.setTag(R.string.song_file_path, filePath);
        convertView.setTag(R.string.album_art, artworkPath);
        convertView.setTag(R.string.field_1, field1);
        convertView.setTag(R.string.field_2, field2);
        convertView.setTag(R.string.field_3, field3);
        convertView.setTag(R.string.field_4, field4);
        convertView.setTag(R.string.field_5, field5);

        //Set the tags for this list item's overflow button.
        mHolder.overflowIcon.setTag(R.string.title_text, titleText);
        mHolder.overflowIcon.setTag(R.string.source, source);
        mHolder.overflowIcon.setTag(R.string.file_path, filePath);
        mHolder.overflowIcon.setTag(R.string.field_1, field1);
        mHolder.overflowIcon.setTag(R.string.field_2, field2);
        mHolder.overflowIcon.setTag(R.string.field_3, field3);
        mHolder.overflowIcon.setTag(R.string.field_4, field4);
        mHolder.overflowIcon.setTag(R.string.field_5, field5);

        //Set the title text in the ListView.
        mHolder.titleText.setText(titleText);
        mHolder.subText.setText(field2);
        mHolder.rightSubText.setText(field1);

        //Load the album art.
        mApp.getPicasso().load(artworkPath).transform(new PicassoCircularTransformer())
                .placeholder(UIElementsHelper.getEmptyCircularColorPatch(mContext))
                .resizeDimen(R.dimen.list_view_left_icon_size, R.dimen.list_view_left_icon_size)
                .into(mHolder.leftImage);

        return convertView;
    }

    /**
     * Click listener for overflow button.
     */
    private OnClickListener overflowClickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            PopupMenu menu = new PopupMenu(mContext, v);
            menu.inflate(R.menu.artist_overflow_menu);
            menu.setOnMenuItemClickListener(popupMenuItemClickListener);
            mName = (String) v.getTag(R.string.artist);
            menu.show();

        }

    };

    /**
     * Menu item click listener for the pop up menu.
     */
    private OnMenuItemClickListener popupMenuItemClickListener = new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {

            switch (item.getItemId()) {
            case R.id.edit_artist_tags:
                //Edit Artist Tags.
                if (mApp.getSharedPreferences().getBoolean("SHOW_ARTIST_EDIT_CAUTION", true) == true) {
                    FragmentTransaction transaction = mListViewFragment.getFragmentManager().beginTransaction();
                    Bundle bundle = new Bundle();
                    bundle.putString("EDIT_TYPE", "ARTIST");
                    bundle.putString("ARTIST", mName);
                    CautionEditArtistsDialog dialog = new CautionEditArtistsDialog();
                    dialog.setArguments(bundle);
                    dialog.show(transaction, "cautionArtistsDialog");
                } else {
                    FragmentTransaction ft = mListViewFragment.getFragmentManager().beginTransaction();
                    Bundle bundle = new Bundle();
                    bundle.putString("EDIT_TYPE", "ARTIST");
                    bundle.putString("ARTIST", mName);
                    ID3sArtistEditorDialog dialog = new ID3sArtistEditorDialog();
                    dialog.setArguments(bundle);
                    dialog.show(ft, "id3ArtistEditorDialog");
                }
                break;
            case R.id.add_to_queue:
                //Add to Queue.
                AsyncAddToQueueTask task = new AsyncAddToQueueTask(mContext, mListViewFragment, "ARTIST", mName,
                        null, null, null, null, null, null);
                task.execute();
                break;
            case R.id.play_next:
                AsyncAddToQueueTask playNextTask = new AsyncAddToQueueTask(mContext, mListViewFragment, "ARTIST",
                        mName, null, null, null, null, null, null);
                playNextTask.execute(new Boolean[] { true });
                break;
            case R.id.add_to_playlist:
                //Add to Playlist
                FragmentTransaction ft = mListViewFragment.getFragmentManager().beginTransaction();
                AddToPlaylistDialog dialog = new AddToPlaylistDialog();
                Bundle bundle = new Bundle();
                bundle.putString("ADD_TYPE", "ARTIST");
                bundle.putString("ARTIST", mName);
                dialog.setArguments(bundle);
                dialog.show(ft, "AddToPlaylistDialog");
                break;
            case R.id.blacklist_artist:
                //Blacklist Artist
                mApp.getDBAccessHelper().setBlacklistForArtist(mName, true);
                Toast.makeText(mContext, R.string.artist_blacklisted, Toast.LENGTH_SHORT).show();

                //Update the ListView.
                mListViewFragment.mHandler.post(mListViewFragment.queryRunnable);
                mListViewFragment.getListViewAdapter().notifyDataSetChanged();

                break;

            }

            return false;
        }

    };

    /**
     * Holder subclass for ListViewCardsAdapter.
     * 
     * @author Saravan Pantham
     */
    static class ListViewHolder {
        public ImageView leftImage;
        public TextView titleText;
        public TextView subText;
        public TextView rightSubText;
        public ImageButton overflowIcon;
        public RelativeLayout subTextParent;

    }

}