package io.github.mayubao.kuaichuan.ui.fragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ProgressBar;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import io.github.mayubao.kuaichuan.AppContext;
import io.github.mayubao.kuaichuan.R;
import io.github.mayubao.kuaichuan.core.entity.FileInfo;
import io.github.mayubao.kuaichuan.core.utils.FileUtils;
import io.github.mayubao.kuaichuan.core.utils.ToastUtils;
import io.github.mayubao.kuaichuan.ui.ChooseFileActivity;
import io.github.mayubao.kuaichuan.ui.adapter.FileInfoAdapter;
import io.github.mayubao.kuaichuan.utils.AnimationUtils;
/**
* Apk列表Fragment
*
* Created by mayubao on 2016/11/24.
* Contact me 345269374@qq.com
*/
public class FileInfoFragment extends Fragment {
@Bind(R.id.gv)
GridView gv;
@Bind(R.id.pb)
ProgressBar pb;
private int mType = FileInfo.TYPE_APK;
private List<FileInfo> mFileInfoList;
private FileInfoAdapter mFileInfoAdapter;
@SuppressLint("ValidFragment")
public FileInfoFragment(){
super();
}
@SuppressLint("ValidFragment")
public FileInfoFragment(int type) {
super();
this.mType = type;
}
public static FileInfoFragment newInstance(int type) {
FileInfoFragment fragment = new FileInfoFragment(type);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_apk, container, false);
// Inflate the layout for this fragment
ButterKnife.bind(this, rootView);
if(mType == FileInfo.TYPE_APK){ //应用
gv.setNumColumns(4);
}else if(mType == FileInfo.TYPE_JPG){ //图片
gv.setNumColumns(3);
}else if(mType == FileInfo.TYPE_MP3){ //音乐
gv.setNumColumns(1);
}else if(mType == FileInfo.TYPE_MP4){ //视频
gv.setNumColumns(1);
}
//Android6.0 requires android.permission.READ_EXTERNAL_STORAGE
init();//初始化界面
return rootView;
}
private void init() {
if(mType == FileInfo.TYPE_APK){
new GetFileInfoListTask(getContext(), FileInfo.TYPE_APK).executeOnExecutor(AppContext.MAIN_EXECUTOR);
}else if(mType == FileInfo.TYPE_JPG){
new GetFileInfoListTask(getContext(), FileInfo.TYPE_JPG).executeOnExecutor(AppContext.MAIN_EXECUTOR);
} else if (mType == FileInfo.TYPE_MP3) {
new GetFileInfoListTask(getContext(), FileInfo.TYPE_MP3).executeOnExecutor(AppContext.MAIN_EXECUTOR);
} else if (mType == FileInfo.TYPE_MP4) {
new GetFileInfoListTask(getContext(), FileInfo.TYPE_MP4).executeOnExecutor(AppContext.MAIN_EXECUTOR);
}
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FileInfo fileInfo = mFileInfoList.get(position);
if (AppContext.getAppContext().isExist(fileInfo)) {
AppContext.getAppContext().delFileInfo(fileInfo);
updateSelectedView();
} else {
//1.添加任务
AppContext.getAppContext().addFileInfo(fileInfo);
//2.添加任务 动画
View startView = null;
View targetView = null;
startView = view.findViewById(R.id.iv_shortcut);
if (getActivity() != null && (getActivity() instanceof ChooseFileActivity)) {
ChooseFileActivity chooseFileActivity = (ChooseFileActivity) getActivity();
targetView = chooseFileActivity.getSelectedView();
}
AnimationUtils.setAddTaskAnimation(getActivity(), startView, targetView, null);
}
mFileInfoAdapter.notifyDataSetChanged();
}
});
}
@Override
public void onResume() {
updateFileInfoAdapter();
super.onResume();
}
/**
* 更新FileInfoAdapter
*/
public void updateFileInfoAdapter(){
if(mFileInfoAdapter != null){
mFileInfoAdapter.notifyDataSetChanged();
}
}
/**
* 更新ChoooseActivity选中View
*/
private void updateSelectedView(){
if(getActivity() != null && (getActivity() instanceof ChooseFileActivity)){
ChooseFileActivity chooseFileActivity = (ChooseFileActivity) getActivity();
chooseFileActivity.getSelectedView();
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
}
/**
* 显示进度
*/
public void showProgressBar(){
if(pb != null) {
pb.setVisibility(View.VISIBLE);
}
}
/**
* 隐藏进度
*/
public void hideProgressBar(){
if(pb != null && pb.isShown()) {
pb.setVisibility(View.GONE);
}
}
/**
* 获取ApkInfo列表任务
*/
class GetFileInfoListTask extends AsyncTask<String, Integer, List<FileInfo>>{
Context sContext = null;
int sType = FileInfo.TYPE_APK;
List<FileInfo> sFileInfoList = null;
public GetFileInfoListTask(Context sContext, int type) {
this.sContext = sContext;
this.sType = type;
}
@Override
protected void onPreExecute() {
showProgressBar();
super.onPreExecute();
}
@Override
protected List doInBackground(String... params) {
//FileUtils.getSpecificTypeFiles 只获取FileInfo的属性 filePath与size
if(sType == FileInfo.TYPE_APK){
sFileInfoList = FileUtils.getSpecificTypeFiles(sContext, new String[]{ FileInfo.EXTEND_APK});
sFileInfoList = FileUtils.getDetailFileInfos(sContext, sFileInfoList, FileInfo.TYPE_APK);
}else if(sType == FileInfo.TYPE_JPG){
sFileInfoList = FileUtils.getSpecificTypeFiles(sContext, new String[]{ FileInfo.EXTEND_JPG, FileInfo.EXTEND_JPEG});
sFileInfoList = FileUtils.getDetailFileInfos(sContext, sFileInfoList, FileInfo.TYPE_JPG);
}else if(sType == FileInfo.TYPE_MP3){
sFileInfoList = FileUtils.getSpecificTypeFiles(sContext, new String[]{ FileInfo.EXTEND_MP3});
sFileInfoList = FileUtils.getDetailFileInfos(sContext, sFileInfoList, FileInfo.TYPE_MP3);
}else if(sType == FileInfo.TYPE_MP4){
sFileInfoList = FileUtils.getSpecificTypeFiles(sContext, new String[]{ FileInfo.EXTEND_MP4});
sFileInfoList = FileUtils.getDetailFileInfos(sContext, sFileInfoList, FileInfo.TYPE_MP4);
}
mFileInfoList = sFileInfoList;
return sFileInfoList;
}
@Override
protected void onPostExecute(List<FileInfo> list) {
hideProgressBar();
if(sFileInfoList != null && sFileInfoList.size() > 0){
if(mType == FileInfo.TYPE_APK){ //应用
mFileInfoAdapter = new FileInfoAdapter(sContext, sFileInfoList, FileInfo.TYPE_APK);
gv.setAdapter(mFileInfoAdapter);
}else if(mType == FileInfo.TYPE_JPG){ //图片
mFileInfoAdapter = new FileInfoAdapter(sContext, sFileInfoList, FileInfo.TYPE_JPG);
gv.setAdapter(mFileInfoAdapter);
}else if(mType == FileInfo.TYPE_MP3){ //音乐
mFileInfoAdapter = new FileInfoAdapter(sContext, sFileInfoList, FileInfo.TYPE_MP3);
gv.setAdapter(mFileInfoAdapter);
}else if(mType == FileInfo.TYPE_MP4){ //视频
mFileInfoAdapter = new FileInfoAdapter(sContext, sFileInfoList, FileInfo.TYPE_MP4);
gv.setAdapter(mFileInfoAdapter);
}
}else{
ToastUtils.show(sContext, sContext.getResources().getString(R.string.tip_has_no_apk_info));
}
}
}
}