Browse Source

<修改床位显示及TTS语音播报流程>

weizhengliang 4 years ago
parent
commit
f38919d27e

+ 6 - 25
app/src/main/java/com/wdkl/callingmainnurse/adapter/CallListAdapter.java

@@ -30,7 +30,6 @@ public class CallListAdapter extends RecyclerView.Adapter<CallListAdapter.MyView
     private LayoutInflater inflater;
     private CallingListItemOnclickListener itemOnclickListener;
     private int selectedPosition = -1;
-    private String voiceTag = SharedPreferencesUtil.getStringSp(MyApplication.getAppContext(), Constants.MSG_SP, Constants.VOICE_BROADCAST_TAG);
 
     public CallListAdapter(Context context, ArrayList<UdpEntity> list) {
         this.context = context;
@@ -81,11 +80,7 @@ public class CallListAdapter extends RecyclerView.Adapter<CallListAdapter.MyView
                 holder.llRoom.setVisibility(View.VISIBLE);
                 
                 holder.ivLogo.setImageResource(R.mipmap.ic_door);
-                if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
-                } else if ("2".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber());//房间号
-                }
+                holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
                 holder.tvName.setText(" 门口机 ");
                 break;
             case Constants.SON_CALL:
@@ -94,13 +89,8 @@ public class CallListAdapter extends RecyclerView.Adapter<CallListAdapter.MyView
                 holder.llRoom.setVisibility(View.VISIBLE);
 
                 holder.ivLogo.setImageResource(R.mipmap.ic_call_bed);
-                if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
-                    holder.tvBedNum.setText(list.get(position).getBedNumber() + "床");//床号
-                } else if ("2".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber());//房间号
-                    holder.tvBedNum.setText(list.get(position).getBedNumber());//床号
-                }
+                holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
+                holder.tvBedNum.setText(list.get(position).getBedNumber() + "床");//床号
                 holder.tvName.setText(" " + list.get(position).getName() + " ");//机型
                 break;
             case Constants.ROOMHELP_CALL:
@@ -108,13 +98,8 @@ public class CallListAdapter extends RecyclerView.Adapter<CallListAdapter.MyView
                 holder.llRoom.setVisibility(View.VISIBLE);
 
                 holder.ivLogo.setImageResource(R.mipmap.ic_support);
-                if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
-                    holder.tvBedNum.setText(list.get(position).getBedNumber() + "床");//床号
-                } else if ("2".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber());//房间号
-                    holder.tvBedNum.setText(list.get(position).getBedNumber());//床号
-                }
+                holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");//房间号
+                holder.tvBedNum.setText(list.get(position).getBedNumber() + "床");//床号
                 holder.tvName.setText(" 请求增援 ");
                 break;
             case Constants.WSHROOM_CALL:
@@ -122,11 +107,7 @@ public class CallListAdapter extends RecyclerView.Adapter<CallListAdapter.MyView
                 holder.llRoom.setVisibility(View.VISIBLE);
 
                 holder.ivLogo.setImageResource(R.mipmap.ic_wc);
-                if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");
-                } else if ("2".equals(voiceTag)) {
-                    holder.tvRoomNum.setText(list.get(position).getRoomNumber());
-                }
+                holder.tvRoomNum.setText(list.get(position).getRoomNumber() + "房");
                 holder.tvName.setText(" 紧急呼叫 ");
                 break;
             case Constants.MANAGER_CALL:

+ 1 - 7
app/src/main/java/com/wdkl/callingmainnurse/adapter/SicknessBedAdapter.java

@@ -30,7 +30,6 @@ public class SicknessBedAdapter extends RecyclerView.Adapter<SicknessBedAdapter.
     private LayoutInflater inflater;
     private CallingSicknessBedItemOnclickListener onclickListener;
     private int selectedPosition = -1;
-    private String voiceTag = SharedPreferencesUtil.getStringSp(MyApplication.getAppContext(), Constants.MSG_SP, Constants.VOICE_BROADCAST_TAG);
 
     public SicknessBedAdapter(Context mcontext, ArrayList<RoomEntity.WardInformation.SickbedInformation> list) {
         this.mcontext = mcontext;
@@ -58,12 +57,7 @@ public class SicknessBedAdapter extends RecyclerView.Adapter<SicknessBedAdapter.
     @Override
     public void onBindViewHolder(MyViewHolder holder, int position) {
         try {
-            if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                holder.tvSicknessBedNumber.setText(list.get(position).getBedNum() + "床");
-            } else if ("2".equals(voiceTag)) {
-                holder.tvSicknessBedNumber.setText(list.get(position).getBedNum());
-            }
-
+            holder.tvSicknessBedNumber.setText(list.get(position).getBedNum() + "床");
             holder.tvSicknessBedName.setText(list.get(position).getPatientName());
             int level = StringUtils.parseInt(list.get(position).getGradeLevel());
             if (level < 65) {

+ 7 - 8
app/src/main/java/com/wdkl/callingmainnurse/adapter/SicknessRoomAdapter.java

@@ -34,7 +34,6 @@ public class SicknessRoomAdapter extends RecyclerView.Adapter<SicknessRoomAdapte
     private LayoutInflater inflater;
     private CallingSicknessRoomItemOnclickListener itemOnclickListener;
     private int selectedPosition = -1;
-    private String voiceTag = SharedPreferencesUtil.getStringSp(MyApplication.getAppContext(), Constants.MSG_SP, Constants.VOICE_BROADCAST_TAG);
 
     public SicknessRoomAdapter(Context mcontext, ArrayList<RoomEntity.WardInformation> list) {
         this.mcontext = mcontext;
@@ -87,11 +86,7 @@ public class SicknessRoomAdapter extends RecyclerView.Adapter<SicknessRoomAdapte
                 holder.tvRoomNum.setTextColor(Color.parseColor("#000000"));
                 holder.tvBedNum.setTextColor(Color.parseColor("#000000"));
             }
-            if ("0".equals(voiceTag) || "1".equals(voiceTag)) {
-                holder.tvRoomNum.setText(list.get(position).getRoomNum() + "房");
-            } else if ("2".equals(voiceTag)) {
-                holder.tvRoomNum.setText(list.get(position).getRoomNum());
-            }
+            holder.tvRoomNum.setText(list.get(position).getRoomNum() + "房");
 
             if (list.get(position).getTrusteeshipState().equals("1")) {//更新标题栏代托管状态//正在托管中
                 EventBus.getDefault().post(new MessageEvent(1, Constants.EVENT_SIP_INTERNETPING_));
@@ -106,9 +101,13 @@ public class SicknessRoomAdapter extends RecyclerView.Adapter<SicknessRoomAdapte
                 String str = "";
                 if (bedList.size() > 0) {
                     try {
-                        str = bedList.get(0).getBedNum() + "-" + bedList.get(bedList.size() - 1).getBedNum();
+                        if (bedList.size() == 1) {
+                            str = bedList.get(0).getBedNum() + "床";
+                        } else {
+                            str = bedList.get(0).getBedNum() + "-" + bedList.get(bedList.size() - 1).getBedNum() + "床";
+                        }
                     } catch (Exception e) {
-                        str = bedList.get(0).getBedNum();
+                        str = bedList.get(0).getBedNum() + "床";
                         LogUtil.d("onBindViewHolder", "Exception");
                     }
                     holder.tvBedNum.setText(str);

+ 20 - 14
app/src/main/java/com/wdkl/callingmainnurse/ui/fragment/CallingBedFragment.java

@@ -680,7 +680,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
         }
 
         if (enableTTS()) {
-            SpeechUtil.getInstance().stopSpeak();
+            SpeechUtil.getInstance().removeSpeak(getSpeechText(deleteEntity));
         }
 
         //viewHolder.getAdapterPosition() 和 iewHolder.getLayoutPosition()有16ms 的差距 之后adpter默认-1
@@ -732,7 +732,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
         }
 
         if (enableTTS()) {
-            SpeechUtil.getInstance().stopSpeak();
+            SpeechUtil.getInstance().removeSpeak(getSpeechText(deleteEntity));
         }
 
         //viewHolder.getAdapterPosition() 和 iewHolder.getLayoutPosition()有16ms 的差距 之后adpter默认-1
@@ -1717,7 +1717,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                     loopVoice.setPalyDismiss(true);
                 }
                 if (enableTTS()) {
-                    SpeechUtil.getInstance().stopSpeak();
+                    SpeechUtil.getInstance().removeSpeak(getSpeechText(removeEntity));
                 }
             } else {
                 if (PalyPhonetics.speakEntityList.contains(removeEntity)) {//将播报列表也删除该元素
@@ -1800,7 +1800,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                 //    loopVoice.setPalyDismiss(true);
                 //}
                 if (enableTTS()) {
-                    SpeechUtil.getInstance().stopSpeak();
+                    SpeechUtil.getInstance().removeSpeak(getSpeechText(deleteUdpEntity));
                 }
                 for (int i = 0; i < PalyPhonetics.speakEntityList.size(); i++) {
                     if (roomNumber.equals(PalyPhonetics.speakEntityList.get(i).getRoomNumber())) {
@@ -1874,12 +1874,16 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
     }
 
     //语音播报
-    private synchronized void startSpeak(UdpEntity entity) {
-        //是否要播报"房": 0--不要  1--要  2--"房"和"床"都不要
-        String tag = SharedPreferencesUtil.getStringSp(getActivity(), Constants.MSG_SP, Constants.VOICE_BROADCAST_TAG);
-        if ("2".equals(tag)) {
-            return;
+    private void startSpeak(UdpEntity entity) {
+        String speechText = getSpeechText(entity);
+        if (!TextUtils.isEmpty(speechText)) {
+            SpeechUtil.getInstance().newSpeech(speechText);
         }
+    }
+
+    private String getSpeechText(UdpEntity entity) {
+        //是否要播报"房""床": 0--不播房  1--播房和床  2--不播床
+        String tag = SharedPreferencesUtil.getStringSp(getActivity(), Constants.MSG_SP, Constants.VOICE_BROADCAST_TAG);
 
         loopingUdpentity = entity;
         showUrgentWindow(entity);
@@ -1900,6 +1904,8 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                     text = bnb + "床呼叫";
                 } else if ("1".equals(tag)) {
                     text = rnb + "房" + bnb + "床呼叫";
+                } else if ("2".equals(tag)) {
+                    text = rnb + "房呼叫";
                 }
                 break;
             case Constants.ROOMHELP_CALL://请求增援
@@ -1907,6 +1913,8 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                     text = bnb + "床请求增援";
                 } else if ("1".equals(tag)) {
                     text = rnb + "房" + bnb + "床请求增援";
+                } else if ("2".equals(tag)) {
+                    text = rnb + "房请求增援";
                 }
                 break;
             case Constants.WSHROOM_CALL://卫生间
@@ -1920,9 +1928,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                 break;
         }
 
-        if (!TextUtils.isEmpty(text)) {
-            SpeechUtil.getInstance().newSpeech(text);
-        }
+        return text;
     }
 
     /**
@@ -1963,7 +1969,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                             loopVoice.setPalyDismiss(true);
                         }
                         if (enableTTS()) {
-                            SpeechUtil.getInstance().stopSpeak();
+                            SpeechUtil.getInstance().removeSpeak(getSpeechText(udpEntity));
                         }
                     } else {
                         if (PalyPhonetics.speakEntityList.contains(udpEntity)) {//将播报列表也删除该元素
@@ -2000,7 +2006,7 @@ public class CallingBedFragment extends BaseFragment implements SicknessBedAdapt
                             loopVoice.setPalyDismiss(true);
                         }
                         if (enableTTS()) {
-                            SpeechUtil.getInstance().stopSpeak();
+                            SpeechUtil.getInstance().removeSpeak(getSpeechText(udpEntity));
                         }
                     } else {
                         if (PalyPhonetics.speakEntityList.contains(callEntityList.get(i))) {//将播报列表也删除该元素

+ 62 - 31
app/src/main/java/com/wdkl/callingmainnurse/util/SpeechUtil.java

@@ -3,8 +3,10 @@ package com.wdkl.callingmainnurse.util;
 import android.content.Context;
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.UtteranceProgressListener;
+import android.text.TextUtils;
 
 import com.wdkl.callingmainnurse.common.Constants;
+import com.wdkl.callingmainnurse.entity.UdpEntity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -18,9 +20,12 @@ public class SpeechUtil {
     private int speakIndex = 0;
     private int loopCount = 2;
     private boolean isStop = true;
-    private volatile static List<String> speechTextList = new ArrayList<>();
+    public volatile static ArrayList<String> speechTextList = new ArrayList<>();
     private Thread speechThread;
     private boolean isSpeechLoop = true;
+    private Context context;
+    private String speakSpeech;
+    private final Object lockObject = new Object();
 
     public static SpeechUtil getInstance() {
         if (speech == null) {
@@ -34,6 +39,7 @@ public class SpeechUtil {
     }
 
     public void init(Context context) {
+        this.context = context;
         textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
             @Override
             public void onInit(int status) {
@@ -57,9 +63,11 @@ public class SpeechUtil {
     }
 
     public void newSpeech(String text) {
-        LogUtil.d(TAG, "add text speech: " + text);
-        speechTextList.add(text);
-        startSpeechThread();
+        synchronized (lockObject) {
+            LogUtil.d(TAG, "add text speech: " + text);
+            speechTextList.add(text);
+            startSpeechThread();
+        }
     }
 
     public synchronized void speak(final String text) {
@@ -88,18 +96,37 @@ public class SpeechUtil {
 
             @Override
             public void onError(String utteranceId) {
-                //LogUtil.d(TAG, "speak onError..." + utteranceId);
+                isStop = true;
+                LogUtil.d(TAG, "speak onError..." + utteranceId);
             }
         });
     }
 
     public void stopSpeak() {
-        if (textToSpeech.isSpeaking()) {
-            textToSpeech.stop();
-            speechTextList.clear();
-            isStop = true;
-            speakIndex = 0;
-            LogUtil.d(TAG, "stop speak");
+        synchronized (lockObject) {
+            if (textToSpeech.isSpeaking()) {
+                textToSpeech.stop();
+                speechTextList.clear();
+                isStop = true;
+                speakIndex = 0;
+                LogUtil.d(TAG, "stop speak");
+            }
+        }
+    }
+
+    public void removeSpeak(String text) {
+        synchronized (lockObject) {
+            if (!TextUtils.isEmpty(text) && !TextUtils.isEmpty(speakSpeech)) {
+                LogUtil.d(TAG, "remove speak: " + text);
+                if (text.equals(speakSpeech) && textToSpeech.isSpeaking()) {
+                    textToSpeech.stop();
+                    speechTextList.remove(text);
+                    isStop = true;
+                    speakIndex = 0;
+                } else {
+                    speechTextList.remove(text);
+                }
+            }
         }
     }
 
@@ -108,13 +135,15 @@ public class SpeechUtil {
     }
 
     public void release() {
-        speechTextList.clear();
-        isStop = true;
-        speakIndex = 0;
-        if (textToSpeech != null) {
-            textToSpeech.stop();
-            textToSpeech.shutdown();
-            textToSpeech = null;
+        synchronized (lockObject) {
+            speechTextList.clear();
+            isStop = true;
+            speakIndex = 0;
+            if (textToSpeech != null) {
+                textToSpeech.stop();
+                textToSpeech.shutdown();
+                textToSpeech = null;
+            }
         }
     }
 
@@ -130,19 +159,21 @@ public class SpeechUtil {
     public class SpeechRunnable implements Runnable {
         public void run() {
             while (isSpeechLoop) {
-                if (speechTextList.size() > 0 && isStop) {
-                    String speech = speechTextList.get(0);
-                    LogUtil.d(TAG, "speech: " + speech);
-                    speak(speech);
-
-                    if (speechTextList.contains(speech)) {
-                        speechTextList.remove(speech);
-                    }
-
-                    try {
-                        Thread.sleep(50);
-                    } catch (Exception e) {
-                        e.printStackTrace();
+                synchronized (lockObject) {
+                    if (speechTextList.size() > 0 && isStop) {
+                        speakSpeech = speechTextList.get(0);
+                        LogUtil.d(TAG, "speakSpeech: " + speakSpeech);
+                        speak(speakSpeech);
+
+                        //if (speechTextList.contains(speakSpeech)) {
+                            speechTextList.remove(speakSpeech);
+                        //}
+
+                        try {
+                            Thread.sleep(50);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
                     }
                 }
             }

+ 28 - 0
app/src/main/java/com/wdkl/callingmainnurse/widget/view/MarqueeText.java

@@ -0,0 +1,28 @@
+package com.wdkl.callingmainnurse.widget.view;
+
+import android.content.Context;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+
+/**
+ * Created by fengxiangqian on 2017/11/7.
+ */
+
+public class MarqueeText extends AppCompatTextView {
+    public MarqueeText(Context context) {
+        super(context);
+    }
+
+    @Override//实现了都获取焦点
+    public boolean isFocused() {
+        return true;
+    }
+
+    public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public MarqueeText(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+}

+ 0 - 2
app/src/main/res/layout/fragment_calling_sickbed_sickness_room_adapter_layout.xml

@@ -68,8 +68,6 @@
                 android:layout_marginTop="2dp"
                 android:text=""
                 android:textColor="@color/black"
-
-
                 android:textSize="@dimen/text_size_13px" />
         </LinearLayout>
     </RelativeLayout>

+ 9 - 5
app/src/main/res/layout/fragment_callng_sickbed_sickness_bed_adapter_layout.xml

@@ -29,7 +29,7 @@
 
         <LinearLayout
             android:id="@+id/fragment_sick_bed_adapter_layout_ll_center"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_centerHorizontal="true"
             android:layout_marginTop="40dp"
@@ -37,11 +37,15 @@
 
             <TextView
                 android:id="@+id/adapter_tv_sickness_bed_number"
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:gravity="bottom"
+                android:layout_marginLeft="10dp"
+                android:layout_marginRight="10dp"
+                android:gravity="bottom|center"
+                android:ellipsize="marquee"
+                android:singleLine="true"
                 android:text="007"
-                android:textSize="@dimen/text_size_22px"
+                android:textSize="24sp"
                 android:textStyle="bold" />
 
             <TextView
@@ -50,7 +54,7 @@
                 android:layout_gravity="center"
                 android:gravity="bottom"
                 android:text="床"
-                android:textSize="@dimen/text_size_20px"
+                android:textSize="24sp"
                 android:visibility="gone"/>
         </LinearLayout>
     </RelativeLayout>