From fafa953e9e3e5ce98d479677f91cb5c356a0d13a Mon Sep 17 00:00:00 2001 From: linminjie <1004644107@qq.com> Date: Thu, 20 Jul 2023 09:22:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=88=97=E8=A1=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9=20=20=E7=BD=91=E7=BB=9C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=A4=B1=E8=B4=A5=E9=97=AA=E9=80=80=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../unionmedtv/activity/AddressSelectActivity.java | 9 +- .../unionmedtv/activity/DoctorActivity.java | 8 +- .../unionmedtv/activity/DoctorDetailActivity.java | 18 ++- .../unionmedtv/activity/HospitalActivity.java | 9 +- .../activity/HospitalDetailActivity.java | 7 +- .../unionmed/unionmedtv/activity/MsgActivity.java | 1 + .../unionmedtv/activity/VideoCallActivity.java | 161 ++++++++++++++++----- .../unionmedtv/adapter/MsgItemAdapter.java | 4 +- .../unionmedtv/adapter/MsgListAdapter.java | 6 +- .../unionmed/unionmedtv/adapter/RemoteAdapter.java | 26 +++- .../unionmedtv/fragment/ContentFragment.java | 11 +- .../unionmed/unionmedtv/fragment/MsgFragment.java | 70 +++++---- .../unionmedtv/fragment/MyDoctorFragment.java | 7 +- .../unionmedtv/login/activity/LoginActivity.java | 4 +- .../activity/fragment/LoginAccountFragment.java | 9 +- .../activity/fragment/LoginPhoneFragment.java | 24 +-- .../unionmedtv/network/RequestHandler.java | 44 +++++- app/src/main/res/layout/activity_video_call.xml | 6 +- app/src/main/res/layout/item_remote_layout.xml | 17 ++- 20 files changed, 305 insertions(+), 138 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f6b695e..ee2fe51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,7 +68,7 @@ dependencies { // 网络请求框架:https://github.com/getActivity/EasyHttp - implementation 'com.github.getActivity:EasyHttp:11.2' + implementation 'com.github.getActivity:EasyHttp:12.0' implementation 'com.squareup.okhttp3:okhttp:3.12.13' implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.github.getActivity:GsonFactory:6.2' diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/AddressSelectActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/AddressSelectActivity.java index 4ce5f43..ea18b6b 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/AddressSelectActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/AddressSelectActivity.java @@ -10,6 +10,7 @@ import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import com.blankj.utilcode.util.AppUtils; +import com.blankj.utilcode.util.ToastUtils; import com.donkingliang.labels.LabelsView; import com.hjq.http.EasyConfig; import com.hjq.http.EasyHttp; @@ -64,7 +65,7 @@ public class AddressSelectActivity extends BaseActivity { .api(new GetAppIpNew()) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { if(apiResponseHttpData.isRequestSucceed()){ if(apiResponseHttpData.getData().isInnerRequestSucceed()){ list.addAll(apiResponseHttpData.getData().getData().getMember()); @@ -86,9 +87,11 @@ public class AddressSelectActivity extends BaseActivity { } @Override - public void onFail(Exception e) { - + public void onHttpFail(Exception e) { + ToastUtils.showLong(e.getMessage()); } + + }); } } diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorActivity.java index d62cdaf..3e12a5c 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorActivity.java @@ -17,6 +17,7 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.ToastUtils; import com.example.yideng.loaddialoglibrary.LmiotDialog; import com.hjq.http.EasyHttp; import com.hjq.http.listener.OnHttpListener; @@ -132,7 +133,7 @@ public class DoctorActivity extends BaseActivity { CacheUtil.getLongitude().toString(), CacheUtil.getLatitude().toString(), CacheUtil.getPkey(), "2")) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LogUtils.e("成功:" + stringHttpData); LmiotDialog.hidden(); if (stringHttpData.isRequestSucceed()) { @@ -166,13 +167,12 @@ public class DoctorActivity extends BaseActivity { }); } } - - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LmiotDialog.hidden(); + ToastUtils.showLong(e.getMessage()); LogUtils.e("失败:" + e); } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorDetailActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorDetailActivity.java index 2dcf91f..8423524 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorDetailActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/DoctorDetailActivity.java @@ -90,8 +90,9 @@ public class DoctorDetailActivity extends BaseActivity implements View.OnClickLi EasyHttp.post(this) .api(new GetDoctorInfoApi(userAccount, CacheUtil.getPkey(), CacheUtil.getUserToken())) .request(new OnHttpListener>>() { + @Override - public void onSucceed(HttpData> response) { + public void onHttpSuccess(HttpData> response) { if (response.isRequestSucceed()) { if (response.getData().isInnerRequestSucceed()) { GetDoctorInfoApi infoBean = response.getData().getData(); @@ -149,8 +150,8 @@ public class DoctorDetailActivity extends BaseActivity implements View.OnClickLi } @Override - public void onFail(Exception e) { - + public void onHttpFail(Exception e) { + ToastUtils.showLong(e.getMessage()); } }); } @@ -185,13 +186,19 @@ public class DoctorDetailActivity extends BaseActivity implements View.OnClickLi } if (checkCamera(DoctorDetailActivity.this)) { if (HomeActivity.connectIsSuccess(DoctorDetailActivity.this)) { + RongCallSession callSession = RongCallClient.getInstance().getCallSession(); + if (callSession != null && callSession.getStartTime() > 0) { + // 当前正在进行通话 + ToastUtils.showLong("当前正在进行通话"); + return; + } List pKeys = new ArrayList<>(); pKeys.add(targetId); EasyHttp.post(DoctorDetailActivity.this) .api(new ApplyVideoApi(pKeys, "10001")) .request(new OnHttpListener>>() { @Override - public void onSucceed(ApiResponse> result) { + public void onHttpSuccess(ApiResponse> result) { if (null != result.getData() && result.getData().isInnerRequestSucceed() && null != result.getData().getData()) { @@ -204,11 +211,12 @@ public class DoctorDetailActivity extends BaseActivity implements View.OnClickLi } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { ToastUtils.showLong("发起视频失败"); LogUtils.e("applyVideo失败", "失败:" + e); } + }); } } diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalActivity.java index ef35231..f2d7b34 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalActivity.java @@ -16,6 +16,7 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.ToastUtils; import com.example.yideng.loaddialoglibrary.LmiotDialog; import com.hjq.http.EasyHttp; import com.hjq.http.listener.OnHttpListener; @@ -122,12 +123,12 @@ public class HospitalActivity extends BaseActivity { }; public void loadData(int type) { - LmiotDialog.show(HospitalActivity.this,"努力加载中.."); + LmiotDialog.show(HospitalActivity.this, "努力加载中.."); EasyHttp.post(HospitalActivity.this) .api(new GetHospitalApi(et_search.getText().toString(), startNum, CacheUtil.getPkey(), endNum)) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LmiotDialog.hidden(); if (stringHttpData.getData().getCode() == 200) { if (stringHttpData.getData().getData() == null) { @@ -162,12 +163,12 @@ public class HospitalActivity extends BaseActivity { }); } - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LmiotDialog.hidden(); + ToastUtils.showLong(e.getMessage()); LogUtils.e("失败:" + e); } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalDetailActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalDetailActivity.java index fe3d019..d55ea3d 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalDetailActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/HospitalDetailActivity.java @@ -110,7 +110,7 @@ public class HospitalDetailActivity extends BaseActivity { .api(new GetHospitalDetailApi(chosCode, CacheUtil.getPkey())) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LogUtils.e("成功:" + stringHttpData); if (stringHttpData.isRequestSucceed()) { if (stringHttpData.getData().isInnerRequestSucceed()) { @@ -136,13 +136,14 @@ public class HospitalDetailActivity extends BaseActivity { doctorAdapter.notifyDataSetChanged(); } } - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LogUtils.e("失败:" + e); + ToastUtils.showLong(e.getMessage()); } + }); } } diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/MsgActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/MsgActivity.java index 99f218b..712b49d 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/MsgActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/MsgActivity.java @@ -85,6 +85,7 @@ public class MsgActivity extends BaseActivity { public void onSuccess(List conversations) { LmiotDialog.hidden(); if(conversations==null){ + lin.setVisibility(View.VISIBLE); tv_content.setText("暂无数据"); return; } diff --git a/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java b/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java index ff8119f..96b5e52 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/activity/VideoCallActivity.java @@ -14,6 +14,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.lifecycle.Observer; @@ -25,6 +26,8 @@ import com.blankj.utilcode.util.StringUtils; import com.blankj.utilcode.util.ToastUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.listener.OnItemClickListener; import com.hjq.http.EasyHttp; import com.hjq.http.listener.OnHttpListener; import com.unionmed.unionmedtv.R; @@ -38,6 +41,9 @@ import com.unionmed.unionmedtv.livedatas.LiveDataBus; import com.unionmed.unionmedtv.network.ApiResponse; import com.unionmed.unionmedtv.utils.CacheUtil; import com.unionmed.unionmedtv.utils.Constants; +import com.unionmed.unionmedtv.utils.OnChildClickListener; + +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -104,13 +110,17 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe this.usetInfo = usetInfo; } + //本地视频全屏数据 private String imgPath = ""; private String name = ""; + private String localId = ""; + private SurfaceView surfaceView = null; + private boolean cameraDisabled = false; /** * idle 通话结束 * Calling 电话拨出 - * BeCall 代接听 + * BeCall 等待接听 * OnCall 已接通 */ public enum CallStatus { @@ -141,7 +151,32 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe tv_time = findViewById(R.id.tv_time); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(VideoCallActivity.this)); - remoteAdapter = new RemoteAdapter(R.layout.item_remote_layout); + remoteAdapter = new RemoteAdapter(R.layout.item_remote_layout, new OnChildClickListener() { + @Override + public void onChildClick(View view, int position, T data) { + RemoteBean newRemoteBean = new RemoteBean(); + newRemoteBean.setPath(imgPath); + newRemoteBean.setName(name); + ((RCRTCVideoView) surfaceView).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); + newRemoteBean.setSurfaceView(surfaceView); + newRemoteBean.setUserId(localId); + newRemoteBean.setCameraDisabled(cameraDisabled); + + ((FrameLayout) ((RemoteBean) data).getView()).removeAllViews(); + RemoteBean remoteBean = (RemoteBean) data; + imgPath = remoteBean.getPath(); + name = remoteBean.getName(); + localId = remoteBean.getUserId(); + cameraDisabled = remoteBean.isCameraDisabled(); + surfaceView = remoteBean.getSurfaceView(); + surfaceView.setZOrderOnTop(false); + clearViews(); + addLocalView(surfaceView); + remoteAdapter.getData().set(position, newRemoteBean); + remoteAdapter.notifyDataSetChanged(); + chageCamera(!cameraDisabled); + } + }); recyclerView.setAdapter(remoteAdapter); lin_put_through = findViewById(R.id.lin_put_through); lin_put_through.setOnClickListener(this); @@ -155,25 +190,28 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe lin_mute.setSelected(true); initIRongCallListener(); - type =getIntent().getStringExtra("type"); + type = getIntent().getStringExtra("type"); targetId = getIntent().getStringExtra("targetId"); + localId = targetId; groupId = getIntent().getStringExtra("groupId"); - if(type.equals("1")){ + if (type.equals("1")) { if (!TextUtils.isEmpty(targetId)) { List userIds = new ArrayList<>(); userIds.add(targetId); RongCallClient.getInstance().startCall(Conversation.ConversationType.GROUP, groupId, userIds, null, RongCallCommon.CallMediaType.VIDEO, null); } - }else { + } else { changeUi(null); } getUserInfoByServer(targetId); } + private long time = 0; Handler handler; + private void reckonByTime() { - handler = new Handler(); + handler = new Handler(); Runnable updateTask = new Runnable() { @Override public void run() { @@ -193,16 +231,20 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe // 延迟执行任务 handler.postDelayed(updateTask, 1000); } + + private void addLocalView(SurfaceView view) { + local.removeAllViews(); + ((RCRTCVideoView) view).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); + local.addView(view); + } + + private void clearViews() { + local.removeAllViews(); + } + public void initIRongCallListener() { RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() { - private void addLocalView(SurfaceView view) { - local.removeAllViews(); - local.addView(view); - } - private void clearViews() { - local.removeAllViews(); - } /** * 电话已拨出。 @@ -213,7 +255,7 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe */ @Override public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) { - Log.i("TAG", "onCallOutgoing: ================="+callSession.getActiveTime()); + Log.i("TAG", "onCallOutgoing: =================" + callSession.getActiveTime()); currentStatus = CallStatus.Calling; changeUi(null); } @@ -231,11 +273,13 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe currentStatus = CallStatus.OnCall; changeUi(null); RemoteBean remoteBean = new RemoteBean(); - remoteBean.setUserId(targetId); + remoteBean.setUserId(CacheUtil.getImUserAccount()); + ((RCRTCVideoView) localVideo).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); remoteBean.setSurfaceView(localVideo); - remoteAdapter.addData(remoteBean); remoteBean.setPath(CacheUtil.getToken().getHeadImg()); remoteBean.setName(CacheUtil.getToken().getName()); + remoteAdapter.addData(remoteBean); + } /** @@ -294,23 +338,28 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe @Override public void success(ImUserInfoBean imUserInfoBean) { if (userId.equals(targetId)) { - ((RCRTCVideoView)remoteVideo).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); + surfaceView = remoteVideo; + ((RCRTCVideoView) remoteVideo).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); addLocalView(remoteVideo); imgPath = imUserInfoBean.getHeadImg(); name = imUserInfoBean.getName(); + localId = targetId; } else { RemoteBean remoteBean = new RemoteBean(); remoteBean.setUserId(userId); + ((RCRTCVideoView) remoteVideo).setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); remoteBean.setSurfaceView(remoteVideo); - remoteAdapter.addData(remoteBean); remoteBean.setPath(imUserInfoBean.getHeadImg()); remoteBean.setName(imUserInfoBean.getName()); + remoteAdapter.addData(remoteBean); + } } @Override public void fail() { if (userId.equals(targetId)) { + surfaceView = remoteVideo; addLocalView(remoteVideo); } else { RemoteBean remoteBean = new RemoteBean(); @@ -361,7 +410,8 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe @Override public void onRemoteCameraDisabled(String userId, boolean disabled) { - if (userId.equals(targetId)) { + if (userId.equals(localId)) { + cameraDisabled = disabled; if (disabled) { local.setVisibility(View.GONE); iv_icon.setVisibility(View.VISIBLE); @@ -493,20 +543,22 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe .api(new GetImUserInfoApi(CacheUtil.getToken().getToken(), userId)) .request(new OnHttpListener>>() { @Override - public void onSucceed(ApiResponse> result) { + public void onHttpSuccess(ApiResponse> result) { if (null != result.getData() && result.getData().isInnerRequestSucceed() && null != result.getData().getData()) { - Glide.with(VideoCallActivity.this) - .load(result.getData().getData().getHeadImg()) - .apply(new RequestOptions() - .placeholder(R.color.white_e1e1e1) - ) - .into(iv_icon); - tv_name.setText(result.getData().getData().getName()); - if (type.equals("1")) { - tv_tip.setText("等待对方接听"); - } else { - tv_tip.setText("对方邀请您进行通话"); + if (currentStatus != CallStatus.OnCall) { //等待接听状态 + Glide.with(VideoCallActivity.this) + .load(result.getData().getData().getHeadImg()) + .apply(new RequestOptions() + .placeholder(R.color.white_e1e1e1) + ) + .into(iv_icon); + tv_name.setText(result.getData().getData().getName()); + if (type.equals("1")) { + tv_tip.setText("等待对方接听"); + } else { + tv_tip.setText("对方邀请您进行通话"); + } } if (usetInfo != null) { usetInfo.success(result.getData().getData()); @@ -520,19 +572,21 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { + ToastUtils.showLong(e.getMessage()); LogUtils.e("用户信息失败", "失败:" + e); } + }); } @Override public void onClick(View view) { - if (view.getId() == R.id.lin_put_through||view.getId()==R.id.iv_put_through) {//接听 + if (view.getId() == R.id.lin_put_through || view.getId() == R.id.iv_put_through) {//接听 if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) { RongCallClient.getInstance().acceptCall(RongCallClient.getInstance().getCallSession().getCallId()); } - } else if (view.getId() == R.id.lin_hang_up||view.getId()==R.id.iv_hang_up) {//挂断 + } else if (view.getId() == R.id.lin_hang_up || view.getId() == R.id.iv_hang_up) {//挂断 if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) { RongCallClient.getInstance().hangUpCall(RongCallClient.getInstance().getCallSession().getCallId()); } @@ -561,20 +615,49 @@ public class VideoCallActivity extends BaseActivity implements View.OnClickListe iv_camera.setImageDrawable(getResources().getDrawable(R.mipmap.icon_camera_on)); tv_camera.setText("摄像头已开"); } - for (int i = 0; i < remoteAdapter.getData().size(); i++) { - if (remoteAdapter.getData().get(i).getUserId().equals(targetId)) { - remoteAdapter.getData().get(i).setCameraDisabled(!lin_turn_off_camera.isSelected()); + if (localId.equals(CacheUtil.getImUserAccount())) {//本地大屏用户id==当前账号id + cameraDisabled = !lin_turn_off_camera.isSelected(); + chageCamera(!cameraDisabled); + } else { + for (int i = 0; i < remoteAdapter.getData().size(); i++) { + if (remoteAdapter.getData().get(i).getUserId().equals(CacheUtil.getImUserAccount())) { + remoteAdapter.getData().get(i).setCameraDisabled(!lin_turn_off_camera.isSelected()); + } } + remoteAdapter.notifyDataSetChanged(); } - remoteAdapter.notifyDataSetChanged(); + } + } + + //本地视频图像显示 + public void chageCamera(boolean cameraDisabled) { + if (!cameraDisabled) { + local.setVisibility(View.GONE); + iv_icon.setVisibility(View.VISIBLE); + Glide.with(VideoCallActivity.this) + .load(imgPath) + .apply(new RequestOptions() + .placeholder(R.mipmap.rc_default_portrait) + ) + .into(iv_icon); + } else { + local.setVisibility(View.VISIBLE); + iv_icon.setVisibility(View.GONE); } } @Override protected void onDestroy() { super.onDestroy(); - if(handler!=null){ + if (handler != null) { handler.removeCallbacksAndMessages(null); } } + + @Override + public void onBackPressed() { + if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) { + RongCallClient.getInstance().hangUpCall(RongCallClient.getInstance().getCallSession().getCallId()); + } + } } diff --git a/app/src/main/java/com/unionmed/unionmedtv/adapter/MsgItemAdapter.java b/app/src/main/java/com/unionmed/unionmedtv/adapter/MsgItemAdapter.java index aac801f..50392ff 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/adapter/MsgItemAdapter.java +++ b/app/src/main/java/com/unionmed/unionmedtv/adapter/MsgItemAdapter.java @@ -81,10 +81,10 @@ public class MsgItemAdapter extends BaseDelegateMultiAdapter>>() { @Override - public void onSucceed(ApiResponse> result) { + public void onHttpSuccess(ApiResponse> result) { if(postion==0){ LiveDataBus.get().with(Constants.MSG_LIST_SELECT_ITEM).postValue(0); } @@ -76,7 +77,8 @@ public class MsgListAdapter extends BaseQuickAdapter { private OnChildClickListener onChildClickListener; - public RemoteAdapter(int layoutResId) { + public RemoteAdapter(int layoutResId,OnChildClickListener onChildClickListener) { super(layoutResId); + this.onChildClickListener=onChildClickListener; } @@ -39,21 +41,29 @@ public class RemoteAdapter extends BaseQuickAdapter ImageView iv_avatar = vh.findView(R.id.iv_avatar); remoteBean.setView(remote); remote.removeAllViews(); - remoteBean.getSurfaceView().setZOrderOnTop(true); + remote.addView(remoteBean.getSurfaceView()); + Glide.with(getContext()) + .load(remoteBean.getPath()) + .apply(new RequestOptions() + .placeholder(R.mipmap.rc_default_portrait) + ) + .into(iv_avatar); if (remoteBean.isCameraDisabled()) { iv_avatar.setVisibility(View.VISIBLE); + remoteBean.getSurfaceView().setZOrderOnTop(false); remote.setVisibility(View.GONE); } else { + remoteBean.getSurfaceView().setZOrderOnTop(true); iv_avatar.setVisibility(View.GONE); remote.setVisibility(View.VISIBLE); - Glide.with(getContext()) - .load(remoteBean.getPath()) - .apply(new RequestOptions() - .placeholder(R.mipmap.rc_default_portrait) - ) - .into(iv_avatar); } + vh.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + onChildClickListener.onChildClick(view,vh.getLayoutPosition(),remoteBean); + } + }); } } diff --git a/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java b/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java index efb0ea6..419ecb1 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java +++ b/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java @@ -358,7 +358,7 @@ public class ContentFragment extends BaseLazyLoadFragment { "119.218118", "26.043799", "15", "2")) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LogUtils.e("成功:" + stringHttpData); if (stringHttpData.getData().getCode() == 200) { List doctorInfo = stringHttpData.getData().getData().getMember(); @@ -376,13 +376,13 @@ public class ContentFragment extends BaseLazyLoadFragment { mPbLoading.setVisibility(View.GONE); mVerticalGridView.setVisibility(View.VISIBLE); } - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LogUtils.e("失败:" + e); } + }); break; case "7359d189a049468d9d4e280fd1ec15c5": @@ -391,7 +391,7 @@ public class ContentFragment extends BaseLazyLoadFragment { "119.218118", "26.043799", "15", "2")) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LogUtils.e("成功:" + stringHttpData); if (stringHttpData.getData().getCode() == 200) { List doctorInfo = stringHttpData.getData().getData().getMember(); @@ -402,11 +402,10 @@ public class ContentFragment extends BaseLazyLoadFragment { mPbLoading.setVisibility(View.GONE); mVerticalGridView.setVisibility(View.VISIBLE); } - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LogUtils.e("失败:" + e); } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/fragment/MsgFragment.java b/app/src/main/java/com/unionmed/unionmedtv/fragment/MsgFragment.java index 63352a3..3764808 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/fragment/MsgFragment.java +++ b/app/src/main/java/com/unionmed/unionmedtv/fragment/MsgFragment.java @@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.TimeUtils; import com.blankj.utilcode.util.ToastUtils; import com.example.yideng.loaddialoglibrary.LmiotDialog; import com.unionmed.unionmedtv.R; @@ -28,8 +29,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import io.rong.imlib.IRongCoreCallback; +import io.rong.imlib.IRongCoreEnum; +import io.rong.imlib.RongCoreClient; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.HistoryMessageOption; import io.rong.imlib.model.Message; import io.rong.message.TextMessage; @@ -88,13 +93,6 @@ public class MsgFragment extends Fragment implements View.OnClickListener { msgItemLinearLayoutManager.setRecyclerView(recyclerView); recyclerView.setLayoutManager(msgItemLinearLayoutManager); recyclerView.addItemDecoration(new LinearSpacingItemDecoration(getActivity(), 14)); -// list.clear(); -// list.add("1"); -// list.add("2"); -// list.add("3"); -// list.add("4"); -// list.add("5"); -// list.add("6"); msgItemAdapter = new MsgItemAdapter(list, new OnChildClickListener() { @Override @@ -158,28 +156,50 @@ public class MsgFragment extends Fragment implements View.OnClickListener { public void getRemoteHistory() { Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; - long dateTime = 0; - int count = 20; - RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, -1, count, new RongIMClient.ResultCallback>() { - + long dateTime = System.currentTimeMillis(); + int count = 50; + HistoryMessageOption historyMessageOption = new HistoryMessageOption(); + historyMessageOption.setDataTime(dateTime);//2022-09-07 17:25:12:112 + historyMessageOption.setOrder(HistoryMessageOption.PullOrder.DESCEND); + historyMessageOption.setCount(count); + RongCoreClient.getInstance().getMessages(conversationType, targetId, historyMessageOption, new IRongCoreCallback.IGetMessageCallback() { @Override - public void onSuccess(List messages) { - for (int i=0;i messageList, IRongCoreEnum.CoreErrorCode errorCode) { LmiotDialog.hidden(); + if (IRongCoreEnum.CoreErrorCode.SUCCESS.code == errorCode.code) { + for (int i=0;i>() { +// +// @Override +// public void onSuccess(List messages) { +// for (int i=0;i>>() { @Override - public void onSucceed(HttpData> stringHttpData) { + public void onHttpSuccess(HttpData> stringHttpData) { LogUtils.e("成功:" + stringHttpData); if (stringHttpData.isRequestSucceed()) { if(stringHttpData.getData().isInnerRequestSucceed()){ @@ -111,11 +112,11 @@ public class MyDoctorFragment extends Fragment implements View.OnClickListener { contractedDoctorAdapter.notifyDataSetChanged(); } } - } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { + ToastUtils.showLong(e.getMessage()); LogUtils.e("失败:" + e); } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java index 5d75114..527689c 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java +++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java @@ -142,7 +142,7 @@ public class LoginActivity extends FragmentActivity { new LocationApi("bd09ll") ).request(new OnHttpListener>() { @Override - public void onSucceed(HttpData apiResponseHttpData) { + public void onHttpSuccess(HttpData apiResponseHttpData) { if (apiResponseHttpData.isRequestSucceed()) { LocationApi.LocatinBean.ContentBean location = apiResponseHttpData.getData().getContent(); CacheUtil.saveLongitude(Double.valueOf(location.getPoint().getX())); @@ -151,7 +151,7 @@ public class LoginActivity extends FragmentActivity { } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { } }); diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java index af360da..72c365c 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java +++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java @@ -133,7 +133,7 @@ public class LoginAccountFragment extends Fragment implements View.OnClickListen .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { LogUtils.e("成功:" + apiResponseHttpData.getCode()); if (apiResponseHttpData.isRequestSucceed()) { if (apiResponseHttpData.getData().getCode() == 200) { @@ -179,9 +179,8 @@ public class LoginAccountFragment extends Fragment implements View.OnClickListen } } - @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LmiotDialog.hidden(); ToastUtils.showLong("登录失败"); LogUtils.e("失败:" + e); @@ -195,7 +194,7 @@ public class LoginAccountFragment extends Fragment implements View.OnClickListen .api(new AreaLoginApi(identity_id, mobile, name, pkey)) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> personInfoBeanHttpData) { + public void onHttpSuccess(HttpData> personInfoBeanHttpData) { LmiotDialog.hidden(); if (personInfoBeanHttpData.isRequestSucceed()) { if (personInfoBeanHttpData.getData().getCode() == 200) { @@ -213,7 +212,7 @@ public class LoginAccountFragment extends Fragment implements View.OnClickListen } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LmiotDialog.hidden(); ToastUtils.showLong("登录失败"); LogUtils.e("失败:" + e); diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java index 811535c..85a8e4d 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java +++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java @@ -140,7 +140,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener MobileLogin(edit_phone.getText().toString(), edit_code.getText().toString()); } else if (view.getId() == R.id.lin_code || view.getId() == R.id.iv_qrCode) { - if(timer!=null){ + if (timer != null) { timer.cancel(); } GenerateQRcode(); @@ -158,7 +158,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener .api(new QRCodeApi("Login", "")) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { if (apiResponseHttpData.isRequestSucceed()) { if (apiResponseHttpData.getData().isInnerRequestSucceed()) { lin_code.setVisibility(View.GONE); @@ -181,7 +181,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { lin_code.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); tv_code_msg.setText("生成二维码失败,点击刷新"); @@ -205,7 +205,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { if (apiResponseHttpData.isRequestSucceed()) { if (apiResponseHttpData.getData().isInnerRequestSucceed()) { TokenBean tokenBean = new Gson() @@ -265,7 +265,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { } }); @@ -288,7 +288,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { LogUtils.e("成功:" + apiResponseHttpData); ToastUtils.showLong("获取验证码成功"); if (apiResponseHttpData.isRequestSucceed()) { @@ -311,7 +311,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { ToastUtils.showLong("获取验证码失败"); LogUtils.e("失败:" + e); } @@ -326,7 +326,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> apiResponseHttpData) { + public void onHttpSuccess(HttpData> apiResponseHttpData) { LogUtils.e("成功:" + apiResponseHttpData); if (apiResponseHttpData.isRequestSucceed()) { if (apiResponseHttpData.getData().isInnerRequestSucceed()) { @@ -372,7 +372,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener } @Override - public void onFail(Exception e) { + public void onHttpFail(Exception e) { LmiotDialog.hidden(); ToastUtils.showLong("登录失败"); LogUtils.e("失败:" + e); @@ -387,7 +387,7 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener .api(new AreaLoginApi(identity_id, mobile, name, pkey)) .request(new OnHttpListener>>() { @Override - public void onSucceed(HttpData> personInfoBeanHttpData) { + public void onHttpSuccess(HttpData> personInfoBeanHttpData) { LmiotDialog.hidden(); if (personInfoBeanHttpData.isRequestSucceed()) { if (personInfoBeanHttpData.getData().isInnerRequestSucceed()) { @@ -405,8 +405,8 @@ public class LoginPhoneFragment extends Fragment implements View.OnClickListener } @Override - public void onFail(Exception e) { - LmiotDialog.hidden(); + public void onHttpFail(Exception e) { + } }); } diff --git a/app/src/main/java/com/unionmed/unionmedtv/network/RequestHandler.java b/app/src/main/java/com/unionmed/unionmedtv/network/RequestHandler.java index 784a347..7ba6645 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/network/RequestHandler.java +++ b/app/src/main/java/com/unionmed/unionmedtv/network/RequestHandler.java @@ -1,12 +1,21 @@ package com.unionmed.unionmedtv.network; import android.app.Application; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import androidx.annotation.NonNull; +import com.blankj.utilcode.util.ToastUtils; +import com.hjq.http.exception.CancelException; +import com.hjq.http.exception.HttpException; +import com.hjq.http.exception.NetworkException; +import com.hjq.http.exception.ServerException; +import com.hjq.http.exception.TimeoutException; import com.lxj.xpopup.XPopup; import com.unionmed.unionmedtv.R; import com.google.gson.JsonSyntaxException; @@ -24,10 +33,14 @@ import com.unionmed.unionmedtv.login.activity.LoginActivity; import com.unionmed.unionmedtv.utils.CacheUtil; import com.unionmed.unionmedtv.utils.Constants; +import org.jetbrains.annotations.NotNull; + import java.io.IOException; import java.io.InputStream; import java.lang.reflect.GenericArrayType; import java.lang.reflect.Type; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; import okhttp3.Headers; import okhttp3.Response; @@ -40,13 +53,10 @@ public class RequestHandler implements IRequestHandler { public RequestHandler(Application application) { mApplication = application; } - @NonNull - + @NotNull @Override - public Object requestSucceed(@NonNull HttpRequest httpRequest, - @NonNull Response response, @NonNull Type type) throws Exception { - + public Object requestSuccess(@NonNull @NotNull HttpRequest httpRequest, @NonNull @NotNull Response response, @NonNull @NotNull Type type) throws Exception { if (Response.class.equals(type)) { return response; } @@ -135,12 +145,32 @@ public class RequestHandler implements IRequestHandler { // throw new ResultException(model.getMessage(), model); } return result; - } @NonNull @Override public Exception requestFail(@NonNull HttpRequest httpRequest, @NonNull Exception e) { - return null; + if (e instanceof SocketTimeoutException) { + return new TimeoutException(mApplication.getString(R.string.http_server_out_time), e); + } + + if (e instanceof UnknownHostException) { + NetworkInfo info = ((ConnectivityManager) mApplication.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); + // 判断网络是否连接 + if (info != null && info.isConnected()) { + // 有连接就是服务器的问题 + return new ServerException(mApplication.getString(R.string.http_server_error), e); + } + // 没有连接就是网络异常 + return new NetworkException(mApplication.getString(R.string.http_network_error), e); + } + + if (e instanceof IOException) { + // 出现该异常的两种情况 + // 1. 调用 EasyHttp.cancel + // 2. 网络请求被中断 + return new CancelException(mApplication.getString(R.string.http_request_cancel), e); + } + return new HttpException(e.getMessage(), e); } } diff --git a/app/src/main/res/layout/activity_video_call.xml b/app/src/main/res/layout/activity_video_call.xml index 7d6ca7b..ea9372f 100644 --- a/app/src/main/res/layout/activity_video_call.xml +++ b/app/src/main/res/layout/activity_video_call.xml @@ -11,8 +11,7 @@ android:id="@+id/local" android:layout_width="match_parent" android:layout_height="match_parent" - tools:layout_editor_absoluteX="0dp" - tools:layout_editor_absoluteY="0dp" /> + /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_remote_layout.xml b/app/src/main/res/layout/item_remote_layout.xml index b9d62ce..e8e7778 100644 --- a/app/src/main/res/layout/item_remote_layout.xml +++ b/app/src/main/res/layout/item_remote_layout.xml @@ -3,23 +3,32 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/constraintlayout" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="220dp" + android:layout_height="220dp" + android:layout_margin="10dp" + android:padding="20dp" + style="@style/FocusStyle" + android:background="@drawable/edit_phone_select" + android:descendantFocusability="afterDescendants" tools:ignore="MissingPrefix" > + /> + /> \ No newline at end of file