package com.wm.remusic.fragment;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.wm.remusic.MainApplication;
import com.wm.remusic.R;
import com.wm.remusic.activity.AlbumsDetailActivity;
import com.wm.remusic.activity.ArtistDetailActivity;
import com.wm.remusic.adapter.MusicFlowAdapter;
import com.wm.remusic.adapter.OverFlowAdapter;
import com.wm.remusic.adapter.OverFlowItem;
import com.wm.remusic.dialog.AddNetPlaylistDialog;
import com.wm.remusic.handler.HandlerUtil;
import com.wm.remusic.info.MusicInfo;
import com.wm.remusic.json.SearchAlbumInfo;
import com.wm.remusic.json.SearchArtistInfo;
import com.wm.remusic.net.BMA;
import com.wm.remusic.net.HttpUtil;
import com.wm.remusic.provider.PlaylistsManager;
import com.wm.remusic.service.MusicPlayer;
import com.wm.remusic.uitl.IConstants;
import com.wm.remusic.uitl.MusicUtils;
import com.wm.remusic.widget.DividerItemDecoration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by wm on 2016/1/31.
*/
public class MoreFragment extends AttachDialogFragment {
private int type;
private double heightPercent;
private TextView topTitle;
private ArrayList<MusicInfo> list = null;
private MusicFlowAdapter muaicflowAdapter;
private MusicInfo adapterMusicInfo;
private OverFlowAdapter commonAdapter;
//弹出的activity列表
private List<OverFlowItem> mlistInfo = new ArrayList<>(); //声明一个list,动态存储要显示的信息
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private String args;
private String musicName, artist, albumId, albumName;
private Context mContext;
private Handler mHandler;
private long playlistId = -1;
public static MoreFragment newInstance(String id, int startFrom, String albumId, String artistId) {
MoreFragment fragment = new MoreFragment();
Bundle args = new Bundle();
args.putString("id", id);
args.putString("albumid", albumId);
args.putString("artistid", artistId);
args.putInt("type", startFrom);
fragment.setArguments(args);
return fragment;
}
public static MoreFragment newInstance(String id, int startFrom) {
MoreFragment fragment = new MoreFragment();
Bundle args = new Bundle();
args.putString("id", id);
args.putInt("type", startFrom);
fragment.setArguments(args);
return fragment;
}
public static MoreFragment newInstance(MusicInfo info, int startFrom) {
MoreFragment fragment = new MoreFragment();
Bundle args = new Bundle();
args.putParcelable("music", info);
args.putInt("type", startFrom);
fragment.setArguments(args);
return fragment;
}
public static MoreFragment newInstance(MusicInfo info, long playlistid) {
MoreFragment fragment = new MoreFragment();
Bundle args = new Bundle();
args.putParcelable("music", info);
args.putLong("playlistid", playlistid);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// try {
// mActivity = (Activity) mContext;
// } catch (Exception e) {
// e.printStackTrace();
// //说明是ApplicationContext
// }
mHandler = HandlerUtil.getInstance(mContext);
//设置无标题
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
//设置从底部弹出
WindowManager.LayoutParams params = getDialog().getWindow()
.getAttributes();
params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setAttributes(params);
if (getArguments() != null) {
type = getArguments().getInt("type");
args = getArguments().getString("id");
playlistId = getArguments().getLong("playlistid");
}
//布局
View view = inflater.inflate(R.layout.more_fragment, container);
topTitle = (TextView) view.findViewById(R.id.pop_list_title);
recyclerView = (RecyclerView) view.findViewById(R.id.pop_list);
layoutManager = new LinearLayoutManager(mContext);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
getList();
setClick();
setItemDecoration();
return view;
}
//设置分割线
private void setItemDecoration() {
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL_LIST);
recyclerView.addItemDecoration(itemDecoration);
}
private void getList() {
if (type == IConstants.MUSICOVERFLOW) {
// long musicId = Long.parseLong(args.trim());
adapterMusicInfo = getArguments().getParcelable("music");
if(adapterMusicInfo == null){
adapterMusicInfo = new MusicInfo();
}
artist = adapterMusicInfo.artist;
albumId = adapterMusicInfo.albumId + "";
albumName = adapterMusicInfo.albumName;
musicName = adapterMusicInfo.musicName;
topTitle.setText("歌曲:" + " " + musicName);
heightPercent = 0.6;
setMusicInfo();
muaicflowAdapter = new MusicFlowAdapter(mContext, mlistInfo, adapterMusicInfo);
} else {
switch (type) {
case IConstants.ARTISTOVERFLOW:
String artist = args;
list = MusicUtils.queryMusic(mContext, artist, IConstants.START_FROM_ARTIST);
topTitle.setText("歌曲:" + " " + list.get(0).artist);
break;
case IConstants.ALBUMOVERFLOW:
String albumId = args;
list = MusicUtils.queryMusic(mContext, albumId, IConstants.START_FROM_ALBUM);
topTitle.setText("专辑:" + " " + list.get(0).albumName);
break;
case IConstants.FOLDEROVERFLOW:
String folder = args;
list = MusicUtils.queryMusic(mContext, folder, IConstants.START_FROM_FOLDER);
topTitle.setText("文件夹:" + " " + folder);
break;
}
setCommonInfo();
heightPercent = 0.3;
commonAdapter = new OverFlowAdapter(mContext, mlistInfo, list);
}
}
private void setClick() {
if (muaicflowAdapter != null) {
muaicflowAdapter.setOnItemClickListener(new MusicFlowAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, String data) {
switch (Integer.parseInt(data)) {
case 0:
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (adapterMusicInfo.songId == MusicPlayer.getCurrentAudioId())
return;
long[] ids = new long[1];
ids[0] = adapterMusicInfo.songId;
HashMap<Long, MusicInfo> map = new HashMap<Long, MusicInfo>();
map.put(ids[0], adapterMusicInfo);
MusicPlayer.playNext(mContext, map, ids);
}
}, 100);
dismiss();
break;
case 1:
ArrayList<MusicInfo> musicList = new ArrayList<MusicInfo>();
musicList.add(adapterMusicInfo);
AddNetPlaylistDialog.newInstance(musicList).show(getFragmentManager(), "add");
dismiss();
break;
case 2:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + adapterMusicInfo.data));
shareIntent.setType("audio/*");
mContext.startActivity(Intent.createChooser(shareIntent, getResources().getString(R.string.shared_to)));
dismiss();
break;
case 3:
new AlertDialog.Builder(mContext).setTitle(getResources().getString(R.string.sure_to_delete_music)).
setPositiveButton(getResources().getString(R.string.sure), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, adapterMusicInfo.songId);
mContext.getContentResolver().delete(uri, null, null);
if (MusicPlayer.getCurrentAudioId() == adapterMusicInfo.songId) {
if (MusicPlayer.getQueueSize() == 0) {
MusicPlayer.stop();
} else {
MusicPlayer.next();
}
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
PlaylistsManager.getInstance(mContext).deleteMusic(mContext, adapterMusicInfo.songId);
mContext.sendBroadcast(new Intent(IConstants.MUSIC_COUNT_CHANGED));
}
}, 200);
} catch (Exception e) {
e.printStackTrace();
}
dismiss();
}
}).
setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
}).show();
dismiss();
break;
case 4:
if (adapterMusicInfo.islocal) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ArrayList<SearchArtistInfo> artistResults = new ArrayList<>();
try {
JsonObject jsonObject = HttpUtil.getResposeJsonObject(BMA.Search.searchMerge(adapterMusicInfo.artist, 1, 50)).get("result").getAsJsonObject();
JsonObject artistObject = jsonObject.get("artist_info").getAsJsonObject();
JsonArray artistArray = artistObject.get("artist_list").getAsJsonArray();
for (JsonElement o : artistArray) {
SearchArtistInfo artistInfo = MainApplication.gsonInstance().fromJson(o, SearchArtistInfo.class);
artistResults.add(artistInfo);
}
} catch (Exception e) {
e.printStackTrace();
}
if (artistResults.size() == 0) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "没有找到该艺术家", Toast.LENGTH_SHORT).show();
}
});
} else {
SearchArtistInfo info = artistResults.get(0);
Intent intent = new Intent(mContext, ArtistDetailActivity.class);
intent.putExtra("artistid", info.getArtist_id());
intent.putExtra("artistname", info.getAuthor());
mContext.startActivity(intent);
}
return null;
}
}.execute();
} else {
Intent intent = new Intent(mContext, ArtistDetailActivity.class);
intent.putExtra("artistid", adapterMusicInfo.artistId + "");
intent.putExtra("artistname", adapterMusicInfo.artist);
mContext.startActivity(intent);
}
dismiss();
break;
case 5:
if (adapterMusicInfo.islocal) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ArrayList<SearchAlbumInfo> albumResults = new ArrayList<SearchAlbumInfo>();
try {
JsonObject jsonObject = HttpUtil.getResposeJsonObject(BMA.Search.searchMerge(adapterMusicInfo.albumName, 1, 10)).get("result").getAsJsonObject();
JsonObject albumObject = jsonObject.get("album_info").getAsJsonObject();
JsonArray albumArray = albumObject.get("album_list").getAsJsonArray();
for (JsonElement o : albumArray) {
SearchAlbumInfo albumInfo = MainApplication.gsonInstance().fromJson(o, SearchAlbumInfo.class);
albumResults.add(albumInfo);
}
} catch (Exception e) {
e.printStackTrace();
}
if (albumResults.size() == 0) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "没有找到所属专辑", Toast.LENGTH_SHORT).show();
}
});
} else {
SearchAlbumInfo info = albumResults.get(0);
Intent intent = new Intent(mContext, AlbumsDetailActivity.class);
intent.putExtra("albumid", info.getAlbum_id());
intent.putExtra("albumart", info.getPic_small());
intent.putExtra("albumname", info.getTitle());
intent.putExtra("albumdetail", info.getAlbum_desc());
mContext.startActivity(intent);
}
return null;
}
};
} else {
Intent intent = new Intent(mContext, AlbumsDetailActivity.class);
intent.putExtra("albumid", adapterMusicInfo.albumId + "");
intent.putExtra("albumart", adapterMusicInfo.albumData);
intent.putExtra("albumname", adapterMusicInfo.albumName);
mContext.startActivity(intent);
}
dismiss();
break;
case 6:
if(adapterMusicInfo.islocal){
new AlertDialog.Builder(mContext).setTitle(getResources().getString(R.string.sure_to_set_ringtone)).
setPositiveButton(getResources().getString(R.string.sure), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Uri ringUri = Uri.parse("file://" + adapterMusicInfo.data);
RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_NOTIFICATION, ringUri);
dialog.dismiss();
Toast.makeText(mContext, getResources().getString(R.string.set_ringtone_successed),
Toast.LENGTH_SHORT).show();
dismiss();
}
}).
setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}else {
}
break;
case 7:
MusicDetailFragment detailFrament = MusicDetailFragment.newInstance(adapterMusicInfo);
detailFrament.show(getActivity().getSupportFragmentManager(), "detail");
dismiss();
break;
default:
break;
}
}
});
recyclerView.setAdapter(muaicflowAdapter);
return;
}
commonAdapter.setOnItemClickListener(new OverFlowAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, String data) {
switch (Integer.parseInt(data)) {
case 0:
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
HashMap<Long, MusicInfo> infos = new HashMap<Long, MusicInfo>();
int len = list.size();
long[] listid = new long[len];
for (int i = 0; i < len; i++) {
MusicInfo info = list.get(i);
listid[i] = info.songId;
infos.put(listid[i], info);
}
MusicPlayer.playAll(infos, listid, 0, false);
}
}, 60);
dismiss();
break;
case 1:
AddNetPlaylistDialog.newInstance(list).show(getFragmentManager(), "add");
dismiss();
break;
case 2:
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
for (MusicInfo music : list) {
if (MusicPlayer.getCurrentAudioId() == music.songId) {
if (MusicPlayer.getQueueSize() == 0) {
MusicPlayer.stop();
} else {
MusicPlayer.next();
}
}
Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, music.songId);
mContext.getContentResolver().delete(uri, null, null);
PlaylistsManager.getInstance(mContext).deleteMusic(mContext, music.songId);
}
return null;
}
@Override
protected void onPostExecute(Void v) {
mContext.sendBroadcast(new Intent(IConstants.MUSIC_COUNT_CHANGED));
}
}.execute();
// Handler handler1 = new Handler();
// handler1.postDelayed(new Runnable() {
// @Override
// public void run() {
// for (final MusicInfo music : list) {
// PlaylistsManager.getInstance(mContext).deleteMusic(mContext, music.songId);
// }
// }
// }, 100);
// file = new File(music.data);
// if (file.exists())
// file.delete();
// if (file.exists() == false) {
// mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
// Uri.parse("file://" + music.data)));
// }
// HandlerUtil.CommonHandler handler1 = new HandlerUtil.CommonHandler(mContext);
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// mContext.sendBroadcast(new Intent(IConstants.MUSIC_COUNT_CHANGED));
// }
// }, 600);
dismiss();
break;
}
}
});
recyclerView.setAdapter(commonAdapter);
}
//设置音乐overflow条目
private void setMusicInfo() {
//设置mlistInfo,listview要显示的内容
setInfo("下一首播放", R.drawable.lay_icn_next);
setInfo("收藏到歌单", R.drawable.lay_icn_fav);
setInfo("分享", R.drawable.lay_icn_share);
setInfo("删除", R.drawable.lay_icn_delete);
setInfo("歌手:" + artist, R.drawable.lay_icn_artist);
setInfo("专辑:" + albumName, R.drawable.lay_icn_alb);
setInfo("设为铃声", R.drawable.lay_icn_ring);
setInfo("查看歌曲信息", R.drawable.lay_icn_document);
}
//设置专辑,艺术家,文件夹overflow条目
private void setCommonInfo() {
setInfo("播放", R.drawable.lay_icn_play);
setInfo("收藏到歌单", R.drawable.lay_icn_fav);
setInfo("删除", R.drawable.lay_icn_delete);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.CustomDatePickerDialog);
mContext = getContext();
}
@Override
public void onStart() {
super.onStart();
//设置fragment高度 、宽度
int dialogHeight = (int) (mContext.getResources().getDisplayMetrics().heightPixels * heightPercent);
;
// WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
// Display display = wm.getDefaultDisplay();
// int height = display.getHeight();
getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, dialogHeight);
getDialog().setCanceledOnTouchOutside(true);
}
//为info设置数据,并放入mlistInfo
public void setInfo(String title, int id) {
// mlistInfo.clear();
OverFlowItem information = new OverFlowItem();
information.setTitle(title);
information.setAvatar(id);
mlistInfo.add(information); //将新的info对象加入到信息列表中
}
}