package in.co.praveenkumar.mdroid.fragment;
import in.co.praveenkumar.R;
import in.co.praveenkumar.mdroid.activity.DiscussionActivity;
import in.co.praveenkumar.mdroid.helper.SessionSetting;
import in.co.praveenkumar.mdroid.helper.TimeFormat;
import in.co.praveenkumar.mdroid.helper.Workaround;
import in.co.praveenkumar.mdroid.model.MoodleCourse;
import in.co.praveenkumar.mdroid.model.MoodleForum;
import in.co.praveenkumar.mdroid.task.ForumSyncTask;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class ForumFragment extends Fragment implements OnRefreshListener {
ForumListAdapter forumListAdapter;
SessionSetting session;
int courseid = 0;
List<MoodleForum> mForums;
LinearLayout forumEmptyLayout;
SwipeRefreshLayout swipeLayout;
/**
* This constructor lists all forums in the site. Don't use this
* constructor.
*/
public ForumFragment() {
}
/**
*
* @param courseid
* If you want to list all forums, use courseid = 0
*/
public void setCourseid(int courseid) {
this.courseid = courseid;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_forum, container, false);
forumEmptyLayout = (LinearLayout) rootView
.findViewById(R.id.forum_empty_layout);
// Get all courses of this site or course
session = new SessionSetting(getActivity());
if (courseid == 0)
mForums = MoodleForum.find(MoodleForum.class, "siteid = ?",
session.getCurrentSiteId() + "");
else
mForums = MoodleForum.find(MoodleForum.class,
"siteid = ? and courseid = ?", session.getCurrentSiteId()
+ "", courseid + "");
ListView forumList = (ListView) rootView
.findViewById(R.id.content_forum);
forumListAdapter = new ForumListAdapter(getActivity());
forumList.setAdapter(forumListAdapter);
swipeLayout = (SwipeRefreshLayout) rootView
.findViewById(R.id.swipe_refresh);
Workaround.linkSwipeRefreshAndListView(swipeLayout, forumList);
swipeLayout.setOnRefreshListener(this);
new AsyncForumSync(session.getmUrl(), session.getToken(),
session.getCurrentSiteId()).execute("");
return rootView;
}
public class ForumListAdapter extends BaseAdapter {
private final Context context;
public ForumListAdapter(Context context) {
this.context = context;
if (!mForums.isEmpty())
forumEmptyLayout.setVisibility(LinearLayout.GONE);
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_forum,
parent, false);
viewHolder.forumname = (TextView) convertView
.findViewById(R.id.forum_name);
viewHolder.forumcourse = (TextView) convertView
.findViewById(R.id.forum_coursename);
viewHolder.forumtime = (TextView) convertView
.findViewById(R.id.forum_time);
viewHolder.forumdesc = (TextView) convertView
.findViewById(R.id.forum_desc);
// Save the holder with the view
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// Assign values
viewHolder.forumname.setText(mForums.get(position).getName());
viewHolder.forumcourse.setText(mForums.get(position)
.getCoursename());
viewHolder.forumtime.setText(TimeFormat.getNiceRelativeTime(mForums
.get(position).getTimemodified()));
String intro = mForums.get(position).getIntro();
if (intro == null)
intro = "";
else
intro = Html.fromHtml(intro).toString().trim();
viewHolder.forumdesc.setText(intro);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(context, DiscussionActivity.class);
i.putExtra("forumid", mForums.get(position).getForumid());
context.startActivity(i);
}
});
return convertView;
}
@Override
public int getCount() {
return mForums.size();
}
@Override
public Object getItem(int position) {
return mForums.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
static class ViewHolder {
TextView forumname;
TextView forumcourse;
TextView forumtime;
TextView forumdesc;
}
private class AsyncForumSync extends AsyncTask<String, Integer, Boolean> {
Long siteid;
ForumSyncTask fst;
Boolean syncStatus;
public AsyncForumSync(String mUrl, String token, Long siteid) {
this.siteid = siteid;
fst = new ForumSyncTask(mUrl, token, siteid);
}
@Override
protected void onPreExecute() {
swipeLayout.setRefreshing(true);
}
@Override
protected Boolean doInBackground(String... params) {
// Get course ids
List<MoodleCourse> mCourses = MoodleCourse.find(MoodleCourse.class,
"siteid = ?", siteid + "");
ArrayList<String> courseIds = new ArrayList<>();
for (int i = 0; i < mCourses.size(); i++)
courseIds.add(mCourses.get(i).getCourseid() + "");
syncStatus = fst.syncForums(courseIds);
if (syncStatus) {
if (courseid == 0)
mForums = MoodleForum.find(MoodleForum.class, "siteid = ?",
session.getCurrentSiteId() + "");
else
mForums = MoodleForum.find(MoodleForum.class,
"siteid = ? and courseid = ?",
session.getCurrentSiteId() + "", courseid + "");
return true;
} else
return false;
}
@Override
protected void onPostExecute(Boolean result) {
forumListAdapter.notifyDataSetChanged();
if (!mForums.isEmpty())
forumEmptyLayout.setVisibility(LinearLayout.GONE);
swipeLayout.setRefreshing(false);
}
}
@Override
public void onRefresh() {
new AsyncForumSync(session.getmUrl(), session.getToken(),
session.getCurrentSiteId()).execute("");
}
}