Commit 3fb7cf3c authored by linfeng's avatar linfeng

音乐功能

parent ce264934
......@@ -19,22 +19,27 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.FrameApp;
import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.util.glide.GlideApp;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxfc.imcamera.utile.FileUtils;
import com.xxrv.video.R;
import com.xxrv.video.R2;
import com.xxrv.video.adapter.DiscoveryVideoSelectAdapter;
import com.xxrv.video.adapter.SelectMusicAdapter;
import com.xxrv.video.api.VideoApi;
import com.xxrv.video.audio_x.VoiceManager;
import com.xxrv.video.base.BaseRecAdapter;
import com.xxrv.video.base.BaseRecViewHolder;
import com.xxrv.video.bean.circle.MusicInfo;
import com.xxrv.video.bean.circle.MusicInfoBean;
import com.xxrv.video.bean.circle.VideoIMTokenBean;
import com.xxrv.video.dialog.SelectMusicDialog;
import com.xxrv.video.presenter.VideoPresenter;
import com.xxrv.video.util.FileUtils;
import com.xxrv.video.util.ScreenUtil;
import com.xxrv.video.util.downloader.DownloadListener;
import com.xxrv.video.util.downloader.Downloader;
......@@ -42,6 +47,7 @@ import com.xxrv.video.util.downloader.FailReason;
import com.yuyife.okgo.OkGoUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
......@@ -66,41 +72,20 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
LinearLayoutManager mLayoutManager;
private Context mContext;
private SelectMusicDialog.OnMusicItemClick mListener;
private List<MusicInfo> mdatas;
private List<MusicInfo> searchDatas;
private CommAvatarAdapter mAdapter;
private List<MusicInfo> mdatas = new ArrayList<>();
private List<MusicInfo> searchDatas = new ArrayList<>();
// private CommAvatarAdapter mAdapter;
private int mPagerIndex;
private boolean isLoad;
private int mCurrPlay = -1; // 当前选择的索引
private MusicInfo mCurrMusic;
private boolean more = true; // 是否可加载更多
private Timer SEARCH_TIMER;
private SearchTimerTask mSearchTask;
private boolean isSearch; // 是否正在搜索
private VideoIMTokenBean intokenBean;
TextWatcher changeListener = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
private SelectMusicAdapter adapter;
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0) {
mAdapter.setNewData(null);
startSearchTimer(s.toString());
} else {
cancelSearchTimer();
mAdapter.setNewData(mdatas);
hint.setVisibility(View.GONE);
more = true;
}
}
};
public static Intent getIntent(Context context) {
return new Intent(context, SelectMusicActivity.class);
......@@ -114,14 +99,26 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("选择音乐");
mEditText.addTextChangedListener(changeListener);
mLayoutManager = new LinearLayoutManager(mContext);
mListView.setLayoutManager(mLayoutManager);
mAdapter = new CommAvatarAdapter(mdatas);
mListView.setAdapter(mAdapter);
adapter = new SelectMusicAdapter();
mListView.setAdapter(adapter);
addListener();
adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
int id = view.getId();
if (id == R.id.rl_content) {
playMusic(position);
} else if (id == R.id.ll_next) {
}
}
});
}
@Override
......@@ -135,68 +132,6 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
}
private void playMusic(int position) {
if (!isSearch && mCurrPlay == position) {
return;
}
VoiceManager.instance().stop();
List<MusicInfo> data = isSearch ? searchDatas : mdatas;
if (mCurrPlay > -1 && data.size() > mCurrPlay) {
data.get(mCurrPlay).state = 0;
mAdapter.notifyItemChanged(mCurrPlay);
}
mCurrPlay = position;
mCurrMusic = data.get(position);
MusicInfo info = data.get(position);
// 去下载路径找
Downloader.getInstance().init(FileUtils.mFilesDir);
File file = Downloader.getInstance().getFile(info.getPath());
Log.e("xuan", "down : " + info.getPath());
if (file.exists()) {
data.get(mCurrPlay).state = 1;
mAdapter.notifyItemChanged(mCurrPlay);
VoiceManager.instance().play(file);
} else {
data.get(mCurrPlay).state = 2;
mAdapter.notifyItemChanged(mCurrPlay);
Downloader.getInstance().addDownload(info.getPath(), new DownloadListener() {
@Override
public void onStarted(String uri, View view) {
Log.e("xuan", "开始下载");
}
@Override
public void onFailed(String uri, FailReason failReason, View view) {
Log.e("xuan", "onFailed: 下载失败" + mCurrMusic.getPath());
Toast.makeText(mContext, mContext.getString(R.string.tip_file_download_failed), Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(String uri, String filePath, View view) {
Log.e("xuan", "comp: " + filePath);
if (Downloader.getInstance().getFile(mCurrMusic.getPath()).getAbsolutePath().equals(filePath)) {
mCurrMusic.setPath(filePath);
VoiceManager.instance().play(filePath);
data.get(mCurrPlay).state = 1;
mAdapter.notifyItemChanged(mCurrPlay);
}
}
@Override
public void onCancelled(String uri, View view) {
Log.e("xuan", "取消下载");
}
});
}
}
private void upData() {
if (OkGoUtil.getToken() != null) {
Map<String, Object> headMap = new LinkedHashMap<>();
......@@ -206,61 +141,6 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
}
private void findMusicDataList(int index, String keyword) {
Log.e("xuan", "findMusicDataList: 加载数据" + index);
isLoad = true;
// Map<String, String> params = new HashMap<>();
// params.put("access_token", mToken);
// params.put("pageIndex", String.valueOf(index));
// params.put("pageSize", String.valueOf(20));
// if (!TextUtils.isEmpty(keyword)) {
// params.put("keyword", keyword);
// }
// HttpUtils.get().url(musicListUrl)
// .params(params)
// .build()
// .execute(new ListCallback<MusicInfo>(MusicInfo.class) {
// @Override
// public void onResponse(ArrayResult<MusicInfo> result) {
// List<MusicInfo> data = result.getData();
// if (data.size() > 0) {
//
// for (int i = 0; i < data.size(); i++) {
// MusicInfo info = data.get(i);
// info.appendDown(mDown);
// }
//
// if (isSearch) {
// searchDatas.addAll(data);
//
// mAdapter.setNewData(searchDatas);
// } else {
// mdatas.addAll(data);
// mAdapter.setNewData(mdatas);
// }
//
// if (data.size() < 20) {
// more = false;
// }
// hint.setVisibility(View.GONE);
// } else {
// more = false;
// hint.setVisibility(View.VISIBLE);
// }
// isLoad = false;
// }
//
// @Override
// public void onError(Call call, Exception e) {
// isLoad = false;
// }
// });
}
private void addListener() {
mListView.addOnScrollListener(new RecyclerView.OnScrollListener() {
int firstVisibleItem, visibleItemCount, totalItemCount;
......@@ -288,46 +168,54 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
}
if (!isLoad && (totalItemCount - visibleItemCount) <= firstVisibleItem) {
mPagerIndex++;
findMusicDataList(mPagerIndex, "");
setData(mPagerIndex, "");
isLoad = true;
}
}
});
}
public void startSearchTimer(String key) {
cancelSearchTimer();
isSearch = true;
searchDatas.clear();
SEARCH_TIMER = new Timer();
mSearchTask = new SearchTimerTask();
mSearchTask.setKey(key);
SEARCH_TIMER.schedule(mSearchTask, 400);
}
public void cancelSearchTimer() {
isSearch = false;
if (SEARCH_TIMER != null) {
SEARCH_TIMER.cancel();
}
if (mSearchTask != null) {
mSearchTask.cancel();
}
}
@Override
public void onShowResult(int requestType, BaseBean result) {
switch (requestType) {
case 1:
intokenBean = (VideoIMTokenBean) result;
setData(mPagerIndex, "");
setData(0, "");
break;
case 2:
setMusicData((MusicInfoBean) result);
break;
}
}
private void setMusicData(MusicInfoBean result) {
List<MusicInfo> data = result.getData();
if (data.size() > 0) {
for (int i = 0; i < data.size(); i++) {
MusicInfo info = data.get(i);
info.appendDown("http://47.91.232.3:8089");
}
if (isSearch) {
searchDatas.addAll(data);
adapter.setNewData(searchDatas);
} else {
mdatas.addAll(data);
adapter.setNewData(mdatas);
}
if (data.size() < 20) {
more = false;
}
hint.setVisibility(View.GONE);
} else {
more = false;
hint.setVisibility(View.VISIBLE);
}
}
private void setData(int index, String keyword) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("pageIndex", String.valueOf(index));
......@@ -336,101 +224,69 @@ public class SelectMusicActivity extends BaseStatusActivity<VideoPresenter> impl
map.put("keyword", keyword);
}
map.put("type", 4);
mPresenter.postData(2, VideoApi.DISCOVERY_IM_MUSIC, BaseBean.class, map, index == 1 ? false : false);
mPresenter.postData(2, VideoApi.DISCOVERY_IM_MUSIC, MusicInfoBean.class, map, index == 1 ? false : false);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
ButterKnife.bind(this);
}
public interface OnMusicItemClick {
void onItemClick(MusicInfo info);
}
class CommAvatarAdapter extends BaseRecAdapter<MusicInfo, CommAvatarHolder> {
public CommAvatarAdapter(List<MusicInfo> list) {
super(list);
private void playMusic(int position) {
if (!isSearch && mCurrPlay == position) {
return;
}
@Override
public void onHolder(CommAvatarHolder holder, MusicInfo bean, int position) {
holder.tvName.setText(bean.getName());
holder.tvContent.setText(bean.getNikeName());
GlideApp.with(mContext).load(bean.getCover()).placeholder(R.drawable.defaultpic)
.error(R.drawable.image_download_fail_icon)
.into(holder.ivAvatar);
if (bean.state == 0) {
holder.mLlWrap.setVisibility(View.GONE);
holder.ivState.setImageResource(R.drawable.ic_music_state0);
} else if (bean.state == 1) {
holder.mLlWrap.setVisibility(View.VISIBLE);
holder.ivState.setImageResource(R.drawable.ic_music_state2);
} else if (bean.state == 2) {
holder.mLlWrap.setVisibility(View.GONE);
holder.ivState.setImageResource(R.drawable.ic_music_state1);
} else if (bean.state == 3) {
holder.mLlWrap.setVisibility(View.VISIBLE);
holder.ivState.setImageResource(R.drawable.ic_music_state0);
}
}
VoiceManager.instance().stop();
List<MusicInfo> data = isSearch ? searchDatas : mdatas;
@Override
public CommAvatarHolder onCreateHolder() {
return new CommAvatarHolder(getViewByRes(R.layout.item_trill_music));
if (mCurrPlay > -1 && data.size() > mCurrPlay) {
data.get(mCurrPlay).state = 0;
adapter.notifyItemChanged(mCurrPlay);
}
}
public class CommAvatarHolder extends BaseRecViewHolder {
public TextView tvName;
public TextView tvContent;
public ImageView ivAvatar;
public ImageView ivState;
public LinearLayout mLlWrap;
View.OnClickListener listener = v -> playMusic(getAdapterPosition());
public CommAvatarHolder(View rootView) {
super(rootView);
tvName = rootView.findViewById(R.id.tv_name);
tvContent = rootView.findViewById(R.id.tv_nike_name);
ivAvatar = rootView.findViewById(R.id.iv_cover);
mLlWrap = rootView.findViewById(R.id.ll_next);
ivState = rootView.findViewById(R.id.iv_play_state);
ivAvatar.setOnClickListener(listener);
rootView.findViewById(R.id.rl_content).setOnClickListener(listener);
mLlWrap.setOnClickListener(v -> {
VoiceManager.instance().stop();
// SelectMusicDialog.this.dismiss();
if (mListener != null) {
List<MusicInfo> data = isSearch ? searchDatas : mdatas;
MusicInfo info = data.get(getAdapterPosition());
File file = Downloader.getInstance().getFile(info.getPath());
if (file.exists()) { // 动态设置一下
info.setPath(file.getAbsolutePath());
}
mListener.onItemClick(info);
mCurrPlay = position;
mCurrMusic = data.get(position);
MusicInfo info = data.get(position);
// 去下载路径找
Downloader.getInstance().init(FrameApp.getInstance().mFilesDir);
File file = Downloader.getInstance().getFile(info.getPath());
Log.e("xuan", "down : " + info.getPath());
if (file.exists()) {
data.get(mCurrPlay).state = 1;
adapter.notifyItemChanged(mCurrPlay);
VoiceManager.instance().play(file);
} else {
data.get(mCurrPlay).state = 2;
adapter.notifyItemChanged(mCurrPlay);
Downloader.getInstance().addDownload(info.getPath(), new DownloadListener() {
@Override
public void onStarted(String uri, View view) {
Log.e("xuan", "开始下载");
}
});
}
}
public class SearchTimerTask extends TimerTask {
private String keyword;
@Override
public void onFailed(String uri, FailReason failReason, View view) {
Log.e("xuan", "onFailed: 下载失败" + mCurrMusic.getPath());
Toast.makeText(mContext, mContext.getString(R.string.tip_file_download_failed), Toast.LENGTH_SHORT).show();
}
@Override
public void run() {
findMusicDataList(0, keyword);
}
@Override
public void onComplete(String uri, String filePath, View view) {
Log.e("xuan", "comp: " + filePath);
if (Downloader.getInstance().getFile(mCurrMusic.getPath()).getAbsolutePath().equals(filePath)) {
mCurrMusic.setPath(filePath);
VoiceManager.instance().play(filePath);
data.get(mCurrPlay).state = 1;
adapter.notifyItemChanged(mCurrPlay);
}
}
public void setKey(String key) {
this.keyword = key;
@Override
public void onCancelled(String uri, View view) {
Log.e("xuan", "取消下载");
}
});
}
}
}
package com.xxrv.video.adapter;
import android.widget.ImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.xxrv.video.R;
import com.xxrv.video.bean.circle.MusicInfo;
/**
* 音乐选择
*/
public class SelectMusicAdapter extends BaseQuickAdapter<MusicInfo, BaseViewHolder> {
public SelectMusicAdapter() {
super(R.layout.item_trill_music);
}
@Override
protected void convert(BaseViewHolder helper, MusicInfo item) {
helper.setText(R.id.tv_name, item.getName());
helper.setText(R.id.tv_nike_name, item.getNikeName());
GlideManager.getInstance(mContext).loadImage(item.getCover(), (ImageView) helper.getView(R.id.iv_cover));
if (item.state == 0) {
helper.setGone(R.id.ll_next, false);
helper.setBackgroundRes(R.id.iv_play_state, R.drawable.ic_music_state0);
} else if (item.state == 1) {
helper.setGone(R.id.ll_next, true);
helper.setBackgroundRes(R.id.iv_play_state, R.drawable.ic_music_state2);
} else if (item.state == 2) {
helper.setGone(R.id.ll_next, false);
helper.setBackgroundRes(R.id.iv_play_state, R.drawable.ic_music_state1);
} else if (item.state == 3) {
helper.setGone(R.id.ll_next, true);
helper.setBackgroundRes(R.id.iv_play_state, R.drawable.ic_music_state0);
}
helper.addOnClickListener(R.id.rl_content);
helper.addOnClickListener(R.id.ll_next);
}
}
package com.xxrv.video.bean.circle;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.util.List;
public class MusicInfoBean extends BaseBean {
private List<MusicInfo> data;
private boolean rel;
public List<MusicInfo> getData() {
return data;
}
public void setData(List<MusicInfo> data) {
this.data = data;
}
public boolean isRel() {
return rel;
}
public void setRel(boolean rel) {
this.rel = rel;
}
}
......@@ -2,7 +2,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment