package com.maxiee.heartbeat.ui.fragments;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.bumptech.glide.Glide;
import com.maxiee.heartbeat.R;
import com.maxiee.heartbeat.data.DataManager;
import com.maxiee.heartbeat.ui.common.RecyclerInsetsDecoration;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by maxiee on 15-6-12.
*/
public class EventListFragment extends Fragment {
private static final String TAG = EventListFragment.class.getSimpleName();
private static final String SP_VIEW_MODE = "event_list_view_mode";
private static final int VIEW_MODE_LIST = 0;
private static final int VIEW_MODE_STAGGERED = 1;
@Bind(R.id.refresher) SwipeRefreshLayout mRefresher;
@Bind(R.id.recyclerview) RecyclerView mRecyclerView;
@Bind(R.id.empty) RelativeLayout mEmptyLayout;
@Bind(R.id.image_empty) ImageView mImageEmpty;
private int mViewMode;
private MenuItem mViewModeMenu;
private LinearLayoutManager mLinearLayoutManager;
private StaggeredGridLayoutManager mStaggeredGridLayoutManager;
private SharedPreferences mPrefs;
private DataManager mDataManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_event_list, container, false);
ButterKnife.bind(this, v);
mLinearLayoutManager = new LinearLayoutManager(getContext());
mStaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mPrefs = getActivity().getPreferences(Context.MODE_PRIVATE);
mViewMode = mPrefs.getInt(SP_VIEW_MODE, VIEW_MODE_LIST);
if (mViewMode == VIEW_MODE_STAGGERED) mRecyclerView.setLayoutManager(mStaggeredGridLayoutManager);
if (mViewMode == VIEW_MODE_LIST) mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.addItemDecoration(new RecyclerInsetsDecoration(getContext()));
mRecyclerView.setHasFixedSize(true);
mRefresher.setColorSchemeColors(Color.BLUE, Color.GREEN, Color.RED, Color.YELLOW);
mRefresher.setEnabled(true);
new DataLoadTask().execute();
setHasOptionsMenu(true);
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_eventlist_type, menu);
mViewModeMenu = menu.findItem(R.id.type);
mViewModeMenu.setIcon(getViewModeIconRes());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.type) {
int currentViewMode = mViewMode;
if (currentViewMode == VIEW_MODE_LIST) {
mRecyclerView.setLayoutManager(mStaggeredGridLayoutManager);
mViewMode = VIEW_MODE_STAGGERED;
}
if (currentViewMode == VIEW_MODE_STAGGERED) {
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mViewMode = VIEW_MODE_LIST;
}
mViewModeMenu.setIcon(getViewModeIconRes());
mPrefs.edit().putInt(SP_VIEW_MODE, mViewMode).apply();
return true;
}
return false;
}
@Override
public void onResume() {
super.onResume();
if (mDataManager != null) {
mDataManager.notifyDataSetChanged();
mDataManager.checkNewDay();
}
if (mViewMode == VIEW_MODE_STAGGERED) {
new Handler().post(new Runnable() {
@Override
public void run() {
mStaggeredGridLayoutManager.invalidateSpanAssignments();
}
});
}
}
private int getViewModeIconRes() {
if (mViewMode == VIEW_MODE_LIST) return R.drawable.ic_action_dashboard;
else if (mViewMode == VIEW_MODE_STAGGERED) return R.drawable.ic_action_list;
else {
mViewMode = VIEW_MODE_STAGGERED;
return R.drawable.ic_action_list;
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
private class DataLoadTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
mDataManager = DataManager.getInstance(getContext());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
mRefresher.setEnabled(false);
if (!DataManager.isEventEmpty(getContext())) {
mRecyclerView.setVisibility(View.VISIBLE);
mEmptyLayout.setVisibility(View.GONE);
mRecyclerView.setAdapter(mDataManager.getEventAdapter());
} else {
mRecyclerView.setVisibility(View.GONE);
mEmptyLayout.setVisibility(View.VISIBLE);
Glide.with(getActivity()).load(R.drawable.empty_bg).into(mImageEmpty);
}
}
}
}