package com.kth.baasio.helpcenter.ui;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.MenuItem;
import com.kth.baasio.callback.BaasioCallback;
import com.kth.baasio.exception.BaasioException;
import com.kth.baasio.help.BaasioHelp;
import com.kth.baasio.help.data.Faq;
import com.kth.baasio.help.data.FaqCategory;
import com.kth.baasio.helpcenter.R;
import com.kth.baasio.helpcenter.ui.pulltorefresh.PullToRefreshBase.OnRefreshListener;
import com.kth.baasio.helpcenter.ui.pulltorefresh.PullToRefreshExpandableListView;
import com.kth.baasio.helpcenter.utils.EtcUtils;
import com.kth.baasio.helpcenter.utils.actionmodecompat.ActionMode;
import com.kth.baasio.helpcenter.utils.actionmodecompat.ActionMode.Callback;
import com.kth.baasio.utils.ObjectUtils;
import com.kth.common.utils.LogUtils;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class FaqFragment extends SherlockFragment implements Callback, OnRefreshListener {
private static final String TAG = LogUtils.makeLogTag(FaqFragment.class);
private ViewGroup mRootView;
private PullToRefreshExpandableListView mPullToRefreshList;
private ExpandableListView mFaqList;
private FaqListAdapter mListAdapter;
private List<FaqCategory> mFaqCategories;
private ActionMode mActionMode;
private View mLongClickedView;
private Integer mLongClickedPosition;
public FaqFragment() {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListAdapter = new FaqListAdapter(getActivity());
getEntities(false);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setRetainInstance(true);
mRootView = (ViewGroup)inflater.inflate(R.layout.fragment_faq, null);
mPullToRefreshList = (PullToRefreshExpandableListView)mRootView.findViewById(R.id.list);
mPullToRefreshList.setOnRefreshListener(this);
mPullToRefreshList.setFooterGone();
mFaqList = mPullToRefreshList.getRefreshableView();
mFaqList.setAdapter(mListAdapter);
mFaqList.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
FaqCategory category = mFaqCategories.get(groupPosition);
Faq help = category.getFaqs().get(childPosition);
Intent intent = new Intent(getActivity(), FaqDetailActivity.class);
intent.putExtra(Intent.EXTRA_TITLE, category.getName());
intent.putExtra(FaqDetailFragment.FAQ_DETAIL, help.toString());
startActivity(intent);
return false;
}
});
return mRootView;
}
private void getEntities(final boolean isRefresh) {
if (!isRefresh) {
if (mPullToRefreshList != null) {
mPullToRefreshList.setRefreshing();
}
}
BaasioHelp.getHelpsInBackground(new BaasioCallback<List<FaqCategory>>() {
@Override
public void onException(BaasioException e) {
new Handler().post(new Runnable() {
@Override
public void run() {
if (mPullToRefreshList != null) {
if (mPullToRefreshList.isRefreshing())
mPullToRefreshList.onRefreshComplete();
}
}
});
Toast.makeText(getActivity(), getString(R.string.error_fail_get_faqs),
Toast.LENGTH_LONG).show();
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onResponse(List<FaqCategory> response) {
new Handler().post(new Runnable() {
@Override
public void run() {
if (mPullToRefreshList != null) {
if (mPullToRefreshList.isRefreshing())
mPullToRefreshList.onRefreshComplete();
}
}
});
if (response != null) {
ArrayList<FaqCategory> list = new ArrayList<FaqCategory>();
for (int i = 0; i < response.size(); i++) {
FaqCategory category = response.get(i);
if (category.getFaqs().size() != 0) {
list.add(category);
}
}
response = list;
}
mFaqCategories = response;
if (mListAdapter.getGroupCount() > 0) {
if (Build.VERSION.SDK_INT < 14) {
mFaqList.expandGroup(0);
} else {
mFaqList.expandGroup(0, true);
}
}
mListAdapter.notifyDataSetChanged();
}
});
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu,
com.actionbarsherlock.view.MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(com.actionbarsherlock.view.Menu menu) {
// TODO Auto-generated method stub
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
public class GroupViewHolder {
public TextView mTextName;
public ImageView mImageGroupOpened;
public ImageView mImageGroupClosed;
}
public class ChildViewHolder {
public TextView mTextQuestion;
}
private class FaqListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private LayoutInflater mInflater;
public FaqListAdapter(Context context) {
super();
mContext = context;
mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getChild(int, int)
*/
@Override
public Faq getChild(int groupPosition, int childPosition) {
return mFaqCategories.get(groupPosition).getFaqs().get(childPosition);
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getChildId(int, int)
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return mFaqCategories.get(groupPosition).getFaqs().get(childPosition).getId();
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getChildView(int, int,
* boolean, android.view.View, android.view.ViewGroup)
*/
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
ChildViewHolder view = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listview_item_faq, parent, false);
view = new ChildViewHolder();
view.mTextQuestion = (TextView)convertView.findViewById(R.id.textName);
if (view != null) {
convertView.setTag(view);
}
} else {
view = (ChildViewHolder)convertView.getTag();
}
Faq help = mFaqCategories.get(groupPosition).getFaqs().get(childPosition);
if (!ObjectUtils.isEmpty(help)) {
view.mTextQuestion.setText(help.getTitle());
}
return convertView;
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getChildrenCount(int)
*/
@Override
public int getChildrenCount(int groupPosition) {
if (getGroupCount() > groupPosition) {
if (!ObjectUtils.isEmpty(mFaqCategories.get(groupPosition).getFaqs())) {
return mFaqCategories.get(groupPosition).getFaqs().size();
}
}
return 0;
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getGroup(int)
*/
@Override
public FaqCategory getGroup(int groupPosition) {
return mFaqCategories.get(groupPosition);
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getGroupCount()
*/
@Override
public int getGroupCount() {
if (!ObjectUtils.isEmpty(mFaqCategories)) {
return mFaqCategories.size();
}
return 0;
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getGroupId(int)
*/
@Override
public long getGroupId(int groupPosition) {
return mFaqCategories.get(groupPosition).getId();
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#getGroupView(int, boolean,
* android.view.View, android.view.ViewGroup)
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
GroupViewHolder view = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listview_item_faqcategory, parent, false);
view = new GroupViewHolder();
view.mTextName = (TextView)convertView.findViewById(R.id.textName);
view.mImageGroupClosed = (ImageView)convertView.findViewById(R.id.imageGroupClosed);
view.mImageGroupOpened = (ImageView)convertView.findViewById(R.id.imageGroupOpened);
if (view != null) {
convertView.setTag(view);
}
} else {
view = (GroupViewHolder)convertView.getTag();
}
FaqCategory category = mFaqCategories.get(groupPosition);
if (!ObjectUtils.isEmpty(category)) {
view.mTextName.setText(category.getName() + " (" + category.getFaqs().size() + ")");
}
if (isExpanded) {
view.mImageGroupOpened.setVisibility(View.VISIBLE);
view.mImageGroupClosed.setVisibility(View.GONE);
} else {
view.mImageGroupOpened.setVisibility(View.GONE);
view.mImageGroupClosed.setVisibility(View.VISIBLE);
}
return convertView;
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#hasStableIds()
*/
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
/*
* (non-Javadoc)
* @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
/*
* (non-Javadoc)
* @see com.kth.kanu.baassample.utils.actionmodecompat.ActionMode.Callback#
* onCreateActionMode
* (com.kth.kanu.baassample.utils.actionmodecompat.ActionMode,
* android.view.Menu)
*/
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
if (mLongClickedView == null) {
return true;
}
return true;
}
/*
* (non-Javadoc)
* @see com.kth.kanu.baassample.utils.actionmodecompat.ActionMode.Callback#
* onPrepareActionMode
* (com.kth.kanu.baassample.utils.actionmodecompat.ActionMode,
* android.view.Menu)
*/
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
/*
* (non-Javadoc)
* @see com.kth.kanu.baassample.utils.actionmodecompat.ActionMode.Callback#
* onActionItemClicked
* (com.kth.kanu.baassample.utils.actionmodecompat.ActionMode,
* android.view.MenuItem)
*/
@Override
public boolean onActionItemClicked(ActionMode mode, android.view.MenuItem item) {
boolean handled = false;
switch (item.getItemId()) {
}
LogUtils.LOGV(TAG, "onActionItemClicked: position=" + mLongClickedPosition + " title="
+ item.getTitle());
mActionMode.finish();
return handled;
}
/*
* (non-Javadoc)
* @see com.kth.kanu.baassample.utils.actionmodecompat.ActionMode.Callback#
* onDestroyActionMode
* (com.kth.kanu.baassample.utils.actionmodecompat.ActionMode)
*/
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
if (mLongClickedView != null) {
EtcUtils.setActivatedCompat(mLongClickedView, false);
mLongClickedPosition = null;
mLongClickedView = null;
}
}
/*
* (non-Javadoc)
* @see com.kth.baasio.baassample.view.pulltorefresh.PullToRefreshBase.
* OnRefreshListener#onRefresh()
*/
@Override
public void onRefresh() {
getEntities(true);
}
/*
* (non-Javadoc)
* @see com.kth.baasio.baassample.view.pulltorefresh.PullToRefreshBase.
* OnRefreshListener#onUpdate()
*/
@Override
public void onUpdate() {
// TODO Auto-generated method stub
}
}