package cn.shangyu.gdxzExpert.activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import androidx.fragment.app.FragmentManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.gyf.immersionbar.ImmersionBar; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.HttpHandler; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; import com.netease.nim.uikit.api.model.main.LoginSyncDataStatusObserver; import com.netease.nim.uikit.common.ToastHelper; import com.netease.nim.uikit.common.ui.dialog.DialogMaker; import com.netease.nim.uikit.common.ui.drop.DropManager; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.Observer; import com.netease.nimlib.sdk.StatusCode; import com.netease.nimlib.sdk.auth.AuthService; import com.netease.nimlib.sdk.auth.OnlineClient; import com.netease.nimlib.sdk.msg.MsgService; import com.netease.nimlib.sdk.msg.SystemMessageObserver; import com.netease.nimlib.sdk.msg.SystemMessageService; import com.netease.nimlib.sdk.msg.model.CustomNotification; import com.netease.nimlib.sdk.msg.model.RecentContact; import java.util.Date; import java.util.List; import cn.shangyu.gdxzExpert.R; import cn.shangyu.gdxzExpert.base.BaseActivity; import cn.shangyu.gdxzExpert.bean.PatientListBean; import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; import cn.shangyu.gdxzExpert.ecdemo.ui.ConversationListFragment.OnUpdateMsgUnreadCountsListener; import cn.shangyu.gdxzExpert.fragment.PatientListFragment; import cn.shangyu.gdxzExpert.fragment.VisitPlanFragment; import cn.shangyu.gdxzExpert.http.HttpHelper; import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; import cn.shangyu.gdxzExpert.netease.main.CustomNotificationCache; import cn.shangyu.gdxzExpert.netease.main.ReminderItem; import cn.shangyu.gdxzExpert.netease.main.ReminderManager; import cn.shangyu.gdxzExpert.netease.main.SystemMessageUnreadManager; import cn.shangyu.gdxzExpert.netease.main.fragment.SessionListFragmentNew; import cn.shangyu.gdxzExpert.utils.CommonUtil; import cn.shangyu.gdxzExpert.utils.Constant; import cn.shangyu.gdxzExpert.utils.GsonTools; import cn.shangyu.gdxzExpert.utils.LogUtil; import cn.shangyu.gdxzExpert.utils.SharePrefUtil; import cn.shangyu.gdxzExpert.utils.ToastUtil; import cn.shangyu.gdxzExpert.utils.UniappUtil; import cn.shangyu.gdxzExpert.utils.Url; import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; import cn.shangyu.gdxzExpert.widget.ECAlertDialog; import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; import static cn.shangyu.gdxzExpert.fragment.PatientListFragment.PatientUrl; /** * * MainActivity.java * * @author ssy * @date 2015-8-31 下午3:52:22 Copyright (C) 2015 河南商宇科技有限公司 * * 功能说明:我的患者页面 */ public class MyPatientActivity extends BaseActivity implements OnCheckedChangeListener, OnUpdateMsgUnreadCountsListener, ReminderManager.UnreadNumChangedCallback { private static final String EXTRA_OPEN_PATIENT_MSG = "open_patient_msg"; private RadioGroup main_radiogroup; private FragmentManager fm; // private ConversationListFragment myPatientMsgFragment; // private MessageFragment messageFragment; private SessionListFragmentNew sessionListFragment; private static MyPatientActivity instance; private PatientListFragment myPatientListFragment; private VisitPlanFragment mVisitPlanFragment; private BadgeView badgePublicServiceMsg; private Button bt_paintlist; private int consultCount; Boolean isSuccessView = false; private long count = 0; private String applyListUrl = Url.getapplyList; /** * 云信 */ private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unreadCount); ReminderManager.getInstance().updateContactUnreadNum(unreadCount); }; public static MyPatientActivity getInstance() { return instance; } // sample Observer customNotificationObserver = (Observer) notification -> { // 处理自定义通知消息 // com.netease.nim.uikit.common.util.log.LogUtil.i("demo", "receive custom notification: " + notification.getContent() + " from :" + // notification.getSessionId() + "/" + notification.getSessionType() + // "unread=" + (notification.getConfig() == null ? "" : notification.getConfig().enableUnreadCount + " " + "push=" + // notification.getConfig().enablePush + " nick=" + // notification.getConfig().enablePushNick)); try { JSONObject obj = JSONObject.parseObject(notification.getContent()); if (obj != null && obj.getIntValue("id") == 2) { // 加入缓存中 CustomNotificationCache.getInstance().addCustomNotification(notification); // Toast String content = obj.getString("content"); String tip = String.format("自定义消息[%s]:%s", notification.getFromAccount(), content); ToastHelper.showToast(MyPatientActivity.this, tip); } } catch (JSONException e) { com.netease.nim.uikit.common.util.log.LogUtil.e("demo", e.getMessage()); } }; @Override public void setTitle() { // TODO Auto-generated method stub top_back_layout.setVisibility(View.VISIBLE); top_back_layout.setOnClickListener(this); top_right.setVisibility(View.VISIBLE); if(CommonUtil.BigModule()) { top_title.setTextSize(23); } } @Override public View onCreateSuccessedView() { // TODO Auto-generated method stub ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); View view; if(CommonUtil.BigModule()) { view = View.inflate(ct, R.layout.activity_my_patient_big, null); } else { view = View.inflate(ct, R.layout.activity_my_patient, null); } main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_patient); main_radiogroup.setOnCheckedChangeListener(this); instance = this; fm = getSupportFragmentManager(); handleEntryIntent(getIntent()); isSuccessView = true; // 患者列表申请提醒 bt_paintlist = (Button) view.findViewById(R.id.bt_paintlist); badgePublicServiceMsg = new BadgeView(ct, bt_paintlist); // badgePublicServiceMsg.setTargetView(bt_paintlist); badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_count_bg); badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); registerDeletPatient(); getNewPatientList(applyListUrl); yuninit(); return view; } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); if (isSuccessView) { handleEntryIntent(intent); } } private void handleEntryIntent(Intent intent) { // 默认保持原有行为:进入页面即展示患者消息 if (intent != null && intent.getBooleanExtra(EXTRA_OPEN_PATIENT_MSG, false)) { // 清掉一次性标记,避免后续 getIntent() 重复触发同一路由 intent.removeExtra(EXTRA_OPEN_PATIENT_MSG); } if (main_radiogroup != null && main_radiogroup.getCheckedRadioButtonId() != R.id.tab_rbn_message) { main_radiogroup.setOnCheckedChangeListener(null); main_radiogroup.check(R.id.tab_rbn_message); main_radiogroup.setOnCheckedChangeListener(this); } changeMessage(); } private LocalBroadcastManager localBroadcastManager; private IntentFilter intentFilter; LocalReceiver localReceiver; private void registerDeletPatient() { localBroadcastManager = LocalBroadcastManager.getInstance(this); intentFilter = new IntentFilter(); intentFilter.addAction("DELET_PATION_ACTION"); localReceiver = new LocalReceiver(); //注册本地接收器 localBroadcastManager.registerReceiver(localReceiver,intentFilter); } private class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { getPatientList(PatientUrl); } } private void getPatientList(final String loadUrl) { RequestParams params = new RequestParams();// 封装参数 params.addBodyParameter("expertUuid", SharePrefUtil.getString(MyPatientActivity.this, Constant.uuid, "")); HttpHandler httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, new RequestCallBack() { @Override public void onSuccess(ResponseInfo info) { SharePrefUtil.saveString(MyPatientActivity.this, PatientUrl, info.result); } @Override public void onFailure(HttpException arg0, String arg1) { ToastUtil.showToast("请求失败,请重试"); } }); } @Override protected void onResume() { super.onResume(); long count = SharePrefUtil.getLong(MyPatientActivity.this,"new_patient_count", 0); showNewPatientRed(count); if (isSuccessView) { badgePublicServiceMsg.setText(count + ""); } } @Override protected void onDestroy() { super.onDestroy(); isSuccessView = true; registerMsgUnreadInfoObserver(false); registerSystemMessageObservers(false); registerCustomMessageObservers(false); localBroadcastManager.unregisterReceiver(localReceiver); } @Override public ResultState onLoad() { return ResultState.STATE_SUCCESSED; } public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.tab_rbn_message: changeMessage(); break; case R.id.tab_rbn_patlist: changePatlist(); // com.alibaba.fastjson.JSONObject pageParams = new JSONObject(); // pageParams.put("type", "list"); // UniappUtil.showUniMp(MyPatientActivity.this, "/pages_app/patientMsg/patientList", pageParams); break; case R.id.tab_rbn_visit: changevisit(); // com.alibaba.fastjson.JSONObject pageParams_plan = new JSONObject(); // pageParams_plan.put("type", "plan"); // UniappUtil.showUniMp(MyPatientActivity.this, "/pages_app/patientMsg/patientPlan", pageParams_plan); break; } } private void changevisit() { top_title.setText("随访计划"); // top_right_text.setText("邀请\n患者"); top_right_search.setVisibility(View.GONE); top_right.setVisibility(View.GONE); top_right_text.setVisibility(View.VISIBLE); top_right_text.setText("添加"); top_right_text.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub showPopupWindow(v); } }); if(CommonUtil.BigModule()) { top_right_text.setTextSize(18); } else { // top_right.setImageResource(R.drawable.invite); // top_right_search.setVisibility(View.GONE); // top_right.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // // TODO Auto-generated method stub // showPopupWindow(v); // } // }); } mVisitPlanFragment = new VisitPlanFragment(); fm.beginTransaction().replace(R.id.frame_container, mVisitPlanFragment, "mVisitPlanFragment").commit(); } LinearLayout mLv_addTime, mLv_addVisit; private void showPopupWindow(View view) { // 一个自定义的布局,作为显示的内容 View contentView; if(CommonUtil.BigModule()) { contentView = LayoutInflater.from(instance).inflate( R.layout.pop_window_big, null); } else { contentView = LayoutInflater.from(instance).inflate( R.layout.pop_window, null); } // 设置按钮的点击事件 mLv_addTime = (LinearLayout) contentView.findViewById(R.id.ll_addTime); mLv_addVisit = (LinearLayout) contentView .findViewById(R.id.ll_addVisit); final PopupWindow popupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); mLv_addTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(instance, AddVisitDateActivity.class); intent.setType("main"); startActivityForResult(intent, 201); popupWindow.dismiss(); } }); mLv_addVisit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(instance, AddVisitPlanActivity.class); intent.setType("main"); startActivityForResult(intent, 201); popupWindow.dismiss(); } }); popupWindow.setTouchable(true); popupWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.i("mengdd", "onTouch : "); return false; // 这里如果返回true的话,touch事件将被拦截 // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss } }); // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 // 我觉得这里是API的一个bug popupWindow.setBackgroundDrawable(getResources().getDrawable( R.drawable.popwrite)); // 设置好参数之后再show popupWindow.showAsDropDown(view); } private void changePatlist() { top_right_text.setVisibility(View.GONE); top_right.setVisibility(View.VISIBLE); if(CommonUtil.BigModule()) { top_right.setImageResource(R.drawable.invite_big); } else { top_right.setImageResource(R.drawable.invite); } top_title.setText("我的患者"); // top_right_text.setText("邀请\n患者"); top_right_search.setVisibility(View.VISIBLE); top_right.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub LogUtil.i("邀请患者"); startActivity(new Intent(MyPatientActivity.this, MyQrCodeActivity.class)); /*ClientUser user = new ClientUser(SharePrefUtil.getString(ct, "USERID", "")); CCPAppManager.setClientUser(user); LogUtil.i("UserId==" + user.getUserId()); if (!ContactSqlManager.hasContact(user.getUserId())) { ECContacts contacts = new ECContacts(); contacts.setClientUser(user); ContactSqlManager.insertContact(contacts); LogUtil.i("加载联系人=="); } startActivity(new Intent(ct, InvitePatientActivity.class));*/ } }); myPatientListFragment = new PatientListFragment(); fm.beginTransaction().replace(R.id.frame_container, myPatientListFragment, "PatientListFragment").commit(); // Bundle args = new Bundle(); // args.putInt("type", 0); // myPatientListFragment.setArguments(args); } private void changeMessage() { if(CommonUtil.BigModule()) { top_right_search.setImageResource(R.drawable.big_search); } top_right_text.setVisibility(View.GONE); top_right.setVisibility(View.VISIBLE); top_title.setText("患者消息"); top_right.setImageResource(R.drawable.icon_group_send); // top_right_text.setText("群发\n消息"); top_right_search.setVisibility(View.VISIBLE); top_right.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub LogUtil.i("群发消息"); // startActivity(new Intent(ct, GroupChatPatientActivity.class)); startActivity(new Intent(ct, SendGroupMsgListActivity.class)); } }); sessionListFragment=new SessionListFragmentNew(); fm.beginTransaction().replace(R.id.frame_container, sessionListFragment, "ConversationListFragment").commit(); } @Override protected void processClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.top_right_text: ToastUtil.showToast(top_right_text.getText().toString()); break; case R.id.top_right_search: startActivity(new Intent(ct, SearchPatientActivity.class)); break; case R.id.top_back_layout: finish(); break; default: break; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ){ finish(); } return super.onKeyDown(keyCode, event); } /** * 请求网络,获取患者申请的列表 getNewPatientList ssy * * @param loadUrl * 请求地址 void */ private void getNewPatientList(final String loadUrl) { String uuid = SharePrefUtil.getString(MyPatientActivity.this, Constant.uuid, ""); RequestParams params = new RequestParams(); params.addBodyParameter("expertUuid", uuid); HttpHandler httpHandlerNewPatient = HttpHelper.loadData( HttpMethod.POST, loadUrl, params, new RequestCallBack() { @Override public void onSuccess(ResponseInfo info) { // SharePrefUtil.saveString(MyPatientActivity.this, // loadUrl,info.result); processData(info.result); } @Override public void onFailure(HttpException arg0, String arg1) { LogUtil.i("数据请求失败了: " + arg1); // SharePrefUtil.saveString(mActivity, loadUrl,""); } }); } /** * 解析并处理数据 * * @param result */ private void processData(String result) { PatientListBean bean = GsonTools.fromGsonToBean(result, PatientListBean.class); // 数据为空 count = 0; for (int i = 0; i < bean.data.size(); i++) { // 判断状态是否是待审核,加入待审核到list,其他的不显示 if (1 == bean.data.get(i).status) { count++; } } showNewPatientRed(count); badgePublicServiceMsg.setText(count + ""); } /** * 网络注册状态改变 * * @param */ public void onNetWorkNotify( ) { // if (myPatientMsgFragment instanceof ConversationListFragment&& myPatientMsgFragment.isResumed()) { // ((ConversationListFragment) myPatientMsgFragment) // .updateConnectState(); // }m } /** * shuaxin notifyChange * * void */ public void notifyChange() { // if (myPatientMsgFragment instanceof ConversationListFragment // && myPatientMsgFragment.isResumed()) { // ((ConversationListFragment) myPatientMsgFragment).notifyChange(); // } if (myPatientListFragment instanceof PatientListFragment && myPatientListFragment.isResumed()) { ((PatientListFragment) myPatientListFragment).notifyChange(); } } /** * 显示是否有新的患者申请红点提示 */ public void showNewPatientRed(long count) { if (badgePublicServiceMsg != null) { if (count != 0) { badgePublicServiceMsg.show(); } else { badgePublicServiceMsg.hide(); } } } /** * 统计未读数量 */ @Override public void OnUpdateMsgUnreadCounts() { // TODO Auto-generated method stub int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount(); int count = unreadCount; if (unreadCount >= notifyUnreadCount) { count = unreadCount - notifyUnreadCount; } /* * if(unreadCount > 0) { if(unreadCount > 99) { * tv_new_pt_count.setText(getResources * ().getString(R.string.unread_count_overt_100)); return; } * tv_new_pt_count.setText(String.valueOf(unreadCount)); return; } * tv_new_pt_count.setText(null); */ /* * */ } private void yuninit() { observerSyncDataComplete(); // findViews(); // setupPager(); // setupTabs(); registerMsgUnreadInfoObserver(true); registerSystemMessageObservers(true); registerCustomMessageObservers(true); requestSystemMessageUnreadCount(); // initUnreadCover(); } Observer> clientsObserver = new Observer>() { @Override public void onEvent(List onlineClients) { if (onlineClients == null || onlineClients.size() == 0) { return; } } }; /** * 用户状态变化 */ Observer userStatusObserver = new Observer() { @Override public void onEvent(StatusCode code) { if (code.wontAutoLogin()) { LogoutHelper.logout(); showlogout(); // startActivity(new Intent(MyPatientActivity.this, LoginActivity.class)); // finish(); } } }; private void showlogout() { Date date = new Date(System.currentTimeMillis()); String phone="ios"; switch(NIMClient.getService(AuthService.class).getKickedClientType()) { case 1: phone="android"; break; case 2: phone="ios"; break; case 16: phone="web"; break; default: phone="unknow"; break; } ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, getString(R.string.nim_kick_out)+ simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ phone+getString(R.string.nim_kick_out2) , getString(R.string.dialog_btn_confim), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(MyPatientActivity.this, LoginNewActivity.class)); finish(); } }); buildAlert.setTitle("异地登陆"); buildAlert.setCanceledOnTouchOutside(false); buildAlert.setCancelable(false); buildAlert.show(); } private void observerSyncDataComplete() { boolean syncCompleted = LoginSyncDataStatusObserver.getInstance() .observeSyncDataCompletedEvent( (Observer) v -> DialogMaker .dismissProgressDialog()); //如果数据没有同步完成,弹个进度Dialog if (!syncCompleted) { DialogMaker.showProgressDialog(MyPatientActivity.this, getString(com.netease.nim.uikit.R.string.prepare_data)) .setCanceledOnTouchOutside(false); } } /** * 注册未读消息数量观察者 */ private void registerMsgUnreadInfoObserver(boolean register) { if (register) { ReminderManager.getInstance().registerUnreadNumChangedCallback(this); } else { ReminderManager.getInstance().unregisterUnreadNumChangedCallback(this); } } @Override public void onUnreadNumChanged(ReminderItem item) { } /** * 注册/注销系统消息未读数变化 */ private void registerSystemMessageObservers(boolean register) { // NIMClient.getService(AuthServiceObserver.class).observeOtherClients(clientsObserver, register); NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( sysMsgUnreadCountChangedObserver, register); // NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register); } private void registerCustomMessageObservers(boolean register) { // NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( // customNotificationObserver, register); } /** * 查询系统消息未读数 */ private void requestSystemMessageUnreadCount() { int unread = NIMClient.getService(SystemMessageService.class) .querySystemMessageUnreadCountBlock(); SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unread); ReminderManager.getInstance().updateContactUnreadNum(unread); } //初始化未读红点动画 private void initUnreadCover() { DropManager.getInstance().init(this, findViewById(R.id.unread_cover), (id, explosive) -> { if (id == null || !explosive) { return; } if (id instanceof RecentContact) { RecentContact r = (RecentContact) id; NIMClient.getService(MsgService.class).clearUnreadCount(r.getContactId(), r.getSessionType()); return; } if (id instanceof String) { if (((String) id).contentEquals("0")) { NIMClient.getService(MsgService.class).clearAllUnreadCount(); } else if (((String) id).contentEquals("1")) { NIMClient.getService(SystemMessageService.class) .resetSystemMessageUnreadCount(); } } }); } }