MainActivity.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717
  1. package com.sk.weichat.ui;
  2. import android.app.ActivityManager;
  3. import android.content.BroadcastReceiver;
  4. import android.content.ComponentName;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.content.ServiceConnection;
  9. import android.os.Build;
  10. import android.os.Bundle;
  11. import android.os.Handler;
  12. import android.os.IBinder;
  13. import android.os.Message;
  14. import android.os.PersistableBundle;
  15. import android.support.v4.app.Fragment;
  16. import android.support.v4.app.FragmentManager;
  17. import android.support.v4.app.FragmentTransaction;
  18. import android.util.Log;
  19. import android.view.KeyEvent;
  20. import android.view.View;
  21. import android.widget.TextView;
  22. import com.android.volley.Response;
  23. import com.android.volley.VolleyError;
  24. import com.baidu.android.pushservice.PushConstants;
  25. import com.baidu.android.pushservice.PushManager;
  26. import com.sk.weichat.AppConfig;
  27. import com.sk.weichat.MyApplication;
  28. import com.sk.weichat.NetWorkObservable.NetWorkObserver;
  29. import com.sk.weichat.R;
  30. import com.sk.weichat.bean.User;
  31. import com.sk.weichat.bean.circle.CircleMessage;
  32. import com.sk.weichat.bean.message.NewFriendMessage;
  33. import com.sk.weichat.broadcast.CardcastUiUpdateUtil;
  34. import com.sk.weichat.broadcast.MsgBroadcast;
  35. import com.sk.weichat.db.dao.FriendDao;
  36. import com.sk.weichat.db.dao.UserDao;
  37. import com.sk.weichat.helper.FileDataHelper;
  38. import com.sk.weichat.helper.LoginHelper;
  39. import com.sk.weichat.ui.account.LoginHistoryActivity;
  40. import com.sk.weichat.ui.base.BaseActivity;
  41. import com.sk.weichat.ui.cardcast.AttentionFragment;
  42. import com.sk.weichat.ui.cardcast.FriendFragment;
  43. import com.sk.weichat.ui.cardcast.RoomFragment;
  44. import com.sk.weichat.ui.circle.BusinessCircleFragment;
  45. import com.sk.weichat.ui.erp.fragment.LinksManFragment;
  46. import com.sk.weichat.ui.erp.fragment.WorksFragment;
  47. import com.sk.weichat.ui.find.MyFriendFragment;
  48. import com.sk.weichat.ui.groupchat.GroupChatFragment;
  49. import com.sk.weichat.ui.me.MeFragment;
  50. import com.sk.weichat.ui.me.ScreenListener;
  51. import com.sk.weichat.ui.message.MessageFragment;
  52. import com.sk.weichat.ui.nearby.NearbyFragment;
  53. import com.sk.weichat.util.Constants;
  54. import com.sk.weichat.util.PreferenceUtils;
  55. import com.sk.weichat.util.ToastUtil;
  56. import com.sk.weichat.view.DivideRadioGroup;
  57. import com.sk.weichat.volley.ArrayResult;
  58. import com.sk.weichat.volley.FastVolley;
  59. import com.sk.weichat.volley.Result;
  60. import com.sk.weichat.volley.StringJsonArrayRequest;
  61. import com.sk.weichat.xmpp.CoreService;
  62. import com.sk.weichat.xmpp.CoreService.CoreServiceBinder;
  63. import com.sk.weichat.xmpp.ListenerManager;
  64. import com.sk.weichat.xmpp.listener.AuthStateListener;
  65. import java.util.HashMap;
  66. import java.util.List;
  67. /**
  68. * @项目名称: SkWeiChat-Baidu
  69. * @包名: com.sk.weichat.ui
  70. * @作者:王阳
  71. * @创建时间: 2015年10月16日 下午3:14:20
  72. * @描述: Fragment所寄宿的Activity
  73. * @SVN版本号: $Rev$
  74. * @修改人: $Author$
  75. * @修改时间: $Date$
  76. * @修改的内容: TODO
  77. */
  78. public class MainActivity extends BaseActivity implements NetWorkObserver, AuthStateListener {
  79. public final static String SIP_PASSWORD = "ms_2014_0528@sk!@#";
  80. public static String HASHCODE = "MainActivity";
  81. public static final String TIME_MAIN = "TIMEMAIN";
  82. public static long timeMin=-1;
  83. public static boolean isUnReadWork; //判断我的空间是否有新内容
  84. public final static int SIP_SERVER_PORT = 5060;// 端口
  85. public final static String EXTRAT_SIP_SESSION_ID = "SipSession";
  86. private static final String TAG_MESSAGE = "message";
  87. private static final String TAG_MY = "myfriend";
  88. private static final String TAG_NEARBY = "nearby";
  89. private static final String TAG_GROUP_CHAT = "group_chat";
  90. private static final String TAG_ME = "me";
  91. private static final String TAG_BusinessCircle = "my_BusinessCircle";
  92. /* UserCheck */
  93. private static final int MSG_USER_CHECK = 0x1;
  94. // 因为RadioGroup的check方法,会调用onCheckChange两次,用mLastFragment保存最后一次添加的fragment,防止重复add
  95. // fragment 出错
  96. private static final int RETRY_CHECK_DELAY_MAX = 30000;// 为成功的情况下,最长30s检测一次
  97. public static String SIP_DOMAIN = "120.24.211.24";
  98. public static String SIP_SERVER_HOST = "120.24.211.24";
  99. public String SIP_USERNAME = "10000072";
  100. private boolean mBind;
  101. private CoreService mXmppService;
  102. private FastVolley mFastVolley;
  103. //private BusinessCircleFragment mBusinessCircleFragment;
  104. private ActivityManager mActivityManager;
  105. // 界面组件
  106. private DivideRadioGroup mTabRadioGroup;
  107. /**
  108. * @注释:主界面Fragment
  109. */
  110. private Fragment mLastFragment;
  111. private MessageFragment mMessageFragment;
  112. private MyFriendFragment mMyFriendFragment;//我的朋友---相互关注,单项关注,房间
  113. private NearbyFragment mNearbyFragment;//附近
  114. private WorksFragment mWorksFragment;//工作
  115. private GroupChatFragment mGroupChatFragment;//群聊
  116. private MeFragment mMeFragment;//我
  117. private LinksManFragment mBusinessCircleFragment;
  118. private FriendFragment mFriend;// 互相关注
  119. private AttentionFragment mAttention;// 单向关注
  120. private RoomFragment mRoom;// 关注房间
  121. public static String BAIDU_PUSH = "BAIDUPUSH";
  122. private boolean mXmppBind;
  123. private CoreService mCoreService;
  124. private boolean isPause = true;// 界面是否暂停
  125. private ScreenListener screenListener;//锁屏开屏监听
  126. private int mRetryCheckDelay = 0;
  127. private Handler mUserCheckHander = new Handler() {
  128. public void handleMessage(Message msg) {
  129. if (msg.what == MSG_USER_CHECK) {
  130. if (mRetryCheckDelay < RETRY_CHECK_DELAY_MAX) {
  131. mRetryCheckDelay += 5000;
  132. }
  133. mUserCheckHander.removeMessages(RETRY_CHECK_DELAY_MAX);
  134. doUserCheck();
  135. }
  136. }
  137. };
  138. private int mImStatus = AuthStateListener.AUTH_STATE_NOT;
  139. private ServiceConnection mXmppServiceConnection = new ServiceConnection() {
  140. @Override
  141. public void onServiceDisconnected(ComponentName name) {
  142. mCoreService = null;
  143. }
  144. @Override
  145. public void onServiceConnected(ComponentName name, IBinder service) {
  146. mCoreService = ((CoreServiceBinder) service).getService();
  147. mImStatus = mCoreService.isAuthenticated() ? AuthStateListener.AUTH_STATE_SUCCESS : AuthStateListener.AUTH_STATE_NOT;
  148. }
  149. };
  150. /**
  151. * @desc:主页菜单入口
  152. * @author:Administrator on 2016/1/26 10:03
  153. */
  154. private DivideRadioGroup.OnCheckedChangeListener mTabRadioGroupChangeListener = new DivideRadioGroup.OnCheckedChangeListener() {
  155. @Override
  156. public void onCheckedChanged(DivideRadioGroup group, int checkedId) {
  157. Log.i("RadioGroupChecked", "执行...");
  158. if (checkedId == R.id.main_tab_one) {
  159. if (mMessageFragment == null) {
  160. mMessageFragment = new MessageFragment();
  161. }
  162. changeFragment(mMessageFragment, TAG_MESSAGE);//消息
  163. updateMessageTitle();
  164. } else if (checkedId == R.id.main_tab_two) {
  165. /*if (mMyFriendFragment == null) {
  166. mMyFriendFragment = new MyFriendFragment();
  167. }
  168. changeFragment(mMyFriendFragment, TAG_MY);
  169. getSupportActionBar().setTitle("通讯录");*/
  170. if (mBusinessCircleFragment == null) {
  171. mBusinessCircleFragment = new LinksManFragment();
  172. }
  173. changeFragment(mBusinessCircleFragment, TAG_BusinessCircle);//发现
  174. getSupportActionBar().setTitle("通讯录");
  175. } else if (checkedId == R.id.main_tab_three) { //点击工作选项
  176. if (mWorksFragment == null) {
  177. mWorksFragment = new WorksFragment();
  178. }
  179. changeFragment(mWorksFragment, TAG_NEARBY);//
  180. getSupportActionBar().setTitle(R.string.nearby);
  181. // PreferenceUtils.putLong(mContext, TIME_MAIN, timeMin);
  182. unWorkReadTV.setVisibility(View.GONE);
  183. }
  184. /* else if (checkedId == R.id.main_tab_four) {
  185. if (mGroupChatFragment == null) {
  186. mGroupChatFragment = new GroupChatFragment();
  187. }
  188. changeFragment(mGroupChatFragment, TAG_GROUP_CHAT);//群聊
  189. getSupportActionBar().setTitle(R.string.group_chat);
  190. } */
  191. else if (checkedId == R.id.main_tab_five) {
  192. if (mMeFragment == null) {
  193. mMeFragment = new MeFragment();
  194. }
  195. changeFragment(mMeFragment, TAG_ME);//我
  196. getSupportActionBar().setTitle(R.string.me);
  197. }
  198. }
  199. };
  200. private AppConfig config;
  201. private String mLoginUserId;
  202. public void changeRedZone(boolean b){
  203. if (b){
  204. unWorkReadTV.setVisibility(View.VISIBLE);
  205. }else {
  206. unWorkReadTV.setVisibility(View.GONE);
  207. }
  208. }
  209. private void requestMyBusiness() {
  210. if (config == null) {
  211. config = MyApplication.getInstance().getConfig();
  212. }
  213. if (mLoginUserId == null || mLoginUserId.length() <= 0) {
  214. mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
  215. }
  216. HashMap<String, String> params = new HashMap<String, String>();
  217. params.put("access_token", MyApplication.getInstance().mAccessToken);
  218. final BaseActivity mContext = MainActivity.this;
  219. StringJsonArrayRequest<CircleMessage> request = new StringJsonArrayRequest<CircleMessage>(
  220. config.MSG_LIST, new Response.ErrorListener() {
  221. @Override
  222. public void onErrorResponse(VolleyError arg0) {
  223. ToastUtil.showErrorNet(mContext);
  224. }
  225. }, new StringJsonArrayRequest.Listener<CircleMessage>() {
  226. @Override
  227. public void onResponse(ArrayResult<CircleMessage> result) {
  228. boolean success = Result.defaultParser(mContext, result, true);
  229. if (success) {
  230. List<CircleMessage> datas = result.getData();
  231. if (datas != null && datas.size() > 0) { // 没有更多数据
  232. long newTime=datas.get(0).getTime(); //获取最新时间
  233. long oldTime= PreferenceUtils.getLong(mContext, TIME_MAIN); //获取以前时间
  234. if (newTime>oldTime){//当有新消息
  235. Log.i("gongpengming","newTime="+newTime+"@@@ oldTime="+oldTime);
  236. unWorkReadTV.setVisibility(View.VISIBLE);
  237. timeMin=newTime;
  238. isUnReadWork = true;
  239. }else{
  240. unWorkReadTV.setVisibility(View.GONE);
  241. isUnReadWork = false;
  242. }
  243. } else {
  244. unWorkReadTV.setVisibility(View.GONE);
  245. isUnReadWork = false;
  246. }
  247. } else {
  248. unWorkReadTV.setVisibility(View.GONE);
  249. isUnReadWork = false;
  250. }
  251. }
  252. }, CircleMessage.class, params);
  253. if (mFastVolley == null) {
  254. mFastVolley = MyApplication.getInstance().getFastVolley();
  255. }
  256. mFastVolley.addDefaultRequest(HASHCODE, request);
  257. }
  258. /***********************
  259. * 未读数量的更新功能
  260. *****************/
  261. private Handler mUnReadHandler = new Handler();
  262. private TextView mMsgUnReadTv;
  263. private TextView unWorkReadTV;
  264. private int mMsgUnReadNum = 0;
  265. private BroadcastReceiver mUserLogInOutReceiver = new BroadcastReceiver() {
  266. @Override
  267. public void onReceive(Context context, Intent intent) {
  268. String action = intent.getAction();
  269. if (action.equals(LoginHelper.ACTION_LOGIN)) {
  270. User user = MyApplication.getInstance().mLoginUser;
  271. Intent startIntent = CoreService.getIntent(MainActivity.this, user.getUserId(), user.getPassword(), user.getNickName());
  272. startService(startIntent);
  273. // ToastUtil.showNormalToast(MainActivity.this, "开始Xmpp登陆");
  274. checkUserDb(user.getUserId());
  275. mTabRadioGroup.clearCheck();
  276. mTabRadioGroup.check(R.id.main_tab_one);
  277. } else if (action.equals(LoginHelper.ACTION_LOGOUT)) {
  278. MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_SIMPLE_TELPHONE;
  279. mCoreService.logout();
  280. cancelUserCheckIfExist();
  281. startActivity(new Intent(MainActivity.this, LoginHistoryActivity.class));
  282. // mFindRb.setChecked(true);
  283. removeNeedUserFragment(false);
  284. } else if (action.equals(LoginHelper.ACTION_CONFLICT)) {
  285. // 改变用户状态
  286. MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_TOKEN_CHANGE;
  287. mCoreService.logout();
  288. // mFindRb.setChecked(true);
  289. removeNeedUserFragment(true);
  290. cancelUserCheckIfExist();
  291. // 弹出对话框
  292. startActivity(new Intent(MainActivity.this, UserCheckedActivity.class));
  293. if (Build.VERSION.SDK_INT == Build.VERSION_CODES.HONEYCOMB) {
  294. mActivityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_WITH_HOME);
  295. } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
  296. mActivityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);
  297. }
  298. } else if (action.equals(LoginHelper.ACTION_NEED_UPDATE)) {
  299. // mFindRb.setChecked(true);
  300. removeNeedUserFragment(true);
  301. cancelUserCheckIfExist();
  302. // 弹出对话框
  303. startActivity(new Intent(MainActivity.this, UserCheckedActivity.class));
  304. } else if (action.equals(LoginHelper.ACTION_LOGIN_GIVE_UP)) {
  305. cancelUserCheckIfExist();
  306. MyApplication.getInstance().mUserStatus = LoginHelper.STATUS_USER_NO_UPDATE;
  307. mCoreService.logout();
  308. }
  309. }
  310. };
  311. private boolean mMsgNumNeedUpdate = false;
  312. private BroadcastReceiver mUpdateUnReadReceiver = new BroadcastReceiver() {
  313. @Override
  314. public void onReceive(Context context, Intent intent) {
  315. String action = intent.getAction();
  316. if (action.equals(MsgBroadcast.ACTION_MSG_NUM_UPDATE)) {
  317. int operation = intent.getIntExtra(MsgBroadcast.EXTRA_NUM_OPERATION, MsgBroadcast.NUM_ADD);
  318. int count = intent.getIntExtra(MsgBroadcast.EXTRA_NUM_COUNT, 0);
  319. mMsgUnReadNum = (operation == MsgBroadcast.NUM_ADD) ? mMsgUnReadNum + count : mMsgUnReadNum - count;
  320. updateMsgUnReadTv();
  321. } else if (action.equals(MsgBroadcast.ACTION_MSG_NUM_RESET)) {
  322. if (isPause) {// 等待恢复的时候更新
  323. mMsgNumNeedUpdate = true;
  324. } else {// 立即更新
  325. initMsgUnReadTips(MyApplication.getInstance().mLoginUser.getUserId());
  326. }
  327. }
  328. }
  329. };
  330. private BroadcastReceiver mUpdateReceiver = new BroadcastReceiver() {
  331. @Override
  332. public void onReceive(Context context, Intent intent) {
  333. if (intent.getAction().equals(CardcastUiUpdateUtil.ACTION_UPDATE_UI)) {
  334. if (mAttention != null) {
  335. mAttention.update();
  336. }
  337. if (mFriend != null) {
  338. mFriend.update();
  339. }
  340. if (mRoom != null) {
  341. mRoom.update();
  342. }
  343. }
  344. }
  345. };
  346. private ServiceConnection mServiceConnection = new ServiceConnection() {
  347. @Override
  348. public void onServiceDisconnected(ComponentName name) {
  349. mXmppService = null;
  350. }
  351. @Override
  352. public void onServiceConnected(ComponentName name, IBinder service) {
  353. mXmppService = ((CoreServiceBinder) service).getService();
  354. }
  355. };
  356. private IntentFilter fiter;
  357. @Override
  358. protected void onCreate(Bundle savedInstanceState) {
  359. super.onCreate(savedInstanceState);
  360. getSupportActionBar().setDisplayShowHomeEnabled(false);
  361. getSupportActionBar().setDisplayHomeAsUpEnabled(false);
  362. /**@注释:主页布局文件 */
  363. setContentView(R.layout.activity_main);
  364. SIP_USERNAME = MyApplication.getInstance().mLoginUser.getUserId();
  365. String host = mConfig.MeetingHost;
  366. SIP_DOMAIN = host == null ? "120.24.211.24" : host;
  367. SIP_SERVER_HOST = host == null ? "120.24.211.24" : host;
  368. Log.i("wang", "token:" + MyApplication.getInstance().mAccessToken);
  369. Log.i("wang", "usId:" + MyApplication.getInstance().mLoginUser.getUserId());
  370. //TODO 百度开始推送
  371. PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, "iF9q4ruTpFwQ9x8pY6Edqm9G");
  372. int isPush = PreferenceUtils.getInt(MyApplication.getInstance(), MainActivity.BAIDU_PUSH);
  373. if (isPush == 0) {
  374. Log.i("MainActivity", "关闭百度推送");
  375. PushManager.stopWork(this);
  376. }
  377. mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  378. if (savedInstanceState != null) {
  379. restoreState(savedInstanceState);
  380. }
  381. initView(savedInstanceState);//---
  382. // 注册网络改变回调
  383. MyApplication.getInstance().registerNetWorkObserver(this);
  384. // 绑定监听
  385. ListenerManager.getInstance().addAuthStateChangeListener(this);
  386. // 注册消息更新广播
  387. IntentFilter msgIntentFilter = new IntentFilter();
  388. msgIntentFilter.addAction(MsgBroadcast.ACTION_MSG_NUM_UPDATE);
  389. msgIntentFilter.addAction(MsgBroadcast.ACTION_MSG_NUM_RESET);
  390. registerReceiver(mUpdateUnReadReceiver, msgIntentFilter);
  391. // 注册用户登录状态广播
  392. registerReceiver(mUserLogInOutReceiver, LoginHelper.getLogInOutActionFilter());
  393. // 绑定服务
  394. mXmppBind = bindService(CoreService.getIntent(), mXmppServiceConnection, BIND_AUTO_CREATE);
  395. // 检查用户的状态,做不同的初始化工作
  396. User loginUser = MyApplication.getInstance().mLoginUser;
  397. if (!LoginHelper.isUserValidation(loginUser)) {
  398. LoginHelper.prepareUser(this);
  399. }
  400. if (!MyApplication.getInstance().mUserStatusChecked) {// 用户状态没有检测,那么开始检测
  401. mUserCheckHander.sendEmptyMessageDelayed(MSG_USER_CHECK, mRetryCheckDelay);
  402. } else {
  403. if (MyApplication.getInstance().mUserStatus == LoginHelper.STATUS_USER_VALIDATION) {
  404. LoginHelper.broadcastLogin(this);
  405. } else {// 重新检测
  406. MyApplication.getInstance().mUserStatusChecked = false;
  407. mUserCheckHander.sendEmptyMessageDelayed(MSG_USER_CHECK, mRetryCheckDelay);
  408. }
  409. }
  410. registerReceiver(mUpdateReceiver, CardcastUiUpdateUtil.getUpdateActionFilter());
  411. mBind = bindService(CoreService.getIntent(), mServiceConnection, BIND_AUTO_CREATE);
  412. screenListener = new ScreenListener(this);
  413. screenListener.begin(new ScreenListener.ScreenStateListener() {
  414. @Override
  415. public void onScreenOn() {
  416. Log.d("wang", "MainActivity....开屏");
  417. }
  418. @Override
  419. public void onScreenOff() {
  420. Log.d("wang", "MainActivity....锁屏");
  421. }
  422. @Override
  423. public void onUserPresent() {
  424. Log.d("wang", "MainActivity....解锁");
  425. }
  426. });
  427. }
  428. private void doUserCheck() {
  429. if (!MyApplication.getInstance().isNetworkActive()) {
  430. return;
  431. }
  432. if (MyApplication.getInstance().mUserStatusChecked) {
  433. return;
  434. }
  435. LoginHelper.checkStatusForUpdate(this, new LoginHelper.OnCheckedFailedListener() {
  436. @Override
  437. public void onCheckFailed() {
  438. mUserCheckHander.sendEmptyMessageDelayed(MSG_USER_CHECK, mRetryCheckDelay);
  439. }
  440. });
  441. }
  442. private void cancelUserCheckIfExist() {
  443. mUserCheckHander.removeMessages(RETRY_CHECK_DELAY_MAX);
  444. cancelAll("checkStatus");
  445. }
  446. private void checkUserDb(final String userId) {
  447. // 检测用户基本数据库信息的完整性
  448. new Thread(new Runnable() {
  449. @Override
  450. public void run() {
  451. FriendDao.getInstance().checkSystemFriend(userId);
  452. initMsgUnReadTips(userId);
  453. }
  454. }).start();
  455. }
  456. /* 当注销当前用户时,将那些需要当前用户的Fragment销毁,以后重新登陆后,重新加载为初始状态 */
  457. private void removeNeedUserFragment(boolean startAgain) {
  458. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();// 开始事物
  459. if (mMessageFragment != null) {
  460. fragmentTransaction.remove(mMessageFragment);
  461. }
  462. if (mMyFriendFragment != null) {
  463. fragmentTransaction.remove(mMyFriendFragment);
  464. }
  465. if (mWorksFragment != null) {
  466. fragmentTransaction.remove(mWorksFragment);
  467. }
  468. if (mGroupChatFragment != null) {
  469. fragmentTransaction.remove(mGroupChatFragment);
  470. }
  471. if (mMeFragment != null) {
  472. fragmentTransaction.remove(mMeFragment);
  473. }
  474. if (mBusinessCircleFragment != null) {
  475. fragmentTransaction.remove(mBusinessCircleFragment);
  476. }
  477. fragmentTransaction.commitAllowingStateLoss();
  478. mMessageFragment = null;
  479. mMyFriendFragment = null;
  480. mWorksFragment = null;
  481. mGroupChatFragment = null;
  482. mMeFragment = null;
  483. mBusinessCircleFragment = null;
  484. mLastFragment = null;
  485. if (startAgain) {
  486. Intent intent = new Intent(this, MainActivity.class);
  487. startActivity(intent);
  488. }
  489. }
  490. @Override
  491. protected void onStop() {
  492. super.onStop();
  493. saveOfflineTime();
  494. }
  495. private void saveOfflineTime() {
  496. long time = System.currentTimeMillis() / 1000;//将现在的时间存起来,
  497. Log.d("wang", "time_destory::" + time + "");
  498. PreferenceUtils.putLong(this, Constants.OFFLINE_TIME, time);
  499. MyApplication.getInstance().mLoginUser.setOfflineTime(time);
  500. UserDao.getInstance().updateUnLineTime(MyApplication.getInstance().mLoginUser.getUserId(), time);
  501. }
  502. @Override
  503. protected void onDestroy() {
  504. saveOfflineTime();
  505. MyApplication.getInstance().unregisterNetWorkObserver(this);
  506. ListenerManager.getInstance().removeAuthStateChangeListener(this);
  507. if (mXmppBind) {
  508. unbindService(mXmppServiceConnection);
  509. }
  510. unregisterReceiver(mUpdateUnReadReceiver);
  511. unregisterReceiver(mUserLogInOutReceiver);
  512. screenListener.unregisterListener();
  513. //移除广播接收
  514. super.onDestroy();
  515. }
  516. @Override
  517. public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
  518. super.onSaveInstanceState(outState, outPersistentState);
  519. saveOfflineTime();
  520. }
  521. private void restoreState(Bundle savedInstanceState) {
  522. mLastFragment = getSupportFragmentManager().findFragmentById(R.id.main_content);
  523. mMessageFragment = (MessageFragment) getSupportFragmentManager().findFragmentByTag(TAG_MESSAGE);
  524. mMyFriendFragment = (MyFriendFragment) getSupportFragmentManager().findFragmentByTag(TAG_MY);
  525. mWorksFragment = (WorksFragment) getSupportFragmentManager().findFragmentByTag(TAG_NEARBY);
  526. mGroupChatFragment = (GroupChatFragment) getSupportFragmentManager().findFragmentByTag(TAG_GROUP_CHAT);
  527. mMeFragment = (MeFragment) getSupportFragmentManager().findFragmentByTag(TAG_ME);
  528. mBusinessCircleFragment = (LinksManFragment) getSupportFragmentManager().findFragmentByTag(TAG_BusinessCircle);
  529. }
  530. /**
  531. * @desc:RadioGroup设置监听
  532. * @author:Administrator on 2016/1/27 16:20
  533. */
  534. private void initView(Bundle savedInstanceState) {
  535. mTabRadioGroup = (DivideRadioGroup) findViewById(R.id.main_tab_radio_group);
  536. mTabRadioGroup.setOnCheckedChangeListener(mTabRadioGroupChangeListener);
  537. if (savedInstanceState == null) {
  538. mTabRadioGroup.check(R.id.main_tab_one);
  539. }
  540. mMsgUnReadTv = (TextView) findViewById(R.id.main_tab_one_tv);
  541. unWorkReadTV = (TextView) findViewById(R.id.main_tab_three_tv);
  542. }
  543. private void changeFragment(Fragment addFragment, String tag) {
  544. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();// 开始事物
  545. if (mLastFragment == addFragment) {
  546. return;
  547. }
  548. if (mLastFragment != null && mLastFragment != addFragment) {// 如果最后一次加载的不是现在要加载的Fragment,那么僵最后一次加载的移出
  549. fragmentTransaction.detach(mLastFragment);
  550. }
  551. if (addFragment == null) {
  552. return;
  553. }
  554. if (!addFragment.isAdded())// 如果还没有添加,就加上
  555. fragmentTransaction.add(R.id.main_content, addFragment, tag);
  556. if (addFragment.isDetached())
  557. fragmentTransaction.attach(addFragment);
  558. mLastFragment = addFragment;
  559. fragmentTransaction.commitAllowingStateLoss();
  560. }
  561. public boolean onKeyDown(int keyCode, KeyEvent event) {
  562. if (keyCode == KeyEvent.KEYCODE_BACK) {
  563. Intent intent = new Intent(Intent.ACTION_MAIN);
  564. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  565. intent.addCategory(Intent.CATEGORY_HOME);
  566. startActivity(intent);
  567. return true;
  568. }
  569. return super.onKeyDown(keyCode, event);
  570. }
  571. @Override
  572. public void onAuthStateChange(int authState) {
  573. mImStatus = authState;
  574. if (mTabRadioGroup.getCheckedRadioButtonId() == R.id.main_tab_one) {
  575. updateMessageTitle();
  576. }
  577. }
  578. /**
  579. * 更改消息在线不在线的状态
  580. * msg_online>消息(在线) msg_offline>消息(离线) msg_connect">消息(连接中)
  581. */
  582. private void updateMessageTitle() {
  583. if (mImStatus == AuthStateListener.AUTH_STATE_NOT) {
  584. getSupportActionBar().setTitle(R.string.msg_offline);
  585. } else if (mImStatus == AuthStateListener.AUTH_STATE_ING) {
  586. getSupportActionBar().setTitle(R.string.msg_connect);
  587. } else if (mImStatus == AuthStateListener.AUTH_STATE_SUCCESS) {
  588. getSupportActionBar().setTitle(R.string.msg_online);
  589. }
  590. }
  591. @Override
  592. public void onNetWorkStatusChange(boolean connected) {
  593. // 当网络状态改变时,判断当前用户的状态,是否需要更新
  594. if (connected) {
  595. if (!MyApplication.getInstance().mUserStatusChecked) {
  596. mRetryCheckDelay = 0;
  597. mUserCheckHander.sendEmptyMessageDelayed(MSG_USER_CHECK, mRetryCheckDelay);
  598. }
  599. }
  600. }
  601. @Override
  602. protected void onResume() {
  603. super.onResume();
  604. isPause = false;
  605. if (mMsgNumNeedUpdate) {
  606. initMsgUnReadTips(MyApplication.getInstance().mLoginUser.getUserId());
  607. }
  608. requestMyBusiness();
  609. }
  610. @Override
  611. protected void onPause() {
  612. super.onPause();
  613. isPause = true;
  614. }
  615. private void initMsgUnReadTips(String userId) {// 初始化未读条数
  616. // 消息未读条数累加
  617. mMsgUnReadNum = FriendDao.getInstance().getMsgUnReadNumTotal(userId);
  618. mUnReadHandler.post(new Runnable() {
  619. @Override
  620. public void run() {
  621. updateMsgUnReadTv();
  622. }
  623. });
  624. }
  625. private void updateMsgUnReadTv() {
  626. if (mMsgUnReadNum > 0) {
  627. mMsgUnReadTv.setVisibility(View.VISIBLE);
  628. String numStr = mMsgUnReadNum >= 99 ? "99+" : mMsgUnReadNum + "";
  629. mMsgUnReadTv.setText(numStr);
  630. } else {
  631. mMsgUnReadTv.setVisibility(View.INVISIBLE);
  632. }
  633. }
  634. public void exitMucChat(String toUserId) {
  635. if (mCoreService != null) {
  636. mCoreService.exitMucChat(toUserId);
  637. }
  638. }
  639. public void sendNewFriendMessage(String toUserId, NewFriendMessage message) {
  640. if (mBind && mXmppService != null) {
  641. mXmppService.sendNewFriendMessage(toUserId, message);
  642. }
  643. }
  644. /**
  645. * 获得fragment对象
  646. *
  647. * @return
  648. */
  649. public BusinessCircleFragment getBusinessCircleFragment() {
  650. FragmentManager sfmanager = getSupportFragmentManager();
  651. return (BusinessCircleFragment) sfmanager.findFragmentByTag(TAG_BusinessCircle);
  652. }
  653. }