MainActivity.java 41 KB

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