package com.example.musicplayer.view; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.graphics.BitmapFactory; 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.util.Log; import android.view.InflateException; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.musicplayer.R; import com.example.musicplayer.adapter.AlbumSongAdapter; import com.example.musicplayer.adapter.SearchContentAdapter; import com.example.musicplayer.constant.BroadcastName; import com.example.musicplayer.constant.Constant; import com.example.musicplayer.contract.IAlbumSongContract; import com.example.musicplayer.entiy.Album; import com.example.musicplayer.entiy.AlbumSong; import com.example.musicplayer.entiy.SeachSong; import com.example.musicplayer.entiy.Song; import com.example.musicplayer.presenter.AlbumSongPresenter; import com.example.musicplayer.service.PlayerService; import com.example.musicplayer.util.CommonUtil; import com.example.musicplayer.util.FileHelper; import com.github.florent37.materialviewpager.MaterialViewPagerHelper; import com.github.florent37.materialviewpager.header.MaterialViewPagerHeaderDecorator; import org.litepal.LitePal; import java.util.ArrayList; import java.util.List; import static com.example.musicplayer.view.SearchContentFragment.IS_ONLINE; /** * Created by 残渊 on 2018/11/25. */ public class AlbumSongFragment extends Fragment implements IAlbumSongContract.View{ private static final String TYPE_KEY = "type_key"; public static final int ALBUM_SONG = 0; public static final int ALBUM_INFORATION = 1; public static final String IS_ONLINE_ALBUM="online_album"; private AlbumSongPresenter mPresenter; private String mId; private NestedScrollView mScrollView; private TextView mNameTv,mSingerTv,mDescTv,mCompany,mPublicTimeTv; private int mType; private String mPublicTime; private String mDesc; private List mSongsList; private RecyclerView mRecycle; private LinearLayoutManager mLinearManager; private AlbumSongAdapter mAdapter; private IntentFilter intentFilter; private AlbumSongChangeReceiver albumSongChangeReceiver; 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 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getBundle(); View view = null; if (mType == ALBUM_SONG) { view = inflater.inflate(R.layout.fragment_album_recycler, container, false); mRecycle = view.findViewById(R.id.recycler_song_list); 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); mSingerTv = view.findViewById(R.id.tv_singer); mCompany = view.findViewById(R.id.tv_company); mPublicTimeTv = view.findViewById(R.id.tv_public_time); } return view; } @Override public void onActivityCreated(Bundle save) { super.onActivityCreated(save); if(mType==ALBUM_SONG){ intentFilter=new IntentFilter(); intentFilter.addAction(BroadcastName.ONLINE_ALBUM_SONG_Change); albumSongChangeReceiver = new AlbumSongChangeReceiver(); getActivity().registerReceiver(albumSongChangeReceiver,intentFilter); //启动服务 Intent playIntent = new Intent(getActivity(), PlayerService.class); getActivity().bindService(playIntent, connection, Context.BIND_AUTO_CREATE); }else{ MaterialViewPagerHelper.registerScrollView(getActivity(), mScrollView); } mPresenter =new AlbumSongPresenter(); mPresenter.attachView(this); mPresenter.getAlbumDetail(mId,mType); } @Override public void onDestroy(){ super.onDestroy(); getActivity().unregisterReceiver(albumSongChangeReceiver); } private void getBundle(){ Bundle bundle = getArguments(); if (bundle != null) { mType = bundle.getInt(TYPE_KEY); mId =bundle.getString(AlbumContentFragment.ALBUM_ID_KEY); mPublicTime = bundle.getString(AlbumContentFragment.PUBLIC_TIEM_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(AlbumContentFragment.ALBUM_ID_KEY,id); bundle.putString(AlbumContentFragment.PUBLIC_TIEM_KEY, publicTime); fragment.setArguments(bundle); return fragment; } @Override public void setAlbumSongList(final List songList) { mPresenter.insertAllAlbumSong((ArrayList) songList);//存到数据库中 mLinearManager =new LinearLayoutManager(getActivity()); mRecycle.setLayoutManager(mLinearManager); mAdapter =new AlbumSongAdapter(songList); mRecycle.addItemDecoration(new MaterialViewPagerHeaderDecorator()); mRecycle.setAdapter(mAdapter); mAdapter.setSongClick(new AlbumSongAdapter.SongClick() { @Override public void onClick(int position) { AlbumSong.DataBean.SongsBean dataBean= songList.get(position); Song song = new Song(); song.setOnlineId(dataBean.getId()); song.setSinger(dataBean.getSinger()); song.setSongName(dataBean.getName()); song.setUrl(dataBean.getUrl()); song.setImgUrl(dataBean.getPic()); song.setCurrent(position); song.setOnline(true); song.setListType(Constant.LIST_TYPE_ONLINE); FileHelper.saveSong(song); mPlayStatusBinder.play(Constant.LIST_TYPE_ONLINE); } }); } @Override public void showAlbumSongError() { CommonUtil.showToast(getActivity(),"获取专辑信息失败"); } @Override public void showAlbumMessage(String name, String singer, String company, String desc) { mNameTv.setText(name); mSingerTv.setText(singer); mCompany.setText(company); mDescTv.setText(desc); mPublicTimeTv.setText(mPublicTime); } @Override public void showNetError() { CommonUtil.showToast(getActivity(),"网络错误"); } class AlbumSongChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { mAdapter.notifyDataSetChanged(); } } }