package in.co.praveenkumar.mdroid.fragment;
import in.co.praveenkumar.R;
import in.co.praveenkumar.mdroid.dialog.UserinfoDialog;
import in.co.praveenkumar.mdroid.helper.LetterColor;
import in.co.praveenkumar.mdroid.helper.SessionSetting;
import in.co.praveenkumar.mdroid.helper.Workaround;
import in.co.praveenkumar.mdroid.model.MoodleUser;
import in.co.praveenkumar.mdroid.task.UserSyncTask;
import java.util.List;
import android.content.Context;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class ParticipantFragment extends Fragment implements OnRefreshListener {
final String DEBUG_TAG = "ContactsFragment";
List<MoodleUser> participants;
int courseid = 0;
ParticipantListAdapter adapter;
SessionSetting session;
LinearLayout listEmptyLayout;
SwipeRefreshLayout swipeLayout;
/**
* Don't use this constructor.
*/
public ParticipantFragment() {
}
/**
* If you want to list all forums, use courseid = 0
*
* @param courseid
*/
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_participant, container,
false);
listEmptyLayout = (LinearLayout) rootView
.findViewById(R.id.list_empty_layout);
ListView participantList = (ListView) rootView
.findViewById(R.id.participant_list);
// Get sites info
session = new SessionSetting(getActivity());
participants = MoodleUser.find(MoodleUser.class,
"siteid = ? and courseid = ?", String.valueOf(session.getCurrentSiteId()),
String.valueOf(courseid));
adapter = new ParticipantListAdapter(getActivity());
participantList.setAdapter(adapter);
// OnItem click
participantList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
MoodleUser participant = participants.get(position);
UserinfoDialog uid = new UserinfoDialog(getActivity(), session
.getCurrentSiteId(), participant.getUserid());
uid.show();
}
});
swipeLayout = (SwipeRefreshLayout) rootView
.findViewById(R.id.swipe_refresh);
Workaround.linkSwipeRefreshAndListView(swipeLayout, participantList);
swipeLayout.setOnRefreshListener(this);
new ParticipantSyncerBg().execute("");
return rootView;
}
public class ParticipantListAdapter extends BaseAdapter {
private final Context context;
public ParticipantListAdapter(Context context) {
this.context = context;
if (!participants.isEmpty())
listEmptyLayout.setVisibility(LinearLayout.GONE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_participant,
parent, false);
viewHolder.userimage = (TextView) convertView
.findViewById(R.id.list_contact_image);
viewHolder.userfullname = (TextView) convertView
.findViewById(R.id.list_contact_name);
// Save the holder with the view
convertView.setTag(viewHolder);
} else {
// Just use the viewHolder and avoid findviewbyid()
viewHolder = (ViewHolder) convertView.getTag();
}
// Contact image color and value
String name = participants.get(position).getFullname();
char firstChar = 0;
if (name.length() != 0)
firstChar = name.charAt(0);
viewHolder.userimage.setText(firstChar + "");
viewHolder.userimage.setBackgroundColor(LetterColor.of(firstChar));
// Name
viewHolder.userfullname.setText(participants.get(position)
.getFullname());
return convertView;
}
@Override
public int getCount() {
return participants.size();
}
@Override
public Object getItem(int position) {
return participants.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
static class ViewHolder {
TextView userimage;
TextView userfullname;
TextView unreadcount;
}
private class ParticipantSyncerBg extends
AsyncTask<String, Integer, Boolean> {
@Override
protected void onPreExecute() {
swipeLayout.setRefreshing(true);
}
@Override
protected Boolean doInBackground(String... params) {
UserSyncTask ust = new UserSyncTask(session.getmUrl(),
session.getToken(), session.getCurrentSiteId());
return ust.syncUsers(courseid);
}
@Override
protected void onPostExecute(Boolean result) {
participants = MoodleUser.find(MoodleUser.class,
"siteid = ? and courseid = ?", String.valueOf(session.getCurrentSiteId())
, String.valueOf(courseid));
adapter.notifyDataSetChanged();
if (!participants.isEmpty())
listEmptyLayout.setVisibility(LinearLayout.GONE);
swipeLayout.setRefreshing(false);
}
}
@Override
public void onRefresh() {
new ParticipantSyncerBg().execute("");
}
}