MainActivity.java 36 KB

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