package com.wm.remusic.adapter; import android.animation.ObjectAnimator; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Handler; import android.support.v7.app.AlertDialog; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.LinearInterpolator; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bilibili.magicasakura.widgets.TintImageView; import com.facebook.drawee.view.SimpleDraweeView; import com.wm.remusic.R; import com.wm.remusic.activity.DownActivity; import com.wm.remusic.activity.PlaylistActivity; import com.wm.remusic.activity.PlaylistManagerActivity; import com.wm.remusic.activity.RecentActivity; import com.wm.remusic.activity.TabActivity; import com.wm.remusic.info.Playlist; import com.wm.remusic.provider.PlaylistInfo; import com.wm.remusic.provider.PlaylistsManager; import com.wm.remusic.uitl.IConstants; import java.util.ArrayList; /** * Created by wm on 2016/3/10. */ public class MainFragmentAdapter extends RecyclerView.Adapter<MainFragmentAdapter.ItemHolder> { private ArrayList<Playlist> playlists, netplaylists = new ArrayList<>(); private boolean createdExpanded = true; private boolean collectExpanded = true; private Context mContext; private ArrayList itemResults = new ArrayList(); private boolean isLoveList = true; public MainFragmentAdapter(Context context) { this.mContext = context; } public void updateResults(ArrayList itemResults, ArrayList<Playlist> playlists, ArrayList<Playlist> netplaylists) { isLoveList = true; this.itemResults = itemResults; this.playlists = playlists; this.netplaylists = netplaylists; } public void updatePlaylists(ArrayList<Playlist> playlists) { this.playlists = playlists; } @Override public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { switch (viewType) { case 0: View v0 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_main_item, viewGroup, false); ItemHolder ml0 = new ItemHolder(v0); return ml0; case 1: if(isLoveList){ View v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_main_playlist_first_item, viewGroup, false); ItemHolder ml1 = new ItemHolder(v1); return ml1; } View v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_main_playlist_item, viewGroup, false); ItemHolder ml1 = new ItemHolder(v1); return ml1; case 2: View v2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.expandable_item, viewGroup, false); ItemHolder ml2 = new ItemHolder(v2); return ml2; case 3: View v3 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.expandable_item, viewGroup, false); ItemHolder ml3 = new ItemHolder(v3); return ml3; } return null; } @Override public void onBindViewHolder(final ItemHolder itemHolder, int i) { switch (getItemViewType(i)) { case 0: MainFragmentItem item = (MainFragmentItem) itemResults.get(i); itemHolder.itemtitle.setText(item.title); itemHolder.count.setText("(" + item.count + ")"); itemHolder.image.setImageResource(item.avatar); itemHolder.image.setImageTintList(R.color.theme_color_primary); setOnListener(itemHolder, i); break; case 1: Playlist playlist = (Playlist) itemResults.get(i); if (createdExpanded && playlist.author.equals("local")) { if (playlist.albumArt != null) itemHolder.albumArt.setImageURI(Uri.parse(playlist.albumArt)); itemHolder.title.setText(playlist.name); itemHolder.songcount.setText(playlist.songCount + "首"); } if (collectExpanded && !playlist.author.equals("local")) { if (playlist.albumArt != null) itemHolder.albumArt.setImageURI(Uri.parse(playlist.albumArt)); itemHolder.title.setText(playlist.name); itemHolder.songcount.setText(playlist.songCount + "首"); } setOnPlaylistListener(itemHolder, i, playlist.id, playlist.albumArt, playlist.name); isLoveList = false; break; case 2: itemHolder.sectionItem.setText("创建的歌单" + "(" + playlists.size() + ")"); itemHolder.sectionImg.setImageResource(R.drawable.list_icn_arr_right); setSectionListener(itemHolder, i); break; case 3: itemHolder.sectionItem.setText("收藏的歌单" + "(" + netplaylists.size() + ")"); itemHolder.sectionImg.setImageResource(R.drawable.list_icn_arr_right); setSectionListener(itemHolder, i); break; } } @Override public void onViewRecycled(ItemHolder itemHolder) { } @Override public int getItemCount() { if(itemResults == null){ return 0; } if (!createdExpanded && playlists != null) { itemResults.removeAll(playlists); } if (!collectExpanded) { itemResults.removeAll(netplaylists); } return itemResults.size(); } private void setOnListener(ItemHolder itemHolder, final int position) { switch (position) { case 0: itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(mContext, TabActivity.class); intent.putExtra("page_number", 0); mContext.startActivity(intent); } }, 60); } }); break; case 1: itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(mContext, RecentActivity.class); mContext.startActivity(intent); } }, 60); } }); break; case 2: itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(mContext, DownActivity.class); mContext.startActivity(intent); } }, 60); } }); break; case 3: itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, TabActivity.class); intent.putExtra("page_number", 1); mContext.startActivity(intent); } }); } } private void setOnPlaylistListener(ItemHolder itemHolder, final int position, final long playlistid, final String albumArt, final String playlistname) { itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(mContext, PlaylistActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); intent.putExtra("islocal", true); intent.putExtra("playlistid", playlistid + ""); intent.putExtra("albumart", albumArt); intent.putExtra("playlistname", playlistname); mContext.startActivity(intent); } }, 60); } }); itemHolder.menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PopupMenu popupMenu = new PopupMenu(mContext, v); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (position == 5) { Toast.makeText(mContext, "此歌单不应删除", Toast.LENGTH_SHORT).show(); } else { new AlertDialog.Builder(mContext).setTitle(mContext.getString(R.string.sure_to_delete_music)). setPositiveButton(mContext.getString(R.string.sure), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { PlaylistInfo.getInstance(mContext).deletePlaylist(playlistid); PlaylistsManager.getInstance(mContext).delete(playlistid); Intent intent = new Intent(); intent.setAction(IConstants.PLAYLIST_COUNT_CHANGED); mContext.sendBroadcast(intent); dialog.dismiss(); } }). setNegativeButton(mContext.getString(R.string.cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } return true; } }); popupMenu.inflate(R.menu.popmenu); popupMenu.show(); } }); } private void setSectionListener(final ItemHolder itemHolder, int position) { itemHolder.sectionMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, PlaylistManagerActivity.class); mContext.startActivity(intent); } }); } @Override public int getItemViewType(int position) { if (getItemCount() == 0) { return -1; } if (itemResults.get(position) instanceof MainFragmentItem) return 0; if (itemResults.get(position) instanceof Playlist) { return 1; } if (itemResults.get(position) instanceof String) { if (((String) itemResults.get(position)).equals("收藏的歌单")) return 3; } return 2; } public class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { protected TextView itemtitle, title, count, songcount, sectionItem; protected ImageView menu, sectionImg, sectionMenu; SimpleDraweeView albumArt; protected TintImageView image; public ItemHolder(View view) { super(view); this.image = (TintImageView) view.findViewById(R.id.fragment_main_item_img); this.itemtitle = (TextView) view.findViewById(R.id.fragment_main_item_title); this.count = (TextView) view.findViewById(R.id.fragment_main_item_count); this.title = (TextView) view.findViewById(R.id.fragment_main_playlist_item_title); this.songcount = (TextView) view.findViewById(R.id.fragment_main_playlist_item_count); this.albumArt = (SimpleDraweeView) view.findViewById(R.id.fragment_main_playlist_item_img); this.menu = (ImageView) view.findViewById(R.id.fragment_main_playlist_item_menu); this.sectionItem = (TextView) view.findViewById(R.id.expand_title); this.sectionImg = (ImageView) view.findViewById(R.id.expand_img); this.sectionMenu = (ImageView) view.findViewById(R.id.expand_menu); view.setOnClickListener(this); } @Override public void onClick(View v) { ObjectAnimator anim = null; anim = ObjectAnimator.ofFloat(sectionImg, "rotation", 90, 0); anim.setDuration(100); anim.setRepeatCount(0); anim.setInterpolator(new LinearInterpolator()); switch (getItemViewType()) { case 2: if (createdExpanded) { itemResults.removeAll(playlists); updateResults(itemResults, playlists, netplaylists); notifyItemRangeRemoved(5, playlists.size()); anim.start(); createdExpanded = false; } else { itemResults.removeAll(netplaylists); itemResults.remove("收藏的歌单"); itemResults.addAll(playlists); itemResults.add("收藏的歌单"); itemResults.addAll(netplaylists); updateResults(itemResults, playlists, netplaylists); notifyItemRangeInserted(5, playlists.size()); anim.reverse(); createdExpanded = true; } break; case 3: if (collectExpanded) { itemResults.removeAll(netplaylists); updateResults(itemResults, playlists, netplaylists); int len = playlists.size(); notifyItemRangeRemoved(6 + len, netplaylists.size()); anim.start(); collectExpanded = false; } else { itemResults.addAll(netplaylists); updateResults(itemResults, playlists, netplaylists); int len = playlists.size(); notifyItemRangeInserted(6 + len, netplaylists.size()); anim.reverse(); collectExpanded = true; } break; } } } }