瀏覽代碼

<风尚版总值班室主机1.0版本上传>

weizhengliang 4 年之前
父節點
當前提交
c0d3354a7c
共有 40 個文件被更改,包括 1772 次插入486 次删除
  1. 4 1
      app/build.gradle
  2. 15 2
      app/src/main/java/com/wdkl/callingsystemmanager/BaseApp.java
  3. 12 0
      app/src/main/java/com/wdkl/callingsystemmanager/constant/Constants.java
  4. 12 36
      app/src/main/java/com/wdkl/callingsystemmanager/custom/SOSCallingDialog.java
  5. 48 0
      app/src/main/java/com/wdkl/callingsystemmanager/db/McuDeviceBean.java
  6. 32 0
      app/src/main/java/com/wdkl/callingsystemmanager/db/MessageEvent.java
  7. 62 0
      app/src/main/java/com/wdkl/callingsystemmanager/db/PartDeviceBean.java
  8. 31 0
      app/src/main/java/com/wdkl/callingsystemmanager/db/vo/BedItem.java
  9. 88 0
      app/src/main/java/com/wdkl/callingsystemmanager/db/vo/CallingItem.java
  10. 146 142
      app/src/main/java/com/wdkl/callingsystemmanager/service/CallService.java
  11. 3 3
      app/src/main/java/com/wdkl/callingsystemmanager/service/CallStatusEnum.java
  12. 1 1
      app/src/main/java/com/wdkl/callingsystemmanager/service/MediaService.java
  13. 12 0
      app/src/main/java/com/wdkl/callingsystemmanager/service/MyFragmentManager.java
  14. 49 92
      app/src/main/java/com/wdkl/callingsystemmanager/service/SerialPortService.java
  15. 213 127
      app/src/main/java/com/wdkl/callingsystemmanager/ui/activity/MainActivity.java
  16. 95 0
      app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/BedAdapter2.java
  17. 18 52
      app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/CallAdapter.java
  18. 26 0
      app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/PartAdapter.java
  19. 27 0
      app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/PartIpAdapter.java
  20. 3 3
      app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/BedFragment.java
  21. 107 0
      app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/BedFragment2.java
  22. 0 1
      app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/DeviceFragment.java
  23. 3 4
      app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/RoomFragment2.java
  24. 210 11
      app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/SystemFragment.java
  25. 107 0
      app/src/main/java/com/wdkl/callingsystemmanager/util/AnalysisUdpUtil.java
  26. 107 0
      app/src/main/java/com/wdkl/callingsystemmanager/util/UdpHelper.java
  27. 51 0
      app/src/main/java/com/wdkl/callingsystemmanager/util/UdpSendUtil.java
  28. 50 6
      app/src/main/res/layout/activity_main.xml
  29. 30 0
      app/src/main/res/layout/dialog_add_part_device.xml
  30. 2 1
      app/src/main/res/layout/dialog_incall_times_setting.xml
  31. 66 0
      app/src/main/res/layout/dialog_part_device_manager.xml
  32. 39 0
      app/src/main/res/layout/item_bed2.xml
  33. 8 4
      app/src/main/res/layout/item_call.xml
  34. 17 0
      app/src/main/res/layout/item_part.xml
  35. 54 0
      app/src/main/res/layout/item_part_ip.xml
  36. 二進制
      app/src/main/res/mipmap-mdpi/ic_calling.png
  37. 5 0
      app/src/main/res/values-zh/arrays.xml
  38. 7 0
      app/src/main/res/values-zh/strings.xml
  39. 5 0
      app/src/main/res/values/arrays.xml
  40. 7 0
      app/src/main/res/values/strings.xml

+ 4 - 1
app/build.gradle

@@ -46,7 +46,7 @@ android {
         }
         }
         greendao {
         greendao {
             //这里是数据库版本,需要比原来的大
             //这里是数据库版本,需要比原来的大
-            schemaVersion 7
+            schemaVersion 1
         }
         }
     }
     }
 }
 }
@@ -125,6 +125,9 @@ dependencies {
 
 
     implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'
     implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'
 
 
+    //eventbus
+    implementation 'org.greenrobot:eventbus:3.0.0'
+
     //implementation 'com.github.codbking:PickTime:v1.0.1'
     //implementation 'com.github.codbking:PickTime:v1.0.1'
     implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
     implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
 }
 }

+ 15 - 2
app/src/main/java/com/wdkl/callingsystemmanager/BaseApp.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.content.res.Configuration;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDatabase;
+import android.net.wifi.WifiManager;
 import android.os.Environment;
 import android.os.Environment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentManager;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.app.AppCompatActivity;
@@ -20,6 +21,7 @@ import com.wdkl.callingsystemmanager.util.AnrFcExceptionUtil;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
 import com.wdkl.callingsystemmanager.util.SpUtil;
 import com.wdkl.callingsystemmanager.util.SpUtil;
+import com.wdkl.callingsystemmanager.util.UdpHelper;
 import com.xuexiang.xui.XUI;
 import com.xuexiang.xui.XUI;
 
 
 import org.greenrobot.greendao.identityscope.IdentityScopeType;
 import org.greenrobot.greendao.identityscope.IdentityScopeType;
@@ -66,6 +68,10 @@ public class BaseApp extends Application {
 
 
     public static final int DEFAULT_VOLUME = 128;
     public static final int DEFAULT_VOLUME = 128;
 
 
+    //udp
+    public UdpHelper helper;
+    public WifiManager wifiManager;
+
     @Override
     @Override
     public void onCreate() {
     public void onCreate() {
         super.onCreate();
         super.onCreate();
@@ -100,7 +106,14 @@ public class BaseApp extends Application {
         }).start();
         }).start();
 
 
         initSettings();
         initSettings();
-        LedManagerUtils.getInstance().ledInit(this);
+        //LedManagerUtils.getInstance().ledInit(this);
+        initUdp();
+    }
+
+    private void initUdp() {
+        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+        helper = new UdpHelper(wifiManager, getApplicationContext());
+        helper.run();
     }
     }
 
 
     private void setupDatabase() {
     private void setupDatabase() {
@@ -243,7 +256,7 @@ public class BaseApp extends Application {
         }
         }
 
 
         if (-100 == SharedPreferencesUtil.getIntSp(getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum)) {
         if (-100 == SharedPreferencesUtil.getIntSp(getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum)) {
-            SharedPreferencesUtil.putIntSp(getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum, 1);
+            SharedPreferencesUtil.putIntSp(getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum, 2);
         }
         }
 
 
         //记住用户名
         //记住用户名

+ 12 - 0
app/src/main/java/com/wdkl/callingsystemmanager/constant/Constants.java

@@ -34,4 +34,16 @@ public class Constants {
     public static int ledType = 1;
     public static int ledType = 1;
 
 
     public static boolean ledFontExist = false;
     public static boolean ledFontExist = false;
+
+    //EventBus 所需判断类型
+    public static final int EVENT_UDP = 0x01;
+
+
+    public static String HOST_ADDR_PRE = "http://";
+
+    public static String PORT = ":8080";
+
+    public static String PART_DEVICE_INFO = "home/part_device_info";
+
+    public static String PART_INFO = "home/part_info";
 }
 }

+ 12 - 36
app/src/main/java/com/wdkl/callingsystemmanager/custom/SOSCallingDialog.java

@@ -21,6 +21,7 @@ import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
 import com.wdkl.callingsystemmanager.service.SOSCall;
 import com.wdkl.callingsystemmanager.service.SOSCall;
 import com.wdkl.callingsystemmanager.service.SerialPortService;
 import com.wdkl.callingsystemmanager.service.SerialPortService;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
+import com.wdkl.callingsystemmanager.util.UdpSendUtil;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -37,12 +38,6 @@ public class SOSCallingDialog extends Dialog {
         mContex = context;
         mContex = context;
         List<SOSCall> data = new ArrayList<>();
         List<SOSCall> data = new ArrayList<>();
         data.add(call);
         data.add(call);
-        String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-        if (Locale.CHINESE.getLanguage().equals(lang)) {
-            LedManagerUtils.getInstance().updateProgram(call.getRoom() + "房卫生间", 1);
-        } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-            LedManagerUtils.getInstance().updateProgram("Washroom No." + call.getRoom(), 1);
-        }
 
 
         mAdapter = new SOSCallAdapter(R.layout.item_sos_call, data);
         mAdapter = new SOSCallAdapter(R.layout.item_sos_call, data);
         dialog = this;
         dialog = this;
@@ -64,11 +59,11 @@ public class SOSCallingDialog extends Dialog {
         removeSOSCall(mAdapter.getItem(position));
         removeSOSCall(mAdapter.getItem(position));
     }
     }
 
 
-    private void removeSOSCall(SOSCall call) {
+    public void removeSOSCall(SOSCall call) {
         List<SOSCall> sosCalls = mAdapter.getData();
         List<SOSCall> sosCalls = mAdapter.getData();
         if (call != null && sosCalls.size() > 0) {
         if (call != null && sosCalls.size() > 0) {
-            SerialPortService.getInstance().sendSOSOffCmd(call.getAddr());
-            SerialPortService.getInstance().sendDoorLedOffCmd(call.getDoorLedAddr());
+            //SerialPortService.getInstance().sendSOSOffCmd(call.getAddr());
+            //SerialPortService.getInstance().sendDoorLedOffCmd(call.getDoorLedAddr());
             //PalyPhonetics.getInstance(BaseApp.getContext()).setPalyDismiss(true);
             //PalyPhonetics.getInstance(BaseApp.getContext()).setPalyDismiss(true);
             SpeakEntity speakEntity = new SpeakEntity();
             SpeakEntity speakEntity = new SpeakEntity();
             speakEntity.setType(DeviceEnum.WDROOM.value());
             speakEntity.setType(DeviceEnum.WDROOM.value());
@@ -80,7 +75,12 @@ public class SOSCallingDialog extends Dialog {
             } else {
             } else {
                 CallService.getInstance().removeSound(speakEntity);
                 CallService.getInstance().removeSound(speakEntity);
             }
             }
-            sosCalls.remove(call);
+            for (SOSCall sosCall : sosCalls) {
+                if (sosCall != null && call.getAddr().equals(sosCall.getAddr())) {
+                    sosCalls.remove(sosCall);
+                }
+            }
+
             if (sosCalls.size() > 0) {
             if (sosCalls.size() > 0) {
                 mAdapter.setNewData(sosCalls);
                 mAdapter.setNewData(sosCalls);
             } else {
             } else {
@@ -93,13 +93,6 @@ public class SOSCallingDialog extends Dialog {
         List<SOSCall> sosCalls = mAdapter.getData();
         List<SOSCall> sosCalls = mAdapter.getData();
         if (sosCalls != null && sosCalls.size() > 0
         if (sosCalls != null && sosCalls.size() > 0
             && !isSOSCallExist(call, sosCalls)) {
             && !isSOSCallExist(call, sosCalls)) {
-            String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                LedManagerUtils.getInstance().updateProgram(call.getRoom() + "房卫生间", 1);
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                LedManagerUtils.getInstance().updateProgram("Washroom No." + call.getRoom(), 1);
-            }
-
             sosCalls.add(call);
             sosCalls.add(call);
             mAdapter.setNewData(sosCalls);
             mAdapter.setNewData(sosCalls);
         }
         }
@@ -130,25 +123,8 @@ public class SOSCallingDialog extends Dialog {
                 @Override
                 @Override
                 public void onClick(View v) {
                 public void onClick(View v) {
                     removeSOSCall(item);
                     removeSOSCall(item);
-                    String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-                    if (Locale.CHINESE.getLanguage().equals(lang)) {
-                        LedManagerUtils.getInstance().updateProgram(item.getRoom() + "房卫生间", 2);
-                    } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                        LedManagerUtils.getInstance().updateProgram("Washroom No." + item.getRoom(), 2);
-                    }
-
-                    /*new MaterialDialog.Builder(mContex)
-                            .content(R.string.tips_remove_sos_call)
-                            .positiveText(R.string.lab_yes)
-                            .onPositive(new MaterialDialog.SingleButtonCallback() {
-                                @Override
-                                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
-                                    removeSOSCall(item);
-                                    LedBX6MTManager.getInstance().removeProgram(item.getRoom() + "房卫生间");
-                                }
-                            })
-                            .negativeText(R.string.lab_no)
-                            .show();*/
+                    //通知科室主机紧急呼叫已处理
+                    UdpSendUtil.getInstance().sendUdpData("classic_call_2_cancel", DeviceModel.WDFS, item.getRoom(), "", "", item.getAddr(), "-1");
                 }
                 }
             });
             });
         }
         }

+ 48 - 0
app/src/main/java/com/wdkl/callingsystemmanager/db/McuDeviceBean.java

@@ -0,0 +1,48 @@
+package com.wdkl.callingsystemmanager.db;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Generated;
+
+@Entity
+public class McuDeviceBean {
+
+    @Id(autoincrement = true)
+    private Long id;
+    private int partId;
+    private String uartAddr;
+    @Generated(hash = 1013416449)
+    public McuDeviceBean(Long id, int partId, String uartAddr) {
+        this.id = id;
+        this.partId = partId;
+        this.uartAddr = uartAddr;
+    }
+    @Generated(hash = 988512453)
+    public McuDeviceBean() {
+    }
+
+    public Long getId() {
+        return this.id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public int getPartId() {
+        return this.partId;
+    }
+
+    public void setPartId(int partId) {
+        this.partId = partId;
+    }
+
+    public String getUartAddr() {
+        return this.uartAddr;
+    }
+
+    public void setUartAddr(String uartAddr) {
+        this.uartAddr = uartAddr;
+    }
+    
+}

+ 32 - 0
app/src/main/java/com/wdkl/callingsystemmanager/db/MessageEvent.java

@@ -0,0 +1,32 @@
+package com.wdkl.callingsystemmanager.db;
+
+/**
+ * Created by fengxiangqian on 2017/9/13.
+ */
+public class MessageEvent {
+
+    private Object message;
+    private int type;
+
+    public MessageEvent(Object message, int type) {
+        this.message = message;
+        this.type = type;
+    }
+
+    public Object getMessage() {
+        return message;
+    }
+
+    public void setMessage(Object message) {
+        this.message = message;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+}

+ 62 - 0
app/src/main/java/com/wdkl/callingsystemmanager/db/PartDeviceBean.java

@@ -0,0 +1,62 @@
+package com.wdkl.callingsystemmanager.db;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+
+import java.util.List;
+
+@Entity
+public class PartDeviceBean {
+    @Id(autoincrement = true)
+    private Long id;
+    private int partId;
+    private String partName;
+    private String partDeviceIp;
+
+    @Generated(hash = 1427622890)
+    public PartDeviceBean(Long id, int partId, String partName,
+            String partDeviceIp) {
+        this.id = id;
+        this.partId = partId;
+        this.partName = partName;
+        this.partDeviceIp = partDeviceIp;
+    }
+
+    @Generated(hash = 287267012)
+    public PartDeviceBean() {
+    }
+
+    public int getPartId() {
+        return this.partId;
+    }
+
+    public void setPartId(int partId) {
+        this.partId = partId;
+    }
+
+    public String getPartName() {
+        return this.partName == null ? "NULL" : this.partName;
+    }
+
+    public void setPartName(String partName) {
+        this.partName = partName;
+    }
+
+    public String getPartDeviceIp() {
+        return this.partDeviceIp == null ? "NULL" : this.partDeviceIp;
+    }
+
+    public void setPartDeviceIp(String partDeviceIp) {
+        this.partDeviceIp = partDeviceIp;
+    }
+
+    public Long getId() {
+        return this.id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+}

+ 31 - 0
app/src/main/java/com/wdkl/callingsystemmanager/db/vo/BedItem.java

@@ -0,0 +1,31 @@
+package com.wdkl.callingsystemmanager.db.vo;
+
+public class BedItem {
+    private String bedName;
+    private String patientName;
+    private String uartAddr;
+
+    public String getBedName() {
+        return bedName;
+    }
+
+    public void setBedName(String bedName) {
+        this.bedName = bedName;
+    }
+
+    public String getPatientName() {
+        return patientName;
+    }
+
+    public void setPatientName(String patientName) {
+        this.patientName = patientName;
+    }
+
+    public String getUartAddr() {
+        return uartAddr;
+    }
+
+    public void setUartAddr(String uartAddr) {
+        this.uartAddr = uartAddr;
+    }
+}

+ 88 - 0
app/src/main/java/com/wdkl/callingsystemmanager/db/vo/CallingItem.java

@@ -0,0 +1,88 @@
+package com.wdkl.callingsystemmanager.db.vo;
+
+public class CallingItem {
+    private String index;
+    private String roomNo;
+    private String bedNo;
+    private String patientName;
+    private String uartAddr;
+    private String model;
+    private int type;
+    private int partId;
+
+    public String getIndex() {
+        return null == index ? "null" : index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getRoomNo() {
+        return roomNo;
+    }
+
+    public void setRoomNo(String roomNo) {
+        this.roomNo = roomNo;
+    }
+
+    public String getBedNo() {
+        return bedNo;
+    }
+
+    public void setBedNo(String bedNo) {
+        this.bedNo = bedNo;
+    }
+
+    public String getPatientName() {
+        return patientName;
+    }
+
+    public void setPatientName(String patientName) {
+        this.patientName = patientName;
+    }
+
+    public String getUartAddr() {
+        return uartAddr;
+    }
+
+    public void setUartAddr(String uartAddr) {
+        this.uartAddr = uartAddr;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public int getPartId() {
+        return partId;
+    }
+
+    public void setPartId(int partId) {
+        this.partId = partId;
+    }
+
+    @Override
+    public String toString() {
+        return "CallingItem{" +
+                "roomNo='" + roomNo + '\'' +
+                ", bedNo='" + bedNo + '\'' +
+                ", patientName='" + patientName + '\'' +
+                ", uartAddr='" + uartAddr + '\'' +
+                ", model='" + model + '\'' +
+                ", type='" + type + '\'' +
+                '}';
+    }
+}

+ 146 - 142
app/src/main/java/com/wdkl/callingsystemmanager/service/CallService.java

@@ -17,6 +17,7 @@ import com.wdkl.callingsystemmanager.db.SpeakEntity;
 import com.wdkl.callingsystemmanager.db.enums.DeviceEnum;
 import com.wdkl.callingsystemmanager.db.enums.DeviceEnum;
 import com.wdkl.callingsystemmanager.db.enums.PatientStatusEnum;
 import com.wdkl.callingsystemmanager.db.enums.PatientStatusEnum;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
 import com.wdkl.callingsystemmanager.helper.DeviceHelper;
 import com.wdkl.callingsystemmanager.helper.DeviceHelper;
 import com.wdkl.callingsystemmanager.service.callback.StatusChangeCallback;
 import com.wdkl.callingsystemmanager.service.callback.StatusChangeCallback;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
@@ -24,6 +25,7 @@ import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.PalyPhonetics;
 import com.wdkl.callingsystemmanager.util.PalyPhonetics;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
 import com.wdkl.callingsystemmanager.util.StringUtils;
 import com.wdkl.callingsystemmanager.util.StringUtils;
+import com.wdkl.callingsystemmanager.util.UdpSendUtil;
 import com.wdkl.callingsystemmanager.util.VoiceManagerUtil;
 import com.wdkl.callingsystemmanager.util.VoiceManagerUtil;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -37,11 +39,11 @@ import static com.wdkl.callingsystemmanager.service.SerialPortService.bytesToHex
 
 
 public class CallService {
 public class CallService {
     private volatile static CallService callListService = null;
     private volatile static CallService callListService = null;
-    private volatile static List<BedVO> bedVOList;
+    private volatile static List<CallingItem> bedVOList;
 
 
     private Lock lock = new ReentrantLock();// 锁对象
     private Lock lock = new ReentrantLock();// 锁对象
     private volatile CallStatusEnum CallingStatus = CallStatusEnum.WAIT_CALL;
     private volatile CallStatusEnum CallingStatus = CallStatusEnum.WAIT_CALL;
-    private volatile BedVO callingBedVO;
+    private volatile CallingItem callingBedVO;
     private List<SpeakEntity> speakList = new ArrayList<>();
     private List<SpeakEntity> speakList = new ArrayList<>();
 
 
     private StatusChangeCallback statusCallback;
     private StatusChangeCallback statusCallback;
@@ -93,7 +95,7 @@ public class CallService {
         }
         }
     }
     }
 
 
-    public List<BedVO> getList(){
+    public List<CallingItem> getList(){
         return bedVOList;
         return bedVOList;
     }
     }
 
 
@@ -102,7 +104,7 @@ public class CallService {
     }
     }
 
 
     //由MCU_MSG_CALLIN_REQ触发
     //由MCU_MSG_CALLIN_REQ触发
-    public synchronized BedVO CallInPut(byte slaveAddH, byte slaveAddL){
+    /*public synchronized BedVO CallInPut(byte slaveAddH, byte slaveAddL){
         byte[] byteAddr = {slaveAddH, slaveAddL};
         byte[] byteAddr = {slaveAddH, slaveAddL};
         String uAddr = bytesToHexString(byteAddr);
         String uAddr = bytesToHexString(byteAddr);
         List<BedVO> bedVOS = bedVOList.stream().filter(p->p.getDevice().getUartAddress().equals(uAddr)).collect(Collectors.toList());
         List<BedVO> bedVOS = bedVOList.stream().filter(p->p.getDevice().getUartAddress().equals(uAddr)).collect(Collectors.toList());
@@ -121,10 +123,6 @@ public class CallService {
             //开启门灯
             //开启门灯
             SerialPortService.getInstance().sendDoorLedOnCmd(getCallingRoomLedUAddr(bedVO));
             SerialPortService.getInstance().sendDoorLedOnCmd(getCallingRoomLedUAddr(bedVO));
 
 
-            //语音播报: 床位呼叫
-            /*if (null != loopVoice) {
-                loopVoice.setPalyDismiss(true);
-            }*/
             if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
             if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
                 if (callType == 2) {
                 if (callType == 2) {
                     //播放铃音
                     //播放铃音
@@ -149,12 +147,6 @@ public class CallService {
             //todo:还需角标操作
             //todo:还需角标操作
             return bedVO;
             return bedVO;
         }
         }
-        /*List<NcsDeviceInfoBean> deviceInfoBeanList = BaseApp.getDaoInstant().getNcsDeviceInfoBeanDao().queryBuilder()
-                .where(NcsDeviceInfoBeanDao.Properties.UartAddress.eq(uAddr),
-                       NcsDeviceInfoBeanDao.Properties.FrameType.eq(DeviceEnum.WDBED.value()),
-                       NcsDeviceInfoBeanDao.Properties.Model.eq(DeviceModel.WDMN))
-                .list();
-        NcsDeviceInfoBean device = deviceInfoBeanList.get(0);*/
 
 
         List<NcsDeviceInfoBean> deviceInfoBeanList = BaseApp.getDaoInstant().getNcsDeviceInfoBeanDao().queryBuilder()
         List<NcsDeviceInfoBean> deviceInfoBeanList = BaseApp.getDaoInstant().getNcsDeviceInfoBeanDao().queryBuilder()
                 .where(NcsDeviceInfoBeanDao.Properties.UartAddress.eq(uAddr),
                 .where(NcsDeviceInfoBeanDao.Properties.UartAddress.eq(uAddr),
@@ -223,22 +215,8 @@ public class CallService {
         //开启门灯
         //开启门灯
         SerialPortService.getInstance().sendDoorLedOnCmd(getCallingRoomLedUAddr(bedVO));
         SerialPortService.getInstance().sendDoorLedOnCmd(getCallingRoomLedUAddr(bedVO));
         //加入点阵屏呼叫信息
         //加入点阵屏呼叫信息
-        String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-        int callRoom = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum);
-        if (Locale.CHINESE.getLanguage().equals(lang)) {
-            if (callRoom == 1) {
-                LedManagerUtils.getInstance().updateProgram(bedVO.getRoomFrame().getName() + "房" + bedVO.getFrame().getName() + "床呼叫", 1);
-            } else {
-                LedManagerUtils.getInstance().updateProgram(bedVO.getFrame().getName() + "床呼叫", 1);
-            }
-        } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-            LedManagerUtils.getInstance().updateProgram("Bed No." + bedVO.getFrame().getName(), 1);
-        }
 
 
         //语音播报: 床位呼叫
         //语音播报: 床位呼叫
-        /*if (null != loopVoice) {
-            loopVoice.setPalyDismiss(true);
-        }*/
         if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
         if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
             if (callType == 2) {
             if (callType == 2) {
                 //播放铃音
                 //播放铃音
@@ -260,9 +238,123 @@ public class CallService {
         }
         }
 
 
         return bedVO;
         return bedVO;
+    }*/
+
+    public synchronized void incomingCall(CallingItem callingItem){
+        String model = DeviceHelper.getModelName(callingItem.getModel());
+        if (DeviceModel.WDFS.equals(model)) {
+            addSOSCall(callingItem);
+        } else if (DeviceModel.WDMN.equals(model)) {
+            addBedCall(callingItem);
+        }
     }
     }
 
 
-    public void callInTake(BedVO bedVO){
+    private void addBedCall(CallingItem item) {
+        String uAddr = item.getUartAddr();
+        List<CallingItem> bedVOS = bedVOList.stream().filter(p->p.getUartAddr().equals(uAddr)).collect(Collectors.toList());
+        if (bedVOS.size() > 0){
+            CallingItem bedVO = bedVOS.get(0);
+            callingBedVO = bedVO;
+            if (statusCallback != null) {
+                if (getCallingStatus() == CallStatusEnum.CALLING || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
+                    statusCallback.onCallStatusChange(CallStatusEnum.IN_QUEUE);
+                } else if (getCallingStatus() == CallStatusEnum.WAIT_CALL) {
+                    statusCallback.onCallStatusChange(CallStatusEnum.WAIT_RESPONSE);
+                }
+            }
+
+            if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
+                if (callType == 2) {
+                    //播放铃音
+                    startPlayMusic();
+                } else {
+                    SpeakEntity speakEntity = new SpeakEntity();
+                    speakEntity.setType(item.getType());
+                    speakEntity.setModel(item.getModel());
+                    speakEntity.setFrameName(item.getBedNo());
+                    speakEntity.setRoomFrameName(item.getRoomNo());
+                    playSound(speakEntity);
+                }
+
+            }
+
+            if (getCallingStatus()==CallStatusEnum.WAIT_CALL) {
+                setCALLING(CallStatusEnum.WAIT_RESPONSE, bedVO);
+            }
+
+            //todo:还需角标操作
+            return;
+        }
+
+        bedVOList.add(item);
+
+        //通知主界面刷新
+        if (statusCallback != null) {
+            if (getCallingStatus() == CallStatusEnum.CALLING || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
+                statusCallback.onCallStatusChange(CallStatusEnum.IN_QUEUE);
+            } else if (getCallingStatus() == CallStatusEnum.WAIT_CALL) {
+                statusCallback.onCallStatusChange(CallStatusEnum.WAIT_RESPONSE);
+            }
+        }
+
+        //日志操作
+        //开启门灯
+        //加入点阵屏呼叫信息
+
+        //语音播报: 床位呼叫
+        if (getCallingStatus() == CallStatusEnum.WAIT_CALL || getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
+            if (callType == 2) {
+                //播放铃音
+                startPlayMusic();
+            } else {
+                SpeakEntity speakEntity = new SpeakEntity();
+                speakEntity.setType(item.getType());
+                speakEntity.setModel(item.getModel());
+                speakEntity.setFrameName(item.getBedNo());
+                speakEntity.setRoomFrameName(item.getRoomNo());
+                playSound(speakEntity);
+            }
+        }
+
+        if (getCallingStatus()==CallStatusEnum.WAIT_CALL) {
+            setCALLING(CallStatusEnum.WAIT_RESPONSE, item);
+        }
+    }
+
+    private void addSOSCall(CallingItem item) {
+        //断开当前通话或呼叫
+        if (getCallingStatus() == CallStatusEnum.CALLING) {
+            if (callingBedVO != null) {
+                SerialPortService.getInstance().endCall(callingBedVO);
+            }
+        } else if (getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
+            if (callType == 2) {
+                //stopMusic();
+            } else {
+                stopSpeak();
+            }
+        }
+
+        //主界面弹出SOS提示
+        if (statusCallback != null) {
+            SOSCall call = new SOSCall(item.getRoomNo(), item.getUartAddr(), "0");
+            statusCallback.onSOSCall(call);
+        }
+
+        if (callType == 2) {
+            //播放铃音
+            startPlayMusic();
+        } else {
+            SpeakEntity speakEntity = new SpeakEntity();
+            speakEntity.setType(DeviceEnum.WDROOM.value());
+            speakEntity.setModel(DeviceModel.WDFS);
+            speakEntity.setFrameName("null");
+            speakEntity.setRoomFrameName(item.getRoomNo());
+            playSound(speakEntity);
+        }
+    }
+
+    public void callInTake(CallingItem bedVO){
         if (bedVO != null) {
         if (bedVO != null) {
             bedVOList.remove(bedVO);
             bedVOList.remove(bedVO);
             //如果等待通话列表中还有分机,更新当前的callingbed
             //如果等待通话列表中还有分机,更新当前的callingbed
@@ -281,23 +373,11 @@ public class CallService {
             }
             }
 
 
             //清除点阵屏呼叫信息
             //清除点阵屏呼叫信息
-            String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-            int callRoom = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum);
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                if (callRoom == 1) {
-                    LedManagerUtils.getInstance().updateProgram(bedVO.getRoomFrame().getName() + "房" + bedVO.getFrame().getName() + "床呼叫", 2);
-                } else {
-                    LedManagerUtils.getInstance().updateProgram(bedVO.getFrame().getName() + "床呼叫", 2);
-                }
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                LedManagerUtils.getInstance().updateProgram("Bed No." + bedVO.getFrame().getName(), 2);
-            }
             //关闭门灯
             //关闭门灯
-            SerialPortService.getInstance().sendDoorLedOffCmd(getCallingRoomLedUAddr(bedVO));
         }
         }
     }
     }
 
 
-    public void callInTakeBackground(String uAddr){
+    /*public void callInTakeBackground(String uAddr){
         BedVO bedVO = getCallingBedVO(uAddr);
         BedVO bedVO = getCallingBedVO(uAddr);
         if (bedVO != null) {
         if (bedVO != null) {
             //移出语音播报列表
             //移出语音播报列表
@@ -310,17 +390,7 @@ public class CallService {
                 removeSound(speakEntity);
                 removeSound(speakEntity);
             }
             }
             //清除点阵屏呼叫信息
             //清除点阵屏呼叫信息
-            String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-            int callRoom = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum);
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                if (callRoom == 1) {
-                    LedManagerUtils.getInstance().updateProgram(bedVO.getRoomFrame().getName() + "房" + bedVO.getFrame().getName() + "床呼叫", 2);
-                } else {
-                    LedManagerUtils.getInstance().updateProgram(bedVO.getFrame().getName() + "床呼叫", 2);
-                }
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                LedManagerUtils.getInstance().updateProgram("Bed No." + bedVO.getFrame().getName(), 2);
-            }
+
             //关闭门灯
             //关闭门灯
             SerialPortService.getInstance().sendDoorLedOffCmd(getCallingRoomLedUAddr(bedVO));
             SerialPortService.getInstance().sendDoorLedOffCmd(getCallingRoomLedUAddr(bedVO));
             bedVOList.remove(bedVO);
             bedVOList.remove(bedVO);
@@ -328,17 +398,17 @@ public class CallService {
         if (bedVO != null && statusCallback != null) {
         if (bedVO != null && statusCallback != null) {
             statusCallback.onCallStatusChange(CallStatusEnum.IN_QUEUE);
             statusCallback.onCallStatusChange(CallStatusEnum.IN_QUEUE);
         }
         }
-    }
+    }*/
 
 
-    public BedVO getCallingBedVO() {
+    public CallingItem getCallingBedVO() {
         return callingBedVO;
         return callingBedVO;
     }
     }
 
 
-    public void setCallingBedVO(BedVO bedVO) {
+    public void setCallingBedVO(CallingItem bedVO) {
         callingBedVO = bedVO;
         callingBedVO = bedVO;
     }
     }
 
 
-    public BedVO getCallingBedVO(String addr) {
+    /*public BedVO getCallingBedVO(String addr) {
         if (bedVOList != null && bedVOList.size() > 0) {
         if (bedVOList != null && bedVOList.size() > 0) {
             for (BedVO bedVO: bedVOList) {
             for (BedVO bedVO: bedVOList) {
                 if (addr.equals(bedVO.getDevice().getUartAddress())) {
                 if (addr.equals(bedVO.getDevice().getUartAddress())) {
@@ -347,7 +417,7 @@ public class CallService {
             }
             }
         }
         }
         return null;
         return null;
-    }
+    }*/
 
 
     public void SosCallIn(byte slaveAddH, byte slaveAddL) {
     public void SosCallIn(byte slaveAddH, byte slaveAddL) {
         //语音播报: 紧急呼叫优先级最高
         //语音播报: 紧急呼叫优先级最高
@@ -446,43 +516,34 @@ public class CallService {
         setCALLING(callStatusEnum, null);
         setCALLING(callStatusEnum, null);
     }
     }
 
 
-    public void setCALLING(CallStatusEnum callStatusEnum, BedVO bedVO){
+    public void setCALLING(CallStatusEnum callStatusEnum, CallingItem bedVO){
         lock.lock();    //lock无意义
         lock.lock();    //lock无意义
         try {
         try {
             this.CallingStatus = callStatusEnum;
             this.CallingStatus = callStatusEnum;
 
 
             if (bedVO!=null) {
             if (bedVO!=null) {
-                //Log.d("wzl", "setCALLING(): CallingStatus = " + CallingStatus + ", calling bed addr: " + bedVO.getDevice().getUartAddress());
-                /*int times = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.IncallTimes);
-                if (times > 0) {
-                    speakLooping = times;
-                } else {
-                    speakLooping = 2;
-                }*/
-
                 if (callStatusEnum == CallStatusEnum.WAIT_RESPONSE) {
                 if (callStatusEnum == CallStatusEnum.WAIT_RESPONSE) {
                     callingBedVO = bedVO;
                     callingBedVO = bedVO;
                 } else if (callStatusEnum == CallStatusEnum.END_CALL){
                 } else if (callStatusEnum == CallStatusEnum.END_CALL){
                     callInTake(bedVO);
                     callInTake(bedVO);
                     SpeakEntity speakEntity = new SpeakEntity();
                     SpeakEntity speakEntity = new SpeakEntity();
-                    speakEntity.setType(DeviceEnum.WDBED.value());
-                    speakEntity.setModel(bedVO.getDevice().getModel());
-                    speakEntity.setFrameName(bedVO.getFrame().getName());
-                    speakEntity.setRoomFrameName(bedVO.getRoomFrame().getName());
+                    speakEntity.setType(bedVO.getType());
+                    speakEntity.setModel(bedVO.getModel());
+                    speakEntity.setFrameName(bedVO.getBedNo());
+                    speakEntity.setRoomFrameName(bedVO.getRoomNo());
                     if (callType == 2) {
                     if (callType == 2) {
                         stopPlayMusic();
                         stopPlayMusic();
                     } else {
                     } else {
                         removeSound(speakEntity);
                         removeSound(speakEntity);
                     }
                     }
+                    //通知科室主机通话已经结束, partid = -1为总机
+                    UdpSendUtil.getInstance().sendUdpData("classic_call_1_hangup", "", "", "", "", "", "-1");
                     return;
                     return;
                 } else if (callStatusEnum == CallStatusEnum.CALLING) {
                 } else if (callStatusEnum == CallStatusEnum.CALLING) {
                     callingBedVO = bedVO;
                     callingBedVO = bedVO;
                     if (!bedVOList.contains(bedVO)) {
                     if (!bedVOList.contains(bedVO)) {
                         bedVOList.add(bedVO);
                         bedVOList.add(bedVO);
                     }
                     }
-                    /*if (null != loopVoice) {
-                        loopVoice.setPalyDismiss(true);
-                    }*/
                     if (callType == 2) {
                     if (callType == 2) {
                         //停止播放铃音
                         //停止播放铃音
                         stopPlayMusic();
                         stopPlayMusic();
@@ -500,72 +561,6 @@ public class CallService {
         }
         }
     }
     }
 
 
-    private void playSound2(SpeakEntity entity) {
-        String lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
-        ArrayList<Integer> resIdlist = new ArrayList<>();
-        int callRoom = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallRoomNum);
-        if (DeviceModel.WDMN.equals(DeviceHelper.getModelName(entity.getModel()))) {
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                //房间
-                if (callRoom == 1) {
-                    ArrayList<String> roomArray = StringUtils.substringBySing(entity.getRoomFrameName());
-                    for (String s : roomArray) {
-                        if (s.matches("\\d+")) {
-                            resIdlist.add(PalyPhonetics.getResIdInt(s));
-                        }
-                    }
-                    resIdlist.add(R.raw.fang);
-                }
-                //床位
-                ArrayList<String> bedArray = StringUtils.substringBySing(entity.getFrameName());
-                for (String s : bedArray) {
-                    if (s.matches("\\d+")) {
-                        resIdlist.add(PalyPhonetics.getResIdInt(s));
-                    }
-                }
-                resIdlist.add(R.raw.chuang);
-                resIdlist.add(R.raw.hujiao);
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                //床位
-                ArrayList<String> bedArray = StringUtils.substringBySing(entity.getFrameName());
-                resIdlist.add(R.raw.en_bed);
-                //resIdlist.add(R.raw.en_number);
-                for (String s : bedArray) {
-                    if (s.matches("\\d+")) {
-                        resIdlist.add(PalyPhonetics.getEnResIdInt(s));
-                    }
-                }
-                resIdlist.add(R.raw.calling);
-            }
-        } else if (DeviceModel.WDFS.equals(DeviceHelper.getModelName(entity.getModel()))) {
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                //房间
-                ArrayList<String> roomArray = StringUtils.substringBySing(entity.getRoomFrameName());
-                for (String s : roomArray) {
-                    if (s.matches("\\d+")) {
-                        resIdlist.add(PalyPhonetics.getResIdInt(s));
-                    }
-                }
-                resIdlist.add(R.raw.fang);
-                resIdlist.add(R.raw.weishejian);
-                resIdlist.add(R.raw.jinjihujiao);
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                ArrayList<String> roomArray = StringUtils.substringBySing(entity.getRoomFrameName());
-                resIdlist.add(R.raw.en_washroom);
-                //resIdlist.add(R.raw.en_number);
-                for (String s : roomArray) {
-                    if (s.matches("\\d+")) {
-                        resIdlist.add(PalyPhonetics.getEnResIdInt(s));
-                    }
-                }
-                resIdlist.add(R.raw.calling);
-            }
-        }
-
-        setCallVolume();
-        mediaManager.playMusic(resIdlist);
-    }
-
     public void setCallType(int type) {
     public void setCallType(int type) {
         callType = type;
         callType = type;
     }
     }
@@ -587,6 +582,15 @@ public class CallService {
         cancelCountDownTimer();
         cancelCountDownTimer();
     }
     }
 
 
+    public void stopSpeakOrMusic() {
+        if (callType == 2) {
+            //停止播放铃音
+            stopPlayMusic();
+        } else {
+            stopSpeak();
+        }
+    }
+
     public void initCountDownTimer(int time) {
     public void initCountDownTimer(int time) {
         //循环播放,取消倒计时
         //循环播放,取消倒计时
         if (time == -1) {
         if (time == -1) {
@@ -672,7 +676,7 @@ public class CallService {
                     ArrayList<Integer> resIdlist = new ArrayList<>();
                     ArrayList<Integer> resIdlist = new ArrayList<>();
                     //从语音播报列表中取出一个
                     //从语音播报列表中取出一个
                     SpeakEntity speakEntity = speakList.get(0);
                     SpeakEntity speakEntity = speakList.get(0);
-                    if (DeviceEnum.WDBED.value().equals(speakEntity.getType())
+                    if (DeviceEnum.WDBED.value() == speakEntity.getType()
                             && DeviceModel.WDMN.equals(DeviceHelper.getModelName(speakEntity.getModel()))) {
                             && DeviceModel.WDMN.equals(DeviceHelper.getModelName(speakEntity.getModel()))) {
                         //房间
                         //房间
                         ArrayList<String> roomArray = StringUtils.substringBySing(speakEntity.getRoomFrameName());
                         ArrayList<String> roomArray = StringUtils.substringBySing(speakEntity.getRoomFrameName());
@@ -691,7 +695,7 @@ public class CallService {
                         }
                         }
                         resIdlist.add(R.raw.chuang);
                         resIdlist.add(R.raw.chuang);
                         resIdlist.add(R.raw.hujiao);
                         resIdlist.add(R.raw.hujiao);
-                    } else if (DeviceEnum.WDROOM.value().equals(speakEntity.getType())
+                    } else if (DeviceEnum.WDROOM.value() == speakEntity.getType()
                             && DeviceModel.WDFS.equals(DeviceHelper.getModelName(speakEntity.getModel()))) {
                             && DeviceModel.WDFS.equals(DeviceHelper.getModelName(speakEntity.getModel()))) {
                         //房间
                         //房间
                         ArrayList<String> roomArray = StringUtils.substringBySing(speakEntity.getRoomFrameName());
                         ArrayList<String> roomArray = StringUtils.substringBySing(speakEntity.getRoomFrameName());

+ 3 - 3
app/src/main/java/com/wdkl/callingsystemmanager/service/CallStatusEnum.java

@@ -37,9 +37,9 @@ package com.wdkl.callingsystemmanager.service;
 public enum CallStatusEnum {
 public enum CallStatusEnum {
     WAIT_CALL(0,"待机"),
     WAIT_CALL(0,"待机"),
     WAIT_RESPONSE(1,"等待接听"),
     WAIT_RESPONSE(1,"等待接听"),
-    CALLING(2,"通话中"),
-    END_CALL(3,"挂断"),
-    IN_QUEUE(4,"进入接听队例");
+    CALLING(3,"通话中"),
+    END_CALL(4,"挂断"),
+    IN_QUEUE(5,"进入接听队例");
 
 
     private Integer status;
     private Integer status;
     private String desc;
     private String desc;

+ 1 - 1
app/src/main/java/com/wdkl/callingsystemmanager/service/MediaService.java

@@ -151,7 +151,7 @@ public class MediaService extends Service {
         public void addSpeakEntity(SpeakEntity entity) {
         public void addSpeakEntity(SpeakEntity entity) {
             synchronized (lock) {
             synchronized (lock) {
                 if (!speakList.contains(entity)) {
                 if (!speakList.contains(entity)) {
-                    Log.d("speak", "addSpeakEntity: " + entity.getFrameName());
+                    Log.d("speak", "addSpeakEntity: room=" + entity.getRoomFrameName() + ", bed=" + entity.getFrameName());
                     speakList.add(entity);
                     speakList.add(entity);
                     startSpeakThread();
                     startSpeakThread();
                 }
                 }

+ 12 - 0
app/src/main/java/com/wdkl/callingsystemmanager/service/MyFragmentManager.java

@@ -9,6 +9,7 @@ import java.util.List;
 public class MyFragmentManager {
 public class MyFragmentManager {
     private static MyFragmentManager instance = null;
     private static MyFragmentManager instance = null;
     private FragmentManager fragmentManager;
     private FragmentManager fragmentManager;
+    private String fragmentTag;
 
 
     private MyFragmentManager(){
     private MyFragmentManager(){
     }
     }
@@ -30,6 +31,7 @@ public class MyFragmentManager {
 
 
     public void addFragmentToBackStack(int resID, Fragment fragment, String tag) {
     public void addFragmentToBackStack(int resID, Fragment fragment, String tag) {
         if (fragmentManager != null) {
         if (fragmentManager != null) {
+            fragmentTag = tag;
             fragmentManager.beginTransaction()
             fragmentManager.beginTransaction()
                     .add(resID, fragment, tag)
                     .add(resID, fragment, tag)
                     .addToBackStack(tag)
                     .addToBackStack(tag)
@@ -39,6 +41,7 @@ public class MyFragmentManager {
 
 
     public void addFragment(int resId, Fragment fragment, String tag) {
     public void addFragment(int resId, Fragment fragment, String tag) {
         if (fragmentManager != null) {
         if (fragmentManager != null) {
+            fragmentTag = tag;
             fragmentManager.beginTransaction()
             fragmentManager.beginTransaction()
                     .add(resId, fragment, tag)
                     .add(resId, fragment, tag)
                     .commit();
                     .commit();
@@ -47,6 +50,7 @@ public class MyFragmentManager {
 
 
     public void replaceFragment(int resId, Fragment fragment, String tag) {
     public void replaceFragment(int resId, Fragment fragment, String tag) {
         if (fragmentManager != null) {
         if (fragmentManager != null) {
+            fragmentTag = tag;
             fragmentManager.beginTransaction()
             fragmentManager.beginTransaction()
                     .replace(resId, fragment, tag)
                     .replace(resId, fragment, tag)
                     .commit();
                     .commit();
@@ -55,6 +59,7 @@ public class MyFragmentManager {
 
 
     public void replaceFragmentToBackStack(int resId, Fragment fragment, String tag) {
     public void replaceFragmentToBackStack(int resId, Fragment fragment, String tag) {
         if (fragmentManager != null) {
         if (fragmentManager != null) {
+            fragmentTag = tag;
             fragmentManager.beginTransaction()
             fragmentManager.beginTransaction()
                     .replace(resId, fragment, tag)
                     .replace(resId, fragment, tag)
                     .addToBackStack(tag)
                     .addToBackStack(tag)
@@ -75,4 +80,11 @@ public class MyFragmentManager {
             transaction.commit();
             transaction.commit();
         }
         }
     }
     }
+
+    public String getFragmentTag() {
+        if (fragmentTag == null) {
+            return "";
+        }
+        return fragmentTag;
+    }
 }
 }

+ 49 - 92
app/src/main/java/com/wdkl/callingsystemmanager/service/SerialPortService.java

@@ -12,9 +12,11 @@ import com.kongqw.serialportlibrary.listener.OnSerialPortDataListener;
 import com.wdkl.callingsystemmanager.BaseApp;
 import com.wdkl.callingsystemmanager.BaseApp;
 import com.wdkl.callingsystemmanager.R;
 import com.wdkl.callingsystemmanager.R;
 import com.wdkl.callingsystemmanager.constant.Constants;
 import com.wdkl.callingsystemmanager.constant.Constants;
+import com.wdkl.callingsystemmanager.db.McuDeviceBean;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBean;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBean;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBeanDao;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBeanDao;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
 import com.wdkl.callingsystemmanager.helper.DeviceHelper;
 import com.wdkl.callingsystemmanager.helper.DeviceHelper;
 import com.wdkl.callingsystemmanager.service.callback.IDebugInfoListner;
 import com.wdkl.callingsystemmanager.service.callback.IDebugInfoListner;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
 import com.wdkl.callingsystemmanager.util.SharedPreferencesUtil;
@@ -44,6 +46,7 @@ public class SerialPortService implements OnOpenSerialPortListener {
     private Lock lock = new ReentrantLock();// 锁对象
     private Lock lock = new ReentrantLock();// 锁对象
 
 
     private CountDownTimer mCountDownTimer;
     private CountDownTimer mCountDownTimer;
+    private CallingItem calling;
 
 
     private IDebugInfoListner debugInfoListner;
     private IDebugInfoListner debugInfoListner;
 
 
@@ -103,6 +106,10 @@ public class SerialPortService implements OnOpenSerialPortListener {
             @Override
             @Override
             public void onFinish() {
             public void onFinish() {
                 ToastUtil.showShortToast(R.string.str_device_invalid_notice);
                 ToastUtil.showShortToast(R.string.str_device_invalid_notice);
+                removeCallbacks();
+                if (calling != null) {
+                    endCall(calling);
+                }
             }
             }
         };
         };
     }
     }
@@ -236,13 +243,13 @@ public class SerialPortService implements OnOpenSerialPortListener {
                 if (serialModel.getData()[1] == (byte) 0x00) { //按下
                 if (serialModel.getData()[1] == (byte) 0x00) { //按下
                 } else if (serialModel.getData()[1] == (byte) 0x01 || serialModel.getData()[1] == (byte) 0x02) {   //长按
                 } else if (serialModel.getData()[1] == (byte) 0x01 || serialModel.getData()[1] == (byte) 0x02) {   //长按
                     if (CallService.getInstance().getCallingStatus()==CallStatusEnum.CALLING){    //通话中,则挂断
                     if (CallService.getInstance().getCallingStatus()==CallStatusEnum.CALLING){    //通话中,则挂断
-                        BedVO bedVO = CallService.getInstance().getCallingBedVO();
+                        CallingItem bedVO = CallService.getInstance().getCallingBedVO();
                         if (bedVO != null) {
                         if (bedVO != null) {
                             endCall(bedVO);
                             endCall(bedVO);
                         }
                         }
                     } else {    //否则是接听
                     } else {    //否则是接听
                         if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE) {
                         if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE) {
-                            BedVO bedVO = CallService.getInstance().getCallingBedVO();
+                            CallingItem bedVO = CallService.getInstance().getCallingBedVO();
                             if (bedVO != null) {
                             if (bedVO != null) {
                                 sendCall(bedVO);
                                 sendCall(bedVO);
                             }
                             }
@@ -252,14 +259,14 @@ public class SerialPortService implements OnOpenSerialPortListener {
                 break;
                 break;
             case MCU_MSG_HANDLE_STATE:  //手柄插簧开关状态发生变化
             case MCU_MSG_HANDLE_STATE:  //手柄插簧开关状态发生变化
                 if (serialModel.getData()[0] == (byte) 0x00 && CallService.getInstance().getCallingStatus()==CallStatusEnum.CALLING) {  //按下,即挂断
                 if (serialModel.getData()[0] == (byte) 0x00 && CallService.getInstance().getCallingStatus()==CallStatusEnum.CALLING) {  //按下,即挂断
-                    BedVO bedVO = CallService.getInstance().getCallingBedVO();
+                    CallingItem bedVO = CallService.getInstance().getCallingBedVO();
                     if (bedVO != null) {
                     if (bedVO != null) {
                         endCall(bedVO);
                         endCall(bedVO);
                     }
                     }
                     Log.d(TAG,"挂断完成");
                     Log.d(TAG,"挂断完成");
                 } else {    //释放,即接听
                 } else {    //释放,即接听
                     if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE) {
                     if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE) {
-                        BedVO bedVO = CallService.getInstance().getCallingBedVO();
+                        CallingItem bedVO = CallService.getInstance().getCallingBedVO();
                         if (bedVO != null) {
                         if (bedVO != null) {
                             sendCall(bedVO);
                             sendCall(bedVO);
                         }
                         }
@@ -268,16 +275,11 @@ public class SerialPortService implements OnOpenSerialPortListener {
                 }
                 }
                 break;
                 break;
             case MCU_MSG_CALLIN_REQ:    //分机请求呼叫
             case MCU_MSG_CALLIN_REQ:    //分机请求呼叫
-                BedVO bedVO = CallService.getInstance().CallInPut(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
-                /*if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL) {
-                    CallService.getInstance().setCALLING(CallStatusEnum.WAIT_RESPONSE, bedVO);
-                }*/
-                Log.d(TAG,"分机请求呼叫: addr = " + getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL()));
                 break;
                 break;
             case MCU_MSG_CALLOFF_REQ:   //分机挂断
             case MCU_MSG_CALLOFF_REQ:   //分机挂断
                 String uartAddr = getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
                 String uartAddr = getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
-                BedVO callingBedVO = CallService.getInstance().getCallingBedVO();
-                if (callingBedVO != null && callingBedVO.getDevice().getUartAddress().equals(uartAddr)) {
+                CallingItem callingBedVO = CallService.getInstance().getCallingBedVO();
+                if (callingBedVO != null && callingBedVO.getUartAddr().equals(uartAddr)) {
                     //当前正在通话或等待接通的分机挂断
                     //当前正在通话或等待接通的分机挂断
                     if (CallService.getInstance().getCallingStatus() == CallStatusEnum.CALLING) {
                     if (CallService.getInstance().getCallingStatus() == CallStatusEnum.CALLING) {
                         endCall(callingBedVO);
                         endCall(callingBedVO);
@@ -286,19 +288,14 @@ public class SerialPortService implements OnOpenSerialPortListener {
                     }
                     }
                 } else {
                 } else {
                     //等待通话队列中的分机挂断
                     //等待通话队列中的分机挂断
-                    CallService.getInstance().callInTakeBackground(uartAddr);
+                    //CallService.getInstance().callInTakeBackground(uartAddr);
                 }
                 }
                 Log.d(TAG,"分机挂断: addr = " + uartAddr);
                 Log.d(TAG,"分机挂断: addr = " + uartAddr);
                 break;
                 break;
             case MCU_MSG_SOSON_REQ:    //紧急呼叫请求
             case MCU_MSG_SOSON_REQ:    //紧急呼叫请求
-                CallService.getInstance().SosCallIn(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
-                Log.d(TAG, "紧急呼叫请求: addr = " + getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL()));
                 break;
                 break;
             case MCU_MSG_DEVICEMAC_RES: //已注册设备地址确认
             case MCU_MSG_DEVICEMAC_RES: //已注册设备地址确认
                 //todo: 未有接收的分机地址
                 //todo: 未有接收的分机地址
-                String addr = getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
-                registerAllMCU();
-                Log.d(TAG,"已注册设备地址确认, addr: " + addr);
                 break;
                 break;
             case MCU_MSG_VERSION_INFO:  //收到心跳包时的回复,得到版本信息
             case MCU_MSG_VERSION_INFO:  //收到心跳包时的回复,得到版本信息
                 byte[] versionInfo = serialModel.getData();
                 byte[] versionInfo = serialModel.getData();
@@ -315,30 +312,13 @@ public class SerialPortService implements OnOpenSerialPortListener {
                 break;
                 break;
             case MCU_MSG_INQUIRE_RES:   //分机状态回复
             case MCU_MSG_INQUIRE_RES:   //分机状态回复
                 String uAddr = getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
                 String uAddr = getUAddr(serialModel.getSlaveAddH(), serialModel.getSlaveAddL());
-                //Log.d("wzl", "check device response: " + uAddr);
-                NcsDeviceInfoBean device = BaseApp.getDaoInstant().getNcsDeviceInfoBeanDao().queryBuilder()
-                        .where(NcsDeviceInfoBeanDao.Properties.UartAddress.eq(uAddr))
-                        .limit(1).unique();
-                if (device == null){
-                    return;
-                }
-                if (serialModel.getData()[0]==0x00){    //未在线
-                    device.setStatus(false);
-                } else {
-                    device.setStatus(true);
-                }
-                Log.d(TAG,"分机状态回复,addr: " + uAddr + ", status: " + serialModel.getData()[0]);
-                BaseApp.getDaoInstant().getNcsDeviceInfoBeanDao().update(device);
-                if (mCallback != null) {
-                    mCallback.onCheckCompleted(uAddr, (int)serialModel.getData()[0]);
-                }
                 if (mCallingCheck != null) {
                 if (mCallingCheck != null) {
                     mCallingCheck.onCallingCheckComplete(uAddr, (int)serialModel.getData()[0]);
                     mCallingCheck.onCallingCheckComplete(uAddr, (int)serialModel.getData()[0]);
                 }
                 }
                 break;
                 break;
             case MCU_MSG_CALLMODE_RES:  //通话模式状态请求
             case MCU_MSG_CALLMODE_RES:  //通话模式状态请求
-                int mode = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallMode);
-                setCallMode(mode);
+                //int mode = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallMode);
+                //setCallMode(mode);
                 break;
                 break;
         }
         }
     }
     }
@@ -412,12 +392,12 @@ public class SerialPortService implements OnOpenSerialPortListener {
         @Override
         @Override
         public void run() {
         public void run() {
             if (getPortOpened()) {
             if (getPortOpened()) {
-                List<NcsDeviceInfoBean> devices = DeviceHelper.getAllMCUDevices();
-                if (devices != null && devices.size() > 0) {
+                List<McuDeviceBean> mcuDeviceBeans = BaseApp.getDaoInstant().getMcuDeviceBeanDao().loadAll();
+                if (mcuDeviceBeans != null && mcuDeviceBeans.size() > 0) {
                     try {
                     try {
-                        int all = devices.size();
+                        int all = mcuDeviceBeans.size();
                         for (int i = 0; i < all; i++) {
                         for (int i = 0; i < all; i++) {
-                            initMCUDevice(devices.get(i).getUartAddress(), i + 1, all);
+                            initMCUDevice(mcuDeviceBeans.get(i).getUartAddr(), i + 1, all);
                             Thread.sleep(500);
                             Thread.sleep(500);
                         }
                         }
                     } catch (Exception e) {
                     } catch (Exception e) {
@@ -486,58 +466,35 @@ public class SerialPortService implements OnOpenSerialPortListener {
         sendSignal(serialModel);
         sendSignal(serialModel);
     }
     }
 
 
-    public synchronized void sendCall(final BedVO bedVO) {
-        if (bedVO.getDevice() != null) {
-            String uartAddr = bedVO.getDevice().getUartAddress();
-            mCountDownTimer.start();
-            sendCall(uartAddr, new CallingCheckCallback() {
-                @Override
-                public void onCallingCheckComplete(String uAddr, int status) {
-                    removeCallbacks();
-                    if (uAddr.equals(uartAddr) && status == 1) {
-                        //通话成功
-                        mCountDownTimer.cancel();
-                        CallService.getInstance().setCALLING(CallStatusEnum.CALLING, bedVO);
-                        //日志操作
-                        LogService.getInstance().addCallLog(false, CallService.getInstance().getCallingBedVO());
-                    }
-                }
-            });
-        } else {
-            ToastUtil.showShortToast(R.string.str_no_device);
-        }
-    }
-
-/*    public synchronized void sendCall(BedVO bedVO) {
-        if (bedVO.getDevice() != null) {
-            String uartAddr = bedVO.getDevice().getUartAddress();
-            byte[] slaveAdd = SerialPortService.hexToByteArray(uartAddr);
-            checkSlaveStatus(uartAddr, new CheckStatusCallback() {
-                @Override
-                public void onCheckCompleted(String uAddr, int status) {
-                    //Log.d("wzl", "received check result: " + uAddr + ", status: " + status);
-                    removeCheckCallback();
-                    if (uAddr.equals(uartAddr) && status == 1) {
-                        //设备在线,发起通话
-                        SerialModel serialModel = new SerialModel(
-                                slaveAdd[0], slaveAdd[1],
-                                SerialSignalTypeEnum.APP_MSG_CALL_IN_RES.getDataType(), (byte) 0x00
-                        );
-                        sendSignal(serialModel);
-                        CallService.getInstance().setCALLING(CallStatusEnum.CALLING, bedVO);
-                        //日志操作
-                        LogService.getInstance().addCallLog(false, CallService.getInstance().getCallingBedVO());
-                    } else {
-                        CallService.getInstance().setCALLING(CallStatusEnum.END_CALL,bedVO);
-                        ToastUtil.showShortToast(R.string.str_device_invalid_notice);
-                    }
-                }
-            });
+    public synchronized void sendCall(final CallingItem bedVO) {
+        CallService.getInstance().stopSpeakOrMusic();
+        if (CallService.getInstance().getCallingStatus() == CallStatusEnum.CALLING) {
+            ToastUtil.showShortToast("正在通话中...");
+            return;
         }
         }
-    }*/
 
 
-    public void endCall(BedVO bedVO){
-        byte[] slaveAdd = SerialPortService.hexToByteArray(bedVO.getDevice().getUartAddress());
+        String uartAddr = bedVO.getUartAddr();
+        mCallingCheck = null;
+        mCountDownTimer.cancel();
+        mCountDownTimer.start();
+        calling = bedVO;
+        sendCall(uartAddr, new CallingCheckCallback() {
+            @Override
+            public void onCallingCheckComplete(String uAddr, int status) {
+                removeCallbacks();
+                if (uAddr.equals(uartAddr) && status == 1) {
+                    //通话成功
+                    mCountDownTimer.cancel();
+                    CallService.getInstance().setCALLING(CallStatusEnum.CALLING, bedVO);
+                    //日志操作
+                }
+            }
+        });
+    }
+
+
+    public void endCall(CallingItem bedVO){
+        byte[] slaveAdd = SerialPortService.hexToByteArray(bedVO.getUartAddr());
         SerialModel serialModel = new SerialModel(
         SerialModel serialModel = new SerialModel(
                 slaveAdd[0],slaveAdd[1],
                 slaveAdd[0],slaveAdd[1],
                 SerialSignalTypeEnum.APP_MSG_CALL_OFF_REQ.getDataType(), (byte) 0x00
                 SerialSignalTypeEnum.APP_MSG_CALL_OFF_REQ.getDataType(), (byte) 0x00
@@ -746,7 +703,7 @@ public class SerialPortService implements OnOpenSerialPortListener {
         return signal;
         return signal;
     }
     }
 
 
-    public static void main(String[] args) {
+    /*public static void main(String[] args) {
         byte[] signal = {(byte)0x22,(byte)0x4E};
         byte[] signal = {(byte)0x22,(byte)0x4E};
         byte[] signal1 = buildSignal((byte)0x00);
         byte[] signal1 = buildSignal((byte)0x00);
         byte[] signal2 = buildSignal((byte)0x24);
         byte[] signal2 = buildSignal((byte)0x24);
@@ -777,7 +734,7 @@ public class SerialPortService implements OnOpenSerialPortListener {
                 x=new ArrayList<>();
                 x=new ArrayList<>();
             }
             }
         }
         }
-    }
+    }*/
 
 
     private static byte[] byteMerger(byte[] bt1, byte[] bt2){
     private static byte[] byteMerger(byte[] bt1, byte[] bt2){
         byte[] bt3 = new byte[bt1.length+bt2.length];
         byte[] bt3 = new byte[bt1.length+bt2.length];

+ 213 - 127
app/src/main/java/com/wdkl/callingsystemmanager/ui/activity/MainActivity.java

@@ -8,6 +8,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager;
+import android.net.wifi.WifiManager;
 import android.os.AsyncTask;
 import android.os.AsyncTask;
 import android.os.Handler;
 import android.os.Handler;
 import android.os.Message;
 import android.os.Message;
@@ -57,12 +58,19 @@ import com.wdkl.callingsystemmanager.custom.MyLinearLayoutManager;
 import com.wdkl.callingsystemmanager.custom.MyViewPager;
 import com.wdkl.callingsystemmanager.custom.MyViewPager;
 import com.wdkl.callingsystemmanager.custom.MyViewPagerAdapter;
 import com.wdkl.callingsystemmanager.custom.MyViewPagerAdapter;
 import com.wdkl.callingsystemmanager.custom.SOSCallingDialog;
 import com.wdkl.callingsystemmanager.custom.SOSCallingDialog;
+import com.wdkl.callingsystemmanager.db.DeviceModel;
 import com.wdkl.callingsystemmanager.db.EmployeeBean;
 import com.wdkl.callingsystemmanager.db.EmployeeBean;
 import com.wdkl.callingsystemmanager.db.HospitalFrameBean;
 import com.wdkl.callingsystemmanager.db.HospitalFrameBean;
+import com.wdkl.callingsystemmanager.db.McuDeviceBean;
+import com.wdkl.callingsystemmanager.db.MessageEvent;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBean;
 import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBean;
 import com.wdkl.callingsystemmanager.db.NurseConfigBean;
 import com.wdkl.callingsystemmanager.db.NurseConfigBean;
+import com.wdkl.callingsystemmanager.db.PartDeviceBean;
 import com.wdkl.callingsystemmanager.db.PatientInfoBean;
 import com.wdkl.callingsystemmanager.db.PatientInfoBean;
+import com.wdkl.callingsystemmanager.db.vo.BedItem;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
+import com.wdkl.callingsystemmanager.helper.DeviceHelper;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.CallStatusEnum;
 import com.wdkl.callingsystemmanager.service.CallStatusEnum;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
@@ -76,6 +84,8 @@ import com.wdkl.callingsystemmanager.service.record.MediaPlayerManger;
 import com.wdkl.callingsystemmanager.service.server.ServerManager;
 import com.wdkl.callingsystemmanager.service.server.ServerManager;
 import com.wdkl.callingsystemmanager.ui.adapter.CallAdapter;
 import com.wdkl.callingsystemmanager.ui.adapter.CallAdapter;
 import com.wdkl.callingsystemmanager.ui.adapter.DebugLogAdapter;
 import com.wdkl.callingsystemmanager.ui.adapter.DebugLogAdapter;
+import com.wdkl.callingsystemmanager.ui.adapter.PartAdapter;
+import com.wdkl.callingsystemmanager.ui.fragment.BedFragment2;
 import com.wdkl.callingsystemmanager.ui.fragment.PartDataFragment;
 import com.wdkl.callingsystemmanager.ui.fragment.PartDataFragment;
 import com.wdkl.callingsystemmanager.ui.fragment.RoomFragment;
 import com.wdkl.callingsystemmanager.ui.fragment.RoomFragment;
 import com.wdkl.callingsystemmanager.ui.fragment.DeviceFragment;
 import com.wdkl.callingsystemmanager.ui.fragment.DeviceFragment;
@@ -94,6 +104,10 @@ import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction;
 import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
 import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
 import com.xuexiang.xui.widget.edittext.ValidatorEditText;
 import com.xuexiang.xui.widget.edittext.ValidatorEditText;
 
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
 import java.io.IOException;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.lang.ref.WeakReference;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
@@ -103,9 +117,12 @@ import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.UUID;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 
 import butterknife.BindView;
 import butterknife.BindView;
 import butterknife.OnClick;
 import butterknife.OnClick;
+import okhttp3.Call;
+import okhttp3.Callback;
 import okhttp3.OkHttpClient;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Request;
 import okhttp3.Response;
 import okhttp3.Response;
@@ -168,14 +185,16 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
     @BindView(R.id.activity_main_layout_tv_version)
     @BindView(R.id.activity_main_layout_tv_version)
     TextView tvVersion;
     TextView tvVersion;
 
 
+    @BindView(R.id.rv_part_list)
+    RecyclerView rvPart;
+
     DebugLogAdapter debugLogAdapter;
     DebugLogAdapter debugLogAdapter;
     private List<String> debugLogs = new ArrayList<>();
     private List<String> debugLogs = new ArrayList<>();
 
 
 
 
-    private List<Fragment> mFragments;
-
+    PartAdapter partAdapter;
     CallAdapter callAdapter;
     CallAdapter callAdapter;
-    private List<BedVO> dataBeans = new ArrayList<>();
+    private List<CallingItem> dataBeans = new ArrayList<>();
 
 
     public final static String EX_TIME_BROADCAST_ACTION = "com.wdkl.action.timebc";
     public final static String EX_TIME_BROADCAST_ACTION = "com.wdkl.action.timebc";
     private AlarmReceiver alarmReceiver;
     private AlarmReceiver alarmReceiver;
@@ -197,6 +216,12 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
     private DeviceFragment deviceFragment;
     private DeviceFragment deviceFragment;
     private PartDataFragment partDataFragment;
     private PartDataFragment partDataFragment;
     private SystemFragment systemFragment;
     private SystemFragment systemFragment;
+    private BedFragment2 bedFragment2;
+
+    private List<PartDeviceBean> partDeviceList = new ArrayList<>();
+    private List<BedItem> bedItems = new ArrayList<>();
+    private String lastSelectIp = "0";
+    private boolean isLoading = false;
 
 
     @Override
     @Override
     public int getLayoutId() {
     public int getLayoutId() {
@@ -213,37 +238,89 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
         return null;
         return null;
     }
     }
 
 
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        EventBus.getDefault().register(this);
+    }
+
     @Override
     @Override
-    public void init() {
-//        mFragments = new ArrayList<>();
-//        mFragments.add(RoomFragment.newInstance("床位呼叫"));
-//        mFragments.add(DeviceDataFragment.newInstance("数据维护"));
-//        mFragments.add(DeviceFragment.newInstance("设备管理"));
-//        mFragments.add(DoctorCallFragment.newInstance("医生呼叫"));
-//        mFragments.add(RegionalBroadcastFragment.newInstance("区域广播"));
-//        mFragments.add(LogFragment.newInstance("日志查询"));
-//        mFragments.add(SystemFragment.newInstance("系统设置"));
-        //mFragments.add(BedFragment.newInstance("床位病人"));
+    public void onStop() {
+        super.onStop();
+        EventBus.getDefault().unregister(this);
+    }
 
 
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void onMoonEvent(MessageEvent messageEvent) {
+        if (messageEvent.getType() == Constants.EVENT_UDP ) {
+            CallingItem callingItem = (CallingItem) messageEvent.getMessage();
+            Log.d("onMoonEvent", "callingItem String==" + callingItem.toString());
+            //long count = partDeviceList.stream().filter(p->p.getPartId()==callingItem.getPartId()).count();
+            //if (count == 0) {
+            //    return;
+            //}
+
+            switch (callingItem.getIndex()) {
+                case "classic_call_1":
+                case "classic_call_2":
+                    CallService.getInstance().incomingCall(callingItem);
+                    break;
+                case "classic_call_2_cancel":
+                    SOSCall call = new SOSCall(callingItem.getRoomNo(), callingItem.getUartAddr(), "0");
+                    removeUrgentWindow(call);
+                    break;
+            }
+        }
+    }
+
+    @Override
+    public void init() {
         //申请权限
         //申请权限
         requestPermissions();
         requestPermissions();
 
 
-//        adapter = new MyViewPagerAdapter(getSupportFragmentManager(), mFragments);
-//        viewPager.setAdapter(adapter);
-//        // register listener
-//        viewPager.addOnPageChangeListener(mPageChangeListener);
-        llTitle.setOnCheckedChangeListener(mOnCheckedChangeListener);
+        ProgressDialogUtil.createProgressDialog(getActivityContext());
+        //llTitle.setOnCheckedChangeListener(mOnCheckedChangeListener);
 
 
         app.mFragmentManager = getSupportFragmentManager();
         app.mFragmentManager = getSupportFragmentManager();
         MyFragmentManager.getInstance().setFragmentManager(app.mFragmentManager);
         MyFragmentManager.getInstance().setFragmentManager(app.mFragmentManager);
 
 
-        int bedType = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.BedShowType);
-        if (bedType == 0) {
-            roomFragment = RoomFragment.newInstance("床位呼叫");
-        } else {
-            roomFragment = RoomFragment2.newInstance("床位呼叫");
+        //int bedType = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.BedShowType);
+        //if (bedType == 0) {
+        //    roomFragment = RoomFragment.newInstance("床位呼叫");
+        //} else {
+        //    roomFragment = RoomFragment2.newInstance("床位呼叫");
+        //}
+        //MyFragmentManager.getInstance().addFragmentToBackStack(R.id.fragment_layout, roomFragment, "床位呼叫");
+
+        partDeviceList = BaseApp.getDaoInstant().getPartDeviceBeanDao().loadAll();
+        partAdapter = new PartAdapter(R.layout.item_part, partDeviceList);
+        MyLinearLayoutManager partLayoutManager = new MyLinearLayoutManager(MainActivity.this);
+        partLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+        rvPart.setAdapter(partAdapter);
+        rvPart.setLayoutManager(partLayoutManager);
+        partAdapter.notifyDataSetChanged();
+        partAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
+            @Override
+            public void onItemClick(BaseQuickAdapter baseQuickAdapter, View view, int i) {
+                PartDeviceBean item = partDeviceList.get(i);
+                String ip = item.getPartDeviceIp();
+                if (!ip.equals("NULL") && !ip.equals(lastSelectIp)) {
+                    getPartInfo(ip);
+                    lastSelectIp = ip;
+                }
+            }
+        });
+
+        bedFragment2 = BedFragment2.newInstance("BedList");
+        bedFragment2.setData(bedItems);
+        MyFragmentManager.getInstance().addFragment(R.id.fragment_layout, bedFragment2, "BedList");
+        if (partDeviceList.size() > 0) {
+            String ipAddr = partDeviceList.get(0).getPartDeviceIp();
+            getPartInfo(ipAddr);
+            lastSelectIp = ipAddr;
         }
         }
-        MyFragmentManager.getInstance().addFragmentToBackStack(R.id.fragment_layout, roomFragment, "床位呼叫");
+
 
 
         callAdapter = new CallAdapter(R.layout.item_call, dataBeans);
         callAdapter = new CallAdapter(R.layout.item_call, dataBeans);
         MyLinearLayoutManager layoutManager = new MyLinearLayoutManager(MainActivity.this);
         MyLinearLayoutManager layoutManager = new MyLinearLayoutManager(MainActivity.this);
@@ -258,16 +335,6 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                 if (CallService.getInstance().getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
                 if (CallService.getInstance().getCallingStatus() == CallStatusEnum.WAIT_RESPONSE) {
                     callAdapter.setSelectedCall(position);
                     callAdapter.setSelectedCall(position);
                 }
                 }
-
-                /*ImageView imgCall =  view.findViewById(R.id.ic_img_status);
-                BedVO bedVO = (BedVO) adapter.getData().get(position);
-
-                if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL) {
-                    imgCall.setImageResource(R.mipmap.img_gd); //挂断图标
-                    SerialPortService.getInstance().sendCall(bedVO);
-                } else if (CallService.getInstance().getCallingStatus()==CallStatusEnum.CALLING) {
-                    SerialPortService.getInstance().endCall(bedVO);
-                }*/
             }
             }
         });
         });
 
 
@@ -281,11 +348,10 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
             @Override
             @Override
             public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
             public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
                 int removePos = viewHolder.getAdapterPosition();
                 int removePos = viewHolder.getAdapterPosition();
-                BedVO bedVO = callAdapter.getCallItem(removePos);
+                CallingItem bedVO = callAdapter.getCallItem(removePos);
                 if (bedVO != null) {
                 if (bedVO != null) {
                     SerialPortService.getInstance().endCall(bedVO);
                     SerialPortService.getInstance().endCall(bedVO);
                 }
                 }
-                //Log.d("wzl", "view remove item pos: " + removePos + ", i = " + i);
             }
             }
         });
         });
         touchHelper.attachToRecyclerView(rlCall);
         touchHelper.attachToRecyclerView(rlCall);
@@ -299,14 +365,13 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
 
 
         //注册定时广播
         //注册定时广播
         IntentFilter filter2 = new IntentFilter();
         IntentFilter filter2 = new IntentFilter();
-        filter2.addAction(EX_TIME_BROADCAST_ACTION);
         filter2.addAction(Intent.ACTION_TIME_TICK);
         filter2.addAction(Intent.ACTION_TIME_TICK);
         filter2.addAction(Intent.ACTION_TIME_CHANGED);
         filter2.addAction(Intent.ACTION_TIME_CHANGED);
         alarmReceiver = new AlarmReceiver();
         alarmReceiver = new AlarmReceiver();
         registerReceiver(alarmReceiver, filter2);
         registerReceiver(alarmReceiver, filter2);
 
 
-        TimingBroadcastManager.getInstance().updateEnabledTimeBroadcast();
-        TimingBroadcastManager.getInstance().startTimeBroadcastThread();
+        //TimingBroadcastManager.getInstance().updateEnabledTimeBroadcast();
+        //TimingBroadcastManager.getInstance().startTimeBroadcastThread();
 
 
         //注册呼叫状态callback
         //注册呼叫状态callback
         callHandler = new CallHandler(this);
         callHandler = new CallHandler(this);
@@ -319,10 +384,6 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                         setCallStatus(statusEnum);
                         setCallStatus(statusEnum);
                     }
                     }
                 });
                 });
-                /*Message msg = new Message();
-                msg.what = 1;
-                msg.obj = statusEnum;
-                callHandler.sendMessage(msg);*/
             }
             }
 
 
             @Override
             @Override
@@ -333,10 +394,6 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                         showUrgentWindow(sosCall);
                         showUrgentWindow(sosCall);
                     }
                     }
                 });
                 });
-                /*Message msg = new Message();
-                msg.what = 2;
-                msg.obj = sosCall;
-                callHandler.sendMessage(msg);*/
             }
             }
         });
         });
 
 
@@ -372,39 +429,21 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                 }
                 }
             });
             });
         } else {
         } else {
-            SerialPortService.getInstance().registerAllMCU();
+            //延时注册MCU
+            callHandler.sendEmptyMessageDelayed(6, 3000);
+            //SerialPortService.getInstance().registerAllMCU();
             //延时发送通话模式设置
             //延时发送通话模式设置
-            callHandler.sendEmptyMessageDelayed(4, 5000);
+            //callHandler.sendEmptyMessageDelayed(4, 5000);
         }
         }
 
 
-        //tvAppVersion.setText("version: " + BuildConfig.VERSION_NAME);
-        ProgressDialogUtil.createProgressDialog(getActivityContext());
 
 
         CallService.getInstance().init(this);
         CallService.getInstance().init(this);
-        //CallService.getInstance().startPlayPhonetics();
-        /*LedBX6MTManager.getInstance().setOnExceptionListener(new LedBX6MTManager.OnExceptionListener() {
-            @Override
-            public void onSuccess(String msg) {
-                ToastUtil.showShortToast(msg);
-            }
-
-            @Override
-            public void onException(String method, Exception e) {
-                ToastUtil.showShortToast("LED exception on " + method + ": " + e.getCause().getMessage());
-            }
-
-            @Override
-            public void onError(String msg) {
-                ToastUtil.showShortToast(msg);
-            }
-        });
-        LedBX6MTManager.getInstance().connect();*/
-        LedManagerUtils.getInstance().initIp();
+        //LedManagerUtils.getInstance().initIp();
 
 
         //app version
         //app version
         tvVersion.setText("V" + BuildConfig.VERSION_NAME);
         tvVersion.setText("V" + BuildConfig.VERSION_NAME);
+        tvPartName.setText(R.string.app_name);
         updateDateTime();
         updateDateTime();
-        updatePartName();
     }
     }
 
 
     private void updateDateTime() {
     private void updateDateTime() {
@@ -422,6 +461,85 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
         }
         }
     }
     }
 
 
+    public void updatePartDevice() {
+        partDeviceList = BaseApp.getDaoInstant().getPartDeviceBeanDao().loadAll();
+        partAdapter.setNewData(partDeviceList);
+        callHandler.sendEmptyMessageDelayed(6, 1000);
+    }
+
+    private void getPartInfo(final String ip) {
+        if (isLoading) {
+            ToastUtil.showShortToast("请勿频繁点击...");
+            return;
+        }
+        isLoading = true;
+
+        OkHttpClient.Builder builder = new OkHttpClient.Builder()
+                .connectTimeout(30, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS);
+        String hostUrl = Constants.HOST_ADDR_PRE + ip + Constants.PORT + "/" + Constants.PART_INFO;
+        OkHttpClient httpClient = builder.build();
+        Request request = new Request.Builder()
+                .url(hostUrl)
+                .get()
+                .build();
+
+        httpClient.newCall(request).enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+                isLoading = false;
+                ToastUtil.showShortToast(R.string.connect_fail);
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                if (response.isSuccessful() && response.body() != null) {
+                    String responseStr = response.body().string();
+                    //Log.d("wzlll", "response: " + responseStr);
+                    JSONObject json = JSON.parseObject(responseStr);
+                    List<PatientInfoBean> patientList = JSONArray.parseArray(json.getString("patient"), PatientInfoBean.class);
+                    List<HospitalFrameBean> bedFrameList = JSONArray.parseArray(json.getString("bed_frame"), HospitalFrameBean.class);
+                    List<NcsDeviceInfoBean> bedDeviceList = JSONArray.parseArray(json.getString("bed_device"), NcsDeviceInfoBean.class);
+
+                    bedItems.clear();
+                    if (patientList != null && bedFrameList != null && bedDeviceList != null) {
+                        for (HospitalFrameBean bedFrame : bedFrameList) {
+                            BedItem bedItem = new BedItem();
+                            bedItem.setBedName(bedFrame.getName());
+                            List<PatientInfoBean> pList = patientList.stream().filter(p->p.getFrameId().intValue()==bedFrame.getId()).collect(Collectors.toList());
+                            if (pList.size() > 0) {
+                                String name = pList.get(0).getName();
+                                bedItem.setPatientName(name);
+                            }
+                            List<NcsDeviceInfoBean> dList = bedDeviceList.stream().filter(p->p.getFrameId().intValue()==bedFrame.getId()).collect(Collectors.toList());
+                            if (dList.size() > 0) {
+                                String addr = dList.get(0).getUartAddress();
+                                bedItem.setUartAddr(addr);
+                            }
+
+                            bedItems.add(bedItem);
+                        }
+                    }
+
+                    //显示床位列表界面
+                    runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            bedFragment2 = BedFragment2.newInstance("BedList");
+                            bedFragment2.setData(bedItems);
+                            MyFragmentManager.getInstance().replaceFragment(R.id.fragment_layout, bedFragment2, "BedList");
+                        }
+                    });
+                } else {
+                    ToastUtil.showShortToast(R.string.data_error);
+                }
+                isLoading = false;
+            }
+        });
+    }
+
+
     public static class CallHandler extends Handler {
     public static class CallHandler extends Handler {
 
 
         private WeakReference<MainActivity> weakReference;
         private WeakReference<MainActivity> weakReference;
@@ -436,17 +554,6 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
             MainActivity activity = weakReference.get();
             MainActivity activity = weakReference.get();
             if (activity != null) {
             if (activity != null) {
                 switch (msg.what) {
                 switch (msg.what) {
-                    /*case 1:
-                        activity.setCallStatus((CallStatusEnum) msg.obj);
-                        break;
-                    case 2:
-                        SOSCall call = (SOSCall) msg.obj;
-                        activity.showUrgentWindow(call);
-                        break;*/
-                    case 3:
-                        String filePath = (String) msg.obj;
-                        activity.sendTimeBroadcast(filePath);
-                        break;
                     case 4:
                     case 4:
                         int mode = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallMode);
                         int mode = SharedPreferencesUtil.getIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.CallMode);
                         SerialPortService.getInstance().setCallMode(mode);
                         SerialPortService.getInstance().setCallMode(mode);
@@ -454,6 +561,9 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                     case 5:
                     case 5:
                         activity.updateDebugInfo((String)msg.obj);
                         activity.updateDebugInfo((String)msg.obj);
                         break;
                         break;
+                    case 6:
+                        SerialPortService.getInstance().registerAllMCU();
+                        break;
                 }
                 }
             }
             }
         }
         }
@@ -534,7 +644,7 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
 
 
         PalyPhonetics.getInstance(BaseApp.getContext()).setPalyDismiss(true);
         PalyPhonetics.getInstance(BaseApp.getContext()).setPalyDismiss(true);
         PalyPhonetics.getInstance(BaseApp.getContext()).release();
         PalyPhonetics.getInstance(BaseApp.getContext()).release();
-        LedManagerUtils.getInstance().release();
+        //LedManagerUtils.getInstance().release();
         CallService.getInstance().unbindService();
         CallService.getInstance().unbindService();
         SerialPortService.getInstance().closeSerialPort();
         SerialPortService.getInstance().closeSerialPort();
         ServerManager.getInstance().stopServer();
         ServerManager.getInstance().stopServer();
@@ -587,7 +697,7 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
     }
     }
 
 
     private int lastCheckId;
     private int lastCheckId;
-    private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
+    /*private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
         @Override
         @Override
         public void onCheckedChanged(RadioGroup group, int checkedId) {
         public void onCheckedChanged(RadioGroup group, int checkedId) {
             int id = group.getCheckedRadioButtonId();
             int id = group.getCheckedRadioButtonId();
@@ -621,11 +731,6 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                 case R.id.rb_device:
                 case R.id.rb_device:
                     //设备管理
                     //设备管理
                     showLogin();
                     showLogin();
-/*                    app.mFragmentManager.beginTransaction()
-                            .replace(R.id.fragment_layout,DeviceFragment.newInstance("设备管理"),"设备管理")
-                            .addToBackStack("设备管理")
-                            .commit();*/
-
                     break;
                     break;
                 case R.id.rb_device_data:
                 case R.id.rb_device_data:
                     partDataFragment = PartDataFragment.newInstance();
                     partDataFragment = PartDataFragment.newInstance();
@@ -641,9 +746,9 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
 
 
             hideInputKeyboard();
             hideInputKeyboard();
         }
         }
-    };
+    };*/
 
 
-    @OnClick({R.id.ll_back, R.id.ll_call})
+    @OnClick({R.id.ll_back, R.id.ll_call, R.id.btn_settings})
     public void onClick(View view) {
     public void onClick(View view) {
         switch (view.getId()) {
         switch (view.getId()) {
             case R.id.ll_back:
             case R.id.ll_back:
@@ -655,7 +760,7 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL){
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL){
                     return;
                     return;
                 }
                 }
-                BedVO bedVO = CallService.getInstance().getCallingBedVO();
+                CallingItem bedVO = CallService.getInstance().getCallingBedVO();
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE){
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_RESPONSE){
                     if (bedVO == null){
                     if (bedVO == null){
                         Log.e("系统错误","没有得到呼叫的分机");
                         Log.e("系统错误","没有得到呼叫的分机");
@@ -670,6 +775,13 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                     SerialPortService.getInstance().endCall(bedVO);
                     SerialPortService.getInstance().endCall(bedVO);
                 }
                 }
                 break;
                 break;
+            case R.id.btn_settings:
+                if (!MyFragmentManager.getInstance().getFragmentTag().equals("系统设置")) {
+                    systemFragment = SystemFragment.newInstance("系统设置");
+                    MyFragmentManager.getInstance().replaceFragment(R.id.fragment_layout, systemFragment, "系统设置");
+                    lastSelectIp = "0";
+                }
+                break;
         }
         }
     }
     }
 
 
@@ -685,7 +797,7 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
             // 回退一步
             // 回退一步
             app.mFragmentManager.popBackStackImmediate();
             app.mFragmentManager.popBackStackImmediate();
             // 获取当前退到了哪一个Fragment上,重新获取当前的Fragment回退栈中的个数
             // 获取当前退到了哪一个Fragment上,重新获取当前的Fragment回退栈中的个数
-            FragmentManager.BackStackEntry backStack = app.mFragmentManager.getBackStackEntryAt(app.mFragmentManager.getBackStackEntryCount() - 1);
+/*            FragmentManager.BackStackEntry backStack = app.mFragmentManager.getBackStackEntryAt(app.mFragmentManager.getBackStackEntryCount() - 1);
             // 获取当前栈顶的Fragment的标记值
             // 获取当前栈顶的Fragment的标记值
             String tag = backStack.getName();
             String tag = backStack.getName();
             switch (tag) {
             switch (tag) {
@@ -707,32 +819,11 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
                 case "系统设置":
                 case "系统设置":
                     rbSystem.setChecked(true);
                     rbSystem.setChecked(true);
                     break;
                     break;
-            }
+            }*/
         }
         }
     }
     }
 
 
 
 
-//    //此方法中需返回fragment显示在的View的id
-//    @NotNull
-//    @Override
-//    public Map<String, Class<? extends BaseManagerFragment>> baseFragmentWithTag() {
-//        Map<String, Class<? extends BaseManagerFragment>> map = new HashMap<>();
-//        map.put("tag1", BlankFragment.class);
-//        map.put("tag2", RoomFragment.class);
-//        map.put("tag3", DoctorCallFragment.class);
-//        map.put("tag4", RoomFragment.class);
-//        map.put("tag5", RoomFragment.class);
-//        map.put("tag6", RoomFragment.class);
-//        return map;
-//    }
-//
-//    //此方法中需要返回多栈的栈名以及所对应的默认Fragment
-//    @Override
-//    protected int provideFragmentId() {
-//        return R.id.fragment_layout;
-//    }
-
-
     @Override
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
     public boolean dispatchTouchEvent(MotionEvent ev) {
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
@@ -780,21 +871,16 @@ public class MainActivity extends BaseActivity implements IDebugInfoListner {
         }
         }
     }
     }
 
 
+    private void removeUrgentWindow(SOSCall sosCall) {
+        if (sosCallingDialog != null && sosCallingDialog.isShowing()) {
+            sosCallingDialog.removeSOSCall(sosCall);
+        }
+    }
+
     public class AlarmReceiver extends BroadcastReceiver {
     public class AlarmReceiver extends BroadcastReceiver {
         @Override
         @Override
         public void onReceive(Context context, Intent intent) {
         public void onReceive(Context context, Intent intent) {
-            if (EX_TIME_BROADCAST_ACTION.equals(intent.getAction())) {
-                //定时广播时间到
-                Log.d("wzl", "broadcast time is up!");
-                String filePath = intent.getStringExtra("file");
-                //发送广播命令
-                SerialPortService.getInstance().startBroadcast();
-                //开始播放定时广播
-                Message msg = new Message();
-                msg.what = 3;
-                msg.obj = filePath;
-                callHandler.sendMessageDelayed(msg, 1000);
-            } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction()) || Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
+            if (Intent.ACTION_TIME_TICK.equals(intent.getAction()) || Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
                 Calendar calendar = Calendar.getInstance();
                 Calendar calendar = Calendar.getInstance();
                 int timeHour = calendar.get(Calendar.HOUR_OF_DAY);
                 int timeHour = calendar.get(Calendar.HOUR_OF_DAY);
                 if (timeHour > 7 && timeHour < 19) {
                 if (timeHour > 7 && timeHour < 19) {

+ 95 - 0
app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/BedAdapter2.java

@@ -0,0 +1,95 @@
+package com.wdkl.callingsystemmanager.ui.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.wdkl.callingsystemmanager.R;
+import com.wdkl.callingsystemmanager.db.vo.BedItem;
+
+
+import java.util.List;
+
+
+public class BedAdapter2 extends RecyclerView.Adapter<BedAdapter2.MyViewHolder> {
+    private List<BedItem> list;
+    private LayoutInflater inflater;
+    private BedItemCallOnClickListener callOnClickListener;
+    private int selectedPosition = -1;
+
+    public BedAdapter2(Context context, List<BedItem> list) {
+        this.list = list;
+        inflater = LayoutInflater.from(context);
+    }
+
+    public void updateList(List<BedItem> list) {
+        this.list = list;
+        selectedPosition = -1;
+        notifyDataSetChanged();
+    }
+
+    public void setBedItemCallOnClickListener(BedItemCallOnClickListener callOnClickListener) {
+        this.callOnClickListener = callOnClickListener;
+    }
+
+    @NonNull
+    @Override
+    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+        View view = inflater.inflate(R.layout.item_bed2, viewGroup, false);
+        MyViewHolder holder = new MyViewHolder(view, callOnClickListener);
+        return holder;
+    }
+
+
+    @Override
+    public void onBindViewHolder(BedAdapter2.MyViewHolder holder, int position) {
+        if (null == list.get(position)) return;
+
+        holder.tvBedNo.setText(list.get(position).getBedName() + "床");
+        holder.tvPatientName.setText(list.get(position).getPatientName());
+    }
+
+    @Override
+    public int getItemCount() {
+        return list.size();
+    }
+
+
+    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
+
+        private BedItemCallOnClickListener callOnClickListener;
+        TextView tvBedNo;
+        TextView tvPatientName;
+        ImageView ivBedCall;
+
+        public MyViewHolder(View itemView, BedItemCallOnClickListener callOnClickListener) {
+            super(itemView);
+            this.callOnClickListener = callOnClickListener;
+            tvBedNo = itemView.findViewById(R.id.tv_bed_no);
+            tvPatientName = itemView.findViewById(R.id.tv_patient_name);
+            ivBedCall = itemView.findViewById(R.id.iv_bed_call);
+            ivBedCall.setOnClickListener(this);
+        }
+
+        @Override
+        public void onClick(View view) {
+            if (view.getId() == R.id.iv_bed_call) {
+                if (callOnClickListener != null) {
+                    callOnClickListener.itemCallOnClick(view, getLayoutPosition());
+                    selectedPosition = getLayoutPosition();
+                }
+            }
+
+        }
+    }
+
+    public interface BedItemCallOnClickListener {
+        void itemCallOnClick(View view, int position);
+    }
+}

+ 18 - 52
app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/CallAdapter.java

@@ -11,6 +11,7 @@ import com.wdkl.callingsystemmanager.db.HospitalFrameBean;
 import com.wdkl.callingsystemmanager.db.NurseConfigBean;
 import com.wdkl.callingsystemmanager.db.NurseConfigBean;
 import com.wdkl.callingsystemmanager.db.NurseConfigBeanDao;
 import com.wdkl.callingsystemmanager.db.NurseConfigBeanDao;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.ColorItem;
 import com.wdkl.callingsystemmanager.service.ColorItem;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
@@ -26,77 +27,42 @@ import java.util.Locale;
  * @修改日期:
  * @修改日期:
  * @版本:
  * @版本:
  */
  */
-public class CallAdapter extends BaseQuickAdapter<BedVO, BaseViewHolder> {
+public class CallAdapter extends BaseQuickAdapter<CallingItem, BaseViewHolder> {
 
 
     private String lang;
     private String lang;
-    public CallAdapter(int layoutResId, @Nullable List<BedVO> data) {
+    public CallAdapter(int layoutResId, @Nullable List<CallingItem> data) {
         super(layoutResId, data);
         super(layoutResId, data);
         lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
         lang = LocaleMangerUtils.getApplicationLocale().getLanguage();
     }
     }
 
 
 
 
     @Override
     @Override
-    protected void convert(BaseViewHolder helper, final BedVO entity) {
-        if (entity == null){
+    protected void convert(BaseViewHolder helper, final CallingItem entity) {
+        if (entity == null) {
             return;
             return;
         }
         }
 
 
-        HospitalFrameBean roomFrame = entity.getRoomFrame();
-        /*if (roomFrame == null) {
-            List<HospitalFrameBean> roomFrames = BaseApp.getDaoInstant().getHospitalFrameBeanDao()
-                    .queryBuilder()
-                    .where(HospitalFrameBeanDao.Properties.Id.eq(entity.getFrame().getParentId()))
-                    .list();
-            if (roomFrames != null && roomFrames.size() > 0) {
-                roomFrame = roomFrames.get(0);
-            }
-        }
-        helper.setImageResource(R.id.ic_img_status,R.mipmap.img_phone_response);
-        helper.setBackgroundRes(R.id.ll_calling_item, R.drawable.btn_white_bg_20dp);*/
-        BedVO callingBedVO = CallService.getInstance().getCallingBedVO();
-        if (callingBedVO != null && callingBedVO.getFrame().getId().equals(entity.getFrame().getId())) {
+        CallingItem callingBedVO = CallService.getInstance().getCallingBedVO();
+        if (callingBedVO != null && callingBedVO.getUartAddr().equals(entity.getUartAddr())) {
             helper.setBackgroundRes(R.id.ll_calling_item, R.drawable.btn_calling_item_bg_20dp);
             helper.setBackgroundRes(R.id.ll_calling_item, R.drawable.btn_calling_item_bg_20dp);
-            //if (CallService.getInstance().getCallingStatus() == CallStatusEnum.CALLING) {
-            //    helper.setImageResource(R.id.ic_img_status, R.mipmap.img_gd);
-            //}
         }
         }
 
 
 
 
-        if (roomFrame != null) {
-            if (Locale.CHINESE.getLanguage().equals(lang)) {
-                helper.setText(R.id.ic_frame, roomFrame.getName() + "房 ");
-                helper.setText(R.id.ic_bed_no, entity.getFrame().getName() + "床");
-            } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
-                helper.setText(R.id.ic_frame, "room: " + roomFrame.getName());
-                helper.setText(R.id.ic_bed_no, "bed: " + entity.getFrame().getName());
-            }
-        }
-        if (entity.getPatient() != null) {
-            helper.setText(R.id.ic_patient_name, entity.getPatient().getName());
-            NurseConfigBean nurseConfig = BaseApp.getDaoInstant().getNurseConfigBeanDao().queryBuilder()
-                    .where(NurseConfigBeanDao.Properties.Id.eq(entity.getPatient().getGradeLevel())).unique();
-            if (nurseConfig!=null) {
-                helper.setText(R.id.ic_patient_grade, nurseConfig.getValue());
-                if (ColorItem.isColorValid(nurseConfig.getColor())) {
-                    int color = Color.parseColor("#" + nurseConfig.getColor());
-                    helper.setBackgroundColor(R.id.ic_patient_grade, color);
-                }
-            } else {
-                helper.setText(R.id.ic_patient_grade, "--");
-                int color = Color.parseColor("#f8a656");
-                helper.setBackgroundColor(R.id.ic_patient_grade, color);
-            }
-        } else {
-            helper.setText(R.id.ic_patient_name, "---");
-            helper.setText(R.id.ic_patient_grade, "--");
-            int color = Color.parseColor("#f8a656");
-            helper.setBackgroundColor(R.id.ic_patient_grade, color);
+        if (Locale.CHINESE.getLanguage().equals(lang)) {
+            helper.setText(R.id.ic_frame, entity.getRoomNo() + "房 ");
+            helper.setText(R.id.ic_bed_no, entity.getBedNo() + "床");
+        } else if (Locale.ENGLISH.getLanguage().equals(lang)) {
+            helper.setText(R.id.ic_frame, "room: " + entity.getRoomNo());
+            helper.setText(R.id.ic_bed_no, "bed: " + entity.getBedNo());
         }
         }
+
+        helper.setText(R.id.ic_patient_name, entity.getPatientName());
+
     }
     }
 
 
     public void setSelectedCall(int pos) {
     public void setSelectedCall(int pos) {
         if (pos < mData.size()) {
         if (pos < mData.size()) {
-            BedVO bedVO = mData.get(pos);
+            CallingItem bedVO = mData.get(pos);
             if (bedVO != null) {
             if (bedVO != null) {
                 CallService.getInstance().setCallingBedVO(bedVO);
                 CallService.getInstance().setCallingBedVO(bedVO);
                 notifyDataSetChanged();
                 notifyDataSetChanged();
@@ -104,7 +70,7 @@ public class CallAdapter extends BaseQuickAdapter<BedVO, BaseViewHolder> {
         }
         }
     }
     }
 
 
-    public BedVO getCallItem(int pos) {
+    public CallingItem getCallItem(int pos) {
         if (pos >= 0 && pos < mData.size()) {
         if (pos >= 0 && pos < mData.size()) {
             return mData.get(pos);
             return mData.get(pos);
         }
         }

+ 26 - 0
app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/PartAdapter.java

@@ -0,0 +1,26 @@
+package com.wdkl.callingsystemmanager.ui.adapter;
+
+import android.support.annotation.Nullable;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.wdkl.callingsystemmanager.R;
+import com.wdkl.callingsystemmanager.db.PartDeviceBean;
+
+import java.util.List;
+
+public class PartAdapter extends BaseQuickAdapter<PartDeviceBean, BaseViewHolder> {
+
+    public PartAdapter(int layoutResId, @Nullable List<PartDeviceBean> data) {
+        super(layoutResId, data);
+    }
+
+    @Override
+    protected void convert(BaseViewHolder helper, PartDeviceBean item) {
+        if (item == null) {
+            return;
+        }
+
+        helper.setText(R.id.tv_part_name, item.getPartName());
+    }
+}

+ 27 - 0
app/src/main/java/com/wdkl/callingsystemmanager/ui/adapter/PartIpAdapter.java

@@ -0,0 +1,27 @@
+package com.wdkl.callingsystemmanager.ui.adapter;
+
+import android.support.annotation.Nullable;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.wdkl.callingsystemmanager.R;
+import com.wdkl.callingsystemmanager.db.PartDeviceBean;
+
+import java.util.List;
+
+public class PartIpAdapter extends BaseQuickAdapter<PartDeviceBean, BaseViewHolder> {
+
+    public PartIpAdapter(int layoutResId, @Nullable List<PartDeviceBean> data) {
+        super(layoutResId, data);
+    }
+
+    @Override
+    protected void convert(BaseViewHolder helper, PartDeviceBean item) {
+        if (item == null) {
+            return;
+        }
+
+        helper.setText(R.id.tv_part, item.getPartName());
+        helper.setText(R.id.tv_part_ip, item.getPartDeviceIp());
+    }
+}

+ 3 - 3
app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/BedFragment.java

@@ -462,9 +462,9 @@ public class BedFragment extends BaseFragment {
             public void onClick(View v) {
             public void onClick(View v) {
                 //todo: 呼叫
                 //todo: 呼叫
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL) {
                 if (CallService.getInstance().getCallingStatus()==CallStatusEnum.WAIT_CALL) {
-                    if (bedVO != null) {
-                        SerialPortService.getInstance().sendCall(bedVO);
-                    }
+                    //if (bedVO != null) {
+                    //    SerialPortService.getInstance().sendCall(bedVO);
+                    //}
                     //CallService.getInstance().setCALLING(CallStatusEnum.CALLING, bedVO);
                     //CallService.getInstance().setCALLING(CallStatusEnum.CALLING, bedVO);
                 }else {
                 }else {
                     ToastUtil.showShortToast(R.string.calling_with_host);
                     ToastUtil.showShortToast(R.string.calling_with_host);

+ 107 - 0
app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/BedFragment2.java

@@ -0,0 +1,107 @@
+package com.wdkl.callingsystemmanager.ui.fragment;
+
+import android.os.Bundle;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.View;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.wdkl.callingsystemmanager.R;
+import com.wdkl.callingsystemmanager.base.BaseFragment;
+import com.wdkl.callingsystemmanager.base.BasePresenter;
+import com.wdkl.callingsystemmanager.base.BaseView;
+import com.wdkl.callingsystemmanager.db.DeviceModel;
+import com.wdkl.callingsystemmanager.db.enums.DeviceEnum;
+import com.wdkl.callingsystemmanager.db.vo.BedItem;
+import com.wdkl.callingsystemmanager.db.vo.BedVO;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
+import com.wdkl.callingsystemmanager.service.MyFragmentManager;
+import com.wdkl.callingsystemmanager.service.SerialPortService;
+import com.wdkl.callingsystemmanager.ui.adapter.BedAdapter;
+import com.wdkl.callingsystemmanager.ui.adapter.BedAdapter2;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import butterknife.BindView;
+
+public class BedFragment2 extends BaseFragment {
+
+    private static final String ARG_SHOW_TEXT = "text";
+
+    @BindView(R.id.bed_recycler)
+    RecyclerView bedRecycler;
+
+    private RecyclerView.RecycledViewPool mSharedPool = new RecyclerView.RecycledViewPool();
+
+    BedAdapter2 bedAdapter;
+    private List<BedItem> dataBeans;
+
+    public static BedFragment2 newInstance(String param1) {
+        BedFragment2 fragment = new BedFragment2();
+        Bundle args = new Bundle();
+        args.putString(ARG_SHOW_TEXT, param1);
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.fragment_room2;
+    }
+
+
+    @Override
+    public BasePresenter createPresenter() {
+        return null;
+    }
+
+    @Override
+    public BaseView createView() {
+        return null;
+    }
+
+    @Override
+    public void init() {
+        bedAdapter = new BedAdapter2(getContext(), dataBeans);
+        GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 6);
+        layoutManager.setRecycleChildrenOnDetach(true);
+        bedRecycler.setAdapter(bedAdapter);
+        bedRecycler.setLayoutManager(layoutManager);
+        bedRecycler.setRecycledViewPool(mSharedPool);
+
+        bedAdapter.setBedItemCallOnClickListener(new BedAdapter2.BedItemCallOnClickListener() {
+            @Override
+            public void itemCallOnClick(View view, int position) {
+                Log.d("wzlll", "bed item click: " + position);
+                BedItem bedItem = dataBeans.get(position);
+                if (bedItem != null) {
+                    CallingItem item = new CallingItem();
+                    item.setBedNo(bedItem.getBedName());
+                    item.setPatientName(bedItem.getPatientName());
+                    item.setUartAddr(bedItem.getUartAddr());
+                    item.setModel(DeviceModel.WDMN);
+                    item.setType(DeviceEnum.WDBED.value());
+                    SerialPortService.getInstance().sendCall(item);
+                }
+            }
+        });
+    }
+
+    public void setData(List<BedItem> data) {
+        dataBeans = data;
+        if (dataBeans != null) {
+            int count = dataBeans.size();
+            if (count > 1) {
+                Collections.sort(dataBeans, new Comparator<BedItem>() {
+                    @Override
+                    public int compare(BedItem o1, BedItem o2) {
+                        return o1.getBedName().compareTo(o2.getBedName());
+                    }
+                });
+            }
+        }
+    }
+}

+ 0 - 1
app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/DeviceFragment.java

@@ -791,7 +791,6 @@ public class DeviceFragment extends BaseFragment implements IntializationDataVie
                 public void run() {
                 public void run() {
                     hospitalFrameAdapter.setNewData(dataBeans);
                     hospitalFrameAdapter.setNewData(dataBeans);
                     ProgressDialogUtil.dismissDialog();
                     ProgressDialogUtil.dismissDialog();
-                    ((MainActivity)getActivity()).updatePartName();
                 }
                 }
             });
             });
         }
         }

+ 3 - 4
app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/RoomFragment2.java

@@ -22,6 +22,7 @@ import com.wdkl.callingsystemmanager.db.enums.HospitalFrameEnum;
 import com.wdkl.callingsystemmanager.db.enums.PatientStatusEnum;
 import com.wdkl.callingsystemmanager.db.enums.PatientStatusEnum;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.db.vo.BedVO;
 import com.wdkl.callingsystemmanager.service.InitDbService;
 import com.wdkl.callingsystemmanager.service.InitDbService;
+import com.wdkl.callingsystemmanager.service.MyFragmentManager;
 import com.wdkl.callingsystemmanager.ui.adapter.BedAdapter;
 import com.wdkl.callingsystemmanager.ui.adapter.BedAdapter;
 import com.wdkl.callingsystemmanager.util.ToastUtil;
 import com.wdkl.callingsystemmanager.util.ToastUtil;
 import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction;
 import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction;
@@ -105,10 +106,8 @@ public class RoomFragment2 extends BaseFragment {
             @Override
             @Override
             public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
             public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                 BedVO bedVO = bedAdapter.getData().get(position);
                 BedVO bedVO = bedAdapter.getData().get(position);
-                app.mFragmentManager.beginTransaction()
-                        .replace(R.id.fragment_layout, BedFragment.newInstance(bedVO), "tag7")
-                        .addToBackStack("tag7")//添加到返回栈
-                        .commit();
+                MyFragmentManager.getInstance().replaceFragmentToBackStack(R.id.fragment_layout,
+                        BedFragment.newInstance(bedVO), "tag7");
             }
             }
         });
         });
     }
     }

+ 210 - 11
app/src/main/java/com/wdkl/callingsystemmanager/ui/fragment/SystemFragment.java

@@ -8,7 +8,10 @@ import android.os.Bundle;
 import android.provider.Settings;
 import android.provider.Settings;
 import android.support.annotation.NonNull;
 import android.support.annotation.NonNull;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.view.View;
 import android.view.Window;
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.WindowManager;
@@ -22,7 +25,9 @@ import android.widget.SimpleAdapter;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.codbking.widget.DatePickDialog;
 import com.codbking.widget.DatePickDialog;
 import com.codbking.widget.OnSureLisener;
 import com.codbking.widget.OnSureLisener;
 import com.codbking.widget.bean.DateType;
 import com.codbking.widget.bean.DateType;
@@ -34,11 +39,16 @@ import com.wdkl.callingsystemmanager.base.BasePresenter;
 import com.wdkl.callingsystemmanager.base.BaseView;
 import com.wdkl.callingsystemmanager.base.BaseView;
 import com.wdkl.callingsystemmanager.constant.Constants;
 import com.wdkl.callingsystemmanager.constant.Constants;
 import com.wdkl.callingsystemmanager.constant.UrlConstant;
 import com.wdkl.callingsystemmanager.constant.UrlConstant;
+import com.wdkl.callingsystemmanager.custom.MyLinearLayoutManager;
+import com.wdkl.callingsystemmanager.db.McuDeviceBean;
+import com.wdkl.callingsystemmanager.db.NcsDeviceInfoBean;
+import com.wdkl.callingsystemmanager.db.PartDeviceBean;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.CallService;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
 import com.wdkl.callingsystemmanager.service.led.LedManagerUtils;
 import com.wdkl.callingsystemmanager.service.SerialPortService;
 import com.wdkl.callingsystemmanager.service.SerialPortService;
 import com.wdkl.callingsystemmanager.ui.activity.APPUpdateActivity;
 import com.wdkl.callingsystemmanager.ui.activity.APPUpdateActivity;
 import com.wdkl.callingsystemmanager.ui.activity.MainActivity;
 import com.wdkl.callingsystemmanager.ui.activity.MainActivity;
+import com.wdkl.callingsystemmanager.ui.adapter.PartIpAdapter;
 import com.wdkl.callingsystemmanager.util.AppUtils;
 import com.wdkl.callingsystemmanager.util.AppUtils;
 import com.wdkl.callingsystemmanager.util.DateUtil;
 import com.wdkl.callingsystemmanager.util.DateUtil;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
 import com.wdkl.callingsystemmanager.util.LocaleMangerUtils;
@@ -59,6 +69,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 
 import butterknife.BindView;
 import butterknife.BindView;
 import okhttp3.Call;
 import okhttp3.Call;
@@ -85,13 +96,13 @@ public class SystemFragment extends BaseFragment {
 
 
 
 
     //private String[] serviceNames = new String[]{"语言选择及设置", "分机广播声音设置","通话音量设置","屏幕亮度设置","来电响铃次数","开始时间设置","密码修改","升级管理"};//
     //private String[] serviceNames = new String[]{"语言选择及设置", "分机广播声音设置","通话音量设置","屏幕亮度设置","来电响铃次数","开始时间设置","密码修改","升级管理"};//
-/*    private int[] serviceIds = new int[] {R.string.language_settings, R.string.volume_settings,
-                                          R.string.screen_brightness_settings, R.string.host_call_times_settings,
-                                          R.string.time_settings, R.string.password_settings, R.string.upgrade_settings};*/
-
-    private int[] serviceIds = new int[] { R.string.time_settings, R.string.language_settings, R.string.volume_settings,
+    /*private int[] serviceIds = new int[] { R.string.time_settings, R.string.language_settings, R.string.volume_settings,
             R.string.call_mode_set, R.string.call_settings, R.string.bed_list_settings,
             R.string.call_mode_set, R.string.call_settings, R.string.bed_list_settings,
             R.string.led_settings, R.string.info_board_setting, R.string.check_local_ip,
             R.string.led_settings, R.string.info_board_setting, R.string.check_local_ip,
+            R.string.debug_mode, R.string.upgrade_settings, R.string.reboot_system};*/
+
+    private int[] serviceIds = new int[] { R.string.time_settings, R.string.language_settings, R.string.volume_settings,
+            R.string.part_device_settings, R.string.call_mode_set, R.string.call_settings, R.string.check_local_ip,
             R.string.debug_mode, R.string.upgrade_settings, R.string.reboot_system};
             R.string.debug_mode, R.string.upgrade_settings, R.string.reboot_system};
 
 
     public static SystemFragment newInstance(String param1) {
     public static SystemFragment newInstance(String param1) {
@@ -179,6 +190,9 @@ public class SystemFragment extends BaseFragment {
                     case R.string.debug_mode:
                     case R.string.debug_mode:
                         showDebugMode();
                         showDebugMode();
                         break;
                         break;
+                    case R.string.part_device_settings:
+                        showPartDeviceManager();
+                        break;
                 }
                 }
             }
             }
         });
         });
@@ -186,6 +200,191 @@ public class SystemFragment extends BaseFragment {
         tvVersion.setText("App version: " + BuildConfig.VERSION_NAME + " | Date: " + BuildConfig.BUILD_TIME + "  |  MCU version: " + Constants.MCU_VERSION);
         tvVersion.setText("App version: " + BuildConfig.VERSION_NAME + " | Date: " + BuildConfig.BUILD_TIME + "  |  MCU version: " + Constants.MCU_VERSION);
     }
     }
 
 
+    private void showPartDeviceManager() {
+        new MaterialDialog.Builder(getContext())
+                .title(R.string.part_device_settings)
+                .titleGravity(GravityEnum.CENTER)
+                .items(R.array.part_device_manager_items)
+                .itemsGravity(GravityEnum.CENTER)
+                .itemsCallback((dialog, view, which, text) -> {
+                    if (which == 0) {
+                        addPartDevice();
+                    } else if (which == 1) {
+                        showPartDevice();
+                    }
+                })
+                .show();
+    }
+
+    private void addPartDevice() {
+        new MaterialDialog.Builder(getContext())
+                .customView(R.layout.dialog_add_part_device, false)
+                .title(R.string.part_device_settings)
+                .titleGravity(GravityEnum.CENTER)
+                .positiveText(R.string.lab_submit)
+                .onPositive(new MaterialDialog.SingleButtonCallback() {
+                    @Override
+                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+                        ValidatorEditText editText = dialog.getView().findViewById(R.id.edit_device_ip);
+                        String ip = editText.getInputValue();
+                        startAddPartDevice(ip);
+                    }
+                })
+                .negativeText(R.string.lab_cancel)
+                .showListener(new DialogInterface.OnShowListener() {
+                    @Override
+                    public void onShow(DialogInterface dialog) {
+                        //
+                    }
+                })
+                .show();
+    }
+
+    private void startAddPartDevice(String ipStr) {
+        List<PartDeviceBean> beans = BaseApp.getDaoInstant().getPartDeviceBeanDao().loadAll();
+        long count = beans.stream().filter(p->p.getPartDeviceIp().equals(ipStr)).count();
+        if (count > 0) {
+            ToastUtil.showShortToast("该科室主机IP已存在,请勿重复添加");
+            return;
+        }
+
+        getPartDeviceInfo(ipStr);
+    }
+
+    private void getPartDeviceInfo(final String ip) {
+        OkHttpClient.Builder builder = new OkHttpClient.Builder()
+                .connectTimeout(30, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS);
+
+        String hostUrl = Constants.HOST_ADDR_PRE + ip + Constants.PORT + "/" + Constants.PART_DEVICE_INFO;
+        OkHttpClient httpClient = builder.build();
+        Request request = new Request.Builder()
+                .url(hostUrl)
+                .get()
+                .build();
+
+        httpClient.newCall(request).enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+                ToastUtil.showShortToast(R.string.connect_fail);
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                if (response.isSuccessful() && response.body() != null) {
+                    String responseStr = response.body().string();
+                    JSONObject json = JSON.parseObject(responseStr);
+                    int partId = json.getIntValue("partId");
+                    String partName = json.getString("partName");
+                    List<NcsDeviceInfoBean> mcuDeviceBeans = JSONArray.parseArray(json.getString("mcu_device"), NcsDeviceInfoBean.class);
+                    if (mcuDeviceBeans != null && mcuDeviceBeans.size() > 0) {
+                        for (NcsDeviceInfoBean device : mcuDeviceBeans) {
+                            McuDeviceBean mcu = new McuDeviceBean();
+                            mcu.setPartId(partId);
+                            mcu.setUartAddr(device.getUartAddress());
+                            BaseApp.getDaoInstant().getMcuDeviceBeanDao().insert(mcu);
+                        }
+                    }
+
+                    PartDeviceBean bean = new PartDeviceBean();
+                    bean.setPartDeviceIp(ip);
+                    bean.setPartId(partId);
+                    bean.setPartName(partName);
+                    BaseApp.getDaoInstant().getPartDeviceBeanDao().insert(bean);
+
+                    MainActivity activity = (MainActivity)getActivity();
+                    if (activity != null) {
+                        activity.runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                activity.updatePartDevice();
+                            }
+                        });
+                    }
+                } else {
+                    ToastUtil.showShortToast(R.string.data_error);
+                }
+            }
+        });
+    }
+
+    private void showPartDevice() {
+        List<PartDeviceBean> partDeviceBeans = BaseApp.getDaoInstant().getPartDeviceBeanDao().loadAll();
+        new MaterialDialog.Builder(getContext())
+                .customView(R.layout.dialog_part_device_manager, false)
+                .title(R.string.part_device_settings)
+                .titleGravity(GravityEnum.CENTER)
+                .positiveText(R.string.lab_submit)
+                .onPositive(new MaterialDialog.SingleButtonCallback() {
+                    @Override
+                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+                        MainActivity activity = (MainActivity)getActivity();
+                        if (activity != null) {
+                            activity.updatePartDevice();
+                        }
+                    }
+                })
+                .negativeText(R.string.lab_cancel)
+                .showListener(new DialogInterface.OnShowListener() {
+                    @Override
+                    public void onShow(DialogInterface dialog) {
+                        MaterialDialog mDialog = (MaterialDialog)dialog;
+                        RecyclerView recyclerView = mDialog.getView().findViewById(R.id.rv_part_device);
+
+                        PartIpAdapter partIpAdapter = new PartIpAdapter(R.layout.item_part_ip, partDeviceBeans);
+                        MyLinearLayoutManager layoutManager = new MyLinearLayoutManager(getContext());
+                        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+                        recyclerView.setAdapter(partIpAdapter);
+                        recyclerView.setLayoutManager(layoutManager);
+                        partIpAdapter.notifyDataSetChanged();
+
+                        partIpAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
+                            @Override
+                            public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
+                                PartDeviceBean bean = partIpAdapter.getData().get(position);
+                                List<McuDeviceBean> mcuBeans = BaseApp.getDaoInstant().getMcuDeviceBeanDao().loadAll();
+                                McuDeviceBean mcu = mcuBeans.stream().filter(p->p.getPartId() == bean.getPartId()).findFirst().orElse(null);
+                                showDeletePartItem(bean, mcu, new OnUpdateCallback() {
+                                    @Override
+                                    public void onCallback() {
+                                        List<PartDeviceBean> beans = BaseApp.getDaoInstant().getPartDeviceBeanDao().loadAll();
+                                        partIpAdapter.setNewData(beans);
+                                    }
+                                });
+                                return true;
+                            }
+                        });
+                    }
+                })
+                .show();
+    }
+
+    private void showDeletePartItem(PartDeviceBean deleteBean, McuDeviceBean mcuBean, OnUpdateCallback callback) {
+        new MaterialDialog.Builder(getContext())
+                .title(R.string.lab_delete)
+                .content(deleteBean.getPartName())
+                .positiveText(R.string.lab_yes)
+                .onPositive(new MaterialDialog.SingleButtonCallback() {
+                    @Override
+                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+                        BaseApp.getDaoInstant().getPartDeviceBeanDao().delete(deleteBean);
+                        if (mcuBean != null) {
+                            BaseApp.getDaoInstant().getMcuDeviceBeanDao().delete(mcuBean);
+                        }
+                        if (callback != null) {
+                            callback.onCallback();
+                        }
+                    }
+                })
+                .negativeText(R.string.lab_no)
+                .show();
+    }
+
+    public interface OnUpdateCallback {
+        void onCallback();
+    }
+
     private static final String DATE_FORMAT = "yyyyMMdd.HHmmss";
     private static final String DATE_FORMAT = "yyyyMMdd.HHmmss";
     private void startTimeSettings() {
     private void startTimeSettings() {
         //Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);
         //Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);
@@ -837,7 +1036,7 @@ public class SystemFragment extends BaseFragment {
                             if (selectedType == 0) {
                             if (selectedType == 0) {
                                 SharedPreferencesUtil.putIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfoType, 0);
                                 SharedPreferencesUtil.putIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfoType, 0);
                                 SharedPreferencesUtil.putStringSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfo, "");
                                 SharedPreferencesUtil.putStringSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfo, "");
-                                LedManagerUtils.getInstance().updateDefaultProgram();
+                                //LedManagerUtils.getInstance().updateDefaultProgram();
                                 //if (LedBX6MTManager.getInstance().getProgramId() == 0) {
                                 //if (LedBX6MTManager.getInstance().getProgramId() == 0) {
                                 //    LedBX6MTManager.getInstance().showDateTime();
                                 //    LedBX6MTManager.getInstance().showDateTime();
                                 //}
                                 //}
@@ -847,7 +1046,7 @@ public class SystemFragment extends BaseFragment {
                                 } else {
                                 } else {
                                     SharedPreferencesUtil.putIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfoType, 1);
                                     SharedPreferencesUtil.putIntSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfoType, 1);
                                     SharedPreferencesUtil.putStringSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfo, editText.getInputValue());
                                     SharedPreferencesUtil.putStringSp(BaseApp.getContext(), Constants.MSG_SP, SharedPreferencesUtil.LedInfo, editText.getInputValue());
-                                    LedManagerUtils.getInstance().updateDefaultProgram();
+                                    //LedManagerUtils.getInstance().updateDefaultProgram();
                                     //if (LedBX6MTManager.getInstance().getProgramId() == 0) {
                                     //if (LedBX6MTManager.getInstance().getProgramId() == 0) {
                                     //    LedBX6MTManager.getInstance().sendProgram(0, editText.getInputValue());
                                     //    LedBX6MTManager.getInstance().sendProgram(0, editText.getInputValue());
                                     //}
                                     //}
@@ -917,7 +1116,7 @@ public class SystemFragment extends BaseFragment {
                                 long curTime = System.currentTimeMillis();
                                 long curTime = System.currentTimeMillis();
                                 if (curTime - syncTime > 8000) {
                                 if (curTime - syncTime > 8000) {
                                     syncTime = curTime;
                                     syncTime = curTime;
-                                    LedManagerUtils.getInstance().syncTime();
+                                    //LedManagerUtils.getInstance().syncTime();
                                 }
                                 }
                             }
                             }
                         });
                         });
@@ -928,7 +1127,7 @@ public class SystemFragment extends BaseFragment {
                                 long curTime = System.currentTimeMillis();
                                 long curTime = System.currentTimeMillis();
                                 if (curTime - deleProgramTime > 5000) {
                                 if (curTime - deleProgramTime > 5000) {
                                     deleProgramTime = curTime;
                                     deleProgramTime = curTime;
-                                    LedManagerUtils.getInstance().removeAllProgram();
+                                    //LedManagerUtils.getInstance().removeAllProgram();
                                 }
                                 }
                             }
                             }
                         });
                         });
@@ -969,14 +1168,14 @@ public class SystemFragment extends BaseFragment {
                         btnLedPower.setOnClickListener(new View.OnClickListener() {
                         btnLedPower.setOnClickListener(new View.OnClickListener() {
                             @Override
                             @Override
                             public void onClick(View v) {
                             public void onClick(View v) {
-                                LedManagerUtils.getInstance().powerOnOff();
+                                //LedManagerUtils.getInstance().powerOnOff();
                             }
                             }
                         });
                         });
 
 
                         btnCheckFont.setOnClickListener(new View.OnClickListener() {
                         btnCheckFont.setOnClickListener(new View.OnClickListener() {
                             @Override
                             @Override
                             public void onClick(View v) {
                             public void onClick(View v) {
-                                LedManagerUtils.getInstance().checkFontFile();
+                                //LedManagerUtils.getInstance().checkFontFile();
                             }
                             }
                         });
                         });
                     }
                     }

+ 107 - 0
app/src/main/java/com/wdkl/callingsystemmanager/util/AnalysisUdpUtil.java

@@ -0,0 +1,107 @@
+package com.wdkl.callingsystemmanager.util;
+
+import android.content.Context;
+import android.util.Log;
+
+
+import com.wdkl.callingsystemmanager.constant.Constants;
+import com.wdkl.callingsystemmanager.db.MessageEvent;
+import com.wdkl.callingsystemmanager.db.enums.DeviceEnum;
+import com.wdkl.callingsystemmanager.db.vo.CallingItem;
+
+import org.greenrobot.eventbus.EventBus;
+
+/**
+ * Created by 胡博文 on 2017/10/18.
+ */
+
+public class AnalysisUdpUtil {
+
+    public static String TAG = AnalysisUdpUtil.class.getSimpleName();
+
+    private AnalysisUdpUtil() {
+    }
+
+    public static void AnalysisUdp(String udpMsg, Context context) { //接收UDP
+        Log.d("AnalysisUdpUtil", "1===udpMsg==" + udpMsg);
+        //判断是否为美元符号开头,如果是则是android 端的命令
+        if ("$".equals(udpMsg.substring(0, 1))) {
+            udpMsg = delHeadAndEnd(udpMsg, "$", "#");
+            final String[] data = udpMsg.split(Character.toString((char) 3));
+            //如果udp数据长度小于7或是总机自己发的则不处理
+            if (data.length < 7) {
+                return;
+            } else {
+                if ("-1".equals(data[6])) {
+                    return;
+                }
+            }
+
+
+            //判断indexes 是否为当前端口使用
+            switch (data[0]) {
+                case "classic_call_1"://床头机呼叫护士主机
+                    CallingItem callingItem = new CallingItem();
+                    callingItem.setType(DeviceEnum.WDBED.value());
+                    callingItem.setIndex(data[0]);
+                    callingItem.setModel(data[1]);
+                    callingItem.setRoomNo(data[2]);
+                    callingItem.setBedNo(data[3]);
+                    callingItem.setPatientName(data[4]);
+                    callingItem.setUartAddr(data[5]);
+                    callingItem.setPartId(Integer.parseInt(data[6]));
+                    //推向event
+                    EventBus.getDefault().post(new MessageEvent(callingItem, Constants.EVENT_UDP));
+                    break;
+                case "classic_call_2"://卫生间呼叫护士主机
+                    CallingItem callingItem2 = new CallingItem();
+                    callingItem2.setType(DeviceEnum.WDROOM.value());
+                    callingItem2.setIndex(data[0]);
+                    callingItem2.setModel(data[1]);
+                    callingItem2.setRoomNo(data[2]);
+                    callingItem2.setBedNo(data[3]);
+                    callingItem2.setPatientName(data[4]);
+                    callingItem2.setUartAddr(data[5]);
+                    callingItem2.setPartId(Integer.parseInt(data[6]));
+                    //推向event
+                    EventBus.getDefault().post(new MessageEvent(callingItem2, Constants.EVENT_UDP));
+                    break;
+                case "classic_call_2_cancel"://卫生间呼叫取消
+                    CallingItem callingCancelItem = new CallingItem();
+                    callingCancelItem.setType(DeviceEnum.WDROOM.value());
+                    callingCancelItem.setIndex(data[0]);
+                    callingCancelItem.setModel(data[1]);
+                    callingCancelItem.setRoomNo(data[2]);
+                    callingCancelItem.setBedNo(data[3]);
+                    callingCancelItem.setPatientName(data[4]);
+                    callingCancelItem.setUartAddr(data[5]);
+                    callingCancelItem.setPartId(Integer.parseInt(data[6]));
+                    //推向event
+                    EventBus.getDefault().post(new MessageEvent(callingCancelItem, Constants.EVENT_UDP));
+                    break;
+            }
+        }
+    }
+
+    public static String delHeadAndEnd(String source, String beginTrim, String endTrim) {
+        if (source == null) {
+            return "";
+        }
+        source = source.trim(); // 循环去掉字符串首的beTrim字符
+        if (source.isEmpty()) {
+            return "";
+        }
+        String beginChar = source.substring(0, 1);
+        if (beginChar.equalsIgnoreCase(beginTrim)) {
+            source = source.substring(1, source.length());
+            beginChar = source.substring(0, 1);
+        }
+        // 循环去掉字符串尾的beTrim字符
+        String endChar = source.substring(source.length() - 1, source.length());
+        if (endChar.equalsIgnoreCase(endTrim)) {
+            source = source.substring(0, source.length() - 1);
+            endChar = source.substring(source.length() - 1, source.length());
+        }
+        return source;
+    }
+}

+ 107 - 0
app/src/main/java/com/wdkl/callingsystemmanager/util/UdpHelper.java

@@ -0,0 +1,107 @@
+package com.wdkl.callingsystemmanager.util;
+
+import android.content.Context;
+import android.net.wifi.WifiManager;
+import android.util.Log;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+
+/**
+ * UdpHelper帮助类
+ *
+ * @author 陈喆榕
+ */
+public class UdpHelper implements Runnable {
+    public Boolean IsThreadDisable = false;//指示监听线程是否终止
+    private static WifiManager.MulticastLock lock;
+    private Context context;
+
+    public UdpHelper(WifiManager manager, Context context) {
+        this.lock = manager.createMulticastLock("UDPwifi");
+        this.context = context;
+    }
+
+    private Long timeTemp;
+
+    public void StartListen() {
+        // UDP服务器监听的端口
+        Integer port = 10010;
+        // 接收的字节大小,客户端发送的数据不能超过这个大小
+        byte[] message = new byte[1400];
+        try {
+            // 建立Socket连接
+            DatagramSocket datagramSocket = new DatagramSocket(port);
+            datagramSocket.setBroadcast(true);
+            DatagramPacket datagramPacket = new DatagramPacket(message,
+                    message.length);
+            try {
+
+                while (!IsThreadDisable) {
+                    // 准备接收数据
+                    this.lock.acquire();
+                    datagramSocket.receive(datagramPacket);
+                    String strMsg = new String(datagramPacket.getData()).trim();
+                    Log.d("UDP_Helper", "UDP接收:" + strMsg);
+
+                    AnalysisUdpUtil.AnalysisUdp(strMsg, context);
+
+                    for (int i = 0; i < message.length; i++) {
+                        message[i] = 0;
+                    }
+                    this.lock.release();
+                }
+            } catch (IOException e) {//IOException
+                e.printStackTrace();
+            }
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void send(String message) {
+        message = (message == null ? "Hello IdeasAndroid!" : message);
+        //如果list中包含 message 就不停发送
+        int server_port = 10010;
+        Log.d("UDP_Helper", "UDP发送:" + message);
+        DatagramSocket s = null;
+        try {
+            s = new DatagramSocket();
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
+        InetAddress local = null;
+        try {
+            local = InetAddress.getByName("255.255.255.255");
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+        int msg_length = message.getBytes().length;
+        byte[] messageByte = message.getBytes();
+        DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,
+                server_port);
+        try {
+            s.send(p);
+            s.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Override
+    public void run() {
+        new Thread() {
+            @Override
+            public void run() {
+                //把网络访问的代码放在这里
+                StartListen();
+            }
+        }.start();
+    }
+}

+ 51 - 0
app/src/main/java/com/wdkl/callingsystemmanager/util/UdpSendUtil.java

@@ -0,0 +1,51 @@
+package com.wdkl.callingsystemmanager.util;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * #############UDP发送工具类#############
+ */
+
+public class UdpSendUtil {
+
+    private final ExecutorService threadPool = Executors.newSingleThreadExecutor();
+    private SendUdpThread sendUdpThread;
+    private static String strUdp;
+
+    private static UdpSendUtil instance = null;
+
+    public static UdpSendUtil getInstance(){
+        if (instance == null){
+            synchronized (UdpSendUtil.class){
+                if (instance == null){
+                    instance = new UdpSendUtil();
+                }
+            }
+        }
+        return instance;
+    }
+
+    public class SendUdpThread implements Runnable {
+        @Override
+        public void run() {
+            UdpHelper.send("$" + strUdp + "#");
+        }
+    }
+
+    //发送UDP消息,
+    public synchronized void sendUdpData(String Indexes, String model, String roomNo, String bedNo, String patientName, String addr, String partId) {
+        strUdp = Indexes +
+                Character.toString((char) 3) + model +
+                Character.toString((char) 3) + roomNo +
+                Character.toString((char) 3) + bedNo +
+                Character.toString((char) 3) + patientName +
+                Character.toString((char) 3) + addr +
+                Character.toString((char) 3) + partId;
+        if (sendUdpThread == null) {
+            sendUdpThread = new SendUdpThread();
+        }
+        threadPool.execute(sendUdpThread);
+    }
+
+}

+ 50 - 6
app/src/main/res/layout/activity_main.xml

@@ -47,6 +47,48 @@
             android:textSize="16sp" />
             android:textSize="16sp" />
     </LinearLayout>
     </LinearLayout>
 
 
+    <RelativeLayout
+        android:id="@+id/rl_left_title"
+        android:layout_width="224dp"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/ll_title_view"
+        android:layout_above="@+id/ll_boottom"
+        android:layout_alignParentLeft="true"
+        android:background="@drawable/title_bg_shape">
+        <TextView
+            android:id="@+id/tv_part_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="8dp"
+            android:background="@color/xui_config_color_50_blue"
+            android:gravity="center"
+            android:textColor="@color/white"
+            android:textSize="20sp"
+            android:text="科室列表"/>
+
+        <Button
+            android:id="@+id/btn_settings"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:layout_marginLeft="8dp"
+            android:layout_marginRight="8dp"
+            android:layout_marginBottom="10dp"
+            android:padding="10dp"
+            android:background="@drawable/selector_button"
+            android:textColor="@drawable/selector_button_textcolor"
+            android:textSize="24sp"
+            android:text="设置"/>
+
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/rv_part_list"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_below="@id/tv_part_title"
+            android:layout_above="@id/btn_settings"
+            android:layout_marginBottom="10dp"/>
+    </RelativeLayout>
+
     <RadioGroup
     <RadioGroup
         android:id="@+id/ll_title"
         android:id="@+id/ll_title"
         android:layout_width="224dp"
         android:layout_width="224dp"
@@ -57,7 +99,8 @@
         android:background="@color/main_color"
         android:background="@color/main_color"
         android:isScrollContainer="true"
         android:isScrollContainer="true"
         android:orientation="vertical"
         android:orientation="vertical"
-        android:padding="4dp">
+        android:padding="4dp"
+        android:visibility="gone">
 
 
         <RadioButton
         <RadioButton
             android:id="@+id/rb_bed_call"
             android:id="@+id/rb_bed_call"
@@ -65,8 +108,7 @@
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:checked="true"
             android:checked="true"
             android:drawableLeft="@drawable/checkbox_icon_select"
             android:drawableLeft="@drawable/checkbox_icon_select"
-            android:singleLine="true"
-            android:text="@string/str_bed_call" />
+            android:singleLine="true" />
 
 
         <RadioButton
         <RadioButton
             android:id="@+id/rb_doctor_call"
             android:id="@+id/rb_doctor_call"
@@ -121,7 +163,7 @@
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_height="match_parent"
         android:layout_above="@+id/ll_boottom"
         android:layout_above="@+id/ll_boottom"
-        android:layout_toRightOf="@+id/ll_title"
+        android:layout_toRightOf="@+id/rl_left_title"
         android:visibility="gone" />
         android:visibility="gone" />
 
 
     <FrameLayout
     <FrameLayout
@@ -130,7 +172,7 @@
         android:layout_height="match_parent"
         android:layout_height="match_parent"
         android:layout_below="@+id/ll_title_view"
         android:layout_below="@+id/ll_title_view"
         android:layout_above="@+id/ll_boottom"
         android:layout_above="@+id/ll_boottom"
-        android:layout_toRightOf="@+id/ll_title"
+        android:layout_toRightOf="@+id/rl_left_title"
         android:background="#ffffff"
         android:background="#ffffff"
         android:visibility="visible" />
         android:visibility="visible" />
 
 
@@ -149,7 +191,8 @@
             android:gravity="center"
             android:gravity="center"
             android:orientation="horizontal"
             android:orientation="horizontal"
             android:paddingLeft="18dp"
             android:paddingLeft="18dp"
-            android:paddingRight="18dp">
+            android:paddingRight="18dp"
+            android:visibility="gone">
 
 
             <ImageView
             <ImageView
                 android:id="@+id/iv_back"
                 android:id="@+id/iv_back"
@@ -188,6 +231,7 @@
             android:layout_width="38dp"
             android:layout_width="38dp"
             android:layout_height="match_parent"
             android:layout_height="match_parent"
             android:layout_toRightOf="@+id/ll_back"
             android:layout_toRightOf="@+id/ll_back"
+            android:layout_marginLeft="4dp"
             android:background="@color/white"
             android:background="@color/white"
             android:gravity="center"
             android:gravity="center"
             android:lineSpacingExtra="5dp"
             android:lineSpacingExtra="5dp"

+ 30 - 0
app/src/main/res/layout/dialog_add_part_device.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/part_device_add"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginRight="20dp"
+        android:gravity="center"
+        android:padding="8dp"
+        android:text="@string/add_part_device_ip"
+        android:textSize="20sp" />
+
+    <com.xuexiang.xui.widget.edittext.ValidatorEditText
+        android:id="@+id/edit_device_ip"
+        style="@style/EditText.Normal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginRight="20dp"
+        android:layout_toLeftOf="@id/part_device_add"
+        android:digits="0123456789."
+        android:hint="@string/part_device_ip_hint"
+        android:inputType="number"
+        android:textSize="20sp"
+        app:vet_tipPosition="top" />
+
+</LinearLayout>

+ 2 - 1
app/src/main/res/layout/dialog_incall_times_setting.xml

@@ -86,7 +86,8 @@
     <LinearLayout
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="30dp">
+        android:layout_marginTop="30dp"
+        android:visibility="gone">
         <TextView
         <TextView
             android:layout_width="wrap_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"

+ 66 - 0
app/src/main/res/layout/dialog_part_device_manager.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingLeft="20dp"
+    android:paddingRight="20dp"
+    android:paddingTop="10dp"
+    android:paddingBottom="10dp"
+    android:orientation="vertical">
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/black" />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+        <TextView
+            android:id="@+id/tv_part"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:ellipsize="marquee"
+            android:gravity="center"
+            android:singleLine="true"
+            android:textSize="22sp"
+            android:text="@string/part_name_title"
+            android:textColor="@color/black"/>
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+        <TextView
+            android:id="@+id/tv_part_ip"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:ellipsize="marquee"
+            android:gravity="center"
+            android:singleLine="true"
+            android:textSize="22sp"
+            android:text="@string/part_device_ip_title"
+            android:textColor="@color/black"/>
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+    </LinearLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/black"/>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/rv_part_device"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+</LinearLayout>

+ 39 - 0
app/src/main/res/layout/item_bed2.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="160dp"
+    android:layout_height="180dp"
+    android:padding="8dp"
+    android:layout_marginBottom="20dp"
+    android:background="@drawable/btn_bg_20dp"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/tv_bed_no"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:gravity="center_horizontal"
+        android:textColor="@color/white"
+        android:textSize="28sp"
+        android:singleLine="true"
+        android:ellipsize="marquee"/>
+
+    <TextView
+        android:id="@+id/tv_patient_name"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:gravity="center"
+        android:layout_marginTop="8dp"
+        android:ellipsize="marquee"
+        android:singleLine="true"
+        android:textColor="@color/white"
+        android:textSize="24sp" />
+
+    <ImageView
+        android:id="@+id/iv_bed_call"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_marginTop="8dp"
+        android:layout_gravity="center"
+        android:scaleType="centerInside"
+        android:src="@mipmap/ic_calling" />
+</LinearLayout>

+ 8 - 4
app/src/main/res/layout/item_call.xml

@@ -2,14 +2,16 @@
 <LinearLayout
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/ll_calling_item"
     android:id="@+id/ll_calling_item"
-    android:layout_width="140dp"
+    android:layout_width="132dp"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/btn_white_bg_20dp"
     android:background="@drawable/btn_white_bg_20dp"
     android:padding="4dp"
     android:padding="4dp"
     android:orientation="vertical"
     android:orientation="vertical"
     android:layout_gravity="center"
     android:layout_gravity="center"
     android:gravity="center"
     android:gravity="center"
-    android:layout_marginLeft="@dimen/margin_15dp">
+    android:layout_marginLeft="@dimen/margin_15dp"
+    android:layout_marginTop="4dp"
+    android:layout_marginBottom="4dp">
     <RelativeLayout
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="30dp"
         android:layout_height="30dp"
@@ -41,7 +43,8 @@
         android:singleLine="true"
         android:singleLine="true"
         android:ellipsize="end"
         android:ellipsize="end"
         android:layout_gravity="center_horizontal"
         android:layout_gravity="center_horizontal"
-        android:textSize="22sp" />
+        android:textSize="22sp"
+        android:visibility="gone"/>
     <TextView
     <TextView
         android:id="@+id/ic_bed_no"
         android:id="@+id/ic_bed_no"
         style="@style/TextViewStyle1"
         style="@style/TextViewStyle1"
@@ -68,5 +71,6 @@
         android:paddingRight="6dp"
         android:paddingRight="6dp"
         android:paddingTop="2dp"
         android:paddingTop="2dp"
         android:paddingBottom="2dp"
         android:paddingBottom="2dp"
-        android:textColor="@color/white" />
+        android:textColor="@color/white"
+        android:visibility="gone"/>
 </LinearLayout>
 </LinearLayout>

+ 17 - 0
app/src/main/res/layout/item_part.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="80dp"
+    android:layout_marginTop="16dp"
+    android:layout_marginLeft="20dp"
+    android:layout_marginRight="20dp"
+    android:background="@drawable/btn_bg_10dp">
+
+    <TextView
+        android:id="@+id/tv_part_name"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="24sp" />
+</LinearLayout>

+ 54 - 0
app/src/main/res/layout/item_part_ip.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+
+        <TextView
+            android:id="@+id/tv_part"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:ellipsize="marquee"
+            android:gravity="center"
+            android:singleLine="true"
+            android:textSize="20sp" />
+
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+
+        <TextView
+            android:id="@+id/tv_part_ip"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:ellipsize="marquee"
+            android:gravity="center"
+            android:singleLine="true"
+            android:textSize="20sp" />
+
+        <View
+            android:layout_width="1dp"
+            android:layout_height="match_parent"
+            android:background="@color/black" />
+    </LinearLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/black"/>
+</LinearLayout>

二進制
app/src/main/res/mipmap-mdpi/ic_calling.png


+ 5 - 0
app/src/main/res/values-zh/arrays.xml

@@ -87,6 +87,11 @@
         <item value="1">在线升级</item>
         <item value="1">在线升级</item>
     </string-array>
     </string-array>
 
 
+    <string-array name="part_device_manager_items">
+        <item value="0">添加科室主机</item>
+        <item value="1">查看科室主机</item>
+    </string-array>
+
     <string-array name="debug_mode_items">
     <string-array name="debug_mode_items">
         <item value="0">开启调试</item>
         <item value="0">开启调试</item>
         <item value="1">关闭调试</item>
         <item value="1">关闭调试</item>

+ 7 - 0
app/src/main/res/values-zh/strings.xml

@@ -9,6 +9,7 @@
     <string name="room_qty">病房数</string>
     <string name="room_qty">病房数</string>
     <string name="bed_qty">每病房床位数</string>
     <string name="bed_qty">每病房床位数</string>
     <string name="answer_call">接听</string>
     <string name="answer_call">接听</string>
+    <string name="wait_answer">接通中</string>
     <string name="hang_call">挂断</string>
     <string name="hang_call">挂断</string>
 
 
     <string name="app_name">呼叫系统管理主机</string>
     <string name="app_name">呼叫系统管理主机</string>
@@ -201,6 +202,11 @@
 
 
     <!--系统设置部分-->
     <!--系统设置部分-->
     <string name="settings_name">设置</string>
     <string name="settings_name">设置</string>
+    <string name="part_device_settings">科室主机管理</string>
+    <string name="part_device_ip_hint">请输入需要添加的科室主机IP地址</string>
+    <string name="add_part_device_ip">输入IP:</string>
+    <string name="part_name_title">名称</string>
+    <string name="part_device_ip_title">主机IP</string>
     <string name="language_settings">语言设置</string>
     <string name="language_settings">语言设置</string>
     <string name="volume_settings">音量设置</string>
     <string name="volume_settings">音量设置</string>
     <string name="call_mode_set">通话模式</string>
     <string name="call_mode_set">通话模式</string>
@@ -281,6 +287,7 @@
     <string name="str_app_download_fail">程序下载失败!</string>
     <string name="str_app_download_fail">程序下载失败!</string>
     <string name="str_redownload">重新下载</string>
     <string name="str_redownload">重新下载</string>
     <string name="connect_fail">网络连接错误</string>
     <string name="connect_fail">网络连接错误</string>
+    <string name="data_error">数据错误</string>
     <string name="app_no_need_update">当前为最新版本!</string>
     <string name="app_no_need_update">当前为最新版本!</string>
     <string name="app_file_not_exist">安装失败,文件不存在</string>
     <string name="app_file_not_exist">安装失败,文件不存在</string>
     <string name="app_not_exist">安装失败,APP不存在</string>
     <string name="app_not_exist">安装失败,APP不存在</string>

+ 5 - 0
app/src/main/res/values/arrays.xml

@@ -92,6 +92,11 @@
         <item value="1">Online upgrade</item>
         <item value="1">Online upgrade</item>
     </string-array>
     </string-array>
 
 
+    <string-array name="part_device_manager_items">
+        <item value="0">Add part device</item>
+        <item value="1">Show part device</item>
+    </string-array>
+
     <string-array name="debug_mode_items">
     <string-array name="debug_mode_items">
         <item value="0">Enable debug</item>
         <item value="0">Enable debug</item>
         <item value="1">Disable debug</item>
         <item value="1">Disable debug</item>

+ 7 - 0
app/src/main/res/values/strings.xml

@@ -9,6 +9,7 @@
     <string name="room_qty">Room num</string>
     <string name="room_qty">Room num</string>
     <string name="bed_qty">Bed num</string>
     <string name="bed_qty">Bed num</string>
     <string name="answer_call">Answer</string>
     <string name="answer_call">Answer</string>
+    <string name="wait_answer">Answering</string>
     <string name="hang_call">Hand up</string>
     <string name="hang_call">Hand up</string>
 
 
     <string name="app_name">Call system manager</string>
     <string name="app_name">Call system manager</string>
@@ -201,6 +202,11 @@
 
 
     <!--系统设置部分-->
     <!--系统设置部分-->
     <string name="settings_name">Settings</string>
     <string name="settings_name">Settings</string>
+    <string name="part_device_settings">Part device manager</string>
+    <string name="part_device_ip_hint">Please input part device IP</string>
+    <string name="add_part_device_ip">Input IP:</string>
+    <string name="part_name_title">Part name</string>
+    <string name="part_device_ip_title">Part device IP</string>
     <string name="language_settings">Language settings</string>
     <string name="language_settings">Language settings</string>
     <string name="volume_settings">Volume settings</string>
     <string name="volume_settings">Volume settings</string>
     <string name="call_mode_set">Call Mode</string>
     <string name="call_mode_set">Call Mode</string>
@@ -281,6 +287,7 @@
     <string name="str_app_download_fail">App download failed!</string>
     <string name="str_app_download_fail">App download failed!</string>
     <string name="str_redownload">Retry</string>
     <string name="str_redownload">Retry</string>
     <string name="connect_fail">Connect Error</string>
     <string name="connect_fail">Connect Error</string>
+    <string name="data_error">Data error</string>
     <string name="app_no_need_update">App is the latest!</string>
     <string name="app_no_need_update">App is the latest!</string>
     <string name="app_file_not_exist">Install failed, file not exist!</string>
     <string name="app_file_not_exist">Install failed, file not exist!</string>
     <string name="app_not_exist">Install failed, app not exist</string>
     <string name="app_not_exist">Install failed, app not exist</string>