MainActivity.java 31 KB

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