package com.example.musicplayer.view.search; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v4.app.Fragment; import android.support.v4.widget.NestedScrollView; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.example.musicplayer.R; import com.example.musicplayer.adapter.AlbumSongAdapter; import com.example.musicplayer.app.Api; import com.example.musicplayer.app.Constant; import com.example.musicplayer.base.fragment.BaseMvpFragment; import com.example.musicplayer.contract.IAlbumSongContract; import com.example.musicplayer.entiy.AlbumSong; import com.example.musicplayer.entiy.DownloadSong; import com.example.musicplayer.entiy.Song; import com.example.musicplayer.event.SongAlbumEvent; import com.example.musicplayer.presenter.AlbumSongPresenter; import com.example.musicplayer.service.PlayerService; import com.example.musicplayer.util.CommonUtil; import com.example.musicplayer.util.FileUtil; import com.github.florent37.materialviewpager.MaterialViewPagerHelper; import com.github.florent37.materialviewpager.header.MaterialViewPagerHeaderDecorator; import com.wang.avi.AVLoadingIndicatorView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.litepal.LitePal; import java.util.List; import java.util.Objects; import static com.example.musicplayer.app.Constant.ALBUM_ID_KEY; import static com.example.musicplayer.app.Constant.PUBLIC_TIME_KEY; /** * Created by 残渊 on 2018/11/25. */ public class AlbumSongFragment extends BaseMvpFragment<AlbumSongPresenter> implements IAlbumSongContract.View{ private static final String TYPE_KEY = "type_key"; public static final int ALBUM_SONG = 0; public static final int ALBUM_INFORMATION = 1; private AlbumSongPresenter mPresenter; private String mId; private NestedScrollView mScrollView; private TextView mNameTv, mLanguageTv,mDescTv,mCompany,mPublicTimeTv,mTypeTv; private int mType; private String mPublicTime; private String mDesc; //用来判断网络问题及加载问题 private AVLoadingIndicatorView mLoading; private TextView mLoadingTv; private ImageView mNetworkErrorIv; private List<AlbumSong.DataBean.ListBean> mSongsList; private RecyclerView mRecycle; private LinearLayoutManager mLinearManager; private AlbumSongAdapter mAdapter; private Intent playIntent; private PlayerService.PlayStatusBinder mPlayStatusBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mPlayStatusBinder = (PlayerService.PlayStatusBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void loadData() { mPresenter =new AlbumSongPresenter(); mPresenter.attachView(this); mPresenter.getAlbumDetail(mId,mType); } @Override protected int getLayoutId() { return 0; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getBundle(); EventBus.getDefault().register(this); View view = null; if (mType == ALBUM_SONG) { view = inflater.inflate(R.layout.fragment_album_recycler, container, false); mRecycle = view.findViewById(R.id.normalView); LitePal.getDatabase(); } else { view = inflater.inflate(R.layout.fragment_album_song, container, false); mScrollView = view.findViewById(R.id.scrollView); mDescTv = view.findViewById(R.id.tv_desc); mNameTv = view.findViewById(R.id.tv_album_name); mLanguageTv = view.findViewById(R.id.tv_language); mCompany = view.findViewById(R.id.tv_company); mPublicTimeTv = view.findViewById(R.id.tv_public_time); mTypeTv = view.findViewById(R.id.tv_album_type); } mLoading = view.findViewById(R.id.avi); mLoadingTv = view.findViewById(R.id.tv_loading); mNetworkErrorIv = view.findViewById(R.id.iv_network_error); return view; } @Subscribe(threadMode = ThreadMode.MAIN) public void onSongAlbumEvent(SongAlbumEvent event){ mAdapter.notifyDataSetChanged(); } @Override public void onActivityCreated(Bundle save) { super.onActivityCreated(save); if(mType==ALBUM_SONG){ //启动服务 playIntent = new Intent(getActivity(), PlayerService.class); mActivity.bindService(playIntent, connection, Context.BIND_AUTO_CREATE); }else{ MaterialViewPagerHelper.registerScrollView(getActivity(), mScrollView); } } @Override public void onDestroyView(){ EventBus.getDefault().unregister(this); if(playIntent!=null){ Objects.requireNonNull(getActivity()).unbindService(connection); } super.onDestroyView(); } private void getBundle(){ Bundle bundle = getArguments(); if (bundle != null) { mType = bundle.getInt(TYPE_KEY); mId =bundle.getString(ALBUM_ID_KEY); mPublicTime = bundle.getString(PUBLIC_TIME_KEY); } } public static Fragment newInstance(int type, String id,String publicTime) { AlbumSongFragment fragment = new AlbumSongFragment(); Bundle bundle = new Bundle(); bundle.putInt(TYPE_KEY, type); bundle.putString(ALBUM_ID_KEY,id); bundle.putString(PUBLIC_TIME_KEY, publicTime); fragment.setArguments(bundle); return fragment; } @Override public void setAlbumSongList(final List<AlbumSong.DataBean.ListBean> songList) { mLinearManager =new LinearLayoutManager(getActivity()); mRecycle.setLayoutManager(mLinearManager); mAdapter =new AlbumSongAdapter(songList); mRecycle.addItemDecoration(new MaterialViewPagerHeaderDecorator()); mRecycle.setAdapter(mAdapter); mAdapter.setSongClick(position -> { AlbumSong.DataBean.ListBean dataBean= songList.get(position); Song song = new Song(); song.setSongId(dataBean.getSongmid()); song.setSinger(getSinger(dataBean)); song.setSongName(dataBean.getSongname()); song.setPosition(position); song.setDuration(dataBean.getInterval()); song.setOnline(true); song.setListType(Constant.LIST_TYPE_ONLINE); song.setImgUrl(Api.ALBUM_PIC+dataBean.getAlbummid()+ Api.JPG); song.setUrl(null); song.setMediaId(dataBean.getStrMediaMid()); //判断是否已经下载 song.setDownload(LitePal.where("songId=?", dataBean.getSongmid()).find(DownloadSong.class).size() != 0); FileUtil.saveSong(song); mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE); }); } @Override public void showAlbumSongError() { CommonUtil.showToast(getActivity(),"获取专辑信息失败"); } @Override public void showAlbumMessage(String name, String language, String company, String type,String desc) { mNameTv.setText(name); mLanguageTv.setText(language); mCompany.setText(company); mDescTv.setText(desc); mPublicTimeTv.setText(mPublicTime); mTypeTv.setText(type); } @Override public void showLoading() { mLoading.show(); } @Override public void hideLoading() { mLoading.hide(); mLoadingTv.setVisibility(View.GONE); if(mType==ALBUM_SONG){ mRecycle.setVisibility(View.VISIBLE); }else { mScrollView.setVisibility(View.VISIBLE); } mNetworkErrorIv.setVisibility(View.GONE); } @Override public void showNetError() { mLoadingTv.setVisibility(View.GONE); mLoading.hide(); mNetworkErrorIv.setVisibility(View.VISIBLE); } @Override protected AlbumSongPresenter getPresenter() { return null; } //获取歌手,因为歌手可能有很多个 private String getSinger(AlbumSong.DataBean.ListBean dataBean){ StringBuilder singer = new StringBuilder(dataBean.getSinger().get(0).getName()); for (int i = 1; i < dataBean.getSinger().size(); i++) { singer.append("、").append(dataBean.getSinger().get(i).getName()); } return singer.toString(); } }