package com.qtfreet.musicuu.ui.activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.dou361.dialogui.DialogUIUtils;
import com.dou361.dialogui.bean.BuildBean;
import com.iflytek.sunflower.FlowerCollector;
import com.qtfreet.musicuu.R;
import com.qtfreet.musicuu.model.Constant.Constants;
import com.qtfreet.musicuu.model.OnMusicClickListener;
import com.qtfreet.musicuu.musicApi.MusicBean.SearchResult;
import com.qtfreet.musicuu.musicApi.MusicService.SongResult;
import com.qtfreet.musicuu.musicApi.SearchSong;
import com.qtfreet.musicuu.ui.BaseActivity;
import com.qtfreet.musicuu.ui.adapter.SongDetailAdapter;
import com.qtfreet.musicuu.ui.service.DownloadService;
import com.qtfreet.musicuu.utils.SPUtils;
import com.yanzhenjie.recyclerview.swipe.Closeable;
import com.yanzhenjie.recyclerview.swipe.OnSwipeMenuItemClickListener;
import com.yanzhenjie.recyclerview.swipe.SwipeMenu;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import cn.pedant.SweetAlert.SweetAlertDialog;
/**
* Created by qtfreet on 2016/3/20.
*/
public class SearchActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener, OnMusicClickListener, OnSwipeMenuItemClickListener {
private SongDetailAdapter searchResultAdapter;
@Bind(R.id.lv_search_result)
SwipeMenuRecyclerView search_list;
private SwipeRefreshLayout refresh;
private List<SongResult> result = new ArrayList<>();
private BuildBean buildBean = null;
@Override
public void initView(Bundle savedInstanceState) {
setContentView(R.layout.activity_search);
setupWindowAnimations();
ButterKnife.bind(this);
refresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
refresh.setOnRefreshListener(this);
setTitleName("搜索", true);
search_list.setLayoutManager(new LinearLayoutManager(this));
search_list.setHasFixedSize(true);
//search_list.setItemViewSwipeEnabled(true);// 开启滑动删除。
search_list.setSwipeMenuCreator(swipeMenuCreator);
search_list.setSwipeMenuItemClickListener(this);
initData();
firstUse();
}
private void firstUse() {
boolean isFirst = (boolean) SPUtils.get(this, Constants.IS_FIRST_SEARCH, true);
if (isFirst) {
SweetAlertDialog sweetAlertDialog = new SweetAlertDialog(this);
sweetAlertDialog.setTitleText(getString(R.string.start_info));
sweetAlertDialog.setContentText(getString(R.string.description_search)).setConfirmText(getString(R.string.i_know));
sweetAlertDialog.setCancelable(false);
sweetAlertDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
SPUtils.put(SearchActivity.this, Constants.IS_FIRST_SEARCH, false);
sweetAlertDialog.dismissWithAnimation();
}
});
sweetAlertDialog.show();
}
}
private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
@Override
public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
int width = getResources().getDimensionPixelSize(R.dimen.item_width);
SwipeMenuItem downMuic = new SwipeMenuItem(SearchActivity.this)
.setBackgroundDrawable(R.color.swipe_one)
.setText("下载")
.setWidth(width) // 宽度。
.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); // 高度。
swipeRightMenu.addMenuItem(downMuic); // 添加一个按钮到左侧菜单。
SwipeMenuItem watchMV = new SwipeMenuItem(SearchActivity.this)
.setBackgroundDrawable(R.color.swipe_two)
.setText("MV")
.setWidth(width)
.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
swipeRightMenu.addMenuItem(watchMV);// 添加一个按钮到右侧侧菜单。.
// 上面的菜单哪边不要菜单就不要添加。
}
};
private void initData() {
buildBean = DialogUIUtils.showMdLoading(this, "加载中...", true, true, false, true);
buildBean.show();
new Thread(new Runnable() {
@Override
public void run() {
SearchResult search = SearchSong.Search(getIntent().getExtras().getString(Constants.TYPE), getIntent().getExtras().getString(Constants.KEY), 1, 15);
if (search.getStatus() == 200) {
result = search.getSongs();
handler.sendEmptyMessage(REQUEST_SUCCESS);
} else {
handler.sendEmptyMessage(REQUEST_ERROR);
}
}
}).start();
}
private android.os.Handler handler = new android.os.Handler(new android.os.Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case REQUEST_SUCCESS:
DialogUIUtils.dismiss(buildBean);
if (result == null) {
handler.sendEmptyMessage(REQUEST_ERROR);
return true;
}
searchResultAdapter = new SongDetailAdapter(SearchActivity.this, result);
searchResultAdapter.setOnMusicClickListener(SearchActivity.this);
search_list.setAdapter(searchResultAdapter);
break;
case REQUEST_ERROR:
DialogUIUtils.dismiss(buildBean);
Toast.makeText(SearchActivity.this, "获取信息失败", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
private void showRefreshing(boolean isShow) {
if (isShow) {
refresh.setProgressViewOffset(false, 0, (int) (getResources().getDisplayMetrics().density * 24 +
0.5f));
refresh.setRefreshing(true);
} else {
refresh.setRefreshing(false);
}
}
private void Download(int position) {
final String SongName = result.get(position).getSongName();
final String SongID = result.get(position).getSongId();
final String Artist = result.get(position).getArtistName();
final String SqUrl = result.get(position).getSqUrl().replace("\n", "");//不清楚什么原因此处拿到的url被换行符隔断
final String HqUrl = result.get(position).getHqUrl().replace("\n", "");
final String LqUrl = result.get(position).getLqUrl().replace("\n", "");
final String flacUrl = result.get(position).getFlacUrl().replace("\n", "");
String mvUrl = result.get(position).getMvHdUrl().isEmpty() ? result.get(position).getMvLdUrl() : result.get(position).getMvHdUrl();
List<String> arrayList = new ArrayList();
final List<String> songs = new ArrayList<>();
final List<String> format = new ArrayList<>();
if (!TextUtils.isEmpty(LqUrl)) {
arrayList.add("标准");
songs.add(LqUrl);
format.add("-L");
}
if (!TextUtils.isEmpty(HqUrl)) {
arrayList.add("高");
songs.add(HqUrl);
format.add("-H");
}
if (!TextUtils.isEmpty(SqUrl)) {
arrayList.add("极高");
songs.add(SqUrl);
format.add("-S");
}
if (!TextUtils.isEmpty(flacUrl)) {
songs.add(flacUrl);
arrayList.add("无损");
format.add("-F");
}
if (!TextUtils.isEmpty(mvUrl)) {
arrayList.add("MV");
songs.add(mvUrl);
format.add("-Video");
}
String[] types = arrayList.toArray(new String[arrayList.size()]);
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setItems(types, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String name = SongName + "-" + Artist + format.get(i);
String url = songs.get(i);
download(name, url, SongID);
}
});
dialog.show();
}
private void showError() {
Toast.makeText(this, "该音乐没有此音质链接~", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
FlowerCollector.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
FlowerCollector.onPause(this);
}
private static final int REQUEST_SUCCESS = 1;
private static final int REQUEST_ERROR = 0;
private void download(String name, String url, String id) {
Intent i = new Intent(this, DownloadService.class);
Bundle b = new Bundle();
if (TextUtils.isEmpty(url) || TextUtils.isEmpty(name) || TextUtils.isEmpty(id)) {
Toast.makeText(this, "获取下载链接失败,请重新尝试", Toast.LENGTH_SHORT).show();
return;
}
b.putString(Constants.URL, url);
b.putString(Constants.NAME, name);
b.putString(Constants.SONG_ID, id);
i.putExtras(b);
startService(i);
}
@Override
public void onRefresh() {
showRefreshing(false);
initData();
}
@Override
public void Music(View itemView, int position) {
int size = result.size();
String[] songs = new String[size];
for (int i = 0; i < size; i++) {
if (!TextUtils.isEmpty(result.get(i).getLqUrl())) {
songs[i] = result.get(i).getLqUrl().replace("\n", ""); //考虑性能问题,默认播放低音质
} else {
songs[i] = result.get(i).getHqUrl().replace("\n", "");
}
}
String[] lrcs = new String[size];
for (int i = 0; i < size; i++) {
lrcs[i] = result.get(i).getLrcUrl();
}
String[] names = new String[size];
for (int i = 0; i < size; i++) {
names[i] = result.get(i).getSongName() + "--" + result.get(i).getArtistName();
}
Intent i = new Intent(SearchActivity.this, PlayMusicActivity.class);
Bundle b = new Bundle();
b.putStringArray(Constants.PLAY_URLS, songs);
b.putStringArray(Constants.PLAY_LRCS, lrcs);
b.putStringArray(Constants.PLAY_NAMES, names);
b.putInt(Constants.POSITION, position);
i.putExtras(b);
startActivity(i);
}
public void downLoadMusic(int position) {
Download(position);
}
public void playMV(int position) {
String mvUrl = result.get(position).getMvHdUrl().isEmpty() ? result.get(position).getMvLdUrl() : result.get(position).getMvHdUrl();
if (TextUtils.isEmpty(mvUrl)) {
Toast.makeText(SearchActivity.this, "无MV信息", Toast.LENGTH_SHORT).show();
return;
}
String songName = result.get(position).getSongName() + "--" + result.get(position).getArtistName();
Intent i = new Intent(SearchActivity.this, VideoActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constants.NAME, songName);
bundle.putString(Constants.URL, mvUrl);
i.putExtras(bundle);
startActivity(i);
}
@Override
public void onItemClick(Closeable closeable, int adapterPosition, int menuPosition, int direction) {
if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) {
if (menuPosition == 0) {
downLoadMusic(adapterPosition);
} else if (menuPosition == 1) {
playMV(adapterPosition);
}
closeable.smoothCloseRightMenu();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}