From 56485ff0dd61de6cc585b1a7b8b8ea2fef9bb8ef Mon Sep 17 00:00:00 2001 From: chenbin Date: Sun, 13 Sep 2020 09:35:07 +0800 Subject: [PATCH] mm --- .../sipcall/call/InCallMeetingActivity.java | 240 +++++++++++++++++- .../java/com/tianrun/sipcall/db/DBUser.java | 4 + .../tianrun/sipcall/db/UserMeetingViews.java | 10 + .../tianrun/sipcall/login/MainActivity.java | 2 +- .../java/com/tianrun/sipcall/net/Net.java | 60 ++++- app/src/main/res/drawable-hdpi/bg3.9.png | Bin 0 -> 5913 bytes app/src/main/res/layout/incallactivity.xml | 2 +- .../main/res/layout/incallmeetingactivity.xml | 42 ++- .../res/layout/list_item_user_meeting.xml | 125 +++++++++ 9 files changed, 452 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/com/tianrun/sipcall/db/UserMeetingViews.java create mode 100644 app/src/main/res/drawable-hdpi/bg3.9.png create mode 100644 app/src/main/res/layout/list_item_user_meeting.xml diff --git a/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java b/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java index 1d1d887..1c25cc7 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java @@ -5,6 +5,7 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.KeyguardManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; @@ -28,6 +29,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.qmuiteam.qmui.skin.QMUISkinManager; import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopups; import com.qmuiteam.qmui.widget.popup.QMUIQuickAction; @@ -36,7 +39,9 @@ import com.qmuiteam.qmui.widget.tab.QMUITabIndicator; import com.qmuiteam.qmui.widget.tab.QMUITabSegment; import com.tianrun.sipcall.R; import com.tianrun.sipcall.SipEngine; +import com.tianrun.sipcall.db.DBGroup; import com.tianrun.sipcall.db.DBUser; +import com.tianrun.sipcall.db.UserMeetingViews; import com.tianrun.sipcall.db.UserViews; import com.tianrun.sipcall.net.Net; import com.tianrun.sipcall.ui.TrAdapter; @@ -64,6 +69,7 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList private SMPercentFrameLayout localRenderLayout; private SMPercentFrameLayout remoteRenderLayout; private ImageButton incall_answer, incall_hangup; + private View imageButtonAddUser; private TextView show; GridView gridUser; QMUITabSegment mTabSegment; @@ -72,11 +78,13 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList private EngineServer engineServer; private int callid = -1;//当前通话的id + private String meetingName = ""; private String callnumber = "未知"; private String callstate = "未知"; private int calltype = 0; //0音频1视频 private boolean VIDEOSTATE = false; public static Intent incallIntent; + TrAdapter adapterUser; List allUsers = new ArrayList<>(); @@ -160,6 +168,12 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList mTabSegment = findViewById(R.id.ScreenType); mContentViewPager = findViewById(R.id.contentViewPager); + imageButtonAddUser = findViewById(R.id.imageButtonAddUser); + if (DBUser.mySelf.isManager) { + imageButtonAddUser.setVisibility(View.VISIBLE); + } else { + imageButtonAddUser.setVisibility(View.INVISIBLE); + } } private void initTabAndPager() { @@ -195,18 +209,21 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList } }); } - public void getMembers() - { + + public void getMembers() { Net.getGroupMenbers(callnumber, new HttpUtl.CallBack() { @Override public void onRequestComplete(int cmd, String result, Object orgs) { JSONObject jo = JSONObject.parseObject(result); + meetingName = jo.getString("topic"); JSONArray array = jo.getJSONArray("members_msg"); allUsers.clear(); - for(Object o:array) { - allUsers.add(new DBUser((JSONObject)o)); + for (Object o : array) { + allUsers.add(new DBUser((JSONObject) o)); } setUsers(); + + show.setText(meetingName + " " + callstate); } @Override @@ -218,20 +235,23 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList public void setUsers() { if (adapterUser == null) { - adapterUser = UIUtl.setList(this, gridUser, R.layout.list_item_user, allUsers, new TrAdapter.Callback() { + adapterUser = UIUtl.setList(this, gridUser, R.layout.list_item_user_meeting, allUsers, new TrAdapter.Callback() { @Override public void initCallback(Object data, int position, View prefabView, ViewGroup parent) { - UserViews views = null; + UserMeetingViews views = null; if (prefabView.getTag() == null) { - views = new UserViews(); + views = new UserMeetingViews(); views.textViewName = prefabView.findViewById(R.id.textViewName); views.textViewNum = prefabView.findViewById(R.id.textViewNum); views.imageViewStatus = prefabView.findViewById(R.id.imageViewStatus); views.imageViewAddflag = prefabView.findViewById(R.id.imageViewAddflag); views.imageViewPhoneIcon = prefabView.findViewById(R.id.imageView3PhoneIcon); + views.memberStatus1 = prefabView.findViewById(R.id.memberStatus1); + views.memberStatus2 = prefabView.findViewById(R.id.memberStatus2); + views.memberStatus3 = prefabView.findViewById(R.id.memberStatus3); prefabView.setTag(views); } else { - views = (UserViews) (prefabView.getTag()); + views = (UserMeetingViews) (prefabView.getTag()); } DBUser d = (DBUser) data; views.textViewName.setText(d.name); @@ -256,6 +276,9 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList @Override public void clickCallback(Object data, AdapterView parent, View view, int position, long id) { + if (!DBUser.mySelf.isManager) { + return; + } DBUser d = (DBUser) data; QMUIQuickAction qa = QMUIPopups.quickAction(InCallMeetingActivity.this, QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 56), @@ -265,6 +288,128 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList .skinManager(QMUISkinManager.defaultInstance(InCallMeetingActivity.this)) .edgeProtection(QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 20)); if (DBUser.mySelf.isManager) { + if (d.isMute) { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("取消禁言").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.unmuteMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } else { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("禁言").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.muteMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } + + if (VIDEOSTATE) { + if (d.isVMute) { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("回复视频").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.unvmuteMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } else { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("停止视频").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.vmuteMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } + + if (d.isLayout) { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("恢复布局").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.vidlayoutMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } else { + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("切换布局").onClick( + new QMUIQuickAction.OnClickListener() { + @Override + public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { + quickAction.dismiss(); + Net.vidfloorMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + } + }, null); + } + } + )); + } + } + qa.addAction(new QMUIQuickAction.Action().icon(android.R.drawable.ic_delete).text("移除").onClick( new QMUIQuickAction.OnClickListener() { @Override @@ -471,6 +616,85 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList } } + public void addMember(View v) { + showUsersMultiChoiceDialog(); + } + + boolean containMember(String phone) { + for (DBUser u : allUsers) { + if (u.phone.equals(phone)) { + return true; + } + } + return false; + } + + private void showUsersMultiChoiceDialog() { + List list = new ArrayList<>(); + List listPhone = new ArrayList<>(); + for (DBUser u : DBUser.allUser) { + if (!containMember(u.phone)) { + listPhone.add(u.phone); + list.add(u.phone + " | " + u.name); + } + } + if (list.size() == 0) { + UIUtl.toastI("所有分机已经添加"); + return; + } + + final String[] items = new String[list.size()]; + list.toArray(items); + final QMUIDialog.MultiCheckableDialogBuilder builder = new QMUIDialog.MultiCheckableDialogBuilder(this) + .setTitle("选择要加入的分机号") +// .setCheckedItems(new int[]{1, 3}) + .setSkinManager(QMUISkinManager.defaultInstance(this)) + .addItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }); + builder.addAction("取消", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + } + }); + builder.addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + int[] selectIndexs = builder.getCheckedItemIndexes(); + if (selectIndexs.length > 0) { + List list = new ArrayList<>(); + String members = ""; + for (int i = 0; i < selectIndexs.length; i++) { + String phNum = listPhone.get(selectIndexs[i]); + members = members + phNum + ","; + } + + Net.addMember2Group(callnumber, members, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + getMembers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + + } + }, null); + } + + dialog.dismiss(); + } + }); + + int mCurrentDialogStyle = com.qmuiteam.qmui.R.style.QMUI_Dialog; + builder.create(mCurrentDialogStyle).show(); + } + + @SuppressLint("NewApi") void fullScreen() { int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE diff --git a/app/src/main/java/com/tianrun/sipcall/db/DBUser.java b/app/src/main/java/com/tianrun/sipcall/db/DBUser.java index a7a280a..56aa42b 100644 --- a/app/src/main/java/com/tianrun/sipcall/db/DBUser.java +++ b/app/src/main/java/com/tianrun/sipcall/db/DBUser.java @@ -21,6 +21,10 @@ public class DBUser { public boolean isManager = false; public boolean isAddFlag = false; + public boolean isMute = false; + public boolean isVMute = false; + public boolean isLayout = false; + public DBUser(String name, String phone, String status) { this.name = name; this.phone = phone; diff --git a/app/src/main/java/com/tianrun/sipcall/db/UserMeetingViews.java b/app/src/main/java/com/tianrun/sipcall/db/UserMeetingViews.java new file mode 100644 index 0000000..7055e29 --- /dev/null +++ b/app/src/main/java/com/tianrun/sipcall/db/UserMeetingViews.java @@ -0,0 +1,10 @@ +package com.tianrun.sipcall.db; + +import android.widget.ImageView; +import android.widget.TextView; + +public class UserMeetingViews extends UserViews { + public ImageView memberStatus1; + public ImageView memberStatus2; + public ImageView memberStatus3; +} \ No newline at end of file diff --git a/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java b/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java index 9273021..3033fb4 100644 --- a/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java @@ -478,7 +478,7 @@ public class MainActivity extends TrBaseActivity { members = members + phNum + ","; } - Net.addUser2Group(currSelectData.id, members, new HttpUtl.CallBack() { + Net.addMember2Group(currSelectData.id, members, new HttpUtl.CallBack() { @Override public void onRequestComplete(int cmd, String result, Object orgs) { Net.getGroupMenbers(currSelectData.id, null, currSelectData.id); diff --git a/app/src/main/java/com/tianrun/sipcall/net/Net.java b/app/src/main/java/com/tianrun/sipcall/net/Net.java index 7ef9a70..be989f3 100644 --- a/app/src/main/java/com/tianrun/sipcall/net/Net.java +++ b/app/src/main/java/com/tianrun/sipcall/net/Net.java @@ -26,6 +26,12 @@ public class Net { public static final int CMD_deleteGroup = 7007; public static final int CMD_addUser2Group = 7008; public static final int CMD_kickMember4Group = 7009; + public static final int CMD_muteMember4Group = 7010; + public static final int CMD_unmuteMember4Group = 7011; + public static final int CMD_vmuteMember4Group = 7012; + public static final int CMD_unvmuteMember4Group = 7013; + public static final int CMD_vidlayoutMember4Group = 7014; + public static final int CMD_vidfloorMember4Group = 7015; static HttpUtl.CallBack _callback = new HttpUtl.CallBack() { @Override @@ -123,9 +129,9 @@ public class Net { } //TODO:确认下参数 - public static void addUser2Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + public static void addMember2Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { String url = "http://" + ip + ":" + port + "/api/conferences/conference/add"; - String _params = "opr_nbr=" + task_uuid+"&opr_member="+members; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members; Object[] params = {callBack, orgs}; HttpUtl.doPostAsyn(url, _params, _callback, CMD_addUser2Group, params); } @@ -133,15 +139,51 @@ public class Net { //TODO:确认下参数 public static void kickMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; - String _params = "opr_nbr=" + task_uuid+"&opr_member="+members+"&opr_action=kick"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=kick"; Object[] params = {callBack, orgs}; HttpUtl.doPostAsyn(url, _params, _callback, CMD_kickMember4Group, params); } -// public static void updateGroup(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { -// String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; -// String _params = "opr_nbr=" + task_uuid+"&opr_member="+members; -// Object[] params = {callBack, orgs}; -// HttpUtl.doPostAsyn(url, _params, _callback, CMD_updateGroup, params); -// } + //mute:禁言、unmute:取消禁言、vmute:关闭视频、unvmute:恢复视频、kick:踢出、vidlayout:切换布局、vidfloor:切换到主画面 + public static void muteMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=mute"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_muteMember4Group, params); + } + + public static void unmuteMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=unmute"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_unmuteMember4Group, params); + } + + public static void vmuteMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=vmute"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_vmuteMember4Group, params); + } + + public static void unvmuteMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=unvmute"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_unvmuteMember4Group, params); + } + + public static void vidlayoutMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=vidlayout"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_vidlayoutMember4Group, params); + } + + public static void vidfloorMember4Group(String task_uuid, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/update"; + String _params = "opr_nbr=" + task_uuid + "&opr_member=" + members + "&opr_action=vidfloor"; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_vidfloorMember4Group, params); + } } diff --git a/app/src/main/res/drawable-hdpi/bg3.9.png b/app/src/main/res/drawable-hdpi/bg3.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fc4594092f60f33bf2fd12e29b635056efb3db GIT binary patch literal 5913 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 J7IN>&{{Vqj;oblM literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/incallactivity.xml b/app/src/main/res/layout/incallactivity.xml index e89ac76..b7118d6 100644 --- a/app/src/main/res/layout/incallactivity.xml +++ b/app/src/main/res/layout/incallactivity.xml @@ -77,7 +77,7 @@ diff --git a/app/src/main/res/layout/incallmeetingactivity.xml b/app/src/main/res/layout/incallmeetingactivity.xml index fa7a472..1a2f36a 100644 --- a/app/src/main/res/layout/incallmeetingactivity.xml +++ b/app/src/main/res/layout/incallmeetingactivity.xml @@ -13,6 +13,18 @@ android:layout_height="match_parent" android:background="#15516C" /> + + @@ -51,6 +63,7 @@ android:id="@+id/remote_video_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> + - - @@ -120,4 +122,16 @@ android:layout_weight="1" android:fitsSystemWindows="true" /> + + diff --git a/app/src/main/res/layout/list_item_user_meeting.xml b/app/src/main/res/layout/list_item_user_meeting.xml new file mode 100644 index 0000000..cc5bc72 --- /dev/null +++ b/app/src/main/res/layout/list_item_user_meeting.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file