Browse Source

增加金立手机适配,增加google tts语速设置,其他优化等

weizhengliang 6 months ago
parent
commit
794203ec0f
25 changed files with 310 additions and 62 deletions
  1. 1 1
      android_mobile/build.gradle
  2. 8 2
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt
  3. 43 0
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java
  4. 5 4
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt
  5. 10 0
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java
  6. 13 10
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/BaseSipCallFragment.java
  7. 15 4
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java
  8. 17 8
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentSipAudio.java
  9. 12 10
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java
  10. 14 0
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/SpeechUtil.java
  11. 8 6
      android_mobile/src/main/yd_w_xiaomi_2/res/layout/adapter_watch_call_records_item.xml
  12. 2 2
      android_mobile/src/main/yd_w_xiaomi_2/res/layout/adapter_watch_contacts_item.xml
  13. 41 1
      android_mobile/src/main/yd_w_xiaomi_2/res/layout/user_setting_layout.xml
  14. 2 2
      android_mobile/src/main/yd_w_xiaomi_2/res/layout/watch_activity_call_records.xml
  15. 5 6
      android_mobile/src/main/yd_w_xiaomi_2/res/layout/watch_activity_home2.xml
  16. 2 0
      app/build.gradle
  17. 77 0
      app/src/main/gionee/AndroidManifest.xml
  18. 8 1
      build.gradle
  19. 1 1
      common/src/main/res/layout/netoff_loading.xml
  20. 5 0
      resource/src/main/res/drawable/ic_arrow_left.xml
  21. 5 0
      resource/src/main/res/drawable/ic_arrow_right.xml
  22. 3 0
      resource/src/main/res/values-es/strings.xml
  23. 4 1
      resource/src/main/res/values-ru/strings.xml
  24. 5 2
      resource/src/main/res/values-zh/strings.xml
  25. 4 1
      resource/src/main/res/values/strings.xml

+ 1 - 1
android_mobile/build.gradle

@@ -55,7 +55,7 @@ android {
             main.java.srcDirs += 'src/main/yd_w_qin2_2_chile/aidl'
             main.res.srcDirs += 'src/main/yd_w_qin2_2_chile/res'
             main.manifest.srcFile 'src/main/yd_w_qin2_2_chile/AndroidManifest.xml'
-        } else if ("yd_w_xiaomi_2" == app_device_type) {
+        } else if ("yd_w_xiaomi_2" == app_device_type || "yd_w_gionee_2" == app_device_type) {
             main.java.srcDirs += 'src/main/yd_w_xiaomi_2/code'
             main.java.srcDirs += 'src/main/yd_w_xiaomi_2/aidl'
             main.res.srcDirs += 'src/main/yd_w_xiaomi_2/res'

+ 8 - 2
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt

@@ -128,6 +128,12 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
 
         initCountDownTimer()
 
+        if (DaemonEnv.app == null && !WdKeepAliveService.instanceCreated) {
+            DaemonEnv.init(this)
+            Log.d(TAG, "开始 WdKeepAliveService")
+            DaemonEnv.startServiceSafely(this, WdKeepAliveService::class.java)
+        }
+
         if (SettingConfig.getSipEnabled(BaseApplication.appContext)) {
             Thread {
                 //创建通话录音路径
@@ -547,11 +553,11 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Constants.deviceId = data.id
         Constants.deviceType = data.deviceType
 
-        if (DaemonEnv.app == null && !WdKeepAliveService.instanceCreated) {
+        /*if (DaemonEnv.app == null && !WdKeepAliveService.instanceCreated) {
             DaemonEnv.init(this)
             Log.d(TAG, "开始 WdKeepAliveService")
             DaemonEnv.startServiceSafely(this, WdKeepAliveService::class.java)
-        }
+        }*/
 
         loadingDialog.dismiss()
         watch_activity_register_layout.visibility = View.GONE

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

@@ -9,6 +9,7 @@ import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
+import android.widget.ImageView;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 import android.widget.Spinner;
@@ -38,6 +39,8 @@ import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.utils.CommonUtils;
 
+import java.util.Locale;
+
 public class WatchUserSettingActivity extends Activity {
     private static final String TAG = WatchUserSettingActivity.class.getSimpleName();
 
@@ -52,6 +55,10 @@ public class WatchUserSettingActivity extends Activity {
     private RadioGroup callTransGroup;
     private RadioButton transferOn, transferOff;
 
+    private TextView tvTtsRate;
+    private ImageView ttsRateDecrease, ttsRateIncrease;
+    private int ttsRate;
+
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         //切换语言
@@ -86,6 +93,42 @@ public class WatchUserSettingActivity extends Activity {
         transferOn = findViewById(R.id.rb_call_transfer_on);
         transferOff = findViewById(R.id.rb_call_transfer_off);
 
+        ttsRate = SettingConfig.getTtsSpeechRate(BaseApplication.appContext);
+        tvTtsRate = findViewById(R.id.tv_speech_rate_value);
+        tvTtsRate.setText("" + ttsRate);
+        ttsRateIncrease = findViewById(R.id.speech_rate_increase);
+        ttsRateDecrease = findViewById(R.id.speech_rate_decrease);
+        ttsRateIncrease.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (ttsRate < 10) {
+                    ttsRate++;
+                } else {
+                    ttsRate = 10;
+                }
+                tvTtsRate.setText("" + ttsRate);
+                SettingConfig.setTtsSpeechRate(BaseApplication.appContext, ttsRate);
+            }
+        });
+        ttsRateDecrease.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (ttsRate > 1) {
+                    ttsRate--;
+                } else {
+                    ttsRate = 1;
+                }
+                tvTtsRate.setText("" + ttsRate);
+                SettingConfig.setTtsSpeechRate(BaseApplication.appContext, ttsRate);
+            }
+        });
+
+
+        if ("com.google.android.tts".equalsIgnoreCase(SpeechUtil.getInstance().getSpeechEngine())) {
+            findViewById(R.id.ll_speech_rate).setVisibility(View.VISIBLE);
+            findViewById(R.id.tv_speech_rate).setVisibility(View.VISIBLE);
+        }
+
         TextView partNameView = findViewById(R.id.part_name);
         partNameView.setText(Constants.Companion.getPartName());
 

+ 5 - 4
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt

@@ -11,6 +11,7 @@ import com.wdkl.ncs.android.component.home.databinding.AdapterWatchCallRecordsIt
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.component.home.util.TimeTransition
 import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
+import com.wdkl.ncs.android.lib.base.BaseApplication
 import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
@@ -73,15 +74,15 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
             binding.callStatusImagev.visibility = View.INVISIBLE
 
             if (!TextUtils.isEmpty(itemData.fromMemberName)) {
-                binding.sickbedTv.text = "From: " + itemData.fromMemberName
+                binding.sickbedTv.text = BaseApplication.appContext.getString(R.string.record_from, itemData.fromMemberName)
             } else {
-                binding.sickbedTv.text = "From: " + itemData.fromFrameFullName
+                binding.sickbedTv.text = BaseApplication.appContext.getString(R.string.record_from, itemData.fromFrameFullName)
             }
 
             if (!TextUtils.isEmpty(itemData.toMemberName)) {
-                binding.nameTv.text = "To: " + itemData.toMemberName
+                binding.nameTv.text = BaseApplication.appContext.getString(R.string.record_to, itemData.toMemberName)
             } else {
-                binding.nameTv.text = "To: " + itemData.toFrameFullName
+                binding.nameTv.text = BaseApplication.appContext.getString(R.string.record_to, itemData.toFrameFullName)
             }
 
             if (itemData.actionType == TcpType.EVENT.name) {

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

@@ -24,6 +24,8 @@ public class SettingConfig {
     public static final int IM_CHANNEL_ON = 1;
     public static final int IM_CHANNEL_OFF = 2;
 
+    private static final String KEY_TTS_SPEECH_RATE = "KEY_TTS_SPEECH_RATE";
+
     //默认语言
     private static final String KEY_LANGUAGE_ID = "KEY_LANGUAGE_ID";
     private static final String KEY_LANGUAGE_MODE = "KEY_LANGUAGE_MODE";
@@ -78,6 +80,14 @@ public class SettingConfig {
         getEditor(context).putBoolean(KEY_SP_RECORD_ENABLE, enable).apply();
     }
 
+    public static int getTtsSpeechRate(Context context) {
+        return getSP(context).getInt(KEY_TTS_SPEECH_RATE, 8);
+    }
+
+    public static void setTtsSpeechRate(Context context, int rate) {
+        getEditor(context).putInt(KEY_TTS_SPEECH_RATE, rate).apply();
+    }
+
     /**
      * 获取转发时间
      *

+ 13 - 10
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/BaseSipCallFragment.java

@@ -323,6 +323,19 @@ public abstract class BaseSipCallFragment extends Fragment {
         if (code == 2) {
             TcpModel tcpModel = (TcpModel) messageEvent.getMessage();
             Log.i(TAG, "收到数据222: " + tcpModel.toJson());
+
+            if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {
+                handler.sendEmptyMessageDelayed(FINISH_CURRENT, 1000);
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Toast.makeText(BaseSipCallFragment.this.getContext(), R.string.call_failed, Toast.LENGTH_SHORT).show();
+                    }
+                });
+
+                return;
+            }
+
             int curInteractionId = -1;
             InteractionVO interactionVO = null;
             if (tcpModel.getData() != null) {
@@ -380,16 +393,6 @@ public abstract class BaseSipCallFragment extends Fragment {
                         }
                     });
                 }
-            } else if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {
-                //if (curInteractionId == interactionId) {
-                    handler.sendEmptyMessageDelayed(FINISH_CURRENT, 1000);
-                    runOnUiThread(new Runnable() {
-                        @Override
-                        public void run() {
-                            Toast.makeText(BaseSipCallFragment.this.getContext(), R.string.call_failed, Toast.LENGTH_SHORT).show();
-                        }
-                    });
-                //}
             } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL || tcpModel.getAction() == TcpAction.VoiceAction.VOICE_OFF) {
                 if (curInteractionId == Constants.Companion.getInteractionId()) {
                     handler.sendEmptyMessageDelayed(FINISH_CURRENT, 100);

+ 15 - 4
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java

@@ -38,6 +38,7 @@ import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum;
 import com.wdkl.ncs.android.middleware.utils.StringUtil;
 import com.wdkl.rtc.entity.Publisher;
 import com.wdkl.rtc.entity.Room;
@@ -142,7 +143,9 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
         }
         transHandler = new TransHandler();
         //是来电,且是客户来电进入延时转接
-        if (!isOutgoing && interactionVO.getFromClerkId()==null) {
+        if (SettingConfig.getCallTransfer(BaseApplication.appContext)
+                && !isOutgoing
+                && interactionVO != null && interactionVO.getFromClerkId()==null) {
             int transSeconds = SettingConfig.getCountdownTime(this.getContext());
             transHandler.sendEmptyMessageDelayed(TRANS, transSeconds * 1000);
         }
@@ -179,8 +182,10 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                         frameName = getShowName();
                     }
 
-                    String text = frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming)
-                            + frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming);
+                    String text = frameName + ", " + getString(R.string.call_incoming) + ", "
+                            + frameName + ", " + getString(R.string.call_incoming)  + ", "
+                            + frameName + ", " + getString(R.string.call_incoming)  + ", "
+                            + frameName + ", " + getString(R.string.call_incoming);
                     SpeechUtil.getInstance().startSpeak(text);
                 }
             }
@@ -218,7 +223,13 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                         if (SettingConfig.getCallTransfer(BaseApplication.appContext)) {
                             if (Constants.Companion.getRoleId() != null
                                 /*&& (Constants.Companion.getRoleId() == RoleTypeEnum.NURSE.value() || Constants.Companion.getRoleId() == RoleTypeEnum.NURSE_HEAD.value())*/) {
-                                transLinearLayout.setVisibility(View.VISIBLE);
+                                if (interactionVO.getFromDeviceType() == DeviceTypeEnum.DIGIT_BED_DEVICE.value()
+                                        || interactionVO.getFromDeviceType() == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
+                                    //客户分机呼叫只能接听或转接,禁用拒接
+                                    transLinearLayout.setVisibility(View.VISIBLE);
+                                } else {
+                                    hangupLinearLayout.setVisibility(View.VISIBLE);
+                                }
                             } else {
                                 hangupLinearLayout.setVisibility(View.VISIBLE);
                             }

+ 17 - 8
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentSipAudio.java

@@ -30,6 +30,7 @@ import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
 import com.wdkl.ncs.android.component.home.util.Util;
 import com.wdkl.ncs.android.component.home.util.VoiceManagerUtil;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
@@ -174,8 +175,10 @@ public class FragmentSipAudio extends BaseSipCallFragment implements View.OnClic
                         frameName = getShowName();
                     }
 
-                    String text = frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming)
-                            + frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming);
+                    String text = frameName + ", " + getString(R.string.call_incoming) + ", "
+                            + frameName + ", " + getString(R.string.call_incoming)  + ", "
+                            + frameName + ", " + getString(R.string.call_incoming)  + ", "
+                            + frameName + ", " + getString(R.string.call_incoming);
                     SpeechUtil.getInstance().startSpeak(text);
                 }
             }
@@ -210,15 +213,21 @@ public class FragmentSipAudio extends BaseSipCallFragment implements View.OnClic
                     portraitImageView.setImageResource(R.drawable.face_customer);
 
                     if (!isOutgoing) {
-                        if (Constants.Companion.getRoleId() != null
-                            /*&& (Constants.Companion.getRoleId() == RoleTypeEnum.NURSE.value() || Constants.Companion.getRoleId() == RoleTypeEnum.NURSE_HEAD.value())*/) {
-                            if (interactionVO.getFromDeviceType() == DeviceTypeEnum.DIGIT_BED_DEVICE.value()
-                            || interactionVO.getFromDeviceType() == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
-                                //客户分机呼叫只能接听或转接,禁用拒接
-                                transLinearLayout.setVisibility(View.VISIBLE);
+                        if (SettingConfig.getCallTransfer(BaseApplication.appContext)) {
+                            if (Constants.Companion.getRoleId() != null
+                                /*&& (Constants.Companion.getRoleId() == RoleTypeEnum.NURSE.value() || Constants.Companion.getRoleId() == RoleTypeEnum.NURSE_HEAD.value())*/) {
+                                if (interactionVO.getFromDeviceType() == DeviceTypeEnum.DIGIT_BED_DEVICE.value()
+                                        || interactionVO.getFromDeviceType() == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
+                                    //客户分机呼叫只能接听或转接,禁用拒接
+                                    transLinearLayout.setVisibility(View.VISIBLE);
+                                } else {
+                                    hangupLinearLayout.setVisibility(View.VISIBLE);
+                                }
                             } else {
                                 hangupLinearLayout.setVisibility(View.VISIBLE);
                             }
+                        } else {
+                            hangupLinearLayout.setVisibility(View.VISIBLE);
                         }
                     }
                 }

+ 12 - 10
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java

@@ -444,6 +444,18 @@ public abstract class SingleCallFragment extends Fragment {
 
             TcpModel tcpModel = (TcpModel) messageEvent.getMessage();
             Log.i(TAG, "收到数据222: " + tcpModel.toJson());
+            if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {
+                handler.sendEmptyMessageDelayed(FINISH_CURRENT, 1000);
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_failed, Toast.LENGTH_SHORT).show();
+                    }
+                });
+
+                return;
+            }
+
             int curInteractionId = -1;
             if (tcpModel.getData() != null) {
                 InteractionVO interactionVO = new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
@@ -493,16 +505,6 @@ public abstract class SingleCallFragment extends Fragment {
                         }
                     });
                 }
-            } else if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {
-                //if (curInteractionId == interactionId) {
-                    handler.sendEmptyMessageDelayed(FINISH_CURRENT, 1000);
-                    runOnUiThread(new Runnable() {
-                        @Override
-                        public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_failed, Toast.LENGTH_SHORT).show();
-                        }
-                    });
-                //}
             } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL || tcpModel.getAction() == TcpAction.VoiceAction.VOICE_OFF) {
                 if (curInteractionId == Constants.Companion.getInteractionId()) {
                     handler.sendEmptyMessageDelayed(FINISH_CURRENT, 100);

+ 14 - 0
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/SpeechUtil.java

@@ -10,6 +10,7 @@ import android.text.TextUtils;
 import android.util.Log;
 
 
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum;
@@ -145,6 +146,14 @@ public class SpeechUtil {
         SpeechUtil.getInstance().init(BaseApplication.appContext, speechCallback);
     }
 
+    public String getSpeechEngine() {
+        if (textToSpeech != null) {
+            return textToSpeech.getDefaultEngine();
+        }
+
+        return "";
+    }
+
     public void newSpeech(String text, boolean emergency) {
         synchronized (lockObject) {
             if (Constants.Companion.getTtsState() == 2) {
@@ -164,6 +173,11 @@ public class SpeechUtil {
                 return;
             }
 
+            if ("com.google.android.tts".equalsIgnoreCase(textToSpeech.getDefaultEngine())) {
+                float rate = (float) SettingConfig.getTtsSpeechRate(BaseApplication.appContext)/10;
+                textToSpeech.setSpeechRate(rate);
+                Log.e(TAG, "set speech rate: " + rate);
+            }
             params.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, AudioManager.STREAM_MUSIC);
             int speakStatus = textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params, "uniqueId");
             Log.d(TAG, "startSpeak status: " + speakStatus + ", text: " + text);

+ 8 - 6
android_mobile/src/main/yd_w_xiaomi_2/res/layout/adapter_watch_call_records_item.xml

@@ -3,7 +3,7 @@
 
     <RelativeLayout
         android:layout_width="match_parent"
-        android:layout_height="70dp"
+        android:layout_height="80dp"
         android:background="@drawable/item_selector"
         android:layout_marginTop="2dp">
 
@@ -26,8 +26,8 @@
         <RelativeLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginTop="4dp"
-            android:layout_marginEnd="9dp"
+            android:layout_marginEnd="8dp"
+            android:gravity="center_vertical"
             android:layout_toEndOf="@+id/tab_linyout">
 
             <RelativeLayout
@@ -40,7 +40,8 @@
                     android:id="@+id/sickbed_tv"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textSize="14sp" />
+                    android:textSize="12sp"
+                    android:textColor="#07689f"/>
 
                 <TextView
                     android:id="@+id/call_time_tv"
@@ -64,7 +65,8 @@
                     android:id="@+id/name_tv"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textSize="14sp" />
+                    android:textSize="12sp"
+                    android:textColor="#11999e"/>
 
                 <LinearLayout
                     android:id="@+id/incident_linlyou"
@@ -83,7 +85,7 @@
                     <TextView
                         android:id="@+id/project_tv"
                         android:layout_width="wrap_content"
-                        android:layout_height="20dp"
+                        android:layout_height="22dp"
                         android:paddingLeft="5dp"
                         android:paddingRight="5dp"
                         android:gravity="center"

+ 2 - 2
android_mobile/src/main/yd_w_xiaomi_2/res/layout/adapter_watch_contacts_item.xml

@@ -22,7 +22,7 @@
                 android:layout_marginLeft="5dp"
                 android:text="--"
                 android:textColor="@color/header"
-                android:textSize="12dp" />
+                android:textSize="12sp" />
 
             <TextView
                 android:id="@+id/name_tv"
@@ -33,7 +33,7 @@
                 android:layout_toRightOf="@+id/room_number_tv"
                 android:text="--"
                 android:textColor="#F78B8F"
-                android:textSize="16dp" />
+                android:textSize="14sp" />
 
             <ImageView
                 android:id="@+id/awci_voice_recorder"

+ 41 - 1
android_mobile/src/main/yd_w_xiaomi_2/res/layout/user_setting_layout.xml

@@ -405,11 +405,51 @@
                 </RadioGroup>
 
                 <TextView
-                    android:id="@+id/tv_language_title"
+                    android:id="@+id/tv_speech_rate"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_below="@id/group_im_channel"
                     android:layout_marginTop="10dp"
+                    android:text="@string/speech_rate_text"
+                    android:textSize="16sp"
+                    android:visibility="gone"/>
+
+                <LinearLayout
+                    android:id="@+id/ll_speech_rate"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/tv_speech_rate"
+                    android:layout_marginTop="10dp"
+                    android:gravity="center_vertical"
+                    android:paddingLeft="4dp"
+                    android:paddingRight="4dp"
+                    android:visibility="gone">
+                    <ImageView
+                        android:id="@+id/speech_rate_decrease"
+                        android:layout_width="20dp"
+                        android:layout_height="20dp"
+                        android:src="@drawable/ic_arrow_left"/>
+                    <TextView
+                        android:id="@+id/tv_speech_rate_value"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:text="8"
+                        android:textSize="16sp" />
+                    <ImageView
+                        android:id="@+id/speech_rate_increase"
+                        android:layout_width="20dp"
+                        android:layout_height="20dp"
+                        android:src="@drawable/ic_arrow_right"/>
+                </LinearLayout>
+
+                <TextView
+                    android:id="@+id/tv_language_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/ll_speech_rate"
+                    android:layout_marginTop="10dp"
                     android:text="@string/language_set_mode"
                     android:textSize="16sp" />
 

+ 2 - 2
android_mobile/src/main/yd_w_xiaomi_2/res/layout/watch_activity_call_records.xml

@@ -10,8 +10,8 @@
             android:id="@+id/refresh"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginLeft="6px"
-            android:layout_marginRight="6px"
+            android:layout_marginLeft="6dp"
+            android:layout_marginRight="6dp"
             bind:srlEnableLoadMore="true"
             bind:srlEnableRefresh="true">
 

+ 5 - 6
android_mobile/src/main/yd_w_xiaomi_2/res/layout/watch_activity_home2.xml

@@ -42,7 +42,7 @@
                         android:layout_marginTop="10dp"
                         android:text="@string/custom_title"
                         android:textColor="#ffffff"
-                        android:textSize="16dp" />
+                        android:textSize="16sp" />
 
                 </LinearLayout>
 
@@ -66,7 +66,7 @@
                         android:layout_marginTop="10dp"
                         android:text="@string/call_list"
                         android:textColor="#ffffff"
-                        android:textSize="16dp" />
+                        android:textSize="16sp" />
 
                 </LinearLayout>
 
@@ -150,7 +150,7 @@
                             android:paddingStart="5dp"
                             android:paddingEnd="5dp"
                             android:textColor="#ffffff"
-                            android:textSize="16sp"
+                            android:textSize="14sp"
                             android:singleLine="true"
                             android:ellipsize="marquee"
                             android:focusable="true"
@@ -162,7 +162,7 @@
                             android:layout_height="wrap_content"
                             android:layout_marginTop="2dp"
                             android:textColor="#ffffff"
-                            android:textSize="16sp"
+                            android:textSize="14sp"
                             android:visibility="gone"/>
 
                         <TextView
@@ -171,7 +171,7 @@
                             android:layout_height="wrap_content"
                             android:layout_marginTop="2dp"
                             android:textColor="#ffffff"
-                            android:textSize="14sp" />
+                            android:textSize="12sp" />
                     </LinearLayout>
                 </RelativeLayout>
 
@@ -315,7 +315,6 @@
 
             </LinearLayout>
 
-
         </LinearLayout>
 
         <TextView

+ 2 - 0
app/build.gradle

@@ -98,6 +98,8 @@ android {
             } else {
                 main.manifest.srcFile 'src/main/AndroidManifest.xml'
             }
+        } else if ("yd_w_gionee_2" == app_device_type) {
+            main.manifest.srcFile 'src/main/gionee/AndroidManifest.xml'
         } else {
             main.manifest.srcFile 'src/main/AndroidManifest.xml'
         }

+ 77 - 0
app/src/main/gionee/AndroidManifest.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.wdkl.app.ncs">
+
+    <uses-permission android:name="android.permission.BLUETOOTH"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
+        tools:ignore="ProtectedPermissions" />
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
+    <uses-permission android:name="android.permission.VIBRATE"/>
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
+    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.READ_CALL_LOG" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
+
+    <!--  亮屏和解锁权限   -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+
+    <!-- Needed for full screen intent in incoming call notifications -->
+    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_nurse_launch"
+        android:label="@string/wdkl_app_name"
+        android:supportsRtl="true"
+        tools:replace="android:label"
+        android:persistent="true"
+        android:requestLegacyExternalStorage="true"
+        android:name="com.wdkl.app.ncs.application.Application"
+        android:theme="@style/MyAppTheme">
+        <meta-data
+            android:name="com.enation.javashop.imagepluin.cache.MyGlideModule"
+            android:value="GlideModule" />
+        <meta-data
+            android:name="design_width_in_dp"
+            android:value="280"/>
+        <meta-data
+            android:name="design_height_in_dp"
+            android:value="320"/>
+
+        <receiver
+            android:name="com.wdkl.ncs.android.component.home.service.WdBootReceiver"
+            android:enabled="true"
+            android:exported="true">
+            <intent-filter android:priority="1000">
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+            </intent-filter>
+        </receiver>
+
+        <!--sip call-->
+        <activity android:name="com.wdkl.ncs.host.activity.SipTestActivity" />
+        <activity android:name="com.wdkl.ncs.host.activity.CallActivity" />
+
+        <service
+            android:name="com.wdkl.ncs.host.sip.core.LinCoreService"
+            android:foregroundServiceType="phoneCall|camera|microphone"
+            android:label="@string/app_name"
+            android:stopWithTask="false" />
+
+        <meta-data
+            android:name="android.max_aspect"
+            android:value="2.2" />
+        <meta-data android:name="android.app.background_running" android:value="true"/>
+    </application>
+
+</manifest>

+ 8 - 1
build.gradle

@@ -40,7 +40,7 @@ buildscript {
      * YD-S5-W_QIN2PRO-2: 多亲手机
      * ...
      */
-    ext.app_device_type = "yd_w_xiaomi_2"
+    ext.app_device_type = "yd_w_gionee_2"
 
     //腕表类型:g6s,asr
     ext.watch_type = "asr"
@@ -73,6 +73,13 @@ buildscript {
         //小米手机版本
         ext.app_version_code = 156
         ext.app_version = "1.4.7_rm"
+    } else if (app_device_type == "yd_w_gionee_2") {
+        ext.build_tools_version = "30.0.2"
+        ext.support_library_version = "28.0.0"
+
+        //金立手机
+        ext.app_version_code = 170
+        ext.app_version = "1.4.20_gn"
     } else if (app_device_type == "yd_watch_2") {
         ext.build_tools_version = "26.0.2"
         ext.support_library_version = "26.1.0"

+ 1 - 1
common/src/main/res/layout/netoff_loading.xml

@@ -25,7 +25,7 @@
             android:padding="32dp"
             android:gravity="center"
             android:maxLines="2"
-            android:text="Connecting"
+            android:text="@string/str_connecting"
             android:textColor="#ffcccccc"
             android:textSize="20sp" />
     </RelativeLayout>

+ 5 - 0
resource/src/main/res/drawable/ic_arrow_left.xml

@@ -0,0 +1,5 @@
+<vector android:height="48dp" android:tint="#241B1B"
+    android:viewportHeight="20" android:viewportWidth="20"
+    android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M15.41,16.59L10.83,12l4.58,-4.59L14,6l-6,6 6,6 1.41,-1.41z"/>
+</vector>

+ 5 - 0
resource/src/main/res/drawable/ic_arrow_right.xml

@@ -0,0 +1,5 @@
+<vector android:height="48dp" android:tint="#241B1B"
+    android:viewportHeight="20" android:viewportWidth="20"
+    android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6 -1.41,-1.41z"/>
+</vector>

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

@@ -208,6 +208,7 @@
     <string name="language_set_title">Selección de idioma:</string>
     <string name="language_set_mode">Sincronizar idioma del servidor:</string>
     <string name="str_language_settings">Seleccionar idioma</string>
+    <string name="speech_rate_text">TTS rate:</string>
 
     <string name="contact_update_title">Actualizar contacto</string>
     <string name="contact_start_load">Comenzar carga de contacto</string>
@@ -239,4 +240,6 @@
 
     <string name="network_connect">Conectado</string>
     <string name="network_disconnect">Desconectado</string>
+    <string name="record_from">From: %s</string>
+    <string name="record_to">To: %s</string>
 </resources>

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

@@ -86,7 +86,7 @@
     <string name="call_error">Ошибка подключения</string>
     <string name="call_reject">Отклонить</string>
     <string name="call_busy">Занят</string>
-    <string name="call_incoming">звонок.</string>
+    <string name="call_incoming">звонок</string>
     <string name="call_failed">Ошибка вызова</string>
     <string name="call_end">Завершение вызова</string>
     <string name="str_call_accept">Ответ</string>
@@ -197,6 +197,7 @@
     <string name="language_set_mode">Синхронизировать язык с сервера:</string>
     <string name="str_language_settings">Языковые настройки</string>
     <string name="str_call_transfer_title">Call transfer:</string>
+    <string name="speech_rate_text">TTS rate:</string>
 
     <string name="contact_update_title">Update contact</string>
     <string name="contact_start_load">Start load contact</string>
@@ -228,4 +229,6 @@
 
     <string name="network_connect">Connected</string>
     <string name="network_disconnect">Disconnect</string>
+    <string name="record_from">From: %s</string>
+    <string name="record_to">To: %s</string>
 </resources>

+ 5 - 2
resource/src/main/res/values-zh/strings.xml

@@ -86,8 +86,8 @@
     <string name="call_error">通话错误</string>
     <string name="call_reject">对方拒绝</string>
     <string name="call_busy">对方忙线中</string>
-    <string name="call_incoming">来电.</string>
-    <string name="call_failed">对方离线或不存在,呼叫失败</string>
+    <string name="call_incoming">来电</string>
+    <string name="call_failed">呼叫失败</string>
     <string name="call_end">通话结束</string>
     <string name="str_call_accept">接听</string>
     <string name="str_call_transfer">转接</string>
@@ -209,6 +209,7 @@
     <string name="language_set_mode">是否同步服务器语言:</string>
     <string name="str_language_settings">语言设置</string>
     <string name="speech_sample_text">这是一个文字转语音示例</string>
+    <string name="speech_rate_text">TTS语速:</string>
 
     <string name="contact_update_title">更新通讯录</string>
     <string name="contact_start_load">开始获取联系人</string>
@@ -239,4 +240,6 @@
 
     <string name="network_connect">网络正常</string>
     <string name="network_disconnect">网络断开</string>
+    <string name="record_from">来自: %s</string>
+    <string name="record_to">发给: %s</string>
 </resources>

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

@@ -86,7 +86,7 @@
     <string name="call_error">Connect error</string>
     <string name="call_reject">Reject</string>
     <string name="call_busy">Busy</string>
-    <string name="call_incoming">Incoming call.</string>
+    <string name="call_incoming">Incoming call</string>
     <string name="call_failed">Call error</string>
     <string name="call_end">Call end</string>
     <string name="str_call_accept">Accept</string>
@@ -208,6 +208,7 @@
     <string name="language_set_title">Language set:</string>
     <string name="language_set_mode">Sync language from server:</string>
     <string name="str_language_settings">Language set</string>
+    <string name="speech_rate_text">TTS rate:</string>
 
     <string name="contact_update_title">Update contact</string>
     <string name="contact_start_load">Start load contact</string>
@@ -239,4 +240,6 @@
 
     <string name="network_connect">Connected</string>
     <string name="network_disconnect">Disconnect</string>
+    <string name="record_from">From: %s</string>
+    <string name="record_to">To: %s</string>
 </resources>