瀏覽代碼

增加呼叫手柄分机并和对应门口机通话功能

weizhengliang 1 年之前
父節點
當前提交
0ec9edbd95
共有 14 個文件被更改,包括 199 次插入129 次删除
  1. 3 21
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt
  2. 38 7
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchContactsActivity.kt
  3. 23 0
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java
  4. 3 12
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/RoomItemAdapter.kt
  5. 1 20
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt
  6. 1 20
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt
  7. 32 32
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt
  8. 10 0
      android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java
  9. 34 3
      android_mobile/src/main/yd_w_xiaomi_2_chile/res/layout/user_setting_layout.xml
  10. 50 14
      middleware/src/main/code/com/wdkl/ncs/android/middleware/model/vo/WatchContactsVO.java
  11. 1 0
      resource/src/main/res/values-es/strings.xml
  12. 1 0
      resource/src/main/res/values-ru/strings.xml
  13. 1 0
      resource/src/main/res/values-zh/strings.xml
  14. 1 0
      resource/src/main/res/values/strings.xml

+ 3 - 21
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.component.home.activity
 import android.content.Intent
 import android.net.Uri
 import android.os.CountDownTimer
+import android.text.TextUtils
 import android.util.Log
 import android.view.View
 import com.alibaba.android.vlayout.DelegateAdapter
@@ -142,33 +143,14 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
 
                     if (Constants.bedPhoneType == CommunicationEnum.MOBILE_PHONE.value()) {
                         try {
-                            if (receivedData!!.phoneNumber != null) {
+                            if (!TextUtils.isEmpty(receivedData!!.phoneNumber)) {
                                 val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + receivedData!!.phoneNumber))
                                 startActivity(intent)
 
                                 if (!Constants.uploadCalllog) {
                                     //发送tcp
                                     val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, receivedData!!.deviceId)
-                                    val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
-                                        override fun onSuccess(jsonObject: JSONObject) {
-                                            //
-                                        }
-
-                                        override fun onFailed(jsonObject: JSONObject) {
-                                            // 这里写发送失败的方法
-                                        }
-                                    }
-                                    TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
-
-                                    /*NettyClient.instance.sendMsg(tcpModel.toJson())
-                                        .subscribe { res: Boolean ->
-                                            if (res) {
-                                                Log.d(TAG, "TCP.发送消息完成")
-                                            } else {
-                                                Log.e(TAG, "TCP.发送消息失败")
-                                                HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                            }
-                                        }*/
+                                    TcpClient.getInstance().sendTcp(tcpModel, false, null)
                                 }
                             } else {
                                 showMessage(R.string.call_phone_failed)

+ 38 - 7
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchContactsActivity.kt

@@ -5,6 +5,7 @@ import android.util.Log
 import android.view.View
 import com.alibaba.android.vlayout.DelegateAdapter
 import com.alibaba.android.vlayout.VirtualLayoutManager
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.android.jrouter.external.annotation.Router
 import com.enation.javashop.net.engine.model.NetState
 import com.scwang.smartrefresh.layout.footer.ClassicsFooter
@@ -13,6 +14,7 @@ import com.wdkl.ncs.android.component.home.adapter.RoomItemAdapter
 import com.wdkl.ncs.android.component.home.adapter.WatchContactsItemAdapter
 import com.wdkl.ncs.android.component.home.databinding.WatchContactsLayBinding
 import com.wdkl.ncs.android.component.home.launch.HomeLaunch
+import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchActivityContract
@@ -20,6 +22,9 @@ import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchActivityPresent
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactsVO
 import com.wdkl.ncs.android.lib.vo.MessageEvent
 import com.wdkl.ncs.android.middleware.model.vo.DeviceVO
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
@@ -35,9 +40,9 @@ class WatchContactsActivity : BaseActivity<WatchActivityPresenter, WatchContacts
     private val adapter = WatchContactsItemAdapter(ArrayList(),this)
     private val roomAdapter = RoomItemAdapter(ArrayList(), this)
     private var checkId = 0
+    private var roomDevices: ArrayList<DeviceVO>? = null
 
     private lateinit var virtualLayoutManager: VirtualLayoutManager
-
     private lateinit var delegateAdapter: DelegateAdapter
 
 
@@ -103,15 +108,15 @@ class WatchContactsActivity : BaseActivity<WatchActivityPresenter, WatchContacts
     }
 
     private fun loadData() {
+        //加载门口机设备列表
+        if (Constants.partId != -1) {
+            presenter.loadDeviceVos(DeviceTypeEnum.DOOR_DEVICE.value(), Constants.partId)
+        }
+
         if (checkId == R.id.rb_tab_room) {
             //房间列表
             watch_contacts_list.visibility = View.GONE
             room_list.visibility = View.VISIBLE
-            if (Constants.partId != -1) {
-                presenter.loadDeviceVos(DeviceTypeEnum.DOOR_DEVICE.value(), Constants.partId)
-            } else {
-                showMessage("partId null!")
-            }
         } else {
             //床位列表
             watch_contacts_list.visibility = View.VISIBLE
@@ -158,9 +163,34 @@ class WatchContactsActivity : BaseActivity<WatchActivityPresenter, WatchContacts
             intent.putExtra("action", "CUSTOMER_RECORDS")
             intent.putExtra("customer_id", ""+customerId)
             startActivity(intent)
-
         }
 
+        adapter.setCallClick(object :WatchContactsItemAdapter.CallClick{
+            override fun onCallClick(contact: WatchContactsVO) {
+                //查询需要呼叫的分机设备的上级设备即门口机,然后发起呼叫
+                if (roomDevices != null) {
+                    for (device in roomDevices!!) {
+                        if (device.frameId == contact.frameParentId) {
+                            //发起呼叫
+                            val tcpModel = VoiceUtil.voiceCall(Constants.deviceId, device.id)
+                            val intent = Intent(activity, CallSingleActivity::class.java)
+                            intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
+                            intent.putExtra(CallSingleActivity.EXTRA_MO, true)
+                            intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
+                            intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel)
+                            intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, "")
+                            //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            startActivity(intent)
+
+                            break
+                        }
+                    }
+                } else {
+                    showMessage("没有设备")
+                }
+            }
+        })
+
         group_bed_room.setOnCheckedChangeListener { group, checkedId ->
             checkId = checkedId
             loadData()
@@ -196,6 +226,7 @@ class WatchContactsActivity : BaseActivity<WatchActivityPresenter, WatchContacts
         refresh.finishRefresh()
         refresh.finishLoadMore()
 
+        roomDevices = devices
         if (devices.size > 0) {
             roomAdapter.data.clear()
             roomAdapter.data.addAll(devices)

+ 23 - 0
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java

@@ -51,6 +51,8 @@ public class WatchUserSettingActivity extends Activity {
     private RadioButton imChannelYes, imChannelNo;
     private RadioGroup callTransGroup;
     private RadioButton transferOn, transferOff;
+    private RadioGroup callExDoorway;
+    private RadioButton callExOn, callExOff;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -86,6 +88,10 @@ public class WatchUserSettingActivity extends Activity {
         transferOn = findViewById(R.id.rb_call_transfer_on);
         transferOff = findViewById(R.id.rb_call_transfer_off);
 
+        callExDoorway = findViewById(R.id.group_call_ex_doorway);
+        callExOn = findViewById(R.id.rb_call_ex_doorway_on);
+        callExOff = findViewById(R.id.rb_call_ex_doorway_off);
+
         tvAppVersion.setText(CommonUtils.getAppVersionName(BaseApplication.appContext) + "_" + BuildConfig.BUILD_TIME);
         tvDeviceId.setText("" + Constants.Companion.getDeviceId());
         tvDeviceImei.setText(Constants.Companion.getImei());
@@ -112,6 +118,12 @@ public class WatchUserSettingActivity extends Activity {
             transferOff.setChecked(true);
         }
 
+        if (SettingConfig.getCallExDoorway(BaseApplication.appContext)) {
+            callExOn.setChecked(true);
+        } else {
+            callExOff.setChecked(true);
+        }
+
         int mode = SettingConfig.getLanguageMode(BaseApplication.appContext);
         RadioGroup languageMode = findViewById(R.id.group_language_mode);
         RadioButton languageYes = findViewById(R.id.rb_language_yes);
@@ -255,6 +267,17 @@ public class WatchUserSettingActivity extends Activity {
             }
         });
 
+        callExDoorway.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup group, int checkedId) {
+                if (checkedId == R.id.rb_call_ex_doorway_on) {
+                    SettingConfig.setCallExDoorway(BaseApplication.appContext, true);
+                } else {
+                    SettingConfig.setCallExDoorway(BaseApplication.appContext, false);
+                }
+            }
+        });
+
 
         Button update = findViewById(R.id.btn_update_contact);
         update.setOnClickListener(new View.OnClickListener() {

+ 3 - 12
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/RoomItemAdapter.kt

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.component.home.adapter
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
+import android.text.TextUtils
 import android.util.Log
 import android.view.ViewGroup
 import com.alibaba.android.vlayout.LayoutHelper
@@ -62,24 +63,14 @@ class RoomItemAdapter(val data:ArrayList<DeviceVO>, val context: Context) : Base
             binding.btnCallOut.setOnClickListener{
                 if (Constants.bedPhoneType == CommunicationEnum.MOBILE_PHONE.value()) {
                     try {
-                        if (itemData.phoneNumber != null) {
+                        if (!TextUtils.isEmpty(itemData.phoneNumber)) {
                             val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + itemData.phoneNumber))
                             context.startActivity(intent)
 
                             if (!Constants.uploadCalllog) {
                                 //发送tcp
                                 val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.id)
-                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
-                                    override fun onSuccess(jsonObject: JSONObject) {
-                                        //
-                                    }
-
-                                    override fun onFailed(jsonObject: JSONObject) {
-                                        // 这里写发送失败的方法
-                                    }
-                                }
-                                TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
-
+                                TcpClient.getInstance().sendTcp(tcpModel, false, null)
                             }
                         } else {
                             showMessage(R.string.call_phone_failed)

+ 1 - 20
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt

@@ -135,26 +135,7 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val activity: Activity
                             if (!Constants.uploadCalllog) {
                                 //发送tcp
                                 val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.get("id").asInt)
-                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
-                                    override fun onSuccess(jsonObject: JSONObject) {
-                                        //
-                                    }
-
-                                    override fun onFailed(jsonObject: JSONObject) {
-                                        // 这里写发送失败的方法
-                                    }
-                                }
-                                TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
-
-                                /*NettyClient.instance.sendMsg(tcpModel.toJson())
-                                    .subscribe { res: Boolean ->
-                                        if (res) {
-                                            Log.d(TAG, "TCP.发送消息完成")
-                                        } else {
-                                            Log.e(TAG, "TCP.发送消息失败")
-                                            HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                        }
-                                    }*/
+                                TcpClient.getInstance().sendTcp(tcpModel, false, null)
                             }
                         } catch (e: Exception) {
                             showMessage(R.string.call_phone_failed)

+ 1 - 20
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt

@@ -127,26 +127,7 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                         if (!Constants.uploadCalllog) {
                             //发送tcp
                             val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.id)
-                            val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
-                                override fun onSuccess(jsonObject: JSONObject) {
-                                    //
-                                }
-
-                                override fun onFailed(jsonObject: JSONObject) {
-                                    // 这里写发送失败的方法
-                                }
-                            }
-                            TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
-
-                            /*NettyClient.instance.sendMsg(tcpModel.toJson())
-                                .subscribe { res: Boolean ->
-                                    if (res) {
-                                        Log.d(TAG, "TCP.发送消息完成")
-                                    } else {
-                                        Log.e(TAG, "TCP.发送消息失败")
-                                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                    }
-                                }*/
+                            TcpClient.getInstance().sendTcp(tcpModel, false, null)
                         }
                     } catch (e: Exception) {
                         showMessage(R.string.call_phone_failed)

+ 32 - 32
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.component.home.adapter
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
+import android.text.TextUtils
 import android.util.Log
 import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
@@ -14,6 +15,7 @@ import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.activity.VoiceMsgActivity
 import com.wdkl.ncs.android.component.home.databinding.AdapterWatchContactsItemBinding
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
@@ -34,6 +36,8 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
     private var thisPosition: Int = -1
     private lateinit var loadingDialog: LoadingDialog
 
+    private var callClick: CallClick? = null
+
     override fun dataProvider(): Any {
         return data
     }
@@ -76,36 +80,17 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
                 context.startActivity(intent)
             }
 
-            binding.awciBtnCallOut.setOnClickListener{
+            binding.awciBtnCallOut.setOnClickListener {
                 if (Constants.bedPhoneType == CommunicationEnum.MOBILE_PHONE.value()) {
                     try {
-                        if (itemData.phoneNumber != null) {
+                        if (!TextUtils.isEmpty(itemData.phoneNumber)) {
                             val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + itemData.phoneNumber))
                             context.startActivity(intent)
 
                             if (!Constants.uploadCalllog) {
                                 //发送tcp
                                 val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.deviceId)
-                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
-                                    override fun onSuccess(jsonObject: JSONObject) {
-                                        //
-                                    }
-
-                                    override fun onFailed(jsonObject: JSONObject) {
-                                        // 这里写发送失败的方法
-                                    }
-                                }
-                                TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
-
-                                /*NettyClient.instance.sendMsg(tcpModel.toJson())
-                                    .subscribe { res: Boolean ->
-                                        if (res) {
-                                            Log.d(TAG, "TCP.发送消息完成")
-                                        } else {
-                                            Log.e(TAG, "TCP.发送消息失败")
-                                            HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                        }
-                                    }*/
+                                TcpClient.getInstance().sendTcp(tcpModel, false, null)
                             }
                         } else {
                             showMessage(R.string.call_phone_failed)
@@ -115,19 +100,34 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
                     }
                 } else {
                     DeviceChannel.calling = true
-                    //通话
-                    val tcpModel = VoiceUtil.voiceCall(Constants.deviceId, itemData.deviceId)
-                    val intent = Intent(context, CallSingleActivity::class.java)
-                    intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
-                    intent.putExtra(CallSingleActivity.EXTRA_MO, true)
-                    intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
-                    intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel)
-                    intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, itemData.frameFullName + " " + itemData.customerNamed)
-                    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    context.startActivity(intent)
+                    if (SettingConfig.getCallExDoorway(context)) {
+                        //呼叫手柄分机对应的门口机
+                        if (callClick != null) {
+                            callClick?.onCallClick(itemData)
+                        }
+                    } else {
+                        //通话
+                        val tcpModel = VoiceUtil.voiceCall(Constants.deviceId, itemData.deviceId)
+                        val intent = Intent(context, CallSingleActivity::class.java)
+                        intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
+                        intent.putExtra(CallSingleActivity.EXTRA_MO, true)
+                        intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
+                        intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel)
+                        intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, itemData.frameFullName)
+                        //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        context.startActivity(intent)
+                    }
                 }
 
             }
         }
     }
+
+    fun setCallClick(click: CallClick) {
+        callClick = click
+    }
+
+    interface CallClick {
+        fun onCallClick(contact: WatchContactsVO)
+    }
 }

+ 10 - 0
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java

@@ -34,6 +34,8 @@ public class SettingConfig {
     //呼叫转移
     private static final String KEY_SP_CALL_TRANSFER = "KEY_SP_CALL_TRANSFER";
 
+    private static final String KEY_SP_CALL_EX_DOORWAY = "KEY_SP_CALL_EX_DOORWAY";
+
     public static int getLanguageId(Context context) {
         //0--auto, 1--English, 2--中文, 3--西班牙语, 4--俄语
         return getSP(context).getInt(KEY_LANGUAGE_ID, 3);
@@ -67,6 +69,14 @@ public class SettingConfig {
         getEditor(context).putBoolean(KEY_SP_CALL_TRANSFER, on).apply();
     }
 
+    public static boolean getCallExDoorway(Context context) {
+        return getSP(context).getBoolean(KEY_SP_CALL_EX_DOORWAY, true);
+    }
+
+    public static void setCallExDoorway(Context context, boolean enable) {
+        getEditor(context).putBoolean(KEY_SP_CALL_EX_DOORWAY, enable).apply();
+    }
+
     /**
      * 获取转发时间
      *

+ 34 - 3
android_mobile/src/main/yd_w_xiaomi_2_chile/res/layout/user_setting_layout.xml

@@ -346,21 +346,52 @@
                 </RadioGroup>
 
                 <TextView
-                    android:id="@+id/tv_im_channel_title"
+                    android:id="@+id/tv_call_ex_doorway"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_below="@id/group_call_transfer"
                     android:layout_marginTop="16dp"
-                    android:text="@string/media_button_message"
+                    android:text="@string/setting_call_ex_doorway"
                     android:textSize="16sp" />
 
                 <RadioGroup
+                    android:id="@+id/group_call_ex_doorway"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/tv_call_ex_doorway"
+                    android:layout_marginTop="10dp"
+                    android:orientation="horizontal">
+                    <RadioButton
+                        android:id="@+id/rb_call_ex_doorway_on"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="@string/str_yes"/>
+                    <RadioButton
+                        android:id="@+id/rb_call_ex_doorway_off"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="4dp"
+                        android:text="@string/str_no"/>
+                </RadioGroup>
+
+                <TextView
+                    android:id="@+id/tv_im_channel_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/group_call_ex_doorway"
+                    android:layout_marginTop="16dp"
+                    android:text="@string/media_button_message"
+                    android:textSize="16sp"
+                    android:visibility="gone"/>
+
+                <RadioGroup
                     android:id="@+id/group_im_channel"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_below="@id/tv_im_channel_title"
                     android:layout_marginTop="10dp"
-                    android:orientation="horizontal">
+                    android:orientation="horizontal"
+                    android:visibility="gone">
                     <RadioButton
                         android:id="@+id/rb_im_channel_yes"
                         android:layout_width="wrap_content"

+ 50 - 14
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/vo/WatchContactsVO.java

@@ -21,13 +21,13 @@ public class WatchContactsVO implements Serializable {
     @ApiModelProperty(name = "device_id", value = "设备id", hidden = false)
     private Integer deviceId;
 
-    @Column(name = "device_sip_id")
-    @ApiModelProperty(name = "device_sip_id", value = "设备sip_id", hidden = false)
-    private String deviceSipId;
+    @Column(name = "sip_id")
+    @ApiModelProperty(name = "sip_id", value = "设备sip_id", hidden = false)
+    private String sipId;
 
-    @Column(name = "device_eth_ip")
-    @ApiModelProperty(name = "device_eth_ip", value = "设备eth_ip", hidden = false)
-    private String deviceEthIp;
+    @Column(name = "eth_ip")
+    @ApiModelProperty(name = "eth_ip", value = "设备eth_ip", hidden = false)
+    private String ethIp;
 
     @Column(name = "frame_type")
     @ApiModelProperty(name = "frame_type", value = "空间类型", hidden = false)
@@ -45,6 +45,10 @@ public class WatchContactsVO implements Serializable {
     @ApiModelProperty(name = "frame_full_name", value = "空间全名", hidden = false)
     private String frameFullName;
 
+    @Column(name = "frame_parent_id")
+    @ApiModelProperty(name = "frame_parent_id", value = "上级空间id", hidden = false)
+    private Integer frameParentId;
+
     @Column(name = "customer_named")
     @ApiModelProperty(name = "customer_named", value = "病人名称", hidden = false)
     private String customerNamed;
@@ -53,6 +57,14 @@ public class WatchContactsVO implements Serializable {
     @ApiModelProperty(name = "customer_id", value = "病人id", hidden = false)
     private Integer customerId;
 
+    @Column(name = "customer_age")
+    @ApiModelProperty(name = "customer_age", value = "病人年龄", hidden = false)
+    private String customerAge;
+
+    @Column(name = "customer_sex")
+    @ApiModelProperty(name = "customer_sex", value = "病人性别", hidden = false)
+    private Integer customerSex;
+
     /**
      *	设备号码
      */
@@ -68,20 +80,20 @@ public class WatchContactsVO implements Serializable {
         this.deviceId = deviceId;
     }
 
-    public String getDeviceSipId() {
-        return deviceSipId;
+    public String getSipId() {
+        return sipId;
     }
 
-    public void setDeviceSipId(String deviceSipId) {
-        this.deviceSipId = deviceSipId;
+    public void setSipId(String sipId) {
+        this.sipId = sipId;
     }
 
-    public String getDeviceEthIp() {
-        return deviceEthIp;
+    public String getEthIp() {
+        return ethIp;
     }
 
-    public void setDeviceEthIp(String deviceEthIp) {
-        this.deviceEthIp = deviceEthIp;
+    public void setEthIp(String ethIp) {
+        this.ethIp = ethIp;
     }
 
     public Integer getFrameType() {
@@ -139,4 +151,28 @@ public class WatchContactsVO implements Serializable {
     public void setPhoneNumber(String phoneNumber) {
         this.phoneNumber = phoneNumber;
     }
+
+    public Integer getFrameParentId() {
+        return frameParentId;
+    }
+
+    public void setFrameParentId(Integer frameParentId) {
+        this.frameParentId = frameParentId;
+    }
+
+    public String getCustomerAge() {
+        return customerAge;
+    }
+
+    public void setCustomerAge(String customerAge) {
+        this.customerAge = customerAge;
+    }
+
+    public Integer getCustomerSex() {
+        return customerSex;
+    }
+
+    public void setCustomerSex(Integer customerSex) {
+        this.customerSex = customerSex;
+    }
 }

+ 1 - 0
resource/src/main/res/values-es/strings.xml

@@ -188,6 +188,7 @@
     <string name="str_check_net">Comprobar conexión</string>
     <string name="media_button_message">Habilitar mensaje de botón multimedia:</string>
     <string name="str_call_transfer_title">Call transfer:</string>
+    <string name="setting_call_ex_doorway">Call extend doorway:</string>
 
     <string name="permission_tips">Otorgue permisos</string>
     <string name="device_not_register">Dispositivo no registrado, comuníquese con su administrador</string>

+ 1 - 0
resource/src/main/res/values-ru/strings.xml

@@ -196,6 +196,7 @@
     <string name="language_set_mode">Синхронизировать язык с сервера:</string>
     <string name="str_language_settings">Языковые настройки</string>
     <string name="str_call_transfer_title">Call transfer:</string>
+    <string name="setting_call_ex_doorway">Call extend doorway:</string>
 
     <string name="contact_start_load">Start load contact</string>
     <string name="contact_start_update">Start update, wait a moment.</string>

+ 1 - 0
resource/src/main/res/values-zh/strings.xml

@@ -188,6 +188,7 @@
     <string name="str_check_net">网络检测</string>
     <string name="media_button_message">开启按键留言:</string>
     <string name="str_call_transfer_title">呼叫转移:</string>
+    <string name="setting_call_ex_doorway">呼叫床位门口机:</string>
 
     <string name="permission_tips">请先授权再进入APP</string>
     <string name="device_not_register">本机未注册,请将识别码发给管理员</string>

+ 1 - 0
resource/src/main/res/values/strings.xml

@@ -188,6 +188,7 @@
     <string name="str_check_net">Net check</string>
     <string name="media_button_message">Enable media button message:</string>
     <string name="str_call_transfer_title">Call transfer:</string>
+    <string name="setting_call_ex_doorway">Call extend doorway:</string>
 
     <string name="permission_tips">Please grant permissions</string>
     <string name="device_not_register">Device not registered, please contact your administrator</string>