MainActivity.java 29 KB

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