From 8c5c97c549a61f2a4d3d0afe45551b8abdcbfdb0 Mon Sep 17 00:00:00 2001 From: chenbin Date: Fri, 11 Sep 2020 22:59:19 +0800 Subject: [PATCH] upgrade --- .../sipcall/call/CreateGroupActivity.java | 18 +- .../tianrun/sipcall/call/InCallActivity.java | 89 +++++++- .../sipcall/call/InCallMeetingActivity.java | 216 +++++++++++++++++- .../java/com/tianrun/sipcall/db/DBGroup.java | 36 +++ .../java/com/tianrun/sipcall/db/DBHead.java | 10 +- .../java/com/tianrun/sipcall/db/DBRoot.java | 4 + .../java/com/tianrun/sipcall/db/DBUser.java | 11 +- .../com/tianrun/sipcall/db/UserViews.java | 12 + .../tianrun/sipcall/login/LoginActivity.java | 1 + .../tianrun/sipcall/login/MainActivity.java | 139 +++++++++-- .../java/com/tianrun/sipcall/net/Net.java | 68 +++++- .../java/com/tianrun/sipcall/ui/UIUtl.java | 9 +- .../java/com/tianrun/sipcall/utils/CONS.java | 2 +- app/src/main/res/layout/incallactivity.xml | 14 ++ .../main/res/layout/incallmeetingactivity.xml | 28 ++- 15 files changed, 607 insertions(+), 50 deletions(-) create mode 100644 app/src/main/java/com/tianrun/sipcall/db/DBGroup.java create mode 100644 app/src/main/java/com/tianrun/sipcall/db/UserViews.java diff --git a/app/src/main/java/com/tianrun/sipcall/call/CreateGroupActivity.java b/app/src/main/java/com/tianrun/sipcall/call/CreateGroupActivity.java index 5858d74..c2d83a1 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/CreateGroupActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/CreateGroupActivity.java @@ -161,7 +161,7 @@ public class CreateGroupActivity extends TrBaseActivity { for (DBUser u : DBUser.allUser) { if (mapUsers.get(u.phone) == null) { listPhone.add(u.phone); - list.add(u.phone + "|" + u.name); + list.add(u.phone + " | " + u.name); } } if(list.size() == 0) { @@ -224,7 +224,21 @@ public class CreateGroupActivity extends TrBaseActivity { UIUtl.toastI("请添加要加入会议的分机号"); return; } - //TODO: + QMUITipDialog dialog = UIUtl.toastLoading(""); + Net.createGroup(meetingTopic.getText().toString(), "", getSelectedUsers(), new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + UIUtl.toastS("创建成功"); + dialog.dismiss(); + finish(); + Net.getGroups(null, null); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + dialog.dismiss(); + } + }, null); } public void exit(View view) { diff --git a/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java b/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java index 059fbfa..68fec1f 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java @@ -13,12 +13,24 @@ import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.view.View; import android.view.View.OnClickListener; +import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.tab.QMUITabBuilder; +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.net.Net; import com.tianrun.sipcall.ui.TrBaseActivity; import com.tianrun.sipcall.utils.CONS; import com.tianrun.sipcall.utils.logmy; @@ -31,7 +43,6 @@ import blue.view.SMSurfaceViewRenderer; public class InCallActivity extends TrBaseActivity implements OnClickListener { public static Handler handler_CallActivity; public static String TAG = "CallActivity"; - private Handler handler = new Handler(this); private PowerManager powerManager = null; private WakeLock wakeLock = null; private SMSurfaceViewRenderer localRender; @@ -40,7 +51,8 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { private SMPercentFrameLayout remoteRenderLayout; private ImageButton incall_answer, incall_hangup; private TextView show; -// private Button meetingbutton; + QMUITabSegment mTabSegment; + ViewPager mContentViewPager; private EngineServer engineServer; @@ -51,6 +63,42 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { private boolean VIDEOSTATE = false; public static Intent incallIntent; + public String[] screenTyps = {"经典模式", "均分模式", "远程全屏", "本地全屏"}; + + private PagerAdapter mPagerAdapter = new PagerAdapter() { + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public int getCount() { + return screenTyps.length; + } + + @Override + public Object instantiateItem(final ViewGroup container, int position) { +// ContentPage page = ContentPage.getPage(position); + View view = remoteRender; +// view.setTag(page); +// ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); +// container.addView(view, params); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + } + + @Override + public int getItemPosition(@NonNull Object object) { + View view = (View) object; + return 0; + } + }; + @SuppressLint("InvalidWakeLockTag") @Override protected void onCreate(Bundle savedInstanceState) { @@ -70,6 +118,7 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { initview(); incallIntent = getIntent(); setDate(this.getIntent()); + initTabAndPager(); } private void initview() { @@ -85,6 +134,42 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { remoteRenderLayout = (SMPercentFrameLayout) findViewById(R.id.remote_video_layout); engineServer = new EngineServer(localRender, remoteRender, localRenderLayout, remoteRenderLayout, true); + mTabSegment = findViewById(R.id.ScreenType); + mContentViewPager = findViewById(R.id.contentViewPager); + } + + private void initTabAndPager() { + mContentViewPager.setAdapter(mPagerAdapter); + mContentViewPager.setCurrentItem(0, false); + QMUITabBuilder tabBuilder = mTabSegment.tabBuilder(); + for (int i = 0; i < screenTyps.length; i++) { + mTabSegment.addTab(tabBuilder.setText(screenTyps[i]).build(this)); + } + int space = QMUIDisplayHelper.dp2px(this, 16); + mTabSegment.setIndicator(new QMUITabIndicator( + QMUIDisplayHelper.dp2px(this, 2), false, true)); + mTabSegment.setMode(QMUITabSegment.MODE_SCROLLABLE); + mTabSegment.setItemSpaceInScrollMode(space); + mTabSegment.setupWithViewPager(mContentViewPager, false); + mTabSegment.setPadding(space, 0, space, 0); + mTabSegment.addOnTabSelectedListener(new QMUITabSegment.OnTabSelectedListener() { + @Override + public void onTabSelected(int index) { + engineServer.adjustVideoView(index); + } + + @Override + public void onTabUnselected(int index) { + } + + @Override + public void onTabReselected(int index) { + } + + @Override + public void onDoubleTap(int index) { + } + }); } @Override 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 43c4f9e..1d1d887 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java @@ -6,6 +6,7 @@ import android.app.Activity; import android.app.KeyguardManager; import android.content.Context; import android.content.Intent; +import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -13,15 +14,41 @@ import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.view.View; import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.GridView; import android.widget.ImageButton; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +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.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.qmuiteam.qmui.widget.popup.QMUIQuickAction; +import com.qmuiteam.qmui.widget.tab.QMUITabBuilder; +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.DBUser; +import com.tianrun.sipcall.db.UserViews; +import com.tianrun.sipcall.net.Net; +import com.tianrun.sipcall.ui.TrAdapter; import com.tianrun.sipcall.ui.TrBaseActivity; +import com.tianrun.sipcall.ui.UIUtl; import com.tianrun.sipcall.utils.CONS; +import com.tianrun.sipcall.utils.HttpUtl; import com.tianrun.sipcall.utils.logmy; +import java.util.ArrayList; +import java.util.List; + import blue.view.EngineServer; import blue.view.SMPercentFrameLayout; import blue.view.SMSurfaceViewRenderer; @@ -30,7 +57,6 @@ import blue.view.SMSurfaceViewRenderer; public class InCallMeetingActivity extends TrBaseActivity implements OnClickListener { public static Handler handler_CallActivity; public static String TAG = "CallMeetingActivity"; - private Handler handler = new Handler(this); private PowerManager powerManager = null; private WakeLock wakeLock = null; private SMSurfaceViewRenderer localRender; @@ -39,6 +65,9 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList private SMPercentFrameLayout remoteRenderLayout; private ImageButton incall_answer, incall_hangup; private TextView show; + GridView gridUser; + QMUITabSegment mTabSegment; + ViewPager mContentViewPager; private EngineServer engineServer; @@ -48,6 +77,45 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList private int calltype = 0; //0音频1视频 private boolean VIDEOSTATE = false; public static Intent incallIntent; + TrAdapter adapterUser; + + List allUsers = new ArrayList<>(); + + public String[] screenTyps = {"经典模式", "均分模式", "远程全屏", "本地全屏"}; + + private PagerAdapter mPagerAdapter = new PagerAdapter() { + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public int getCount() { + return screenTyps.length; + } + + @Override + public Object instantiateItem(final ViewGroup container, int position) { +// ContentPage page = ContentPage.getPage(position); + View view = remoteRender; +// view.setTag(page); +// ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); +// container.addView(view, params); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + } + + @Override + public int getItemPosition(@NonNull Object object) { + View view = (View) object; + return 0; + } + }; @SuppressLint("InvalidWakeLockTag") @Override @@ -68,9 +136,16 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList initview(); incallIntent = getIntent(); setDate(this.getIntent()); + + allUsers.clear(); + setUsers(); + getMembers(); + initTabAndPager(); } private void initview() { + View view = findViewById(R.id.IncallMeetingRoot); + gridUser = view.findViewById(R.id.GridUser); show = (TextView) findViewById(R.id.show); incall_answer = (ImageButton) findViewById(R.id.incall_answer); incall_hangup = (ImageButton) findViewById(R.id.incall_hangup); @@ -83,6 +158,142 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList remoteRenderLayout = (SMPercentFrameLayout) findViewById(R.id.remote_video_layout); engineServer = new EngineServer(localRender, remoteRender, localRenderLayout, remoteRenderLayout, true); + mTabSegment = findViewById(R.id.ScreenType); + mContentViewPager = findViewById(R.id.contentViewPager); + } + + private void initTabAndPager() { + mContentViewPager.setAdapter(mPagerAdapter); + mContentViewPager.setCurrentItem(0, false); + QMUITabBuilder tabBuilder = mTabSegment.tabBuilder(); + for (int i = 0; i < screenTyps.length; i++) { + mTabSegment.addTab(tabBuilder.setText(screenTyps[i]).build(this)); + } + int space = QMUIDisplayHelper.dp2px(this, 16); + mTabSegment.setIndicator(new QMUITabIndicator( + QMUIDisplayHelper.dp2px(this, 2), false, true)); + mTabSegment.setMode(QMUITabSegment.MODE_SCROLLABLE); + mTabSegment.setItemSpaceInScrollMode(space); + mTabSegment.setupWithViewPager(mContentViewPager, false); + mTabSegment.setPadding(space, 0, space, 0); + mTabSegment.addOnTabSelectedListener(new QMUITabSegment.OnTabSelectedListener() { + @Override + public void onTabSelected(int index) { + engineServer.adjustVideoView(index); + } + + @Override + public void onTabUnselected(int index) { + } + + @Override + public void onTabReselected(int index) { + } + + @Override + public void onDoubleTap(int index) { + } + }); + } + public void getMembers() + { + Net.getGroupMenbers(callnumber, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + JSONObject jo = JSONObject.parseObject(result); + JSONArray array = jo.getJSONArray("members_msg"); + allUsers.clear(); + for(Object o:array) { + allUsers.add(new DBUser((JSONObject)o)); + } + setUsers(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + + } + }, null); + } + + public void setUsers() { + if (adapterUser == null) { + adapterUser = UIUtl.setList(this, gridUser, R.layout.list_item_user, allUsers, new TrAdapter.Callback() { + @Override + public void initCallback(Object data, int position, View prefabView, ViewGroup parent) { + UserViews views = null; + if (prefabView.getTag() == null) { + views = new UserViews(); + 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); + prefabView.setTag(views); + } else { + views = (UserViews) (prefabView.getTag()); + } + DBUser d = (DBUser) data; + views.textViewName.setText(d.name); + views.textViewNum.setText(d.phone); + if (d.isOffline()) { + views.imageViewStatus.setColorFilter(Color.GRAY); + } else if (d.isOnline()) { + views.imageViewStatus.setColorFilter(Color.GREEN); + } else if (d.isBusy()) { + views.imageViewStatus.setColorFilter(Color.RED); + } else { + views.imageViewStatus.setColorFilter(Color.GRAY); + } + if (d.isAddFlag) { + views.imageViewPhoneIcon.setVisibility(View.INVISIBLE); + views.imageViewAddflag.setVisibility(View.VISIBLE); + } else { + views.imageViewPhoneIcon.setVisibility(View.VISIBLE); + views.imageViewAddflag.setVisibility(View.INVISIBLE); + } + } + + @Override + public void clickCallback(Object data, AdapterView parent, View view, int position, long id) { + DBUser d = (DBUser) data; + QMUIQuickAction qa = QMUIPopups.quickAction(InCallMeetingActivity.this, + QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 56), + QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 56)) + .shadow(true) + .dimAmount(0.5f) + .skinManager(QMUISkinManager.defaultInstance(InCallMeetingActivity.this)) + .edgeProtection(QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 20)); + if (DBUser.mySelf.isManager) { + 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(); + QMUITipDialog dialog = UIUtl.toastLoading(""); + Net.kickMember4Group(callnumber, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + UIUtl.toastS("移除分机成功"); + getMembers(); + dialog.dismiss(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + dialog.dismiss(); + } + }, null); + } + } + )); + } + qa.show(view); + } + }); + } else { + adapterUser.notifyDataSetChanged(); + } } @Override @@ -181,6 +392,9 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList stopVideoStream(true); finish(); break; + case Net + .CMD_getGroupMenbers: + break; } return true; } diff --git a/app/src/main/java/com/tianrun/sipcall/db/DBGroup.java b/app/src/main/java/com/tianrun/sipcall/db/DBGroup.java new file mode 100644 index 0000000..02270b4 --- /dev/null +++ b/app/src/main/java/com/tianrun/sipcall/db/DBGroup.java @@ -0,0 +1,36 @@ +package com.tianrun.sipcall.db; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class DBGroup { + public DBHead head; + public List users = new ArrayList<>(); + + public boolean containsUser(String phone) { + for (DBUser u : users) { + if (u.phone.equals(phone)) return true; + } + return false; + } + + public static HashMap mapGroups = new HashMap<>(); + + public static void onGetGroupMembers(JSONObject content) { + DBGroup group = new DBGroup(); + group.head = new DBHead(content); + JSONArray array = content.getJSONArray("members_msg"); + for (Object o : array) { + group.users.add(new DBUser((JSONObject) o)); + } + mapGroups.put(group.head.id, group); + } + + public static DBGroup getGroup(String uuid) { + return mapGroups.get(uuid); + } +} diff --git a/app/src/main/java/com/tianrun/sipcall/db/DBHead.java b/app/src/main/java/com/tianrun/sipcall/db/DBHead.java index 20329a7..4f51234 100644 --- a/app/src/main/java/com/tianrun/sipcall/db/DBHead.java +++ b/app/src/main/java/com/tianrun/sipcall/db/DBHead.java @@ -15,7 +15,7 @@ public class DBHead { public String id; public boolean isSelected = false; - public static List allGroups = new ArrayList<>(); + public static List allHeads = new ArrayList<>(); public DBHead(String id, String name) { this.id = id; @@ -42,14 +42,14 @@ public class DBHead { } public static void onGetGroups(JSONArray list) { - allGroups.clear(); + allHeads.clear(); for (Object o : list) { - allGroups.add(new DBHead((JSONObject) o)); + allHeads.add(new DBHead((JSONObject) o)); } } public static DBHead getByUUID(String uuid) { - for (DBHead d : allGroups) { + for (DBHead d : allHeads) { if (d.id.equals(uuid)){ return d; } @@ -58,7 +58,7 @@ public class DBHead { } public static DBHead getByCode(String code) { - for (DBHead d : allGroups) { + for (DBHead d : allHeads) { if (d.audio_code.equals(code) || d.video_code.equals(code)) { return d; } diff --git a/app/src/main/java/com/tianrun/sipcall/db/DBRoot.java b/app/src/main/java/com/tianrun/sipcall/db/DBRoot.java index 95abc5e..8aaaacf 100644 --- a/app/src/main/java/com/tianrun/sipcall/db/DBRoot.java +++ b/app/src/main/java/com/tianrun/sipcall/db/DBRoot.java @@ -16,6 +16,10 @@ public class DBRoot { JSONArray list = JSONArray.parseArray(content); DBHead.onGetGroups(list); break; + case Net.CMD_getGroupMenbers: + JSONObject o = JSONObject.parseObject(content); + DBGroup.onGetGroupMembers(o); + break; default: break; } 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 6868818..a7a280a 100644 --- a/app/src/main/java/com/tianrun/sipcall/db/DBUser.java +++ b/app/src/main/java/com/tianrun/sipcall/db/DBUser.java @@ -1,7 +1,11 @@ package com.tianrun.sipcall.db; +import android.widget.ImageView; +import android.widget.TextView; + import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.FloatCodec; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +31,12 @@ public class DBUser { this.name = d.getString("name"); this.phone = d.getString("extn"); this.status = d.getString("sip_state"); - this.isManager = d.getString("weight").equals("1"); + String weight = d.getString("weight"); + if(weight != null) { + this.isManager = weight.equals("1"); + } else { + this.isManager = false; + } } public boolean isBusy() { diff --git a/app/src/main/java/com/tianrun/sipcall/db/UserViews.java b/app/src/main/java/com/tianrun/sipcall/db/UserViews.java new file mode 100644 index 0000000..98cb1c8 --- /dev/null +++ b/app/src/main/java/com/tianrun/sipcall/db/UserViews.java @@ -0,0 +1,12 @@ +package com.tianrun.sipcall.db; + +import android.widget.ImageView; +import android.widget.TextView; + +public class UserViews { + public TextView textViewName; + public TextView textViewNum; + public ImageView imageViewStatus; + public ImageView imageViewPhoneIcon; + public ImageView imageViewAddflag; +} \ No newline at end of file diff --git a/app/src/main/java/com/tianrun/sipcall/login/LoginActivity.java b/app/src/main/java/com/tianrun/sipcall/login/LoginActivity.java index 56d488f..60986b7 100644 --- a/app/src/main/java/com/tianrun/sipcall/login/LoginActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/login/LoginActivity.java @@ -195,6 +195,7 @@ public class LoginActivity extends TrBaseActivity { if(dialogLoading != null) { dialogLoading.dismiss(); } + break; case CONS.LOGIN: if(dialogLoading != null) { dialogLoading.dismiss(); 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 59f9e74..9273021 100644 --- a/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/login/MainActivity.java @@ -1,6 +1,7 @@ package com.tianrun.sipcall.login; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.media.AudioManager; @@ -39,11 +40,12 @@ import com.tianrun.sipcall.SipEngine; import com.tianrun.sipcall.call.CallActivity; import com.tianrun.sipcall.call.CreateGroupActivity; import com.tianrun.sipcall.call.CreateMeetingActivity; +import com.tianrun.sipcall.db.DBGroup; import com.tianrun.sipcall.db.DBHead; import com.tianrun.sipcall.db.DBUser; +import com.tianrun.sipcall.db.UserViews; import com.tianrun.sipcall.net.Net; import com.tianrun.sipcall.net.NetPkg; -import com.tianrun.sipcall.ui.ActivityMgr; import com.tianrun.sipcall.ui.TrAdapter; import com.tianrun.sipcall.ui.TrBaseActivity; import com.tianrun.sipcall.ui.UIUtl; @@ -193,7 +195,7 @@ public class MainActivity extends TrBaseActivity { DBHead h = headers.get(0); headers.clear(); headers.add(h); - headers.addAll(DBHead.allGroups); + headers.addAll(DBHead.allHeads); mPagerAdapter.notifyDataSetChanged(); mTabSegment.reset(); @@ -238,10 +240,20 @@ public class MainActivity extends TrBaseActivity { //显示分机 allUsers.clear(); - if(currSelectData.isAll()) { + if (currSelectData.isAll()) { allUsers.addAll(DBUser.allUser); setUsers(); } else { + DBGroup group = DBGroup.getGroup(currSelectData.id); + if (group != null) { + allUsers.addAll(group.users); + } + //根据权限来处理 + if (DBUser.mySelf.isManager) { + DBUser u = new DBUser("", "添加分机", "false"); + u.isAddFlag = true; + allUsers.add(u); + } setUsers(); //取得数据 Net.getGroupMenbers(currSelectData.id, null, currSelectData.id); @@ -264,7 +276,7 @@ public class MainActivity extends TrBaseActivity { public void refreshView() { -//通话音量 + //通话音量 int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); int current = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL); textVolum.setText("音量:" + current); @@ -314,14 +326,6 @@ public class MainActivity extends TrBaseActivity { handler.postDelayed(runGetUsers, 3000); } - public class UserViews { - public TextView textViewName; - public TextView textViewNum; - public ImageView imageViewStatus; - public ImageView imageViewPhoneIcon; - public ImageView imageViewAddflag; - } - public void setUsers() { if (DBUser.allUser == null) return; if (adapterUser == null) { @@ -365,7 +369,7 @@ public class MainActivity extends TrBaseActivity { public void clickCallback(Object data, AdapterView parent, View view, int position, long id) { DBUser d = (DBUser) data; if (d.isAddFlag) { - //TODO: + showUsersMultiChoiceDialog(); return; } QMUIQuickAction qa = QMUIPopups.quickAction(MainActivity.this, @@ -399,7 +403,21 @@ public class MainActivity extends TrBaseActivity { @Override public void onClick(QMUIQuickAction quickAction, QMUIQuickAction.Action action, int position) { quickAction.dismiss(); - //TODO:移除分机 + QMUITipDialog dialog = UIUtl.toastLoading(""); + Net.kickMember4Group(currSelectData.id, d.phone, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + UIUtl.toastS("移除分机成功"); + //取得数据 + Net.getGroupMenbers(currSelectData.id, null, currSelectData.id); + dialog.dismiss(); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + dialog.dismiss(); + } + }, null); } } )); @@ -412,9 +430,74 @@ public class MainActivity extends TrBaseActivity { } } -// public void refreshHeadList() { -// adapter.notifyDataSetChanged(); -// } + private void showUsersMultiChoiceDialog() { + List list = new ArrayList<>(); + List listPhone = new ArrayList<>(); + DBGroup group = DBGroup.getGroup(currSelectData.id); + if (group == null) { + return; + } + for (DBUser u : DBUser.allUser) { + if (!group.containsUser(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.addUser2Group(currSelectData.id, members, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + Net.getGroupMenbers(currSelectData.id, null, currSelectData.id); + } + + @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(); + } public void call(View view) { startActivity(new Intent(MainActivity.this, CallActivity.class)); @@ -460,10 +543,12 @@ public class MainActivity extends TrBaseActivity { } break; case Net.CMD_getGroupMenbers: - NetPkg pkg = (NetPkg)(m.obj); - String oldUUID = pkg.orgs.toString(); + NetPkg pkg = (NetPkg) (m.obj); + String oldUUID = pkg.orgs != null ? pkg.orgs.toString() : ""; if (!currSelectData.isAll() && oldUUID.equals(currSelectData.id)) { - //TODO:解析数据 + DBGroup group = DBGroup.getGroup(currSelectData.id); + allUsers.clear(); + allUsers.addAll(group.users); //根据权限来处理 if (DBUser.mySelf.isManager) { DBUser u = new DBUser("", "添加分机", "false"); @@ -554,8 +639,20 @@ public class MainActivity extends TrBaseActivity { .addAction(0, "删除", QMUIDialogAction.ACTION_PROP_NEGATIVE, new QMUIDialogAction.ActionListener() { @Override public void onClick(QMUIDialog dialog, int index) { - //TODO: + Net.deleteGroup(currSelectData.id, new HttpUtl.CallBack() { + @Override + public void onRequestComplete(int cmd, String result, Object orgs) { + UIUtl.toastS("分组删除成功"); + Net.getGroups(null, null); + } + + @Override + public void onRequestError(int cmd, String result, Object orgs) { + + } + }, null); dialog.dismiss(); + } }) .create(mCurrentDialogStyle).show(); 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 4e1bdb3..7ef9a70 100644 --- a/app/src/main/java/com/tianrun/sipcall/net/Net.java +++ b/app/src/main/java/com/tianrun/sipcall/net/Net.java @@ -5,6 +5,7 @@ import android.util.Log; import com.alibaba.fastjson.JSONObject; import com.tianrun.sipcall.App; import com.tianrun.sipcall.db.DBRoot; +import com.tianrun.sipcall.db.DBUser; import com.tianrun.sipcall.ui.ActivityMgr; import com.tianrun.sipcall.ui.UIUtl; import com.tianrun.sipcall.utils.HttpUtl; @@ -21,16 +22,20 @@ public class Net { public static final int CMD_getUserInfor = 7003; public static final int CMD_getGroups = 7004; public static final int CMD_getGroupMenbers = 7005; + public static final int CMD_createGroup = 7006; + public static final int CMD_deleteGroup = 7007; + public static final int CMD_addUser2Group = 7008; + public static final int CMD_kickMember4Group = 7009; static HttpUtl.CallBack _callback = new HttpUtl.CallBack() { @Override public void onRequestComplete(int cmd, String result, Object params) { Log.i(TAG, "onRequestComplete: " + result); DBRoot.onGetData(cmd, result); - Object[] _params = (Object[])params; - HttpUtl.CallBack callback = (HttpUtl.CallBack)(_params[0]); + Object[] _params = (Object[]) params; + HttpUtl.CallBack callback = (HttpUtl.CallBack) (_params[0]); Object orgs = _params[1]; - if(ActivityMgr.topActivity != null && callback != null) { + if (ActivityMgr.topActivity != null && callback != null) { ActivityMgr.topActivity.handler.post(new Runnable() { @Override public void run() { @@ -45,10 +50,20 @@ public class Net { } @Override - public void onRequestError(int cmd, String result, Object orgs) { + public void onRequestError(int cmd, String result, Object params) { Log.e(TAG, "onRequestError: " + result); - if (orgs != null) { - ((HttpUtl.CallBack) orgs).onRequestError(cmd, result, orgs); + Object[] _params = (Object[]) params; + HttpUtl.CallBack callback = (HttpUtl.CallBack) (_params[0]); + Object orgs = _params[1]; + if (ActivityMgr.topActivity != null && callback != null) { + ActivityMgr.topActivity.handler.post(new Runnable() { + @Override + public void run() { + if (callback != null) { + callback.onRequestError(cmd, result, orgs); + } + } + }); } UIUtl.toastI(result); } @@ -76,11 +91,18 @@ public class Net { public static void createMeeting(String topic, String description, String members, HttpUtl.CallBack callBack, Object orgs) { String url = "http://" + ip + ":" + port + "/api/conferences/conference/insert"; - String _params = "topic=" + topic + "&description=" + description + "&members=" + members; + String _params = "topic=" + topic + "&description=" + description + "&members=" + members + "&typ=prompt" + "&start_member=" + DBUser.mySelf.phone; Object[] params = {callBack, orgs}; HttpUtl.doPostAsyn(url, _params, _callback, CMD_createMeeting, params); } + public static void createGroup(String topic, String description, String members, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/insert"; + String _params = "topic=" + topic + "&description=" + description + "&members=" + members; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_createGroup, params); + } + public static void getGroups(HttpUtl.CallBack callBack, Object orgs) { String url = "http://" + ip + ":" + port + "/api/conferences/conference/list"; Object[] params = {callBack, orgs}; @@ -88,8 +110,38 @@ public class Net { } public static void getGroupMenbers(String task_uuid, HttpUtl.CallBack callBack, Object orgs) { - String url = "http://" + ip + ":" + port + "/api/conferences/conference/"+task_uuid; + String url = "http://" + ip + ":" + port + "/api/conferences/conference/" + task_uuid; Object[] params = {callBack, orgs}; HttpUtl.doGetAsyn(url, _callback, CMD_getGroupMenbers, params); } + + public static void deleteGroup(String task_uuid, HttpUtl.CallBack callBack, Object orgs) { + String url = "http://" + ip + ":" + port + "/api/conferences/conference/delete"; + String _params = "task_uuid=" + task_uuid; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_deleteGroup, params); + } + + //TODO:确认下参数 + public static void addUser2Group(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; + Object[] params = {callBack, orgs}; + HttpUtl.doPostAsyn(url, _params, _callback, CMD_addUser2Group, params); + } + + //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"; + 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); +// } } diff --git a/app/src/main/java/com/tianrun/sipcall/ui/UIUtl.java b/app/src/main/java/com/tianrun/sipcall/ui/UIUtl.java index 514db91..8cceb90 100644 --- a/app/src/main/java/com/tianrun/sipcall/ui/UIUtl.java +++ b/app/src/main/java/com/tianrun/sipcall/ui/UIUtl.java @@ -142,9 +142,12 @@ public class UIUtl { List items, boolean allowDragDismiss, boolean withMark, QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener onClick) { - QMUIBottomSheet.BottomListSheetBuilder builder = new QMUIBottomSheet.BottomListSheetBuilder(App.getContext()); + if(ActivityMgr.topActivity == null) { + return; + } + QMUIBottomSheet.BottomListSheetBuilder builder = new QMUIBottomSheet.BottomListSheetBuilder(ActivityMgr.topActivity); builder.setGravityCenter(gravityCenter) - .setSkinManager(QMUISkinManager.defaultInstance(App.getContext())) + .setSkinManager(QMUISkinManager.defaultInstance(ActivityMgr.topActivity)) .setTitle(title) .setAddCancelBtn(addCancelBtn) .setAllowDrag(allowDragDismiss) @@ -160,7 +163,7 @@ public class UIUtl { if (withMark) { builder.setCheckedIndex(40); } - for (int i = 1; i <= items.size(); i++) { + for (int i = 0; i < items.size(); i++) { builder.addItem(items.get(i)); } builder.build().show(); diff --git a/app/src/main/java/com/tianrun/sipcall/utils/CONS.java b/app/src/main/java/com/tianrun/sipcall/utils/CONS.java index 1e8dfab..a0e4689 100644 --- a/app/src/main/java/com/tianrun/sipcall/utils/CONS.java +++ b/app/src/main/java/com/tianrun/sipcall/utils/CONS.java @@ -32,7 +32,7 @@ public class CONS { public static final int SETTEXT = 207; public static final int INCOMINGMESSAGE = 208;//来短信了 public static final int showpic = 209; - public static final int LOGINFAILED = 230; + public static final int LOGINFAILED = 210; public static void SENDMESSAGETO(Handler handler, int menu, Object object) { if (handler != null) { diff --git a/app/src/main/res/layout/incallactivity.xml b/app/src/main/res/layout/incallactivity.xml index 1dcab33..e89ac76 100644 --- a/app/src/main/res/layout/incallactivity.xml +++ b/app/src/main/res/layout/incallactivity.xml @@ -74,4 +74,18 @@ android:textColor="#FFFFFF" android:textSize="20sp" /> + + + + + diff --git a/app/src/main/res/layout/incallmeetingactivity.xml b/app/src/main/res/layout/incallmeetingactivity.xml index 9828d1d..fa7a472 100644 --- a/app/src/main/res/layout/incallmeetingactivity.xml +++ b/app/src/main/res/layout/incallmeetingactivity.xml @@ -2,19 +2,20 @@ + android:layout_height="fill_parent" + android:background="@drawable/callbackground"> + + + +