package com.wm.remusic.fragment;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SimpleItemAnimator;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bilibili.magicasakura.utils.ThemeUtils;
import com.wm.remusic.MainApplication;
import com.wm.remusic.R;
import com.wm.remusic.adapter.MainFragmentAdapter;
import com.wm.remusic.adapter.MainFragmentItem;
import com.wm.remusic.handler.HandlerUtil;
import com.wm.remusic.info.Playlist;
import com.wm.remusic.net.HttpUtil;
import com.wm.remusic.provider.DownFileStore;
import com.wm.remusic.provider.PlaylistInfo;
import com.wm.remusic.recent.TopTracksLoader;
import com.wm.remusic.uitl.CommonUtils;
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.List;
/**
* @author wm
* Created by wm on 2016/3/8.
* 本地界面主界面
*/
public class MainFragment extends BaseFragment {
private MainFragmentAdapter mAdapter;
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private List<MainFragmentItem> mList = new ArrayList<>();
private PlaylistInfo playlistInfo; //playlist 管理类
private SwipeRefreshLayout swipeRefresh; //下拉刷新layout
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
reloadAdapter();
}
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
playlistInfo = PlaylistInfo.getInstance(mContext);
if (CommonUtils.isLollipop() && ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) mContext,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
swipeRefresh = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(mContext);
recyclerView.setLayoutManager(layoutManager);
//swipeRefresh.setColorSchemeResources(R.color.theme_color_PrimaryAccent);
swipeRefresh.setColorSchemeColors(ThemeUtils.getColorById(mContext, R.color.theme_color_primary));
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
reloadAdapter();
}
});
//先给adapter设置空数据,异步加载好后更新数据,防止Recyclerview no attach
mAdapter = new MainFragmentAdapter(mContext);
recyclerView.setAdapter(mAdapter);
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL_LIST));
//设置没有item动画
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
reloadAdapter();
mContext.getWindow().setBackgroundDrawableResource(R.color.background_material_light_1);
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//相当于Fragment的onResume
reloadAdapter();
}
}
//为info设置数据,并放入mlistInfo
private void setInfo(String title, int count, int id, int i) {
MainFragmentItem information = new MainFragmentItem();
information.title = title;
information.count = count;
information.avatar = id;
if (mList.size() < 4) {
mList.add(new MainFragmentItem());
}
mList.set(i, information); //将新的info对象加入到信息列表中
}
//设置音乐overflow条目
private void setMusicInfo() {
if (CommonUtils.isLollipop() && ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
loadCount(false);
} else {
loadCount(true);
}
}
private void loadCount(boolean has) {
int localMusicCount = 0, recentMusicCount = 0,downLoadCount = 0 ,artistsCount = 0;
if(has){
try{
localMusicCount = MusicUtils.queryMusic(mContext, IConstants.START_FROM_LOCAL).size();
recentMusicCount = TopTracksLoader.getCount(MainApplication.context, TopTracksLoader.QueryType.RecentSongs);
downLoadCount = DownFileStore.getInstance(mContext).getDownLoadedListAll().size();
artistsCount = MusicUtils.queryArtist(mContext).size();
}catch (Exception e){
e.printStackTrace();
}
}
setInfo(mContext.getResources().getString(R.string.local_music), localMusicCount, R.drawable.music_icn_local, 0);
setInfo(mContext.getResources().getString(R.string.recent_play), recentMusicCount, R.drawable.music_icn_recent, 1);
setInfo(mContext.getResources().getString(R.string.local_manage), downLoadCount, R.drawable.music_icn_dld, 2);
setInfo(mContext.getResources().getString(R.string.my_artist), artistsCount, R.drawable.music_icn_artist, 3);
}
//刷新列表
public void reloadAdapter() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... unused) {
ArrayList results = new ArrayList();
setMusicInfo();
ArrayList<Playlist> playlists = playlistInfo.getPlaylist();
ArrayList<Playlist> netPlaylists = playlistInfo.getNetPlaylist();
results.addAll(mList);
results.add(mContext.getResources().getString(R.string.created_playlists));
results.addAll(playlists);
if (netPlaylists != null) {
results.add("收藏的歌单");
results.addAll(netPlaylists);
}
if(mAdapter == null){
mAdapter = new MainFragmentAdapter(mContext);
}
mAdapter.updateResults(results, playlists, netPlaylists);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
if (mContext == null)
return;
mAdapter.notifyDataSetChanged();
swipeRefresh.setRefreshing(false);
}
}.execute();
}
@Override
public void changeTheme() {
super.changeTheme();
swipeRefresh.setColorSchemeColors(ThemeUtils.getColorById(mContext, R.color.theme_color_primary));
}
}