package com.amlogic.tzr.charismatic_yichang.fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.amlogic.tzr.charismatic_yichang.R;
import com.amlogic.tzr.charismatic_yichang.Tool.LoadFinishCallBack;
import com.amlogic.tzr.charismatic_yichang.Tool.LogManager;
import com.amlogic.tzr.charismatic_yichang.activity.LoginActivity;
import com.amlogic.tzr.charismatic_yichang.activity.PublishActivity;
import com.amlogic.tzr.charismatic_yichang.adapter.FeedAdapter;
import com.amlogic.tzr.charismatic_yichang.bean.Feed;
import com.amlogic.tzr.charismatic_yichang.bean.User;
import com.amlogic.tzr.charismatic_yichang.event.LoginEvent;
import com.amlogic.tzr.charismatic_yichang.view.AutoLoadRecyclerView;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.listener.FindListener;
import de.greenrobot.event.EventBus;
/**
* A simple {@link Fragment} subclass.
*/
public class FeedFragment extends Fragment {
private static final int PICK_FROM_CAMERA = 0x000000;
private static final int PICK_FROM_FILE = 0x000001;
private static final int CROP_FROM_CAMERA = 0x000002;
private static final int CROP_FROM_FILE = 0x000003;
private static final String TAG = "FeedFragment";
private static final int STATE_REFRESH = 0;
private static final int STATE_MORE = 1;
private int limit = 10;
private int curPage = 0;
private FloatingActionButton fab;
private View fragmentView;
private Context mContext;
private SwipeRefreshLayout mSwipeRefreshLayout;
private AutoLoadRecyclerView mRecyclerView;
private FeedAdapter mAdapter;
private List<Feed> list;
private BmobQuery<Feed> bmobQuery;
private LoadFinishCallBack mLoadFinisCallBack;
private RelativeLayout mProgressBar;
private CoordinatorLayout mainContent;
private Uri imgUri;
private Bitmap photoBitmap;
private String BitmapPath;
public FeedFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
list = new ArrayList<Feed>();
queryData(0, STATE_REFRESH);
EventBus.getDefault().register(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
fragmentView =inflater.inflate(R.layout.fragment_feed, container, false);
if (fragmentView!=null){
initView();
}
return fragmentView;
}
private void initView() {
mSwipeRefreshLayout= (SwipeRefreshLayout) fragmentView.findViewById(R.id.srl_ff_refresh);
mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
queryData(0, STATE_REFRESH);
}
});
mRecyclerView=(AutoLoadRecyclerView) fragmentView.findViewById(R.id.rv_ff_feed);
mRecyclerView.setHasFixedSize(false);
mLoadFinisCallBack = mRecyclerView;
mRecyclerView.setLoadMoreListener(new AutoLoadRecyclerView.onLoadMoreListener() {
@Override
public void loadMore() {
queryData(curPage, STATE_MORE);
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mAdapter = new FeedAdapter(mContext,list);
mRecyclerView.setAdapter(mAdapter);
fab = (FloatingActionButton) fragmentView.findViewById(R.id.fab_ff_photo);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User mUser= BmobUser.getCurrentUser(mContext,User.class);
if (mUser!=null) {
View dialog_publish = LayoutInflater.from(mContext).inflate(
R.layout.dialog_publish_photo, null);
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setView(dialog_publish);
builder.create();
final AlertDialog dialog = builder.show();
ImageView choiceCamera = (ImageView) dialog_publish
.findViewById(R.id.img_choice_from_camera);
ImageView choicePhoto = (ImageView) dialog_publish
.findViewById(R.id.img_choice_from_photo);
ImageView choiceCancle = (ImageView) dialog_publish.findViewById(R.id.img_choice_cancale);
choiceCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
getPicFromCapture();
}
});
choicePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
getPicFromContent();
}
});
choiceCancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
}else{
startActivity(new Intent(mContext, LoginActivity.class));
}
}
});
mProgressBar= (RelativeLayout) fragmentView.findViewById(R.id.rl_ff_progress);
mainContent= (CoordinatorLayout) fragmentView.findViewById(R.id.cl_ff_main);
}
private void getPicFromContent() {
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
startActivityForResult(i, PICK_FROM_FILE);
}
private void getPicFromCapture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imgUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "avatar_" + String.valueOf(System.currentTimeMillis()) + ".png"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
private void queryData(final int page,final int actionType){
bmobQuery =new BmobQuery<Feed>();
bmobQuery.order("-createdAt");
bmobQuery.include("user");
// bmobQuery.addWhereRelatedTo()
bmobQuery.setLimit(limit);
bmobQuery.setSkip(page * limit);
bmobQuery.findObjects(mContext, new FindListener<Feed>() {
@Override
public void onSuccess(List<Feed> queryList) {
mProgressBar.setVisibility(View.GONE);
mainContent.setVisibility(View.VISIBLE);
if (queryList.size() > 0) {
if (actionType == STATE_REFRESH) {
curPage = 0;
list.clear();
}
for (Feed bean : queryList) {
list.add(bean);
}
curPage++;
mRecyclerView.loadFinish();
}
mAdapter.setData(list);
mAdapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onError(int i, String s) {
mRecyclerView.loadFinish();
mSwipeRefreshLayout.setRefreshing(false);
mProgressBar.setVisibility(View.GONE);
mainContent.setVisibility(View.VISIBLE);
}
});
}
public void onEventMainThread(LoginEvent event)
{
LogManager.e(TAG, "queryData(0, STATE_REFRESH) is success!");
mProgressBar.setVisibility(View.VISIBLE);
mainContent.setVisibility(View.GONE);
// mSwipeRefreshLayout.setRefreshing(true);
queryData(0, STATE_REFRESH);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode !=getActivity().RESULT_OK) {
return;
}
switch (requestCode) {
case PICK_FROM_FILE:
imgUri=data.getData();
// photoBitmap=BitmapUtil.decodeUriAsBitmap(mContext, imgUri);
// BitmapPath = BitmapUtil.saveBitmap(photoBitmap, mContext);
// photoBitmap.recycle();
Intent pictureIntent=new Intent(getActivity(), PublishActivity.class);
pictureIntent.putExtra(PublishActivity.ARG_TAKEN_PHOTO_URI,imgUri);
startActivity(pictureIntent);
break;
case PICK_FROM_CAMERA:
// photoBitmap=BitmapUtil.decodeUriAsBitmap(mContext, imgUri);
// BitmapPath = BitmapUtil.saveBitmap(photoBitmap, mContext);
// photoBitmap.recycle();
Intent cameraIntent=new Intent(getActivity(), PublishActivity.class);
cameraIntent.putExtra(PublishActivity.ARG_TAKEN_PHOTO_URI,imgUri);
startActivity(cameraIntent);
break;
}
}
@Override
public void onResume() {
super.onResume();
mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}