MailView.java :  » SSH » brick-leeon » leeon » mobile » BBSBrowser » Java Open Source

Java Open Source » SSH » brick leeon 
brick leeon » leeon » mobile » BBSBrowser » MailView.java
package leeon.mobile.BBSBrowser;

import java.util.ArrayList;
import java.util.List;

import leeon.mobile.BBSBrowser.actions.BBSMailAction;
import leeon.mobile.BBSBrowser.actions.ContentException;
import leeon.mobile.BBSBrowser.actions.HttpConfig;
import leeon.mobile.BBSBrowser.actions.NetworkException;
import leeon.mobile.BBSBrowser.models.MailObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MailView extends BaseGestureView {
  
  private Context context;
  
  private ListView mailListView;
  private List<MailObject> mailList = new ArrayList<MailObject>();
  private MailObject mailDetail;
  
  public MailView(Context context) {
    super(context);
    this.context = context;
  }
  
  public void refresh() {
    if (UserUtil.CURRENT_USER_ID != null) {
      scrollAction.refresh();
    }
  }
  
  /**
   * 
   */
  public View createMailListView() {    
    mailListView = new ListView(context);    
    mailListView.setDividerHeight(0);    
    mailListView.setAdapter(new MailListAdapter(mailList));
    mailListView.setOnItemClickListener(new OnItemClickListener() {

      public void onItemClick(AdapterView<?> listView, View view, int position, long id) {
        mailDetail = mailList.get(position);
        Intent intent = new Intent(context, MailDetailActivity.class);
        intent.putExtra("mail", mailDetail);
        ((Activity)context).startActivityForResult(intent, BoardTabActivity.REQ_MAIL_DETAIL);
      }
      
    });
    scrollAction.addActionWhenScroll(mailListView);
    refresh();
    
    this.addListView(mailListView);
    return this.gestureOverlayView;
  }
  

  /**
   * 
   */
  protected void onGestureActionRecognized(String actionName, final int position) {
    if ("add".equals(actionName)) {
      newMail();
    } else if ("minus".equals(actionName)) {
      if (position >= 0 && position < mailList.size()) {
        new AlertDialog.Builder(context).setTitle("")
          .setMessage("["+mailList.get(position).getTitle()+"]")
          .setPositiveButton("", new DialogInterface.OnClickListener() {          
            public void onClick(DialogInterface dialog, int which) {
              delMail(mailList.get(position));
            }
          })
          .setNegativeButton("", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        }).create().show();
      }
    } else if ("refresh".equals(actionName)) {
      refresh();
    }
  }
  
  void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
      if (MailDetailActivity.MAIL_ACTION_RE.equals(data.getAction())) {
        if ("m".equals(mailDetail.getStatus()))
          mailDetail.setStatus("b");
        else
          mailDetail.setStatus("r");
      } else if (MailDetailActivity.MAIL_ACTION_DEL.equals(data.getAction())) {
        scrollAction.remove(mailDetail);
      }
    } else if (resultCode == Activity.RESULT_CANCELED) {
      if ("+".equals(mailDetail.getStatus()))
        mailDetail.setStatus(" ");
    }
    ((BaseAdapter)mailListView.getAdapter()).notifyDataSetChanged();
  }
  
  void newMail() {
    Intent intent = new Intent(context, MailDetailActivity.class);
    context.startActivity(intent);
  }
  
  private void addMailList(List<MailObject> list) {
//    for (int i = list.size()-1; i >= 0; i --) {
//      mailList.add(list.get(i));
//    }
    mailList.addAll(list);
  }
  
  private void fetchMailList(final int totalItemCount) {
    UIUtil.runActionInThread(context, new UIUtil.ActionInThread() {
      @Override
      public void action() throws NetworkException, ContentException {
        if (totalItemCount == 0)
          bglist = BBSMailAction.mailList();
        else
          bglist = BBSMailAction.mailList(
            BBSMailAction.totalMailCount-totalItemCount-HttpConfig.BBS_PAGE_SIZE+1);
      }
      @Override
      public void actionFinish() {
        if (bglist != null) {
          addMailList(bglist);
          ((BaseAdapter)mailListView.getAdapter()).notifyDataSetChanged();
        }
      }
    });    
  }
  
  private void delMail(final MailObject mail) {
    UIUtil.runActionInThread(context, new UIUtil.ActionInThread() {
      @Override
      public void action() throws NetworkException, ContentException {
        BBSMailAction.delMail(mail);
      }
      @Override
      public void actionFinish() {
        Toast.makeText(context, "", Toast.LENGTH_SHORT).show();
        scrollAction.remove(mail);
        ((BaseAdapter)mailListView.getAdapter()).notifyDataSetChanged();
      }
    });
  }
  
  private MailListScrollAction scrollAction = new MailListScrollAction();
  private class MailListScrollAction extends UIUtil.ActionInScroll {
    
    public MailListScrollAction() {
      new UIUtil().super();
    }
    
    @Override
    protected void actionClear() {
      MailView.this.mailList.clear();
    }

    @Override
    protected void actionScroll(int totalItemCount) {
      fetchMailList(totalItemCount);
    }

    @Override
    protected void actionRemove(Object o) {
      MailView.this.mailList.remove(o);
    }
  }
  
  private class MailListAdapter extends BaseAdapter {
      
      private List<MailObject> list;
      
    public MailListAdapter(List<MailObject> list) {
      this.list = list;
    }

    public int getCount() {
      return list.size();
    }

    public Object getItem(int position) {
      return list.get(position);
    }

    public long getItemId(int position) {
      return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
      View tv;
      if (convertView == null) {
        tv =  LayoutInflater.from(MailView.this.context).inflate(R.layout.mail_item, parent, false);
      } else {
        tv =  convertView;
      }
      TextView title = (TextView)tv.findViewById(R.id.mailItemTitle);
      TextView sender = (TextView)tv.findViewById(R.id.mailItemSender);
      TextView date = (TextView)tv.findViewById(R.id.mailItemDate);
      TextView number = (TextView)tv.findViewById(R.id.mailItemNumber);
      
      
      title.setText(list.get(position).getTitle());
      sender.setText(list.get(position).getSender());
      number.setText(list.get(position).getNumber());
      date.setText(list.get(position).getDate());
      if ("+".equals(list.get(position).getStatus()))
        title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.mail_forward, 0, 0, 0);
      else if ("r".equals(list.get(position).getStatus()))
        title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.mail_replay, 0, 0, 0);
      else if ("m".equals(list.get(position).getStatus()))
        title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.mail_send, 0, 0, 0);
      else if ("b".equals(list.get(position).getStatus()))
        title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.mail_replyall, 0, 0, 0);
      return tv;
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.