package com.suan.weclient.activity; import java.text.SimpleDateFormat; import java.util.List; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.provider.Settings; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.ContextThemeWrapper; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.LayoutParams; import com.slidingmenu.lib.SlidingMenu; import com.slidingmenu.lib.app.SlidingFragmentActivity; import com.suan.weclient.R; import com.suan.weclient.fragment.ContentFragment; import com.suan.weclient.fragment.ContentFragment.MyPageChangeListener; import com.suan.weclient.fragment.LeftFragment; import com.suan.weclient.fragment.UserListFragment; import com.suan.weclient.pushService.AlarmReceiver; import com.suan.weclient.util.GlobalContext; import com.suan.weclient.util.SharedPreferenceManager; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.DataManager.AutoLoginListener; import com.suan.weclient.util.data.DataManager.DialogListener; import com.suan.weclient.util.data.DataManager.DialogSureClickListener; import com.suan.weclient.util.data.DataManager.UserGroupListener; import com.suan.weclient.util.data.holder.UserGoupPushHelper; import com.suan.weclient.util.data.holder.resultHolder.MessageResultHolder; import com.suan.weclient.util.net.WeChatLoader; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.WechatManager.OnActionFinishListener; import com.suan.weclient.view.actionbar.CustomMainActionView; import com.suan.weclient.view.ptr.PTRListview; import com.umeng.analytics.MobclickAgent; import com.umeng.fb.FeedbackAgent; import com.umeng.fb.model.Conversation; import com.umeng.fb.model.Conversation.SyncListener; import com.umeng.fb.model.DevReply; import com.umeng.fb.model.Reply; import com.umeng.update.UmengDialogButtonListener; import com.umeng.update.UmengUpdateAgent; import com.umeng.update.UmengUpdateListener; import com.umeng.update.UpdateResponse; public class MainActivity extends SlidingFragmentActivity { public static final String BROADCAST_ACTION_REFRESH_MESSAGE = "cn.com.action.suan.refreshMessage"; private GlobalContext mGlobalContext; LeftFragment leftFragment; ContentFragment contentFragment; SlidingMenu mSlidingMenu; private ActionBar actionBar; /* about broadcast */ private BroadcastReceiver mReceiver; private FeedbackAgent agent; private Conversation defaultConversation; private DataManager mDataManager; private Dialog popDialog; private Dialog replyDialog; /* about sms verify */ private EditText smsTextView; private Button verifyButton; public static final int VERIFY_NONE = 2; public static final int VERIFY_HAD_SENT = 3; private int vefityState = VERIFY_NONE; public static final int VERIFY_CODE_LENGTH = 6; @Override public void onCreate(Bundle arg0) { super.onCreate(arg0); initReceiver(); initDataChangeListener(); initCache(); initSlidingMenu(); initWidgets(); initActionBar(); initListener(contentFragment); initUmeng(); boolean networkConnected = Util.isNetConnected(MainActivity.this); if (networkConnected) { startLoad(); } } private void initReceiver() { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { /* receive the broadcast , refresh the profile to show new message count */ mDataManager.getWechatManager().getUserProfile(WechatManager.DIALOG_POP_NO, mDataManager.getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { } }); } }; IntentFilter filter = new IntentFilter(); filter.addAction(BROADCAST_ACTION_REFRESH_MESSAGE); registerReceiver(mReceiver, filter); } public void onNewIntent(Intent intent) { //analyse intent int getCurrentIndex = intent.getIntExtra("currentIndex", -1); if (getCurrentIndex != -1) { //get the current value if (getCurrentIndex != mDataManager.getCurrentPosition()) { if (mDataManager.setCurrentPosition(getCurrentIndex)) { autoLogin(); } } mDataManager.doListLoadStart(); mDataManager.getWechatManager().getUserProfile(WechatManager.DIALOG_POP_NO, mDataManager.getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { switch (code) { case WechatManager.ACTION_SUCCESS: mDataManager.doProfileGet(mDataManager.getCurrentUser()); break; case WechatManager.ACTION_SPECIFICED_ERROR: break; default: break; } } }); /* mDataManager.getWechatManager().getNewMessageList(WechatManager.DIALOG_POP_NO, mDataManager.getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { switch (code) { case WechatManager.ACTION_SUCCESS: mDataManager.doMessageGet((MessageResultHolder) object); break; case WechatManager.ACTION_SPECIFICED_ERROR: break; default: break; } } }); */ } super.onNewIntent(intent); } private void initService() { if (SharedPreferenceManager.getPushEnable(this)) { String alarmServicePath = "com.suan.weclient.pushService.AlarmSysService"; boolean alarmServiceRunning = Util.isServiceRunning(this, alarmServicePath); if (!alarmServiceRunning) { Intent startServiceIntent = new Intent(); startServiceIntent.setAction(AlarmReceiver.BROADCAST_ACTION_START_PUSH); sendBroadcast(startServiceIntent); } } } private void initSlidingMenu() { // set the Behind View setBehindContentView(R.layout.left_frame); setContentView(R.layout.main); setBehindContentView(R.layout.left_frame); mSlidingMenu = getSlidingMenu(); mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); mSlidingMenu.setShadowDrawable(R.drawable.shadow); mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); mSlidingMenu.setFadeDegree(0.35f); mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); mSlidingMenu.setMode(SlidingMenu.LEFT); mSlidingMenu.setSecondaryMenu(R.layout.right_frame); FragmentTransaction t = this.getSupportFragmentManager() .beginTransaction(); leftFragment = new LeftFragment(); t.replace(R.id.left_frame, leftFragment); contentFragment = new ContentFragment(); t.replace(R.id.content_layout, contentFragment); t.commit(); } private void initWidgets() { } private void initActionBar() { actionBar = getSupportActionBar(); actionBar.setDisplayShowCustomEnabled(true); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayUseLogoEnabled(false); CustomMainActionView customMainActionView = new CustomMainActionView(this); customMainActionView.init(MainActivity.this, mDataManager); customMainActionView.setShowMenuListener(new ShowMenuListener() { @Override public void showLeftMenu() { // TODO Auto-generated method stub getSlidingMenu().showMenu(); } public void showRightMenu() { getSlidingMenu().showSecondaryMenu(); } }); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); actionBar.setCustomView(customMainActionView, layoutParams); } private void initUmeng() { agent = new FeedbackAgent(this); defaultConversation = agent.getDefaultConversation(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub UmengUpdateAgent.setUpdateAutoPopup(true); UmengUpdateAgent .setDialogListener(new UmengDialogButtonListener() { @Override public void onClick(int arg0) { // TODO Auto-generated method stub } }); UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() { @Override public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) { switch (updateStatus) { case 0: // has update break; case 1: // has no update break; case 2: // none wifi break; case 3: // time out break; } } }); UmengUpdateAgent.update(MainActivity.this); } }, 1000); handler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub defaultConversation.sync(new SyncListener() { @Override public void onSendUserReply(List<Reply> arg0) { // TODO Auto-generated method stub } @Override public void onReceiveDevReply(List<DevReply> arg0) { // TODO Auto-generated method stub String replyString = ""; /* * fuck umeng the arg0 might be null */ try { for (int i = 0; i < arg0.size(); i++) { SimpleDateFormat dateFormat = new SimpleDateFormat( "MM-dd HH:mm"); replyString += dateFormat.format(arg0.get(i) .getDatetime()); replyString += ": "; replyString += arg0.get(i).getContent(); replyString += "\n"; } if (arg0.size() > 0) { dialogShowDevReply(replyString); } } catch (Exception exception) { } } }); } }, 1000); } public void dialogShowDevReply(String content) { replyDialog = Util.createDevReplyDialog(MainActivity.this, "开发者回复:", content, new DialogSureClickListener() { @Override public void onClick(View v) { replyDialog.dismiss(); popFeedback(); } }, new OnClickListener() { @Override public void onClick(View v) { replyDialog.dismiss(); } } ); replyDialog.show(); } private void popFeedback() { replyDialog = Util.createFeedbackDialog(MainActivity.this, new DialogSureClickListener() { @Override public void onClick(View v) { String content = Util.popContentEditText.getEditableText() .toString(); defaultConversation.addUserReply(content); replyDialog.dismiss(); mDataManager.doLoadingStart("反馈发送中...", WechatManager.DIALOG_POP_CANCELABLE); sync(); } }, new OnClickListener() { @Override public void onClick(View v) { replyDialog.dismiss(); } } ); replyDialog.show(); } private void sync() { Conversation.SyncListener listener = new Conversation.SyncListener() { @Override public void onSendUserReply(List<Reply> replyList) { mDataManager.doLoadingEnd(); Toast.makeText(MainActivity.this, "反馈发送成功!", Toast.LENGTH_SHORT) .show(); } @Override public void onReceiveDevReply(List<DevReply> replyList) { } }; defaultConversation.sync(listener); } private void gotoNetworkSetting() { Handler popHandler = new Handler(); popHandler.postDelayed(new Runnable() { @Override public void run() { mDataManager.doPopEnsureDialog(true, false, "网络", "无网络连接,进入设置开启网络?", new DialogSureClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Settings.ACTION_SETTINGS); startActivity(intent); finish(); } }); } }, 500); } private void startLoad() { autoLogin(); } @Override public void onStart() { initService(); boolean networkConnected = Util.isNetConnected(MainActivity.this); if (networkConnected) { } else { gotoNetworkSetting(); } super.onStart(); } @Override protected void onStop() { super.onStop(); } public void onResume() { SharedPreferenceManager.putActivityRunning(this, true); super.onResume(); MobclickAgent.onResume(this); } public void onPause() { SharedPreferenceManager.putActivityRunning(this, false); mDataManager.clearListLoadingListner(); super.onPause(); MobclickAgent.onPause(this); } public void onDestroy() { unregisterReceiver(mReceiver); super.onDestroy(); } private void initListener(final ContentFragment fragment) { fragment.setMyPageChangeListener(new MyPageChangeListener() { @Override public void onPageSelected(int position) { if (fragment.isFirst()) { mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); } else if (fragment.isEnd()) { mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); } else { // mSlidingMenu.setCanSliding(false, false); } } }); } private void initDataChangeListener() { mGlobalContext = ((GlobalContext) getApplicationContext()); mDataManager = mGlobalContext.getDataManager(); mDataManager.updateUserGroup(); mDataManager.addAutoLoginListener(new AutoLoginListener() { @Override public void autoLogin() { // TODO Auto-generated method stub MainActivity.this.autoLogin(); } public void onAutoLoginEnd() { } }); mDataManager.addUserGroupListener(new UserGroupListener() { @Override public void onGroupChangeEnd() { // TODO Auto-generated method stub mDataManager.getUserListControlListener().onUserListDismiss(); int userAmount = mDataManager.getUserGroup().size(); if (userAmount == 0) { popLoginEnsure(); } } @Override public void deleteUser(int index) { // TODO Auto-generated method stub } @Override public void onAddUser() { // TODO Auto-generated method stub } }); mDataManager.setLoadingListener(new DialogListener() { @Override public void onLoad(String loaingText, int dialogCancelType) { // TODO Auto-generated method stub if (MainActivity.this != null && !MainActivity.this.isFinishing()) { if (popDialog != null) { popDialog.dismiss(); } popDialog = Util.createLoadingDialog(MainActivity.this, loaingText, dialogCancelType); popDialog.show(); } } @Override public void onFinishLoad() { // TODO Auto-generated method stub if (popDialog != null) { popDialog.dismiss(); popDialog = null; } } @Override public void onPopEnsureDialog(boolean cancelVisible, boolean cancelable, String titleText, String contentText, DialogSureClickListener dialogSureClickListener) { // TODO Auto-generated method stub try { if (popDialog != null) { popDialog.dismiss(); } popDialog = Util.createEnsureDialog( dialogSureClickListener, cancelVisible, MainActivity.this, titleText, contentText, true); popDialog.show(); } catch (Exception exception) { Log.e("pop ensure error", "" + exception); } } @Override public void onDismissAllDialog() { // TODO Auto-generated method stub if (popDialog != null) { popDialog.dismiss(); popDialog = null; } } }); } private void popLoginEnsure() { if (!MainActivity.this.isFinishing()) { try { popDialog = Util.createEnsureDialog(new OnClickListener() { @Override public void onClick(View v) { popDialog.cancel(); Intent jumbIntent = new Intent(); jumbIntent.setClass(MainActivity.this, LoginActivity.class); startActivityForResult(jumbIntent, UserListFragment.START_ACTIVITY_LOGIN); } }, true, MainActivity.this, "跳转到登录", "你的账户列表目前为空,跳转到登录页面?", false); popDialog.show(); } catch (Exception e) { } } } private long lastBackKeyTouchTime = 0; @SuppressLint("ShowToast") public boolean onKeyDown(int keyCode, KeyEvent event) { // 按下键盘上返回按钮 if (keyCode == KeyEvent.KEYCODE_BACK) { if (System.currentTimeMillis() - lastBackKeyTouchTime < 3000) { finish(); } else { Toast.makeText(getApplicationContext(), "再按一次返回键退出应用", Toast.LENGTH_SHORT).show(); lastBackKeyTouchTime = System.currentTimeMillis(); } return true; } else { return super.onKeyDown(keyCode, event); } } private void initCache() { mDataManager.createImageCache(getApplicationContext()); } private void autoLogin() { if (mDataManager.getUserGroup().size() <= 0) { return; } mDataManager.getWechatManager().login( mDataManager.getCurrentPosition(), WechatManager.DIALOG_POP_NOT_CANCELABLE, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub switch (code) { case WechatManager.ACTION_SUCCESS: getDataAfterLogin(); break; case WechatManager.ACTION_SPECIFICED_SITUATION: mDataManager.getWechatManager().getVerifyPage(mDataManager.getCurrentPosition(), mDataManager.getCurrentUser().getPhone(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { } }); popSMSVerify(); break; case WechatManager.ACTION_SPECIFICED_ERROR: mDataManager.doPopEnsureDialog(true, false, "登录失败", "账户名或密码出错,重新登录?", new DialogSureClickListener() { @Override public void onClick(View v) { mDataManager.doDismissAllDialog(); popDialog = Util.createLoginDialog(MainActivity.this, "登录", new OnClickListener() { @Override public void onClick(View v) { EditText userIdEdit = (EditText) popDialog.findViewById(R.id.dialog_login_edit_user_id); EditText pwdEdit = (EditText) popDialog.findViewById(R.id.dialog_login_edit_pass_word); String userId = userIdEdit.getText().toString(); String pwd = WeChatLoader .getMD5Str(pwdEdit.getText().toString()); mDataManager.getCurrentUser().setUserName(userId); mDataManager.getCurrentUser().setPwd(pwd); SharedPreferenceManager.updateUser(MainActivity.this, mDataManager); popDialog.dismiss(); autoLogin(); } }, new OnClickListener() { @Override public void onClick(View v) { popDialog.dismiss(); } } ); popDialog.show(); } }); break; case WechatManager.ACTION_OTHER: break; } } }); } private void popSMSVerify() { popDialog = Util.createSMSVerifyDialog(MainActivity.this, getResources().getString(R.string.sms_verify), new OnClickListener() { @Override public void onClick(View v) { switch (vefityState) { case VERIFY_NONE: mDataManager.getWechatManager().sendVefityCode(mDataManager.getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { switch (code) { case WechatManager.ACTION_SUCCESS: break; default: break; } } }); break; case VERIFY_HAD_SENT: String verifyCode = smsTextView.getText().toString(); if (verifyCode.length() == 0) { Toast.makeText(MainActivity.this, getResources().getString(R.string.null_code), Toast.LENGTH_SHORT).show(); } else if (verifyCode.length() != VERIFY_CODE_LENGTH) { Toast.makeText(MainActivity.this, getResources().getString(R.string.invalide_length), Toast.LENGTH_SHORT).show(); } else { } break; } } }); smsTextView = (EditText) popDialog.findViewById(R.id.dialog_sms_verify_edit_content); verifyButton = (Button) popDialog.findViewById(R.id.dialog_sms_verify_button_sure); popDialog.show(); } private void getDataAfterLogin() { mDataManager.getWechatManager().getUserProfile(WechatManager.DIALOG_POP_CANCELABLE, mDataManager.getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub String referer = (String) object; mDataManager .getWechatManager() .getUserImgWithReferer( mDataManager .getCurrentPosition(), WechatManager.DIALOG_POP_CANCELABLE, null, new OnActionFinishListener() { @Override public void onFinish( int code, Object object) { // TODO // Auto-generated // method stub } }, referer); } }); mDataManager .getWechatManager() .getMassData( mDataManager .getCurrentPosition(), WechatManager.DIALOG_POP_CANCELABLE, new OnActionFinishListener() { @Override public void onFinish( int code, Object object) { // TODO // Auto-generated // method stub mDataManager.doMassDataGet(mDataManager.getCurrentUser()); } }); mDataManager.doListLoadStart(); mDataManager .getWechatManager() .getNewMessageList( WechatManager.DIALOG_POP_CANCELABLE, mDataManager .getCurrentPosition(), new OnActionFinishListener() { @Override public void onFinish( int code, Object object) { // TODO // Auto-generated // method // stub switch (code) { case WechatManager.ACTION_SUCCESS: mDataManager .doMessageGet((MessageResultHolder) object); break; case WechatManager.ACTION_SPECIFICED_ERROR: autoLogin(); break; default: break; } } }); } public interface ShowMenuListener { public void showLeftMenu(); } }