package com.linangran.tgfcapp.fragments;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.*;
import android.widget.ListView;
import com.linangran.tgfcapp.R;
import com.linangran.tgfcapp.activities.MainActivity;
import com.linangran.tgfcapp.activities.PostActivity;
import com.linangran.tgfcapp.activities.SettingActivity;
import com.linangran.tgfcapp.adapters.ForumListAdapter;
import com.linangran.tgfcapp.data.ForumBasicData;
import com.linangran.tgfcapp.data.ForumListItemData;
import com.linangran.tgfcapp.data.HttpResult;
import com.linangran.tgfcapp.utils.ErrorHandlerUtils;
import com.linangran.tgfcapp.utils.PreferenceUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Created by linangran on 2/1/15.
*/
public class ForumListFragment extends Fragment
{
public static final String KEY_LAST_VIEWED_FORUM = "key_last_viewed_forum";
public static String TAG = "FORUM_LIST_FRAGMENT_TAG";
private ListView listView;
private SwipeRefreshLayout swipeRefreshLayout;
private ForumListAdapter forumListAdapter;
private SwipeRefreshLayout.OnRefreshListener onRefreshListener;
private ForumBasicData forumBasicData;
private Menu menu;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public void reload(ForumBasicData forumBasicData)
{
this.forumBasicData = forumBasicData;
this.forumListAdapter.abortTask();
this.forumListAdapter = new ForumListAdapter(this.getActivity(), new ArrayList<ForumListItemData>(), this, this.forumBasicData.fid);
this.listView.setAdapter(this.forumListAdapter);
this.getActivity().setTitle(this.forumBasicData.name);
if (this.swipeRefreshLayout.isRefreshing())
{
this.swipeRefreshLayout.setRefreshing(false);
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View fragmentView = inflater.inflate(R.layout.forum_list_fragment, container, false);
this.listView = (ListView) fragmentView.findViewById(R.id.forum_list_fragment_list_view);
List<ForumListItemData> list = new ArrayList<ForumListItemData>();
Bundle bundle = getArguments();
this.forumBasicData = (ForumBasicData) bundle.get("forumBasicData");
if (this.forumBasicData == null)
{
this.forumBasicData = PreferenceUtils.getLastViewedForum();
}
this.forumListAdapter = new ForumListAdapter(this.getActivity(), list, this, this.forumBasicData.fid);
this.getActivity().setTitle(this.forumBasicData.name);
this.listView.setAdapter(this.forumListAdapter);
this.swipeRefreshLayout = (SwipeRefreshLayout) fragmentView.findViewById(R.id.forum_list_fragment_swipe_refresh);
this.swipeRefreshLayout.setColorSchemeResources(R.color.googlered, R.color.googleblue, R.color.googleyellow, R.color.googlegreen);
this.onRefreshListener = new SwipeRefreshLayout.OnRefreshListener()
{
@Override
public void onRefresh()
{
ForumListFragment.this.swipeRefreshLayout.setRefreshing(true);
forumListAdapter.refreshData();
}
};
this.swipeRefreshLayout.setOnRefreshListener(this.onRefreshListener);
return fragmentView;
}
public void finishLoadMoreData(HttpResult<List<ForumListItemData>> result)
{
if (checkError(result) == false)
{
this.forumListAdapter.updateDataCallback(result.result);
}
}
public void finishRefresh(HttpResult<List<ForumListItemData>> result)
{
if (checkError(result) == false)
{
this.forumListAdapter.refreshDataCallback(result.result);
}
this.swipeRefreshLayout.setRefreshing(false);
}
public boolean checkError(HttpResult result)
{
if (result.hasError)
{
ErrorHandlerUtils.handleError(result, this.getActivity());
}
return result.hasError;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.menu_fragment_forum_list, menu);
this.menu = menu;
updatePinnedState(false);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onDestroy()
{
this.forumListAdapter.abortTask();
super.onDestroy();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_fragment_forum_list_add_post:
Intent intent = new Intent(getActivity(), PostActivity.class);
intent.putExtra("isReply", false);
intent.putExtra("fid", forumBasicData.fid);
startActivity(intent);
return true;
case R.id.menu_fragment_forum_list_refresh:
onRefreshListener.onRefresh();
return true;
case R.id.menu_fragment_forum_list_pin:
if (PreferenceUtils.isPinned(forumBasicData.fid))
{
PreferenceUtils.removeFromPinnedList(forumBasicData.fid);
}
else
{
PreferenceUtils.addToPinnedList(forumBasicData.fid);
}
updatePinnedState(true);
return true;
case R.id.menu_fragment_forum_settings:
Intent settingIntent = new Intent(this.getActivity(), SettingActivity.class);
startActivity(settingIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
public void updatePinnedState(boolean updateDrawer)
{
MenuItem pinItem = this.menu.findItem(R.id.menu_fragment_forum_list_pin);
if (PreferenceUtils.isPinned(forumBasicData.fid))
{
pinItem.setChecked(true);
}
else
{
pinItem.setChecked(false);
}
if (updateDrawer)
{
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.reInflatePinnedList();
}
}
@Override
public void onPause()
{
super.onPause();
PreferenceUtils.saveLastViewedForum(this.forumBasicData.fid);
}
}