/**
*
*/
package com.example.fudanbbs;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.example.fudanbbs.BoardActivity.TopicListAsyncTask;
import com.example.fudanbbs.MyFavoriteFragment.boardlistAsyncTask;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import android.app.Fragment;
import android.app.ListFragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextPaint;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* @author Joseph.Zhong
*
*/
public class MyMailFragment extends Fragment {
private String TAG = "##################"+this.getClass().getName();
private ArrayList<HashMap<String, String>> maillist;
private FudanBBSApplication currentapplication;
private HashMap<String, String> cookie;
private ListView listview;
private PullToRefreshListView pulltorefreshlistview;
private MyMailAdapter adapter;
private MyMailAsyncTask asynctask;
private ProgressDialog progressdialog;
private View view, errorloginview;
private LinearLayout layout;
static class ViewHolder{
TextView TVmailfrom;
TextView TVmaildate;
TextView TVmailcontent;
TextView TVmailnamefake;
TextView TVmailreadfake;
TextView TVmailnumberfake;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
// return super.onCreateView(inflater, container, savedInstanceState);
currentapplication = (FudanBBSApplication) getActivity().getApplication();
layout = (LinearLayout) inflater.inflate(R.layout.mymailfragment, null);
pulltorefreshlistview = (PullToRefreshListView)layout.findViewById(R.id.maillistview);
pulltorefreshlistview.setMode(Mode.BOTH);
adapter = new MyMailAdapter(getActivity());
maillist = new ArrayList<HashMap<String, String>>();
listview = pulltorefreshlistview.getRefreshableView();
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
// TODO Auto-generated method stub
TextView TVnamefake = (TextView) view.findViewById(R.id.mailnamefake);
TextView TVmailnumberfake = (TextView) view.findViewById(R.id.mailnumberfake);
TextView TVmailcontent = (TextView) view.findViewById(R.id.mailcontent);
TextView TVmailfrom = (TextView) view.findViewById(R.id.mailfrom);
String name = TVnamefake.getText().toString().trim();
String number= TVmailnumberfake.getText().toString().trim();
String mailcontent = TVmailcontent.getText().toString().trim();
String mailfrom = TVmailfrom.getText().toString().trim();
String mailcontentURL = "http://bbs.fudan.edu.cn/bbs/mailcon?f="+name+"&n="+number;
Intent intent = new Intent();
intent.setClassName(getActivity(), "com.example.fudanbbs.MailActivity");
intent.putExtra("URL", new String[]{mailcontentURL, number, mailcontent, mailfrom});
startActivity(intent);
}
});
OnRefreshListener2<ListView> refreshlistener = new OnRefreshListener2<ListView>(){
@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
// TODO Auto-generated method stub
// pulltorefreshlistview.getLoadingLayoutProxy().setRefreshingLabel(getResources()
// .getString(R.string.pull_to_refresh_refreshing_label));
// pulltorefreshlistview.setRefreshing();
// asynctask = new MyMailAsyncTask();
// asynctask.execute("first", topicmodeURL);
Log.v(TAG, "pull down called");
}
@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
// TODO Auto-generated method stub
// pulltorefreshlistview.getLoadingLayoutProxy().setRefreshingLabel(getResources()
// .getString(R.string.pull_to_refresh_from_bottom_refreshing_label));
// if(false == lastpage){
// pulltorefreshlistview.setRefreshing();
// Log.v(TAG, nextpageurl);
// asynctask = new MyMailAsyncTask();
// asynctask.execute("next",nextpageurl);
//
// }else{
// Toast.makeText(getActivity(), getString(R.string.lastitem),Toast.LENGTH_SHORT).show();
// }
}
};
pulltorefreshlistview.setOnRefreshListener(refreshlistener);
errorloginview = inflater.inflate(R.layout.notloginmessage, null);
layout.addView(errorloginview);
if(!currentapplication.isCurrentUserGuest()){
errorloginview.setVisibility(View.GONE);
asynctask = new MyMailAsyncTask();
asynctask.execute();
}else{
pulltorefreshlistview.setVisibility(View.GONE);
Button BtnGologin = (Button) errorloginview.findViewById(R.id.gologin);
BtnGologin.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClassName(getActivity(), "com.example.fudanbbs.LoginActivity");
startActivityForResult(intent, 0);
}
});
}
return layout;
}
@Override
public void onActivityResult(int requestCode,
int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(data.getBooleanExtra("result", false)){
Log.v(TAG, "on activity result");
pulltorefreshlistview.setVisibility(View.VISIBLE);
errorloginview.setVisibility(View.GONE);
asynctask = new MyMailAsyncTask();
asynctask.execute();
}
}
public class MyMailAdapter extends BaseAdapter{
private LayoutInflater inflater;
private Context context;
private String from, date, content, name, read, number;
private HashMap<String, String> map;
private ViewHolder holder;
private TextPaint tp;
public MyMailAdapter(Context context) {
// super(context, resource, objects);
// TODO Auto-generated constructor stub
this.context = context;
this.inflater = inflater.from(context);
tp = new TextPaint();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
// return super.getCount();
return (null != maillist)?maillist.size():0;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
// return super.getView(position, convertView, parent);
if(null == convertView){
convertView = inflater.inflate(R.layout.mymailitem, null);
holder = new ViewHolder();
holder.TVmailfrom = (TextView) convertView.findViewById(R.id.mailfrom);
holder.TVmaildate = (TextView) convertView.findViewById(R.id.maildate);
holder.TVmailcontent = (TextView) convertView.findViewById(R.id.mailcontent);
holder.TVmailnamefake = (TextView) convertView.findViewById(R.id.mailnamefake);
holder.TVmailreadfake = (TextView) convertView.findViewById(R.id.mailreadfake);
holder.TVmailnumberfake = (TextView) convertView.findViewById(R.id.mailnumberfake);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
// Log.v(TAG, "position is "+position);
map = new HashMap<String, String>();
map = maillist.get(position);
from = new String();
from = map.get("from").toString();
holder.TVmailfrom.setText(from);
date = new String();
date = map.get("date").toString();
holder.TVmaildate.setText(date.substring(0, 10)+" "+date.substring(11,19));
Log.v(TAG, map.get("content").toString());
content = new String();
content = map.get("content").toString();
holder.TVmailcontent.setText(content);
read = new String();
read = map.get("r").toString();
holder.TVmailreadfake.setText(read);
holder.TVmailcontent = new TextView(context);
holder.TVmailcontent = (TextView) convertView.findViewById(R.id.mailcontent);
Log.v(TAG, "read is "+read);
if(read.equals("0")){
Log.v(TAG, "do paint color");
tp = holder.TVmailcontent.getPaint();
tp.setFakeBoldText(true);
// holder.TVmailcontent.setTextColor(getResources().getColor(R.color.red));
holder.TVmailcontent.setTextColor(Color.RED);
}else{
Log.v(TAG, "do paint color");
tp = new TextPaint();
tp = holder.TVmailcontent.getPaint();
tp.setFakeBoldText(false);
// holder.TVmailcontent.setTextColor(getResources().getColor(R.color.red));
holder.TVmailcontent.setTextColor(Color.BLACK);
}
Log.v(TAG, "position is "+position);
name = new String();
name = map.get("name").toString();
holder.TVmailnamefake.setText(name);
number = new String();
number = map.get("number").toString();
holder.TVmailnumberfake.setText(number);
return convertView;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}
public class MyMailAsyncTask extends AsyncTask{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressdialog = new ProgressDialog(getActivity());
progressdialog.setMessage(getString(R.string.loadingmaillist));
progressdialog.setCanceledOnTouchOutside(false);
progressdialog.setProgressStyle(progressdialog.STYLE_SPINNER);
progressdialog.show();
Log.v(TAG, "onPreExecute");
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
adapter.notifyDataSetChanged();
pulltorefreshlistview.onRefreshComplete();
}
}, 0);
if(progressdialog.isShowing()){
progressdialog.dismiss();
}
Log.v(TAG, "onPostExecute");
}
@Override
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
Log.v(TAG, "doInBackground start");
currentapplication = (FudanBBSApplication) getActivity().getApplication();
cookie = new HashMap<String, String>();
cookie = currentapplication.get_cookie();
Log.v(TAG, "doInBackground");
// Log.v(TAG, cookie.get("utmpuser").isEmpty()?"cookie is empty":cookie.get("utmpuser"));
// Log.v(TAG+" cookie", cookie.isEmpty()?"cookie is empty":"utmpuser");
try{
Document doc = Jsoup.connect("http://bbs.fudan.edu.cn/bbs/mail").timeout(15000).cookies(cookie).get();
HashMap<String, String> map;
Elements elements = doc.getElementsByTag("bbsmail");
int mailcount = 0;
if(null != elements){
for(Element ele: elements){
mailcount = Integer.parseInt(ele.attr("total"));
}
}
Elements mails = doc.getElementsByTag("mail");
int number = 0;
for(Element mail: mails){
map = new HashMap<String, String>();
map.put("r", mail.attr("r").toString().trim());
map.put("from", mail.attr("from").toString().trim());
map.put("date", mail.attr("date").toString().trim());
map.put("name", mail.attr("name").toString().trim());
map.put("content", mail.text());
map.put("number", String.valueOf(mailcount-number));
number++;
maillist.add(map);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v(TAG, "doInBackground end");
return null;
}
}
}