package cn.bingoogolapple.media.ui.fragment;
import android.content.Intent;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.provider.MediaStore;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.format.Formatter;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import cn.bingoogolapple.androidcommon.adapter.BGAOnRVItemClickListener;
import cn.bingoogolapple.androidcommon.adapter.BGARecyclerViewAdapter;
import cn.bingoogolapple.androidcommon.adapter.BGAViewHolderHelper;
import cn.bingoogolapple.media.R;
import cn.bingoogolapple.media.engine.MediaScanner;
import cn.bingoogolapple.media.model.MediaFile;
import cn.bingoogolapple.media.ui.activity.VideoActivity;
import cn.bingoogolapple.media.ui.widget.Divider;
import cn.bingoogolapple.media.util.ThreadUtil;
import cn.bingoogolapple.media.util.StringUtil;
/**
* 作者:王浩 邮件:bingoogolapple@gmail.com
* 创建时间:15/9/7 下午5:18
* 描述:
*/
public class VideoFragment extends BaseFragment implements BGAOnRVItemClickListener {
private RecyclerView mDataRv;
private MovieAdapter mMovieAdapter;
private VideoContentObserver mVideoContentObserver;
@Override
protected void initView(Bundle savedInstanceState) {
setContentView(R.layout.fragment_video);
mDataRv = getViewById(R.id.rv_video_data);
}
@Override
protected void setListener() {
mMovieAdapter = new MovieAdapter(mDataRv);
mMovieAdapter.setOnRVItemClickListener(this);
}
@Override
protected void processLogic(Bundle savedInstanceState) {
registerVideoContentObserver();
LinearLayoutManager layoutManager = new LinearLayoutManager(mActivity);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mDataRv.setLayoutManager(layoutManager);
mDataRv.addItemDecoration(new Divider(mActivity));
mDataRv.setAdapter(mMovieAdapter);
reloadData();
}
private void reloadData() {
ThreadUtil.runInThread(new Runnable() {
@Override
public void run() {
final List<MediaFile> mediaFiles = MediaScanner.scanVideo();
ThreadUtil.runInUIThread(new Runnable() {
@Override
public void run() {
mMovieAdapter.setDatas(mediaFiles);
}
});
}
});
}
@Override
public void onDestroy() {
unregisterVideoContentObserver();
super.onDestroy();
}
private void registerVideoContentObserver() {
mVideoContentObserver = new VideoContentObserver(new Handler());
mActivity.getContentResolver().registerContentObserver(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, mVideoContentObserver);
}
private void unregisterVideoContentObserver() {
mActivity.getContentResolver().unregisterContentObserver(mVideoContentObserver);
}
@Override
public void onRVItemClick(ViewGroup viewGroup, View view, int position) {
Intent intent = new Intent(mActivity, VideoActivity.class);
intent.putExtra(VideoActivity.EXTRA_CURRENT_MEDIA_FILE_POSITION, position);
intent.putParcelableArrayListExtra(VideoActivity.EXTRA_MEDIA_FILES, (ArrayList<? extends Parcelable>) mMovieAdapter.getDatas());
mActivity.forward(intent);
}
private final class MovieAdapter extends BGARecyclerViewAdapter<MediaFile> {
public MovieAdapter(RecyclerView recyclerView) {
super(recyclerView, R.layout.item_video);
}
@Override
protected void fillData(BGAViewHolderHelper helper, int position, MediaFile model) {
helper.setText(R.id.tv_item_video_name, model.name);
helper.setText(R.id.tv_item_video_size, Formatter.formatFileSize(mContext, model.size));
helper.setText(R.id.tv_item_video_duration, StringUtil.formatTime(model.duration));
}
}
private final class VideoContentObserver extends ContentObserver {
public VideoContentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
reloadData();
}
}
}