package com.mailssenger.activity;
import java.util.LinkedList;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import com.baidu.android.pushservice.PushConstants;
import com.baidu.android.pushservice.PushManager;
import com.mailssenger.CommonApplication;
import com.mailssenger.MainServiceCallback;
import com.mailssenger.R;
import com.mailssenger.Task;
import com.mailssenger.adapter.RecentAdapter;
import com.mailssenger.db.ConvDB;
import com.mailssenger.db.UserDB;
import com.mailssenger.fragment.ConvFragment;
import com.mailssenger.mail.MailAccount;
import com.mailssenger.model.ConvModel;
import com.mailssenger.model.MsgModel;
import com.mailssenger.model.UserModel;
import com.mailssenger.push.MyPushMessageReceiver;
import com.mailssenger.search.MySearchableActivity;
import com.mailssenger.service.MainService;
import com.mailssenger.util.L;
import com.mailssenger.util.NetUtil;
import com.mailssenger.util.T;
public class MainActivity extends BaseActivity implements OnClickListener,
MyPushMessageReceiver.EventHandler, MainServiceCallback,PopupMenu.OnMenuItemClickListener{
//添加 MainServiceCallback 之后才可以添加任务
private static String TAG = " >MainActivity";
ConvFragment convFragment = null;
private LinkedList<ConvModel> mRecentDatas;
private RecentAdapter mRecentAdapter;
//网络提醒
private View mNetErrorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.activity_main);
setTitle("Mailssenger");
mApplication.setHandler(handler);
mRecentDatas = new LinkedList<ConvModel>();
mRecentDatas = mConvDB.getRecentList();
mRecentAdapter = new RecentAdapter(this);
mRecentAdapter.setData(mRecentDatas);
//start baidu push
PushManager.startWork(getApplicationContext(),
PushConstants.LOGIN_TYPE_API_KEY, CommonApplication.API_KEY);
//初始化网络提示
mNetErrorView = findViewById(R.id.net_status_bar_top);
mNetErrorView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
startActivity(new Intent(
android.provider.Settings.ACTION_WIFI_SETTINGS));
}
});
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_frame, new ConvFragment(mRecentAdapter)).commit();
// get some bsaic data
Task task = new Task(context);
task.setMethod(MailAccount.class, "getLatestMails","inbox", (Integer)10);
MainService.newTask(task);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
MyPushMessageReceiver.ehList.add(this);
L.e(TAG,"I am paused");
System.out.println(MyPushMessageReceiver.ehList);
if (!PushManager.isPushEnabled(this))
PushManager.resumeWork(this);
//网络操作显示
if (!NetUtil.isNetConnected(this))
mNetErrorView.setVisibility(View.VISIBLE);
else {
mNetErrorView.setVisibility(View.GONE);
}
mApplication.getNotificationManager().cancel(
MyPushMessageReceiver.NOTIFY_ID);
MyPushMessageReceiver.mNewNum = 0;
//update the info
updateConvFragment();
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
MyPushMessageReceiver.ehList.remove(this);// 暂停就移除监听
L.e(TAG,"I am paused");
System.out.println(MyPushMessageReceiver.ehList);
}
public static int UPDATE_CHATS=100;
public static int UPDATE_GROUPS=101;
public static int UPDATE_CONTACTS=102;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what == UPDATE_CHATS){
updateChatListView();
}
if(msg.what == UPDATE_GROUPS){
}
if(msg.what == UPDATE_CONTACTS){
}
switch (msg.what) {
case MsgModel.MESSAGE_TYPE_NEW_USER:
UserModel u = (UserModel) msg.obj;
mUserDB.save(u);
T.showShort(mApplication, "好友列表已更新!");
//Demo 数据
ConvModel recentItem = new ConvModel();
recentItem.setEmail(u.getEmail());
recentItem.setName(u.getNickName());
recentItem.setMessage("Hi~ I am"+u.getNickName());
recentItem.setNewNum(0);
recentItem.setTime(System.currentTimeMillis());
mConvDB.saveOrUpdate(recentItem);
updateConvFragment();
break;
case MsgModel.MESSAGE_TYPE_TEXT:
//接收到新的消息
MsgModel msgItem = (MsgModel) msg.obj;
msgItem.setNew(true);
String hisEmail = msgItem.getSender();
//只有存在好友关系,才可以发文本信息,所以收到文本消息的时候,用户必然存在
UserModel user = mUserDB.getById(hisEmail);
if(user!=null){
}
L.e(TAG,mGson.toJson(msgItem));
L.e(TAG,"save msg");
mMsgDB.save(msgItem);
recentItem = new ConvModel(hisEmail, user.getAvatar(), user.getNickName(),
msgItem.getMessage(), 0, System.currentTimeMillis());
mConvDB.saveOrUpdate(recentItem);
L.e(TAG,"I will be in updateConvFragment()");
updateConvFragment();
// mRecentAdapter.addFirst(recentItem);
T.showShort(mApplication, user.getNickName() + ":" + msgItem.getMessage());
break;
default:
break;
}
}
};
@Override
public void onChatMessage(MsgModel chatMessage) {
//将得到的消息交给handler处理
Message handlerMsg = handler.obtainMessage(MsgModel.MESSAGE_TYPE_TEXT);
handlerMsg.obj = chatMessage;
handler.sendMessage(handlerMsg);
}
@Override
public void onBind(String method, int errorCode, String content) {
//绑定操作应该直接由Push自己完成
if (errorCode == 0) {
L.e(TAG," On bind");
// if(mSpUtil.isFirst()){
// L.e(TAG,"Fisrt Time Bind");
//
// //将自己添加到对话列表
//// RecentConversationModel recentItem = new RecentConversationModel();
//// recentItem.setEmail(myUserModel.getEmail());
//// recentItem.setName(myUserModel.getNickName());
//// recentItem.setMessage(chatMessage.getMessage());
//// recentItem.setNewNum(0);
//// recentItem.setTime(System.currentTimeMillis());
////
//// mConvDB.saveRecent(recentItem);
//
// L.e(TAG,"add initial data");
// initialUserDB();
//
// handler.sendEmptyMessage(UniBirhamActivity.UPDATE_CHATS);
// mSpUtil.setFirst(false);
// }
}
}
@Override
public void onNotify(String title, String content) {
// TODO Auto-generated method stub
}
@Override
public void onNetChange(boolean isNetConnected) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
if (!isNetConnected) {
T.showShort(this, R.string.net_error_tip);
mNetErrorView.setVisibility(View.VISIBLE);
} else {
mNetErrorView.setVisibility(View.GONE);
}
}
@Override
public void onNewFriend(UserModel u) {
// TODO Auto-generated method stub
}
/**
* 连续按两次返回键就退出
*/
private long firstTime;
/**
* rewrite the sliding menu
*/
@Override
public void onBackPressed() {
if (System.currentTimeMillis() - firstTime < 3000) {
mApplication.showNotification();
// if (!mSpUtil.getMsgNotify() && PushManager.isPushEnabled(this))
// PushManager.stopWork(this);
finish();
} else {
firstTime = System.currentTimeMillis();
if (mSpUtil.getMsgNotify())
T.showShort(this, R.string.press_again_backrun);
else
T.showShort(this, R.string.press_again_exit);
}
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void refresh(Object... args) {
// TODO Auto-generated method stub
if (args[0].equals("getLatestMails" )) {
updateChatListView();
T.dShowShort(context, "I am updating!");
}
}
public void updateChatListView(){
// mRecentDatas = mConvDB.getRecentList();
// mRecentAdapter.setData(mRecentDatas);
// mRecentAdapter.notifyDataSetChanged();
}
public void initialUserDB(){
UserDB mUserDB =CommonApplication.getInstance().getUserDB();
ConvDB mConvDB=CommonApplication.getInstance().getConvDB();
UserModel u = new UserModel();
u.setEmail("1129966399@qq.com");
u.setNickName("Han Jiang");
mUserDB.save(u);
u = new UserModel();
u.setEmail("zxm024@bham.ac.uk");
u.setNickName("Kenny Ma");
mUserDB.save(u);
u = new UserModel();
u.setEmail("HYW399@cs.bham.ac.uk");
u.setNickName("Bowie");
mUserDB.save(u);
u = new UserModel();
u.setEmail("TYL375@cs.bham.ac.uk");
u.setNickName("Issac");
mUserDB.save(u);
u = new UserModel();
u.setEmail("YXF373@cs.bham.ac.uk");
u.setNickName("Seffy");
mUserDB.save(u);
//Demo 数据
ConvModel recentItem = new ConvModel();
recentItem.setEmail("zxm024@bham.ac.uk");
recentItem.setName("Kenny Ma");
recentItem.setMessage("Here is Kenny");
recentItem.setNewNum(0);
recentItem.setTime(System.currentTimeMillis());
mConvDB.saveOrUpdate(recentItem);
recentItem = new ConvModel();
recentItem.setEmail("1129966399@qq.com");
recentItem.setName("Han Jiang");
recentItem.setMessage("It is a Chinese name");
recentItem.setNewNum(0);
recentItem.setTime(System.currentTimeMillis());
mConvDB.saveOrUpdate(recentItem);
}
public void updateConvFragment(){
// L.i(TAG,"I am updateConvFragment");
// if (convFragment == null){
// L.i(TAG,"convFragment == null");
// convFragment = (ConvFragment ) getSupportFragmentManager()
// .findFragmentById(R.id.fragment_conv);
// }
// L.i(TAG,"updateRecentListView");
// convFragment.updateRecentListView();
mRecentDatas = mConvDB.getRecentList();
mRecentAdapter.setData(mRecentDatas);
mRecentAdapter.notifyDataSetChanged();
}
private SearchView mSearchView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
// MenuItem searchItem = menu.findItem(R.id.action_search);
// mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// mSearchView.setOnQueryTextListener(this);
// SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
//
// MenuItem searchItem = menu.findItem(R.id.action_search);
// mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// mSearchView.setSearchableInfo(
// searchManager.getSearchableInfo(getComponentName()));
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//加号按键监听
case R.id.action_add:
showPopup();
return true;
//搜索按钮监听
case R.id.action_search:
Intent intent = new Intent(context, MySearchableActivity.class);
context.startActivity(intent);
// onSearchRequested();
// startSearch("", false, null, false);
// mSearchView.setIconified(false);
return true;
//主按键监听
case android.R.id.home:
Toast.makeText(this, "Hello ", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
/**
* Show Popup Menu
*/
public void showPopup(){
View menuItemView = findViewById(R.id.action_add);
PopupMenu popup = new PopupMenu(this, menuItemView);
MenuInflater inflate = popup.getMenuInflater();
inflate.inflate(R.menu.popup, popup.getMenu());
popup.show();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
/*
* 子菜单项的点击监听
*/
switch (item.getItemId()) {
case R.id.add_contact:
Toast.makeText(context, "not implemented yet,please use send new mail", Toast.LENGTH_SHORT).show();
break;
case R.id.new_group:
Toast.makeText(context, "not implemented yet", Toast.LENGTH_SHORT).show();
break;
case R.id.new_mail:
Intent intent = new Intent(context, SendMailActivity.class);
context.startActivity(intent);
break;
}
return false;
}
}